Skip to main content

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
POST /company/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.
TopicLegacyCurrent
PathPOST /screener/companydb/searchPOST /company/search
AuthAuthorization: Bearer <key>Authorization: Bearer <key>
Version(not required)x-api-version: 2025-11-01 (required)
Base URLhttps://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

KeyLegacyCurrentNotes
filtersobjectobjectGrammar changed — see Filter grammar below.
sortsarray of {column, order}array of {column, order}Unchanged.
limitinteger 1–1000, default 20integer 1–1000, default 20Unchanged.
countinteger alias for limitinteger alias for limitUnchanged.
cursorstring nullablestring nullableUnchanged.
fields(not supported)string[]New — request a subset of response sections via dot-paths.
previewbooleanbooleanUnchanged.
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.
{
    "column": "linkedin_industries",
    "type": "in",
    "value": ["Software Development"]
}
Two changes per condition:
  1. Rename columnfield.
  2. Map the legacy field name to the new dataset path (see Field-name mapping).

Operators

OperatorLegacyCurrentNotes
=
!=
<, >
=<, =>>= and <= are not supported — use => / =<.
in, not_inValue must be an array.
(.)Fuzzy / all-words match.
[.]Exact phrase match.
is_null, is_not_nullUnchanged.

and / or groups

The group shape is unchanged — op: "and" or op: "or" plus a conditions array. Only the leaf-condition key (columnfield) 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 fieldCurrent field
company_idbasic_info.company_id (also exposed at top level as crustdata_company_id)
company_namebasic_info.name
company_website_domainbasic_info.primary_domain
company_websitebasic_info.website
domainsbasic_info.all_domains
linkedin_profile_urlbasic_info.professional_network_url
linkedin_profile_namebasic_info.profile_name
linkedin_idbasic_info.professional_network_id
linkedin_company_descriptionbasic_info.description
company_typebasic_info.company_type
year_foundedbasic_info.year_founded (now an integer; see Type changes)
employee_count_rangebasic_info.employee_count_range
marketsbasic_info.markets
linkedin_categoriesbasic_info.industries

Taxonomy

Legacy fieldCurrent field
linkedin_industriestaxonomy.professional_network_industries (array)
linkedin_industrytaxonomy.professional_network_industry (single label)
linkedin_specialitiestaxonomy.professional_network_specialities
crunchbase_categoriestaxonomy.categories

Headcount and roles

Legacy fieldCurrent field
employee_metrics.latest_countheadcount.total
largest_headcount_countryheadcount.largest_headcount_country
role_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 fieldCurrent field
follower_metrics.latest_countfollowers.count
follower_metrics.growth_1m_percentfollowers.mom_percent
follower_metrics.growth_3m_percentfollowers.qoq_percent
follower_metrics.growth_6m_percentfollowers.six_months_growth_percent
follower_metrics.growth_12m_percentfollowers.yoy_percent

Revenue and public-market data

Legacy fieldCurrent field
estimated_revenue_lower_bound_usdrevenue.estimated.lower_bound_usd
estimated_revenue_higher_bound_usdrevenue.estimated.upper_bound_usd
acquisition_statusrevenue.acquisition_status
stock_symbolsrevenue.public_markets.stock_symbols
fiscal_year_endrevenue.public_markets.fiscal_year_end
ipo_date(removed from search; available via Company Enrich)

Funding and investors

Legacy fieldCurrent field
crunchbase_total_investment_usdfunding.total_investment_usd
last_funding_round_investment_usdfunding.last_round_amount_usd
last_funding_round_typefunding.last_round_type
last_funding_datefunding.last_fundraise_date
crunchbase_investorsfunding.investors
tracxn_investorsfunding.tracxn_investors
crunchbase_valuation_usd(removed from search; available via enrich as funding.valuation_usd)

Locations

Legacy fieldCurrent field
hq_countrylocations.country
hq_locationlocations.headquarters
hq_street_address_and_citylocations.headquarters
office_addresseslocations.all_office_addresses

Competitors

Legacy fieldCurrent field
competitor_idscompetitors.company_ids
competitor_websitescompetitors.websites

Social profiles

Legacy fieldCurrent field
twitter_handlesocial_profiles.twitter_url
twitter_profile_urlsocial_profiles.twitter_url
crunchbase_profile_urlsocial_profiles.crunchbase.url
crunchbase_uuidsocial_profiles.crunchbase.uuid
For the full searchable-field catalog, see Company Search reference.

4. Type changes

FieldLegacy typeCurrent typeNotes
year_foundedstringintegerPast responses returned "2017"; current responses return 2017.
last_funding_date / funding.last_fundraise_datestringstring (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

FeatureDescription
fields parameterRequest only the dot-paths you need (e.g. ["basic_info.name", "headcount.total"]).
Nested response sectionsRecords return structured basic_info, headcount, funding, taxonomy, revenue, locations, competitors, followers, social_profiles, hiring, roles sections.
Stable error envelopeAll 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 profilesocial_profiles.professional_network returns the company’s professional-network profile URL alongside legacy social links.
Discoverable filter valuesCompany 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

KeyLegacyCurrent
companiesarray of companiesarray of companies
next_cursorstring | nullstring | null
total_countinteger | nullinteger | 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:
{
    "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 keyCurrent key
company_idcrustdata_company_id (top-level) / basic_info.company_id
company_namebasic_info.name
company_website_domain / domainsbasic_info.primary_domain / basic_info.all_domains
linkedin_profile_urlbasic_info.professional_network_url
linkedin_industriestaxonomy.professional_network_industries
year_foundedbasic_info.year_founded
hq_country / hq_locationlocations.country / locations.headquarters
employee_metrics.latest_countheadcount.total
follower_metrics.latest_countfollowers.count
estimated_revenue_lower_bound_usdrevenue.estimated.lower_bound_usd
estimated_revenue_higher_bound_usdrevenue.estimated.upper_bound_usd
crunchbase_total_investment_usdfunding.total_investment_usd
last_funding_round_typefunding.last_round_type
last_funding_datefunding.last_fundraise_date
competitor_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

  • Replace base path /screener/companydb/search/company/search.
  • Add x-api-version: 2025-11-01 header to every request.
  • Rename columnfield in every filter condition.
  • Map legacy field names to the current dataset paths (see Field-name mapping).
  • Update integrations that depend on year_founded being a string — it now returns an integer.
  • Drop the search parameter (semantic mode is no longer accepted).
  • Drop the single_query debug flag.
  • Replace employee_metrics.growth_* filters with roles.growth_*.
  • Replace follower_metrics.growth_*_percent filters with followers.{mom_percent, qoq_percent, six_months_growth_percent, yoy_percent}.
  • Compute role-distribution percentages client-side from roles.distribution.
  • Update response parsing for the nested record shape (see Response-key map).
  • Update error handlers for the new error.type / error.message envelope.

See also