Skip to main content
Reference material for Company Search: the full list of filter operators, searchable fields with sortable flags, response fields, validation rules, and error responses. For walk-through examples, see Company Search and Examples.

Filter operator reference

Company Search accepts the following filters.type operators.
OperatorValue shapeMeaningExample valueNotes
=scalarExact match"retool.com"Case-insensitive for text fields
!=scalarNot equal"acquired"
<scalar (number or date string)Less than10000Numbers and date strings
=<scalar (number or date string)Less than or equal50000000Not <=
>scalar (number or date string)Greater than2020Numbers and date strings
=>scalar (number or date string)Greater than or equal"2024-01-01"Not >=
inarrayValue is in list["USA", "GBR"]Case-sensitive. Matches if any array element matches any list value.
not_inarrayValue is not in list["acquired"]
containsscalarField contains value"cloud"Use for substring-style matching on supported text fields
not_containsscalarField does not contain value"agency"Use to exclude substring-style matches on supported text fields
is_nullnoneField is nullNo value needed
is_not_nullnoneField is not nullNo value needed
(.)stringFuzzy text search"openai"Tolerates typos, matches word variants
[.]stringExact token match"Software Development"No typos allowed, requires exact tokens
The operators >= and <= are not supported. Use => and =< instead.

Searchable fields

These are common fields that can be used in the field key of a filter condition. Some indexed filter fields are search-only and are not returned in the response payload. For the full schema, see the API reference. Fields are grouped by family below. Every field listed is filterable; the Sortable column marks the subset also valid in sorts.

Identity & timestamps

FieldTypeSortableDescription
crustdata_company_idintegerYesCrustdata company ID
basic_info.company_idintegerYesInternal source company ID
metadata.growth_calculation_datedatetimeYesAnchor date for growth metrics
updated_atdatetimeYesLast profile update timestamp
indexed_atdatetimeYesLast index timestamp

Basic info

FieldTypeSortableDescription
basic_info.namestringYesCompany name
basic_info.primary_domainstringYesPrimary website domain
basic_info.websitestringNoFull website URL
basic_info.professional_network_urlstringNoCompany profile URL
basic_info.professional_network_idstringNoCompany profile ID
basic_info.company_typestringNoe.g., "Privately Held", "Public Company"
basic_info.year_foundedintegerYesYear founded (e.g., 2017)
basic_info.employee_count_rangestringYese.g., "201-500"
basic_info.marketsstring[]NoMarket tags
basic_info.industriesstring[]NoIndustry tags

Revenue & funding

FieldTypeSortableDescription
revenue.estimated.lower_bound_usdintegerYesRevenue lower bound (USD)
revenue.estimated.upper_bound_usdintegerYesRevenue upper bound (USD)
revenue.acquisition_statusstringNoe.g., "acquired"
revenue.public_markets.ipo_datedateYesIPO date (public companies)
revenue.public_markets.fiscal_year_endstringNoFiscal year end (public companies)
revenue.public_markets.stock_symbolsstring[]NoTicker symbols (public companies)
funding.total_investment_usdnumberYesTotal disclosed funding (USD)
funding.last_round_amount_usdnumberYesLast funding round amount (USD)
funding.last_fundraise_datedateYesLast funding date
funding.last_round_typestringNoe.g., "series_a", "series_b"
funding.investorsstring[]NoInvestor names
funding.tracxn_investorsstring[]NoIndexed investor names (filter only)

Headcount & roles

FieldTypeSortableDescription
headcount.totalintegerYesTotal employee count
headcount.largest_headcount_countrystringYesCountry with the most employees
headcount.growth_percent.1mnumberNo1-month headcount growth percent
headcount.growth_percent.3mnumberNo3-month headcount growth percent
headcount.growth_percent.6mnumberNo6-month headcount growth percent
headcount.growth_percent.12mnumberNo12-month headcount growth percent
headcount.growth_absolute.1mintegerNo1-month absolute employee delta
headcount.growth_absolute.3mintegerNo3-month absolute employee delta
headcount.growth_absolute.6mintegerNo6-month absolute employee delta
headcount.growth_absolute.12mintegerNo12-month absolute employee delta
roles.distribution.<function>integerNoEmployee count in a function (see list below)
roles.distribution_percentobjectNoShare of employees per function
roles.growth_6mobjectNo6-month role growth
roles.growth_yoyobjectNoYear-over-year role growth
The headcount.growth_percent.* and headcount.growth_absolute.* dotted period paths are filterable but not sortable. To rank results by growth, filter on the period you care about and sort on headcount.total (or another sortable field). See Find high-growth mid-size companies.
Replace <function> with one of: accounting, administrative, arts_and_design, business_development, community_and_social_services, consulting, customer_success_and_support, education, engineering, entrepreneurship, finance, healthcare_services, human_resources, information_technology, legal, marketing, media_and_communication, military_and_protective_services, operations, product_management, program_and_project_management, purchasing, quality_assurance, real_estate, research, sales, support. For example, roles.distribution.engineering filters on the number of engineers. See Find companies by team size in a function.

Locations

FieldTypeSortableDescription
locations.countrystringYesHQ country (ISO-3: "USA", "GBR")
locations.headquartersstringNoFull HQ location string
locations.street_addressstringNoHQ street address (e.g. "510 Townsend St.")

Taxonomy

