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.

GET /screener/company
POST /company/enrich
This page lists every behavioral and contract change between the legacy company-enrich 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
PathGET /screener/companyPOST /company/enrich
MethodGET with query parametersPOST with a JSON body
AuthAuthorization: Token <key>Authorization: Bearer <key>
Version(not required)x-api-version: 2025-11-01 (required)
Base URLhttps://api.crustdata.comhttps://api.crustdata.com
Three header / shape changes are required. The HTTP method moved from GET to POST, the authorization scheme moved from Token <key> to Bearer <key>, and the x-api-version: 2025-11-01 header is now required on every call. Calls missing any of these are rejected.

1. Request — top-level keys

Identifiers moved from comma-separated query parameters to JSON arrays in the request body. Submit exactly one identifier type per request (up to 25 values).
Legacy query parameterCurrent body keyNotes
?company_domain=stripe.com,google.com{ "domains": ["stripe.com", "google.com"] }Comma-separated string → JSON array.
?company_name=Stripe,Google{ "names": ["Stripe", "Google"] }Comma-separated string → JSON array.
?company_id=12345,67890{ "crustdata_company_ids": [12345, 67890] }Strings of digits → JSON array of integers.
?company_linkedin_url=https://...{ "professional_network_profile_urls": ["https://..."] }Key renamed.
?fields=name,headcount{ "fields": ["basic_info.name", "headcount"] }Comma-separated string → JSON array. Section names changed — see Field-name mapping.
?exact_match=true{ "exact_match": true }Moved into the body. Default is now null (auto-detect) rather than false.
?enrich_realtime=true(removed)No direct replacement on this endpoint — see Removed features.
Submit exactly one identifier type per request. Mixing domains, names, crustdata_company_ids, and professional_network_profile_urls in the same call returns 400. Maximum 25 values per identifier array.
fields is no longer optional in practice. When omitted, the response contains only crustdata_company_id and basic_info. Sections such as headcount, funding, people, hiring, web_traffic, seo, competitors, employee_reviews, software_reviews, news, social_profiles, taxonomy, and followers must be listed explicitly.

2. Identifier behavior

TopicLegacyCurrent
Identifier shapeComma-separated string in a query parameterJSON array in the body
Max values per request2525
Mutual exclusionPass one identifier parameterPass one identifier array
Mixed-identifier error400 with "Please provide only one type of input"400 with { error: { type: "invalid_request", message: "..." } }
Over-limit error400 with provided_count / max_allowed fields400 with the new error envelope

3. Field-name mapping

The legacy response was a flat object with linkedin_*, glassdoor, g2, crunchbase_*, producthunt, and gartner sections at the top level. The current response groups fields under basic_info, headcount, funding, taxonomy, revenue, locations, competitors, followers, social_profiles, hiring, web_traffic, seo, employee_reviews, software_reviews, public_launches, and market_intel.

Identity and profile

Legacy fieldCurrent field
company_idcrustdata_company_id (top-level) / basic_info.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_idbasic_info.professional_network_id
linkedin_profile_namebasic_info.profile_name
linkedin_company_descriptionbasic_info.description
linkedin_logo_url / linkedin_logo_permalinkbasic_info.logo_permalink
linkedin_industriesbasic_info.industries[]
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
last_updatedupdated_at (top-level)

Taxonomy

Legacy fieldCurrent field
linkedin_industrytaxonomy.professional_network_industry
taxonomy.linkedin_industrytaxonomy.professional_network_industry
taxonomy.linkedin_industriestaxonomy.professional_network_industries
taxonomy.linkedin_specialitiestaxonomy.professional_network_specialities
crunchbase_categories / taxonomy.crunchbase_categoriestaxonomy.categories
taxonomy.primary_naics_detailtaxonomy.primary_naics_detail
taxonomy.sic_detail_listtaxonomy.sic_detail_list

Headcount

