Documentation Index Fetch the complete documentation index at: https://docs.crustdata.com/llms.txt
Use this file to discover all available pages before exploring further.
POST /screener/companydb/search
This page lists every behavioral and contract change between the legacy
company-search endpoint and the current one. Use it as a side-by-side
reference when porting an integration; each section gives the old shape,
the new shape, and the smallest edit that closes the gap.
Topic Legacy Current Path POST /screener/companydb/searchPOST /company/searchAuth Authorization: Bearer <key>Authorization: Bearer <key>Version (not required) x-api-version: 2025-11-01 (required)Base URL https://api.crustdata.comhttps://api.crustdata.com
The x-api-version header is required on every request to
/company/search. Calls without it are rejected. The legacy endpoint
did not use this header.
1. Request body — top-level keys
Key Legacy Current Notes filtersobject object Grammar changed — see Filter grammar below. sortsarray of {column, order} array of {column, order} Unchanged. limitinteger 1–1000, default 20 integer 1–1000, default 20 Unchanged. countinteger alias for limit integer alias for limit Unchanged. cursorstring nullable string nullable Unchanged. fields(not supported) string[] New — request a subset of response sections via dot-paths. previewboolean boolean Unchanged. searchobject (semantic / hybrid) (removed) Semantic/hybrid search has no replacement on this endpoint — see Removed features . return_queryboolean (debug) boolean (accepted, response does not include query) Behavioral change.
2. Filter grammar
The condition key changed from column to field. Operator names and the
and/or group shape are unchanged.
Legacy condition
Current condition
{
" column " : " linkedin_industries " ,
" type " : " in " ,
" value " : [ " Software Development " ]
}
Two changes per condition:
Rename column → field.
Map the legacy field name to the new dataset path (see
Field-name mapping ).
Operators
Operator Legacy Current Notes =✅ ✅ !=✅ ✅ <, >✅ ✅ =<, =>✅ ✅ >= and <= are not supported — use => / =<.in, not_in✅ ✅ Value must be an array. (.)✅ ✅ Fuzzy / all-words match. [.]✅ ✅ Exact phrase match. is_null, is_not_null✅ ✅ Unchanged.
and / or groups
The group shape is unchanged — op: "and" or op: "or" plus a conditions
array. Only the leaf-condition key (column → field) and the leaf field
names need to change.
3. Field-name mapping
The legacy endpoint exposed flat names like company_name, hq_country, and
employee_metrics.latest_count. The current endpoint groups those fields
under basic_info, headcount, funding, taxonomy, revenue, and
locations.
Identity and profile
Legacy field Current field company_idbasic_info.company_id (also exposed at top level as crustdata_company_id)company_namebasic_info.namecompany_website_domainbasic_info.primary_domaincompany_websitebasic_info.websitedomainsbasic_info.all_domainslinkedin_profile_urlbasic_info.professional_network_urllinkedin_profile_namebasic_info.profile_namelinkedin_idbasic_info.professional_network_idlinkedin_company_descriptionbasic_info.descriptioncompany_typebasic_info.company_typeyear_foundedbasic_info.year_founded (now an integer; see Type changes )employee_count_rangebasic_info.employee_count_rangemarketsbasic_info.marketslinkedin_categoriesbasic_info.industries
Taxonomy
Legacy field Current field linkedin_industriestaxonomy.professional_network_industries (array)linkedin_industrytaxonomy.professional_network_industry (single label)linkedin_specialitiestaxonomy.professional_network_specialitiescrunchbase_categoriestaxonomy.categories
Headcount and roles
Legacy field Current field employee_metrics.latest_countheadcount.totallargest_headcount_countryheadcount.largest_headcount_countryrole_distribution.*roles.distribution.*role_distribution_percent.*(removed — request roles.distribution and compute percentages client-side) role_growth_6m.*roles.growth_6m.*role_growth_yoy.*roles.growth_yoy.*employee_metrics.growth_*(removed; superseded by roles.growth_*)
Followers
Legacy field Current field follower_metrics.latest_countfollowers.countfollower_metrics.growth_1m_percentfollowers.mom_percentfollower_metrics.growth_3m_percentfollowers.qoq_percentfollower_metrics.growth_6m_percentfollowers.six_months_growth_percentfollower_metrics.growth_12m_percentfollowers.yoy_percent
Revenue and public-market data
Legacy field Current field estimated_revenue_lower_bound_usdrevenue.estimated.lower_bound_usdestimated_revenue_higher_bound_usdrevenue.estimated.upper_bound_usdacquisition_statusrevenue.acquisition_statusstock_symbolsrevenue.public_markets.stock_symbolsfiscal_year_endrevenue.public_markets.fiscal_year_endipo_date(removed from search; available via Company Enrich )
Funding and investors
Legacy field Current field crunchbase_total_investment_usdfunding.total_investment_usdlast_funding_round_investment_usdfunding.last_round_amount_usdlast_funding_round_typefunding.last_round_typelast_funding_datefunding.last_fundraise_datecrunchbase_investorsfunding.investorstracxn_investorsfunding.tracxn_investorscrunchbase_valuation_usd(removed from search; available via enrich as funding.valuation_usd)
Locations
Legacy field Current field hq_countrylocations.countryhq_locationlocations.headquartershq_street_address_and_citylocations.headquartersoffice_addresseslocations.all_office_addresses
Competitors
Legacy field Current field competitor_idscompetitors.company_idscompetitor_websitescompetitors.websites
Social profiles
Legacy field Current field twitter_handlesocial_profiles.twitter_urltwitter_profile_urlsocial_profiles.twitter_urlcrunchbase_profile_urlsocial_profiles.crunchbase.urlcrunchbase_uuidsocial_profiles.crunchbase.uuid
For the full searchable-field catalog, see
Company Search reference .
4. Type changes
Field Legacy type Current type Notes year_foundedstring integer Past responses returned "2017"; current responses return 2017. last_funding_date / funding.last_fundraise_datestring string (ISO 8601 YYYY-MM-DD) Format clarified.
year_founded is now an integer. Update any parsing logic that
expected a quoted string ("2017") — values are now bare numbers
(2017).
5. Removed features
Semantic search (search parameter)
The legacy endpoint accepted a top-level search object for natural-language
queries:
{
" search " : {
" query " : " fintech companies hiring engineers " ,
" mode " : " hybrid "
}
}
The current endpoint does not accept search. Sending it returns 400. Use
structured filters instead, or contact
support@crustdata.co if you need
semantic retrieval for an account.
single_query debug flag
Removed. The flag had no externally documented behavior.
crunchbase_valuation_usd / crunchbase_valuation_date filters
Not supported as search filters. The valuation is still returned by
Company Enrich .
ipo_date filter
Removed from search filters. The value is still returned by
Company Enrich .
Flat per-section growth fields
employee_metrics.growth_* and follower_metrics.growth_* are no longer
filterable as flat fields. Use roles.growth_* for headcount growth and
followers.{mom_percent, qoq_percent, six_months_growth_percent, yoy_percent}
for follower growth.
role_distribution_percent.*
Removed. Request roles.distribution (raw counts) and compute percentages in
your client.
6. Added features
Feature Description fields parameterRequest only the dot-paths you need (e.g. ["basic_info.name", "headcount.total"]). Nested response sections Records return structured basic_info, headcount, funding, taxonomy, revenue, locations, competitors, followers, social_profiles, hiring, roles sections. Stable error envelope All 4xx/5xx errors return { "error": { "type", "message", "metadata" } } (legacy returned { "error": "...", "details": {...} }). updated_at and indexed_atNew top-level timestamps marking the most recent profile refresh and indexing. Live professional_network profile social_profiles.professional_network returns the company’s professional-network profile URL alongside legacy social links.Discoverable filter values Company Autocomplete returns valid indexed values for any supported field.
7. Response shape
The response envelope keeps the same top-level keys, but each company object
moved from a flat structure to a nested one.
Envelope
Key Legacy Current companiesarray of companies array of companies next_cursorstring | null string | null total_countinteger | null integer | null querypresent when return_query: true (not returned)
Company object
Legacy records returned a flat object with keys like company_name,
linkedin_profile_url, hq_country, linkedin_followers, and per-section
nested objects (employee_metrics, follower_metrics, funding_and_investment,
etc.). Current records group those fields into named sections:
Legacy record (truncated)
Current record (truncated)
{
" company_id " : 633593 ,
" company_name " : " Retool " ,
" company_website_domain " : " retool.com " ,
" year_founded " : " 2017 " ,
" hq_country " : " USA " ,
" employee_metrics " : { " latest_count " : 443 },
" follower_metrics " : { " latest_count " : 95000 },
" estimated_revenue_lower_bound_usd " : 50000000
}
Response-key map
Legacy key Current key company_idcrustdata_company_id (top-level) / basic_info.company_idcompany_namebasic_info.namecompany_website_domain / domainsbasic_info.primary_domain / basic_info.all_domainslinkedin_profile_urlbasic_info.professional_network_urllinkedin_industriestaxonomy.professional_network_industriesyear_foundedbasic_info.year_foundedhq_country / hq_locationlocations.country / locations.headquartersemployee_metrics.latest_countheadcount.totalfollower_metrics.latest_countfollowers.countestimated_revenue_lower_bound_usdrevenue.estimated.lower_bound_usdestimated_revenue_higher_bound_usdrevenue.estimated.upper_bound_usdcrunchbase_total_investment_usdfunding.total_investment_usdlast_funding_round_typefunding.last_round_typelast_funding_datefunding.last_fundraise_datecompetitor_ids / competitor_websitescompetitors.company_ids / competitors.websites
Use the fields request parameter to request just the sections you
need (for example, fields: ["basic_info.name", "headcount.total"]).
This keeps responses small and avoids parsing sections you do not use.
See Response fields .
8. Error responses
The error envelope changed shape. Status codes are unchanged (400, 401,
403, 500).
{
" error " : " Unsupported column 'industry' " ,
" details " : { " supported_columns " : [ " company_name " , " linkedin_industries " , " ... " ] }
}
401 continues to use a flat { "message": "Invalid API key in request" }
shape — parse based on HTTP status.
9. End-to-end example
The same query — software-development companies headquartered in the USA,
sorted by headcount — written against both endpoints.
curl --request POST \
--url https://api.crustdata.com/screener/companydb/search \
--header ' authorization: Bearer YOUR_API_KEY ' \
--header ' content-type: application/json ' \
--data ' {
"filters": {
"op": "and",
"conditions": [
{ "column": "linkedin_industries", "type": "in", "value": ["Software Development"] },
{ "column": "hq_country", "type": "=", "value": "USA" }
]
},
"sorts": [{"column": "employee_metrics.latest_count", "order": "desc"}],
"limit": 2
} '
Migration checklist
See also