Skip to main content
Use this when you already know the company and want its full profile — for research, scoring, personalization, or diligence. The Company Enrich API takes an identifier you already have — a website domain, a LinkedIn URL, a company name, or a Crustdata company ID — and returns a detailed company profile with headcount, funding, industry, hiring, and more. This page walks you through the API step by step. Every request goes to the same endpoint:
POST https://api.crustdata.com/company/enrich
Replace YOUR_API_KEY in each example with your actual API key. All requests require the x-api-version: 2025-11-01 header.

Your first enrichment: look up a company by domain

The simplest enrichment takes a website domain and returns the full company profile. Pass the domain in the domains array.
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"]
  }'
Response trimmed for clarity.
The year_founded field is returned as a string. The format may be a full date (e.g., 2017-01-01) or a year string (e.g., 2017) depending on the data source.

Understanding the response

The Enrich API returns an object with a results array — one entry per identifier you submitted. Each entry has three fields:
  • matched_on — the identifier you submitted (the domain, URL, name, or ID).
  • match_type — which identifier type was used. Possible values: domain, name, crustdata_company_id, professional_network_profile_url.
  • matches — an array of candidate companies. Each match includes a confidence_score and the full company_data object.
Domain lookups may return multiple matches if the domain is ambiguous. The highest confidence_score indicates the best match. Use exact_match: true to restrict to exact domain matches only (see below).

How to interpret results

  • Multiple matches: If matches contains more than one entry, check confidence_score — the highest score is the best match. Use primary_domain to verify.
  • Empty matches array: The identifier did not match any company. Check for typos or try a different identifier type.
  • confidence_score: 1.0: Exact match. Lower scores indicate fuzzy or partial matches.

What is inside company_data?

The enriched company_data object contains the following sections:
SectionKey fieldsDescription
basic_infoname, primary_domain, website, professional_network_url, year_founded, description, company_type, employee_count_range, industriesCore identity and classification
headcounttotal, by_role_absolute, by_role_percent, by_region_absolute, growth_percentEmployee footprint and growth
fundingtotal_investment_usd, last_round_amount_usd, last_fundraise_date, last_round_type, investorsFunding rounds and investor data
locationshq_country, hq_state, hq_city, headquartersHeadquarters location
taxonomylinkedin_industry, crunchbase_categories, linkedin_specialitiesIndustry and category tags
revenueestimated (lower_bound_usd, upper_bound_usd), public_markets, acquisition_statusRevenue estimates and market data
hiringopenings_count, openings_growth_percent, recent_titles_csvHiring demand and open roles
followerscount, mom_percent, qoq_percent, yoy_percentSocial follower metrics
seototal_organic_results, monthly_organic_clicks, monthly_google_ads_budgetSEO and paid search metrics
competitorscompany_ids, websitesCompetitor data
social_profilescrunchbase.url, twitter_urlThird-party profile links
web_trafficdomain_traffic (monthly_visitors, traffic sources)Website traffic and sources
employee_reviewsoverall_rating, culture_rating, work_life_balance_ratingGlassdoor-style employee ratings
peopledecision_makers, founders, cxosKey people at the company
newsarticle_url, article_title, article_publish_dateRecent news articles
software_reviewsreview_count, average_ratingG2/Capterra-style software ratings
statusstate (enriching, not_found)Enrichment processing status

Enrich by LinkedIn URL

If you have a LinkedIn company page URL, pass it in professional_network_profile_urls. This gives you a direct match.
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 '{
    "professional_network_profile_urls": [
      "https://www.linkedin.com/company/serverobotics"
    ]
  }'
Response trimmed for clarity.
LinkedIn URL lookups are direct matches — they typically return a single match with high confidence.

Enrich by company name

You can also enrich by company name. This is useful when you only have a name from a form submission or event badge scan.
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 '{
    "names": ["Retool"]
  }'
Name-based enrichment may return multiple candidates. Check confidence_score and primary_domain to pick the right match.

Enrich by company ID

If you already have a Crustdata company ID (from a previous search call), pass it in crustdata_company_ids for an exact lookup.
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 '{
    "crustdata_company_ids": [633593]
  }'
Company ID lookups typically return a single exact match, making this the most precise enrichment method.

Use exact match for stricter domain matching

By default, domain-based enrichment returns fuzzy matches (e.g., retool.com may also match webretool.com). Set exact_match: true to restrict results to companies whose primary_domain exactly matches your input.
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"],
    "exact_match": true
  }'
Response trimmed for clarity.
With exact_match: true, only one match is returned instead of many fuzzy candidates. Use this when you are confident in the domain and want clean, unambiguous results.