Legacy fieldCurrent field
headcount.linkedin_headcountheadcount.total
headcount.linkedin_headcount_total_growth_percentheadcount.growth_percent
headcount.linkedin_headcount_by_role_absoluteheadcount.by_role_absolute
headcount.linkedin_headcount_by_role_percentheadcount.by_role_percent
headcount.linkedin_headcount_by_region_absoluteheadcount.by_region_absolute
headcount.linkedin_headcount_timeseries(available via the broader timeseries response on enrich)
largest_headcount_countryheadcount.largest_headcount_country

Followers

Legacy fieldCurrent field
linkedin_followers.linkedin_followersfollowers.count
linkedin_followers.linkedin_followers_mom_percentfollowers.mom_percent
linkedin_followers.linkedin_followers_qoq_percentfollowers.qoq_percent
linkedin_followers.linkedin_followers_six_months_growth_percentfollowers.six_months_growth_percent
linkedin_followers.linkedin_followers_yoy_percentfollowers.yoy_percent

Funding and investors

Legacy fieldCurrent field
funding_and_investment.crunchbase_total_investment_usdfunding.total_investment_usd
funding_and_investment.last_funding_round_investment_usdfunding.last_round_amount_usd
funding_and_investment.last_funding_round_typefunding.last_round_type
funding_and_investment.crunchbase_investorsfunding.investors
funding_and_investment.crunchbase_investors_info_listfunding.investors_detail
funding_and_investment.funding_milestones_timeseriesfunding.funding_rounds[] (renamed; same one-row-per-round shape)
funding_and_investment.acquisitionsfunding.acquisitions[] (see Acquisitions schema)
funding_and_investment.acquired_byfunding.acquired_by[]
crunchbase_valuation_usd / crunchbase_valuation_datefunding.valuation_usd / funding.valuation_date

Acquisitions schema

The acquisitions object keeps the same fields but the field names are consistently prefixed by acquirer_* / acquiree_* in the new endpoint.
Legacy fieldCurrent field
acquirer_company_idacquirer_company_id
acquirer_company_nameacquirer_company_name
acquiree_company_idacquiree_company_id
acquiree_company_nameacquiree_company_name
announced_on_dateannounced_on_date
price_usdprice_usd
transaction_texttransaction_text

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
estimated_revenue_timeseriesrevenue.estimated.timeseries
acquisition_statusrevenue.acquisition_status
stock_symbolsrevenue.public_markets.stock_symbols
fiscal_year_endrevenue.public_markets.fiscal_year_end
ipo_daterevenue.public_markets.ipo_date

Locations

Legacy fieldCurrent field
hq_countrylocations.country
hq_statelocations.state
headquarterslocations.headquarters
hq_street_addresslocations.street_address
all_office_addresseslocations.all_office_addresses
hq_city(removed from response; available via the location parser)

Competitors

Legacy fieldCurrent field
competitors.competitor_website_domainscompetitors.all_domains
competitors.paid_seo_competitors_website_domainscompetitors.paid_seo
competitors.organic_seo_competitors_website_domainscompetitors.organic_seo

Job openings → hiring

The legacy job_openings section is now hiring.
Legacy fieldCurrent field
job_openings.recent_job_openings_titlehiring.recent_titles_csv
job_openings.job_openings_counthiring.openings_count
job_openings.job_openings_count_growth_percenthiring.openings_growth_percent
job_openings.open_jobs_timeserieshiring.openings_timeseries
job_openings.recent_job_openings[]hiring.recent_openings[]

Web traffic and SEO

Field paths are unchanged in shape — they remain under web_traffic and seo — but the response is keyed by domain under web_traffic (so you can distinguish traffic across multiple owned domains).

Social profiles

The legacy spec exposed brand-specific keys (company_twitter_url, crunchbase_profile_url). These are consolidated under social_profiles:
Legacy fieldCurrent field
company_twitter_urlsocial_profiles.twitter_url
crunchbase_profile_urlsocial_profiles.crunchbase.url
crunchbase_profile_uuidsocial_profiles.crunchbase.uuid
(new — see Added features)social_profiles.professional_network

Employee reviews

