v1

latestOpenAPI 3.0.32026-07-222085264.6 KB
Job APIs
Search APIs

Search the indexed job dataset

Search the Crustdata job dataset using filter conditions. Each result includes the job's details (title, category, URL, openings), the hiring company's core firmographics (basic info, headcount, followers, revenue, funding, competitors), the job location, full job description text, and metadata timestamps.

<Note> Default `rate-limit` is 30 requests per minute. Send an email to [gtm@crustdata.co](mailto:gtm@crustdata.co) to discuss higher limits if needed for your use case. </Note>

Supports complex AND/OR filter logic, cursor-based pagination, sorting, field selection, aggregations (count and group_by), and geographic radius filtering on location with the geo_distance and geo_exclude operators. Only indexed fields are filterable and sortable — see the field description on SearchCondition for the full list.

post/job/search

Headers

x-api-version'2025-11-01' required
Example:2025-11-01

API version to use. This endpoint currently requires 2025-11-01.

Request body

cursorstring

Opaque pagination cursor returned in a prior response's next_cursor field. Pass this to fetch the next page of results with the same filter, sort, and field selection.

limitinteger

Maximum number of job listings to return per page. Set to 0 when you only want aggregations.

fieldsstring[]

Fields to return in each job listing. Use dot-notation for nested fields (e.g., "job_details.title", "company.basic_info.name"). If omitted, all available fields are returned.

Valid top-level groups: crustdata_job_id, job_details, company, location, content, metadata. Nested fields are supported (e.g., company.basic_info, company.headcount, company.funding).

Example request

{
  "filters": {
    "field": "company.basic_info.company_id",
    "type": "=",
    "value": {
      "location": "San Francisco",
      "lat_lng": [
        37.7749,
        -122.4194
      ],
      "distance": 25,
      "unit": "km"
    }
  },
  "cursor": "H4sIAJJG1mkC_xXMPQ7CMAwG0KtEmTvYiR0nXAWhyvlBHRARbTogxN0J01s-vY99nW1_r5sem70YSzEJErG_VwdSnfeMiVpSjhmbUmkanXqXa5rlqsUlTJApUPO1NrsYe_R9zNcVRZgDRhIAWAwhsA_Ct0lGH_pYSz-ffykR8PsDw2G2zooAAAA=",
  "limit": 20,
  "sorts": [
    {
      "field": "metadata.date_added",
      "order": "desc"
    }
  ],
  "fields": [
    "job_details.title",
    "job_details.url",
    "company.basic_info.name",
    "location.raw",
    "metadata.date_added"
  ],
  "aggregations": [
    {
      "type": "group_by",
      "field": "company.basic_info.company_id",
      "agg": "count",
      "size": 5
    }
  ]
}

Response

Jobs matching the search criteria with pagination cursor and total count

next_cursorstring nullable

Opaque cursor for fetching the next page of results. Pass this value as cursor in the next request. null when there are no more pages.

total_countinteger nullable

Total number of job listings matching the query across all pages.

Example response

{
  "job_listings": [],
  "next_cursor": "H4sIAJJG1mkC_xXMPQ7CMAwG0KtEmTvYiR0nXAWhyvlBHRARbTogxN0J01s-vY99nW1_r5sem70YSzEJErG_VwdSnfeMiVpSjhmbUmkanXqXa5rlqsUlTJApUPO1NrsYe_R9zNcVRZgDRhIAWAwhsA_Ct0lGH_pYSz-ffykR8PsDw2G2zooAAAA=",
  "total_count": 1676,
  "aggregations": [
    {
      "type": "count",
      "field": null,
      "value": 4448237
    }
  ]
}