Skip to main content
Use this when you want to explore a market, build a target account list, or segment companies by criteria like geography, industry, funding, or headcount. The Company Search API lets you find companies by domain, country, industry, funding, headcount, and more. This page walks you through the basics: your first search, the response shape, and combining filters. For deeper topics, follow the links to the sub-pages. Every request goes to the same endpoint:
POST https://api.crustdata.com/company/search
Replace YOUR_API_KEY in each example with your actual API key. All requests require the x-api-version: 2025-11-01 header.

Request body

ParameterTypeRequiredDefaultDescription
filtersobjectNoA single filter condition or a nested and/or group. Omit to match all companies.
fieldsstring[]Noall fieldsDot-path fields to include in each company object. Always specify in production.
sortsobject[]NoSort rules. Each has column (field path) and order (asc or desc).
limitintegerNo20Companies per page. Max: 1000.
cursorstringNoPagination cursor from a previous response.
Looking for the list of fields you can filter on? See Searchable fields in the search reference for the full table of filters.field values (with sortable flags). Use Autocomplete to discover valid values for fields like basic_info.industries, taxonomy.professional_network_industry, or locations.country.

Response body

FieldTypeDescription
companiesarrayMatching company records with requested fields.
next_cursorstring or nullCursor for the next page. null when no more pages.
total_countinteger or nullTotal matching companies (may be null for broad queries).

Rate limits and credits

Current platform behavior — not specified in the OpenAPI contract:
Pricing: 0.03 credits per result returned. A request with no results does not consume credits.
  • Rate limit: 15 requests per minute.
Search results are intentionally lightweight so you can explore and segment companies at a low credit cost. When you need the full company profile, use Company Enrich.

Filter recipes

or/nested logic, well-funded-by-country, recently founded.

Pagination & sorting

Cursor-based pagination and sort rules for stable ordering.

Reference

Operators, searchable fields, response fields, validation, errors.

Your first search: find a company by domain

The simplest search finds a company by its exact primary domain. You pass a single filter with the = operator.
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": {
      "field": "basic_info.primary_domain",
      "type": "=",
      "value": "retool.com"
    },
    "limit": 1,
    "fields": [
      "crustdata_company_id",
      "basic_info.name",
      "basic_info.primary_domain",
      "basic_info.year_founded",
      "headcount.total",
      "locations.country",
      "funding.total_investment_usd"
    ]
  }'

Understanding the response

Every search response has three fields:
  • companies — an array of matching company records. Each record contains the fields you requested in fields.
  • next_cursor — a pagination token. Pass it in the next request to get the next page. null means there are no more pages.
  • total_count — how many companies match your filters across the full database (may be null for very broad queries).

How to interpret results

  • next_cursor is null: You have reached the last page. No more results.
  • total_count is null: The exact count is too expensive to compute for this query. Use next_cursor to determine if more pages exist.
  • Empty companies array: No companies matched your filters. Broaden your filters or check values with Autocomplete.

Controlling which fields come back

The fields parameter lets you pick exactly which fields to include. This keeps your responses small and focused. If you omit fields, the API returns all available fields for each company.

Combine filters with and

Real searches need more than one criterion. Wrap multiple conditions inside an op: "and" group to require all of them. This search finds software development companies headquartered in the USA, sorted by headcount (largest first).
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.professional_network_industry",
          "type": "=",
          "value": "Software Development"
        },
        {
          "field": "locations.country",
          "type": "in",
          "value": ["USA"]
        }
      ]
    },
    "sorts": [{"column": "headcount.total", "order": "desc"}],
    "limit": 2,
    "fields": [
      "crustdata_company_id",
      "basic_info.name",
      "basic_info.primary_domain",
      "headcount.total",
      "locations.country"
    ]
  }'
Response trimmed for clarity.
The key difference from the first example: instead of a single filters object, you now have a group with op: "and" and a conditions array. Every condition must match for a company to be included. For or and nested logic, or for finding well-funded or recently founded companies, see Filter recipes. To walk through large result sets, see Pagination and sorting.

What to do next

  • Try more filter patterns — see Filter recipes for or/nested logic and funding/year-founded filters.
  • Paginate and sort — see Pagination and sorting.
  • Look up operators and fields — see Search reference.
  • Enrich a company — use Company Enrich to get a detailed profile for a known company.
  • Discover filter values — use Autocomplete to find valid values before building search filters.