You are viewing the documentation of the new API versions. We would love to hear from you. You can write to use at support@crustdata.co for feedback and clarifications.
Use this file to discover all available pages before exploring further.
Reference material for Search Jobs: common indexed
fields, the full Job catalog, id semantics, aggregation bucket metadata,
null behavior, and errors.For filter grammar and example queries, see
Filters & recipes. For sorting, pagination,
field selection, and aggregations, see
Pagination & sorting.
Jobs ID cheat sheet. The Jobs APIs use three id concepts — keep them straight:
crustdata_job_id — the Crustdata job identifier. Returned on every Job. Use it as your dedupe key.
company.basic_info.crustdata_company_id — the Crustdata company identifier returned on every Job.
company.basic_info.company_id (filter alias) — the dot-path used in filters and aggregations.column for indexed Search Jobs. It points to the same integer as company.basic_info.crustdata_company_id. This alias is not sortable; for deterministic pagination, sort on metadata.date_added instead.
When you group_by on company.basic_info.company_id, each bucket also returns metadata.company_name, metadata.company_website_domain, and metadata.linkedin_id for labeling.
These are the indexed fields most often used in filters, sorts, and
aggregations.column. This table is a summary of the most common paths,
not an authoritative catalog. For the deeper field catalog — including id
semantics, null handling, and bucket metadata — see the full
Field reference below.
Company id filter alias. The filterable field path uses the short alias
company.basic_info.company_id, but the response shape returns the same
integer at company.basic_info.crustdata_company_id. They point to the same
value. See Jobs IDs: a quick map.
Job details
Company basic info
Company firmographics
Location
Content, metadata, IDs
Field
Example
job_details.title
"Software Engineer"
job_details.category
"Engineering", "Sales", "Operations", "Others"
job_details.workplace_type
"Remote", "Hybrid", "On-site", ""
job_details.reposted_job
true / false
job_details.url
"https://www.linkedin.com/jobs/view/4398377738"
Field
Example
company.basic_info.company_id
631394
company.basic_info.name
"Stripe"
company.basic_info.primary_domain
"stripe.com"
company.basic_info.professional_network_id
"2135371"
company.basic_info.industries
["Technology, Information and Internet"]
Field
Example
company.headcount.total
14522
company.headcount.range
"5001-10000"
company.followers.count
1335688
company.revenue.estimated.lower_bound_usd
500000000
Field
Example
location.raw
"Melbourne, Victoria, Australia"
location.country
"Australia"
location.state
"Victoria"
location.district
"Southbank"
location.city
"Melbourne"
Field
Example
content.description
Full job description text.
crustdata_job_id
41053563
metadata.date_added
"2026-04-07T11:37:29"
metadata.date_updated
"2026-04-08T00:00:00"
Sending a filter on a non-indexed field returns 400 with Unsupported columns in conditions: ['...']. Sending an unsupported group_by column
returns a similar error listing every supported aggregation column.
Nulls are normal. Nested objects such as revenue.public_markets,
location.district, location.pincode, and parts of company.funding can
legitimately be null or missing.
When you group_by on company.basic_info.company_id, each bucket carries
a metadata object whose keys use bucket-specific names rather than the
Job response dot-paths:
Bucket metadata key
Equivalent Job value
Notes
company_name
company.basic_info.name
Plain company name.
company_website_domain
company.basic_info.primary_domain
Primary website domain.
linkedin_id
company.basic_info.professional_network_id
Public-profile identifier returned only inside aggregation buckets.
crustdata_company_id
company.basic_info.crustdata_company_id
Crustdata company id. Defined in the spec as nullable; the bucket key already carries this value.
company.basic_info.company_id and
company.basic_info.crustdata_company_id refer to the same integer. Use the
short alias in filters and aggregations.column. The response shape
writes the value under crustdata_company_id.
Country value normalization.location.country can appear as full names
("United States"), ISO-style short forms ("USA"), and occasional
variants ("United States of America"). When filtering by country, either
match multiple variants with in or pre-discover the exact indexed values
by running a group_by on location.country.
Most Job fields are nullable in the spec and can legitimately be absent
or empty.
Null or missing — the field is not present on a given Job.
Blank string "" — the field was present but had no indexable value (common for job_details.workplace_type). Treat blank as “unspecified”, not as the same thing as null.
Sparse nested objects — company.funding, company.revenue, and company.competitors are often missing for smaller or private companies.
is_null / is_not_null operators are currently not implemented — request the field via fields and filter for null presence client-side.
Invalid request — unsupported filter column, unsupported aggregation column, limit out of range, or malformed body. error.type is invalid_request for validation failures and internal_error for unsupported-column checks.
401
{ "message": "..." } (flat — not the error envelope)
Unauthorized — the Authorization header is missing, malformed, or contains an invalid API key.
500
{ "error": { "type", "message", "metadata" } }
Internal server error — retry after a short delay.
401 uses a different response shape than 400/500. Parse the
response based on HTTP status: 401 is a flat { "message": ... },
every other 4xx/5xx is the nested
{ "error": { "type", "message", "metadata" } } envelope.