Technographics: filter by and enrich a company’s technology stack
Crustdata now exposes the technologies detected for a company across Company Enrich, Company Search, and Company Autocomplete.technographicsfield group on Enrich — request it explicitly viafields(it is never included by default) to gettotal_technologies,top_technologies, the fulltechnologieslist (each entry withname,category, and detectionsources), andupdated_at. See the field reference.- Search filters — filter on
technographics.total_technologies(also sortable),technographics.top_technologies,technographics.technologies.name, andtechnographics.technologies.category. Technographics values are not returned in search responses — filter, then enrich. See searchable fields. - Autocomplete — two new company-scope fields:
technology(technology names) andtechnology_category(category values) for discovering valid filter values. - Access and pricing —
technographicsrequires field-level permission on your account. It is a billed add-on: +2 credits per company that returns technographics data, on top of the base enrich cost; companies with no technographics data are not charged the add-on. The same add-on applies to Batch Company Enrich.
POST /company/enrich, POST /batch/company/enrich,
POST /company/search, and POST /company/search/autocomplete with
x-api-version: 2025-11-01.Company lookup: more accurate domain matching for large organizations
We improved domain matching in Company Identify and Company Enrich, especially for large organizations and companies with subsidiaries. On these domains a lookup could sometimes surface a related record (a subsidiary, a regional arm, an acquired company, or a showcase page) instead of the parent company. Matching now favors the primary company, automatically.- Better matches for large organizations - a domain maps to the parent
company rather than a subsidiary, an acquired company, or a showcase page. For
example,
amazon.comresolves to Amazon,paypal.comto PayPal, andschwab.comto Charles Schwab. - Nothing to change - same endpoints, same request shape, and same response shape. No new fields and no confidence score to handle; matches just get better automatically.
- Biggest gains on high-volume domains - in testing across Fortune 500 US companies, top-1 accuracy by domain rose from 88% to 94%.
POST /company/identify and POST /company/enrich with
x-api-version: 2025-11-01. No changes to the legacy identity endpoints.Person Search: natural-language search.query (beta)
Person Search adds search.query, a
natural-language query that returns a ranked list of people instead of requiring
you to hand-build every filter. Crustdata pulls the hard constraints out of the
query and applies them as exact filters, semantically matches the rest against
the full profile, and orders results by fit.search.query- describe who you want in plain language; results are ranked by profile context (title, skills, company history, education, location, summary).search.mode-hybrid(default, blends keyword and concept matching) andsemantic(concepts). For exact keyword matching, see the keyword search changelog below.mode- two recall modes:managed(default; the query may add constraints) andexact(your filters are hard constraints and the query only ranks within them).fit- each profile returns a relevance tier (strong/possible/weak) alongsidetotal_count_relation, so you can keep only high-confidence matches.- Not included - sorts; semantic results come back already rank-ordered by relevance.
- Pricing - Person Search parity at 0.03 credits per result, no premium for semantic ranking, and the same 30 requests/minute rate limit.
Person Search: keyword search with Boolean operators
Person Search now lets you search for keywords across the full profile. Setsearch.mode: "lexical" to match on
keywords, so exact terms, acronyms, names, and IDs are found wherever they
appear in the profile (title, skills, company history, education, location,
summary).search.mode: "lexical"- keyword matching across the whole profile, for when you want exact terms to be found rather than concept ranking.search.query_syntax: "boolean"- read the query as a Boolean expression instead of plain text: a space means AND (every term required),|means OR, and you can combine terms for precise keyword search. Honored only withsearch.mode: "lexical"and top-levelmode: "exact".
Multiple API keys on one account
Every Crustdata account used to have a single API key. You can now create and manage several named keys on one account, so you can keep dev and prod apart, give each project or teammate its own key, and switch off a key without affecting the others. Works across the API and MCP. Every existing key was migrated automatically and named Default.- Create and name keys - add as many keys as you need at
app.crustdata.com/api-keys, rename them
anytime, and copy the generated
cd_key into any API or MCP request. See Authentication. - Per-key status -
ACTIVE(usable across the API and MCP),INACTIVE(blocked instantly and reversible), andDELETED(permanently retired; the account’s other keys keep working). - Shared credits and rate limit - all keys on an account draw from one credit pool and one rate-limit bucket today, so keys separate and organize work rather than cap spend or speed per key.
- Coming next - credit balance and limits set at the individual API-key level.
Person Contact Enrich: business emails, personal emails, and phone numbers
Person Contact Enrich is a new endpoint that returns contact data for up to 25 people in a single request. Supplyprofessional_network_profile_urls or business_emails as input and
get business emails, personal emails, and phone numbers back in the same
response — no polling.- Identifiers — pass exactly one of
professional_network_profile_urls(a profile URL) orbusiness_emailsto reverse-look-up a person, up to 25 values per request. fields— select which contact data to return:contact.business_emails,contact.personal_emails,contact.phone_numbers, andcontact.websites(orcontactfor all). Each email entry includes its deliverabilitystatus. See the contact fields reference.- Response — the same record shape as
/person/enrich, restricted to theperson_data.contactobject. For higher fill rate on bulk lists, use the async Batch Contact Enrich job instead.
POST /person/contact/enrich with x-api-version: 2025-11-01.Person Search: geo_exclude filter operator
Person Search adds a geo_exclude filter
operator — the inverse of geo_distance. It excludes profiles inside a
radius and keeps everyone else, so you can carve out a metro you already cover
or target candidates outside a region.geo_excludetakes the same value object asgeo_distance: a centre given aslocation(geocoded server-side) orlat_lng([lat, lng], skips geocoding), a requireddistance, and an optionalunit(km,mi,miles,m,meters,ft,feet; defaults tokm). When bothlocationandlat_lngare supplied,lat_lngwins. See the operator reference and a worked example.
POST /person/search with x-api-version: 2025-11-01.Professional-network name and normalized title on Person profiles
Person Search and Person Enrich now return additionalbasic_profile identity fields.basic_profile.professional_network_name— the display name on the person’s professional-network profile, returned by both/person/searchand/person/enrich. On search it is also a filterable field (not sortable). See the search field reference and the enrich response reference.basic_profile.normalized_title— the normalized job-title object (matched_title,department,sub_department,similarity,confident) is now also returned by/person/enrich, matching the field already available on/person/search.
POST /person/search and POST /person/enrich with
x-api-version: 2025-11-01.Normalized titles, education details, and logos on Person Search
Person Search results now include a normalized job-title classification, richer education entries, and stable Crustdata-hosted logo permalinks for employers and schools.basic_profile.normalized_title— an object withmatched_title,department,sub_department,similarity, andconfident. Filter onbasic_profile.normalized_title.matched_title,.department, or.sub_department(filterable, not sortable). See the field reference.- Education location and description — each
education.schools[]entry now returns alocationobject (raw,city,state,country,continent) and adescription. The location sub-fields are filterable viaeducation.schools.location.*. See the education fields. education.schools[].institute_logo_permalink— a stable Crustdata-hosted school logo URL, returned for display.experience.employment_details[].company_profile_picture_permalink— a stable Crustdata-hosted employer logo URL, so you can render company logos without resolving image URLs yourself. See the profile-card example.
POST /person/search with x-api-version: 2025-11-01.Follower count on Person Search profiles
Person Search now exposes afollowers
field on each result’s professional_network block, alongside the existing
connections field.professional_network.followers— integer follower count from the profile. Filterable and sortable: pass it infilters.conditions[].fieldorsorts[].field. See the filter and sort field reference.
POST /person/search with x-api-version: 2025-11-01.Person Search: new filter operators
Person Search gains two new filter options for the2025-11-01 API:(!)— fuzzy negation. Excludes profiles whose value contains the given substring (case-insensitive). Multi-word values are matched as a literal phrase, so(!) "New York"excludes profiles literally containing"New York"but not"New Yorker". To exclude on each word independently, send separate(!)conditions inside anandgroup. See the operator reference and a worked example.geo_distanceacceptslat_lng. Supply explicit coordinates as[lat, lng]to skip geocoding. When bothlocationandlat_lngare provided,lat_lngwins. See thegeo_distancereference and thelat_lngexample.
POST /person/search with
x-api-version: 2025-11-01.🚀 New API version: 2025-11-01
We are launching a new, versioned API that replaces the legacy
/screener and /data_lab endpoints. Every product — Company, Person,
Job, Web, and Social Post — now lives under a consistent, purpose-built
surface area.What’s new
- Versioned endpoints. Every call requires the
x-api-version: 2025-11-01header, so future changes ship without breaking existing integrations. - Bearer authentication.
Authorization: Bearer <key>replaces the legacyTokenscheme across every endpoint. - Structured error envelope. A consistent
{ error: { type, message, metadata } }shape across every endpoint. - Cursor-based pagination. Opaque
next_cursorreplaces numericoffseton search endpoints. - Match-result envelope for enrich. Enrich responses now return
matches[]with aconfidence_scoreper match. - Nested, neutral response sections. Flat top-level keys are grouped
under sections like
basic_info,employee_reviews, andfunding.
Migrating from the legacy API
Every legacy/screener and /data_lab endpoint has a current
replacement. The Migration guides map each
legacy endpoint to its new equivalent and walk through request keys,
field renames, type changes, and response-shape differences.
