Skip to main content
Reference material for Company Enrich: request parameters, response fields, valid fields values, company_data section catalog, validation rules, and error responses. For walk-through examples, see Company Enrich and Examples.

Request parameter reference

ParameterTypeRequiredDefaultDescription
domainsstring[]Exactly one identifier type requiredWebsite domains to enrich.
professional_network_profile_urlsstring[]Exactly one identifier type requiredCompany profile URLs to enrich.
namesstring[]Exactly one identifier type requiredCompany names to enrich.
crustdata_company_idsinteger[]Exactly one identifier type requiredCrustdata company IDs to enrich.
fieldsstring[]No["basic_info"]Specific field groups to include in the response. Defaults to basic_info only (plus crustdata_company_id).
exact_matchbooleanNonullSet to true to force exact domain matching.
Current platform behavior: Submit exactly one identifier type per request.

Response fields reference

The response is a top-level array. Each item in the array contains:
FieldTypeDescription
matched_onstringThe input identifier you submitted
match_typestringdomain, name, crustdata_company_id, professional_network_profile_url
matchesarrayArray of candidate matches (may be empty for no-match)
matches[].confidence_scorenumberHow confident the match is. Higher is better.
matches[].company_dataobjectFull enriched company profile. See company_data sections below.

Using the fields parameter

If you omit fields, company_data contains only crustdata_company_id and basic_info. To get headcount, funding, people, hiring, or any other section, you must list it explicitly in fields.
curl --request POST \
  --url https://api.crustdata.com/company/enrich \
  --header 'authorization: Bearer YOUR_API_KEY' \
  --header 'content-type: application/json' \
  --header 'x-api-version: 2025-11-01' \
  --data '{
    "domains": ["retool.com"]
  }'
Each entry in fields is the name of a section group. Include basic_info explicitly if you want to keep it alongside other sections.

Valid fields values

Field groupWhat it returns
basic_infoCompany name, domain, website, profile URL, industry, type, year founded
headcountEmployee count, role/region breakdowns, growth metrics
fundingTotal funding, last round details, investor list
locationsHQ country, state, headquarters address, street address, office addresses
taxonomyIndustry, category, NAICS, SIC, and speciality fields
revenueRevenue estimates (lower/upper bound), public markets, acquisition status
hiringOpen job count, hiring growth rate, recent job titles
followersFollower count, month-over-month/quarter/year growth
seoOrganic search results, monthly organic clicks, Google Ads budget
competitorsAggregated competitor domains and paid/organic SEO competitors
social_profilesCrunchbase, professional network, and Twitter profile links
web_trafficMonthly visitors, traffic source breakdown
employee_reviewsOverall, culture, and work-life balance ratings
peopleDecision makers, founders, C-level executives
newsRecent article URLs, titles, and publish dates
software_reviewsReview count and average rating
public_launchesProduct launch data — launches, makers, reviews, and ratings
market_intelProduct and review intelligence — products, reviews, and ratings
reviewsOther (non-employee) reviews bucket

company_data sections

The enriched company_data object contains the following sections. Each section maps to a fields value above.
SectionKey fieldsDescription
crustdata_company_idintegerTop-level Crustdata identifier
updated_atdate-time string (nullable)Top-level last-refresh timestamp
indexed_atdate-time string (nullable)Top-level last-indexed timestamp
basic_infoname, primary_domain, all_domains, website, professional_network_url, professional_network_id, profile_name, logo_permalink, year_founded, description, company_type, employee_count_range, markets, industriesCore identity and classification
headcounttotal, by_role_absolute, by_role_percent, by_region_absolute, growth_percent, growth_absoluteEmployee footprint and growth
fundingtotal_investment_usd, last_round_amount_usd, last_fundraise_date, last_round_type, investors, funding_rounds, milestones, acquisitionsFunding, milestones, and acquisitions
locationscountry, state, headquarters, street_address, all_office_addressesHeadquarters and office locations
taxonomycategories, professional_network_industry, professional_network_industries, professional_network_specialities, primary_naics_detail, sic_detail_listIndustry and classification data
revenueestimated (lower_bound_usd, upper_bound_usd), public_markets, acquisition_statusRevenue estimates and market data
hiringopenings_count, openings_growth_percent, recent_openingsHiring demand and open roles
followerscount, mom_percent, qoq_percent, yoy_percentAudience and follower metrics
seototal_organic_results, monthly_organic_clicks, monthly_google_ads_budgetSearch visibility metrics
competitorsall_domains, paid_seo, organic_seoCompetitor domains and SEO peers
social_profilescrunchbase.url, crunchbase.uuid, professional_network, twitter_urlExternal profile links
web_trafficper-domain monthly_visitors and traffic sourcesWebsite traffic and sources
employee_reviewsoverall_rating, culture_and_values_rating, work_life_balance_rating, review_countEmployee review data
peopledecision_makers, founders, cxosKey people at the company
newsarticle_url, article_title, article_publish_dateRecent news articles
software_reviewsreview_count, average_ratingSoftware review metrics
public_launcheslaunches, makers, reviews, categories, num_upvotes, ratingProduct launch data
market_intelproducts, reviews, year_founded, head_office_city, head_office_country, num_employees_min, num_employees_maxMarket-intelligence data
reviewsOther non-employee reviews bucket. May be null when not populated.General review data
metadataCrustdata processing metadataInternal metadata