Brand-specific keys (glassdoor.glassdoor_*) are replaced by neutral keys under employee_reviews:
Legacy fieldCurrent field
glassdoor.glassdoor_overall_ratingemployee_reviews.overall_rating
glassdoor.glassdoor_review_countemployee_reviews.review_count
glassdoor.glassdoor_culture_ratingemployee_reviews.culture_and_values_rating
glassdoor.glassdoor_work_life_balance_ratingemployee_reviews.work_life_balance_rating
glassdoor.glassdoor_compensation_ratingemployee_reviews.compensation_and_benefits_rating
glassdoor.glassdoor_career_opportunities_ratingemployee_reviews.career_opportunities_rating
glassdoor.glassdoor_senior_management_ratingemployee_reviews.senior_management_rating
glassdoor.glassdoor_diversity_ratingemployee_reviews.diversity_and_inclusion_rating
glassdoor.glassdoor_recommend_to_friend_pctemployee_reviews.recommend_to_friend_rating
glassdoor.glassdoor_business_outlook_pctemployee_reviews.business_outlook_rating
glassdoor.glassdoor_ceo_approval_pct(now surfaced via Employee Review Enrichcompany_ceo.ceo_rating)

Software reviews

Brand-specific g2.* keys are replaced by neutral keys under software_reviews:
Legacy fieldCurrent field
g2.g2_review_countsoftware_reviews.review_count
g2.g2_average_ratingsoftware_reviews.average_rating

Product launches

Brand-specific producthunt.* keys are replaced by neutral keys under public_launches:
Legacy fieldCurrent field
producthunt.ratingpublic_launches.rating
producthunt.num_upvotespublic_launches.num_upvotes
producthunt.num_reviewspublic_launches.num_reviews
producthunt.num_followerspublic_launches.num_followers
producthunt.categoriespublic_launches.categories
producthunt.makers[]public_launches.makers[]
producthunt.reviews[]public_launches.reviews[]
producthunt.launches[]public_launches.launches[]
producthunt.last_updatedpublic_launches.last_updated

Market intelligence

Brand-specific gartner.* keys are replaced by neutral keys under market_intel:
Legacy fieldCurrent field
gartner.year_foundedmarket_intel.year_founded (integer)
gartner.head_office_citymarket_intel.head_office_city
gartner.head_office_countrymarket_intel.head_office_country
gartner.num_employees_min / _maxmarket_intel.num_employees_min / _max
gartner.products[]market_intel.products[]
gartner.reviews[]market_intel.reviews[]

People

Legacy fieldCurrent field
decision_makers[]people.decision_makers[]
founders.profiles[]people.founders[]
cxos[]people.cxos[]
ceo_location(available inside people.cxos[])

News

Legacy fieldCurrent field
news_articles[].article_urlnews[].article_url
news_articles[].article_titlenews[].article_title
news_articles[].article_publish_datenews[].article_publish_date
news_articles[].article_publisher_namenews[].article_publisher_name
For the full enrich-response field catalog, see Company Enrich reference.

4. Type changes

FieldLegacy typeCurrent typeNotes
year_foundedstringintegerPast responses returned "2017"; current responses return 2017.
exact_match defaultfalsenull (auto-detect)The new endpoint treats null as “let the backend decide”. Pass true for strict domain matching.
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

enrich_realtime query parameter

The legacy endpoint used enrich_realtime=true to fall back to live retrieval when a company was not in the indexed dataset. This flag has been removed and has no direct replacement on the current endpoint — /company/enrich serves the indexed dataset only. If a company is not present, the request returns an entry with empty matches: [] rather than attempting a live fetch. Contact support@crustdata.co if you need on-demand live company enrichment for an account.

Brand-named response sections

Top-level glassdoor, g2, producthunt, gartner sections are removed. Their values are returned under the neutralized employee_reviews, software_reviews, public_launches, and market_intel sections — see the mapping tables above.

status: "enriching" | "not_found" field

The legacy response included a status field with values "enriching" and "not_found", and an accompanying companies_to_be_enriched array. The current endpoint represents no-match as an entry with an empty matches array instead — see Response shape.

Comma-separated query parameter style

The endpoint moved from GET with query parameters to POST with a JSON body. All identifiers must be sent as JSON arrays.