FieldTypeSortableDescription
taxonomy.professional_network_industrystringNoPrimary industry label
taxonomy.categoriesstring[]NoCategory tags
taxonomy.professional_network_specialitiesstring[]NoSpeciality tags

Followers

FieldTypeSortableDescription
followers.countintegerYesFollower count
followers.mom_percentnumberNoMonth-over-month follower growth %
followers.qoq_percentnumberNoQuarter-over-quarter growth %
followers.six_months_growth_percentnumberNo6-month follower growth %
followers.yoy_percentnumberNoYear-over-year follower growth %

Social profiles

FieldTypeSortableDescription
social_profiles.twitter_urlstringNoCompany X/Twitter URL
social_profiles.crunchbase.urlstringNoCompany Crunchbase URL
social_profiles.crunchbase.uuidstringNoCompany Crunchbase UUID
social_profiles.professional_networkstringNoCompany profile URL

Competitors (filter-only)

FieldTypeSortableDescription
competitors.company_idsinteger[]NoCompetitor Crustdata IDs
competitors.websitesstring[]NoCompetitor domains
Use Autocomplete to discover exact values for fields like basic_info.industries, taxonomy.professional_network_industry, locations.country, basic_info.company_type, and funding.last_round_type.

Response fields

Each company in the response can include these sections (depending on fields):
SectionKey fieldsDescription
basic_infoname, primary_domain, website, professional_network_url, year_foundedCore identity and profile
headcounttotalEmployee footprint
fundingtotal_investment_usd, last_round_amount_usd, investorsFunding and investor data
locationscountry, state, headquarters, street_address, all_office_addressesHeadquarters and office locations
taxonomyprofessional_network_industry, categories, professional_network_specialitiesIndustry and category tags
revenueestimated, public_markets, acquisition_statusRevenue and market data
hiringopenings_count, openings_growth_percentHiring demand
followerscount, mom_percent, yoy_percentSocial follower metrics
social_profilestwitter_url, professional_network, crunchbase.url, crunchbase.uuidThird-party profile links

Validation rules

Default/max limits and pagination behavior reflect current platform behavior. See the API reference for the formal OpenAPI contract.
RuleBehavior
filters is optionalOmitting filters matches all companies. Always use filters in production to control cost.
fields is optionalOmitting returns all fields (large payload). Always specify in production.
limit range1–1000. Default: 20.
sorts with paginationAlways include sorts when paginating to ensure stable result ordering.
cursor must match queryChanging filters, sorts, or fields between pages invalidates the cursor.

Errors

Common error responses for Search:
400 — Unsupported field
{
    "error": {
        "type": "invalid_request",
        "message": "Unsupported columns in conditions: ['nonexistent_field']",
        "metadata": []
    }
}
400 — Invalid operator
{
    "error": {
        "type": "invalid_request",
        "message": "'filters.type' must be one of: =, !=, <, =<, >, =>, in, not_in, contains, not_contains, is_null, is_not_null, (.), [.]. Got '>='.",
        "metadata": [
            {
                "field": "filters.type",
                "type": "enum",
                "message": "'filters.type' must be one of: =, !=, <, =<, >, =>, in, not_in, contains, not_contains, is_null, is_not_null, (.), [.]. Got '>='."
            }
        ]
    }
}
Use => for greater-than-or-equal and =< for less-than-or-equal. The operators >= and <= are not supported.
401 — Invalid API key
{
    "error": {
        "type": "unauthorized",
        "message": "Invalid API key in request.",
        "metadata": []
    }
}

API reference summary

DetailValue
EndpointPOST /company/search
AuthBearer token + x-api-version: 2025-11-01
Requestfilters (condition or group), fields, sorts, limit, cursor
Response{ companies, next_cursor, total_count }
PaginationCursor-based. Pass next_cursor in cursor. null = last page.
Empty result200 with "companies": []
Errors400 (bad field/operator), 401 (bad auth), 403 (permission/credits), 500 (server error)

How sorts work

The sorts parameter orders your results. Each sort rule needs:
  • column — a dot-path field (e.g., funding.total_investment_usd, headcount.total, basic_info.name).
  • order — either asc (ascending) or desc (descending).
You can provide multiple sort rules. The API applies them in order. For the full list of sortable fields, see Search reference.

Paginate through results

When your search matches more companies than your limit, use cursor-based pagination to walk through all pages. First page: send your normal search request.
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": "locations.country",
      "type": "in",
      "value": ["USA"]
    },
    "sorts": [{"field": "crustdata_company_id", "order": "asc"}],
    "limit": 100,
    "fields": [
      "crustdata_company_id",
      "basic_info.name",
      "basic_info.primary_domain"
    ]
  }'
Next page: take the next_cursor value from the response and pass it in your next request. Keep the same filters, sorts, limit, and fields.
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": "locations.country",
      "type": "in",
      "value": ["USA"]
    },
    "sorts": [{"field": "crustdata_company_id", "order": "asc"}],
    "limit": 100,
    "fields": [
      "crustdata_company_id",
      "basic_info.name",
      "basic_info.primary_domain"
    ],
    "cursor": "PASTE_NEXT_CURSOR_VALUE_HERE"
  }'
Continue until next_cursor is null, which means you have reached the last page.
Changing filters, sorts, or fields between pages invalidates the cursor. Always include sorts when paginating to guarantee stable ordering.
See the full API reference for the complete OpenAPI schema.