Playbook
CrustData V3 guidance
Use autocomplete before search when filter values are uncertain. Autocomplete is free and reduces expensive zero-result searches. Use indexed search for discovery:crustdata_v3_person_searchcrustdata_v3_company_searchcrustdata_v3_job_search
limit strict. Search is billed per returned result, not by matched total_count.
Filter to people with verified work emails before paying for enrichment. Person
search accepts experience.employment_details.current.business_email_verified
as a filter field (type: "=", value: true) — it selects only people whose
current employment carries a verified business email, so every returned result
is enrichable to a valid work email. The flag is a boolean, not the address:
the emails themselves come back from person enrich under
contact.business_emails[*].email, each with a status field (verified /
unverified). Never read the profile-level email field or
contact.personal_emails when the goal is work emails.
Filter syntax and operators
Person/company/job search all take afilters condition group:
{"op": "and", "conditions": [{"field": "...", "type": "=", "value": ...}]} -
groups nest, and op accepts and / or. Condition type supports =,
!=, in, not_in, contains, has_all, all_of, >, <, =>, =<.
Sorting is sorts: [{"field": "...", "order": "asc" | "desc"}]. Company and
job search have their own filter/sort field vocabularies - read the field
lists in each tool’s input schema (deepline tools describe) rather than
reusing person fields.
Company-search response projections
Forcrustdata_v3_company_search, filters and fields are different
vocabularies. A field path that can filter companies is not necessarily a
response selector. Request response groups such as basic_info, headcount,
funding, locations, and taxonomy, then read nested values from the
returned group. Do not request basic_info.industries or period leaves such
as headcount.growth_percent.6m; use basic_info and
headcount.growth_percent respectively. roles, skills, seo, and
competitors are filter-only for this endpoint.
Size and qualify for free before paying
limit: 1returnstotal_countandtotal_count_relation- TAM sizing for the price of one result.preview: true(person search and person enrich) returns basic fields at preview billing - confirm identity/shape before buying full records.- Person search results include
contact.has_business_email,has_personal_email, andhas_phone_numberbooleans - you can see contact availability per person before spending on enrichment. fields: [...]on search and enrich limits the returned field paths; on enrich, requested field groups drive the price - request only what the workflow uses.
High-leverage person filters most workflows miss
- Job changes:
recently_changed_jobsfilters to people who recently switched roles; pair withmetadata.updated_at(range operators) to bound data freshness. - Alumni prospecting: the
experience.employment_details.past.*family (past.company_name,past.company_id,past.company_linkedin_profile_url,past.company_headcount_range,past.company_industries) finds everyone who USED to work somewhere - “ex-Stripe, now at a 11-200 person company” is two conditions. - Open to work:
professional_network.open_to_cards(values likeCAREER_INTEREST,HIRING_MANAGER) surfaces people signalling openness. - Normalized titles: prefer
basic_profile.normalized_title.matched_title,.department, and.sub_departmentover raw title string matching - it is CrustData’s normalized taxonomy and beats regex title lists. - Employer size without a company join:
experience.employment_details.current.company_headcount_range/company_headcount_latestfilter people by their employer’s size directly. - Seniority and function:
experience.employment_details.current.seniority_leveland.function_categoryare the org-chart building blocks. - Influence and tenure:
professional_network.connections,.followers, andyears_of_experiencesupport scoring and champion selection.
crustdata_v3_person_enrichfor full cached person profiles.crustdata_v3_person_contact_enrichfor contact-only lookups.crustdata_v3_company_enrichfor full company records.
crustdata_v3_company_identify before company enrich when the inbound identifier is fuzzy. It is free. Prefer a domain or LinkedIn company URL. Name-only matching can return unrelated companies even at confidence_score: 1.0; treat those results as candidates and verify an independent identifier before changing stored names or domains.
Some crustdata_v3_person_enrich field groups (for example certifications, per CrustData’s own docs) may 403 with a permission error depending on the account’s CrustData entitlement — this is not restricted in the schema because a different account may have different access. If a caller hits PROVIDER_AUTHORIZATION_FAILED requesting a specific field group, drop it and retry without that group rather than assuming every documented group is universally available to every account.
Do not use old PersonDB field paths with V3 unless a reviewed compatibility mapper converts them to the documented 2025-11-01 field vocabulary.