Batch enrichment: look up multiple companies at once

You can enrich multiple companies in a single request by passing multiple identifiers in the array.
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 '{
    "professional_network_profile_urls": [
      "https://www.linkedin.com/company/serverobotics",
      "https://www.linkedin.com/company/tryretool"
    ]
  }'

Batch enrichment tips

  • Submit one identifier type per request. Mixing identifier types (e.g., sending both domains and names) is not supported.
  • Each entry in the response corresponds to the input at the same position, so you can match results back to your input list by index.
  • If some identifiers fail to match, their matches array will be empty, but the request still succeeds for the others.

Choosing the right identifier

Each identifier type has trade-offs in precision and convenience.
DomainLinkedIn URLCompany NameCompany ID
PrecisionHigh (use exact_match)High — direct matchLower — may be ambiguousExact — unique ID
Best forCRM cleanup, inbound leadsLinkedIn-sourced dataFuzzy matchingInternal pipelines
Typical matches1 with exact_match1Multiple candidates1

Common workflow: Search then Enrich

The most powerful pattern combines Company Search with Company Enrich. Search finds companies matching your criteria; Enrich gets the full profile for each match. Step 1: Search for well-funded software companies.
curl --request POST \
  --url https://api.crustdata.com/company/search \
  --header 'authorization: Bearer YOUR_API_KEY' \
  --header 'content-type: application/json' \
  --header 'x-api-version: 2025-11-01' \
  --data '{
    "filters": {
      "op": "and",
      "conditions": [
        {
          "field": "taxonomy.linkedin_industry",
          "type": "=",
          "value": "Software Development"
        },
        {
          "field": "funding.total_investment_usd",
          "type": ">",
          "value": 10000000
        }
      ]
    },
    "limit": 5,
    "fields": ["crustdata_company_id", "basic_info.name", "basic_info.primary_domain"]
  }'
Step 2: Take the crustdata_company_id values from the search results and pass them in crustdata_company_ids to enrich.
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 '{
    "crustdata_company_ids": [633593, 628895]
  }'
This two-step pattern is the foundation for sales, research, and investment workflows. Search narrows the universe; Enrich fills in the details.

Request parameter reference

ParameterTypeRequiredDefaultDescription
domainsstring[]Exactly one identifier type requiredWebsite domains to enrich.
professional_network_profile_urlsstring[]Exactly one identifier type requiredLinkedIn company 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[]NoAllSpecific field groups to include in the response.
exact_matchbooleanNonullSet to true to force exact domain matching.
Current platform behavior: Submit exactly one identifier type per request.

Valid fields values

Use the fields parameter to limit which sections are returned in company_data. If fields is omitted, all sections are returned.
Field groupWhat it returns
basic_infoCompany name, domain, website, LinkedIn URL, industry, type, year founded
headcountEmployee count, role/region breakdowns, growth metrics
fundingTotal funding, last round details, investor list
locationsHQ country, state, city, full headquarters address
taxonomyLinkedIn industry, Crunchbase categories, LinkedIn specialities
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
competitorsCompetitor company IDs and websites
social_profilesCrunchbase URL, Twitter URL
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 from software review sites
statusEnrichment processing state (enriching, not found)

Response fields reference

The response is an object with a results array. Each item in the results 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 table above)

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 all sections. Pass section group names to reduce payload.
exact_match is optionalDefault is null (auto-detect). Set true for strict domain-only matching.
Batch sizeYou can submit multiple values in one identifier array. Each is matched independently.

Errors

No-match behavior

When enriching, each identifier is matched independently:
  • Full match: All identifiers match — each entry in results 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 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. See Conventions for the full cross-endpoint breakdown.
No match — 200 with empty matches
{
    "results": [
        {
            "matched_on": "nonexistent-domain.com",
            "match_type": "domain",
            "matches": []
        }
    ]
}

Rate limits and credits

  • Rate limit: 60 requests per minute. Exceeding this may result in throttled responses.
  • Credits: Each enriched company costs credits. Insufficient credits may result in a 403 error.
Rate limits and credit costs reflect current platform behavior and are not specified in the OpenAPI contract.

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.
ResponseObject with results array: { results: [{ 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. See Conventions.
Errors400 (bad request), 401 (bad auth), 403 (permission/credits), 404 (per spec), 500 (server error)
For shared conventions, error handling, and retry guidance, see Conventions. See the full API reference for the complete OpenAPI schema.

What to do next

  • Search for companies — use Company Search to find companies by industry, funding, headcount, and more.
  • Discover filter values — use Autocomplete to find valid values before building search filters.
  • See more examples — browse company examples for ready-to-copy patterns.