6. Added features

FeatureDescription
Match-result envelopeThe response wraps each result in { matched_on, match_type, matches: [{ confidence_score, company_data }] }, making batch matching unambiguous.
confidence_scoreNumeric score on each match candidate. Higher is better; 1.0 is common for direct identifier lookups.
updated_at, indexed_atTop-level timestamps marking the most recent profile refresh and indexing.
social_profiles.professional_networkProfessional-network profile URL surfaced alongside legacy social links.
public_launches, market_intelNeutralized replacements for the legacy producthunt / gartner blocks.
Stable error envelopeAll 4xx/5xx errors return { "error": { "type", "message", "metadata" } }.

7. Response shape

The envelope shape changed. The legacy endpoint returned a top-level array of company records. The current endpoint returns a top-level array of match-result envelopes, each containing one or more company_data candidates.

Envelope

[
    {
        "company_id": 633593,
        "company_name": "Retool",
        "company_website_domain": "retool.com",
        "year_founded": "2017",
        "linkedin_industry": "Software Development",
        "headcount": { "linkedin_headcount": 443 }
    }
]

Match-result fields

FieldDescription
matched_onThe input value you submitted (a domain, name, ID, or profile URL).
match_typeOne of domain, name, crustdata_company_id, professional_network_profile_url.
matchesArray of candidate matches. Empty when nothing matched.
matches[].confidence_scoreNumber. Higher is better. 1.0 is common for direct identifier lookups.
matches[].company_dataFull enriched company profile — see Field-name mapping for section paths.

No-match behavior

Each entry corresponds to one input identifier. When nothing matches, the entry’s matches array is empty:
[
    {
        "matched_on": "thisdomaindoesnotexist12345xyz.com",
        "match_type": "domain",
        "matches": []
    }
]
The legacy endpoint returned 404 when no companies matched. The current endpoint returns 200 with empty matches: [] for unmatched identifiers. The OpenAPI contract still defines 404 for completeness — handle both.

8. Error responses

The error envelope changed shape. Status codes are unchanged (400, 401, 403, 500).
{
    "error": "Please provide only one type of input: company_name, company_domain, company_linkedin_url, or company_id"
}
401 continues to use a flat { "message": "Invalid API key in request" } shape — parse based on HTTP status.

9. End-to-end example

Enriching two companies by domain — written against both endpoints.
curl --request GET \
  --url 'https://api.crustdata.com/screener/company?company_domain=retool.com,serverobotics.com&fields=company_name,headcount.linkedin_headcount,funding_and_investment.crunchbase_total_investment_usd' \
  --header 'authorization: Token YOUR_API_KEY'

Migration checklist

  • Switch from GET /screener/company (query params) to POST /company/enrich (JSON body).
  • Change the Authorization scheme from Token to Bearer.
  • Add x-api-version: 2025-11-01 header to every request.
  • Rename identifier keys: company_domaindomains, company_namenames, company_idcrustdata_company_ids, company_linkedin_urlprofessional_network_profile_urls.
  • Convert comma-separated parameter values to JSON arrays.
  • Drop enrich_realtime=true — no direct replacement; the new endpoint serves cached data only.
  • List the sections you need in fields — sections beyond basic_info are no longer returned by default.
  • Unwrap each result from the new { matched_on, match_type, matches: [{ confidence_score, company_data }] } envelope.
  • Update parsers for the nested company_data shape and the renamed sections (linkedin_*professional_network_* / sectioned paths).
  • Replace glassdoor.* parsing with employee_reviews.*.
  • Replace g2.* parsing with software_reviews.*.
  • Replace producthunt.* parsing with public_launches.*.
  • Replace gartner.* parsing with market_intel.*.
  • Map funding_and_investment.* paths to funding.* (rename only; field semantics preserved).
  • Map job_openings.* paths to hiring.*.
  • Handle no-match as matches: [] (legacy returned 404 or a record with status: "not_found").
  • Update integrations that depend on year_founded being a string — it now returns an integer.
  • Update error handlers for the new error.type / error.message envelope.

See also