headcount.growth_percent and headcount.growth_absolute keys

The two growth maps in the headcount object are keyed by period alias. Each key holds the change over a trailing window: a percentage for growth_percent, an absolute employee delta for growth_absolute.
KeyWindow
momMonth over month
qoqQuarter over quarter
six_monthsTrailing six months
yoyYear over year
two_yearsTrailing two years
/company/search returns the same growth data under different period keys1m, 3m, 6m, 12m — and exposes each as a filterable path (headcount.growth_percent.{1m,3m,6m,12m}, headcount.growth_absolute.{1m,3m,6m,12m}). The values are equivalent, but a client that consumes both endpoints must map the keys explicitly: mom ↔ 1m, qoq ↔ 3m, six_months ↔ 6m, yoy ↔ 12m. two_years has no counterpart on /company/search.

Validation rules

These rules reflect current platform behavior. See the API reference for the formal OpenAPI contract.
RuleBehavior
One identifier type per requestSubmit domains, names, crustdata_company_ids, or professional_network_profile_urls — not a mix. Mixing types is not supported.
fields is optionalOmitting returns basic_info only. Pass section group names to include more sections.
exact_match is optionalDefault is null (auto-detect). Set true for strict domain-only matching.
Multi-company requestsYou can submit multiple values in one identifier array. Each is matched independently.

No-match behavior

When enriching, each identifier is matched independently:
  • Full match: All identifiers match — each array entry has populated matches.
  • Partial match: Some identifiers match and others do not. Matched identifiers have company_data; unmatched identifiers return an empty matches: [] array.
  • No match: All identifiers fail to match. Current platform behavior returns 200 OK with empty matches: [] for each array entry.
The OpenAPI spec also defines a 404 response for this endpoint. Current platform behavior returns 200 with empty matches, but integrations should handle both 200 empty-match and 404 cases.
No match — 200 with empty matches
[
    {
        "matched_on": "nonexistent-domain.com",
        "match_type": "domain",
        "matches": []
    }
]

Partial batch failure

When enriching multiple identifiers, some may match and others may not. The request still succeeds with 200:
[
    {
        "matched_on": "hubspot.com",
        "match_type": "domain",
        "matches": [
            {
                "confidence_score": 1.0,
                "company_data": {
                    "basic_info": {
                        "name": "HubSpot",
                        "primary_domain": "hubspot.com"
                    }
                }
            }
        ]
    },
    {
        "matched_on": "nonexistent-domain.com",
        "match_type": "domain",
        "matches": []
    }
]
Action: Iterate over the top-level array. For each entry, check matches.length > 0 before accessing company_data. Log or retry unmatched identifiers separately.

Errors

Common error responses for Enrich:
400 — Bad request
{
    "error": {
        "type": "invalid_request",
        "message": "Exactly one identifier must be provided: crustdata_company_ids, names, domains, or professional_network_profile_urls",
        "metadata": []
    }
}
401 — Invalid API key
{
    "error": {
        "type": "unauthorized",
        "message": "Invalid API key in request.",
        "metadata": []
    }
}

API reference summary

DetailValue
EndpointPOST /company/enrich
AuthBearer token + x-api-version: 2025-11-01
RequestOne identifier type: domains, names, crustdata_company_ids, or professional_network_profile_urls. Optional: fields, exact_match.
ResponseTop-level array: [{ matched_on, match_type, matches: [{ confidence_score, company_data }] }]
No match200 with empty matches: [] for unmatched identifiers. The OpenAPI spec also defines 404; handle both.
Errors400 (bad request), 401 (bad auth), 403 (permission/credits), 404 (per spec), 500 (server error)
See the full API reference for the complete OpenAPI schema.