JobsPipe
API Reference

Filter Reference

Every filter accepted by POST /v1/jobs/search.

All filters are optional fields in the JSON request body of POST /v1/jobs/search. Filters combine with AND. Array filters ending in _or match any of their values; those ending in _not exclude their values.

Pagination & ordering

FieldTypeDescription
limitnumberMax results to return. Capped by your plan's page size (Free 25 / Builder 100 / Scale 500).
offsetnumberNumber of results to skip (offset pagination).
pagenumberPage index (alternative to offset).
cursorstringOpaque cursor for the next page, from metadata.next_cursor.
order_byobject[]Sort order, e.g. [{ "field": "date_posted", "desc": true }].
include_total_resultsbooleanInclude the total match count in metadata.total_results (otherwise null).

See pagination for how these interact.

Job title

FieldTypeDescription
job_title_orstring[]Match jobs whose title contains any of these.
job_title_notstring[]Exclude jobs whose title contains any of these.

Both match a case-insensitive substring of the title, so "engineer" also matches "Engineering Manager". job_title_not terms are excluded independently: a job is dropped if it contains any of them.

Description

FieldTypeDescription
description_orstring[]Match jobs whose description contains any of these.
description_notstring[]Exclude jobs whose description contains any of these.

The same case-insensitive substring match, run over the full posting text. Use it for a requirement that rarely appears in the title. When the term is in the skills lexicon, skills_or asks the same question against the extracted slugs and is the better filter.

Location

FieldTypeDescription
job_country_code_orstring[]Match any of these ISO country codes, e.g. ["US","GB"].
job_country_code_notstring[]Exclude these ISO country codes.
job_location_orstring[]Match jobs whose city or region contains any of these, e.g. ["Seattle","WA"]. Combine with job_country_code_or to disambiguate same-named cities.
region_orstring[]US states and Canadian provinces as ISO 3166-2 codes, e.g. ["US-NY","CA-ON"]. Matches every spelling a job board publishes, so "CA-ON" finds both "ON" and "Ontario".
remotebooleantrue for remote-only, false to exclude remote.
work_arrangement_orstring[]Match any of "remote", "hybrid", "onsite".

region_or is the precise way to ask for a state or province. job_location_or substring-matches the city or the region, so ["Ontario"] also returns jobs in Ontario, California, while ["CA-ON"] returns only the province.

work_arrangement_or is finer than remote, which answers false for hybrid and onsite alike and so cannot separate the two. Jobs whose arrangement we do not know never match it, which makes it stricter than the boolean rather than a drop-in replacement.

work_arrangement is not populated yet, so work_arrangement_or currently matches zero jobs. It fills in as postings are re-ingested and backfilled - use remote until then. See field coverage.

Posted date

FieldTypeDescription
posted_at_max_age_daysnumberOnly postings newer than this many days.
posted_at_gtestringOnly postings on or after this date (YYYY-MM-DD).
posted_at_ltestringOnly postings on or before this date (YYYY-MM-DD).
discovered_at_gtestringOnly postings JobsPipe first saw at or after this UTC datetime (YYYY-MM-DD HH:MM:SS).

discovered_at_gte tracks when we first saw a posting, not when it was posted. That makes it the one to poll with: pass the timestamp of your last run and you get everything new to the corpus since then, including older postings we discovered late, which a posted_at_gte window would miss.

Status

FieldTypeDescription
statusstringactive (default), closed, or any.

Search returns only active postings unless you ask otherwise. closed returns postings a recheck found gone, and any returns both. Closed jobs carry closed_at and closed_reason, which is closed, gone or stale.

Company

FieldTypeDescription
company_name_orstring[]Match any of these company names (exact).
company_name_partial_match_orstring[]Match any of these company names (partial / contains).
min_employee_countnumberCompanies with at least this many employees.
max_employee_countnumberCompanies with at most this many employees.

min_employee_count uses the exact headcount where we have one and otherwise the lower bound of the company's size band, since a "10,000+" company certainly has at least 10,000 people. max_employee_count uses the exact headcount only -- a band has no known upper bound, so those companies are excluded rather than wrongly included. Either way, narrowing by company size also narrows to companies whose size we know. To filter by industry instead, use isic_division_or, which classifies the hiring company under ISIC Rev.4.

Source

FieldTypeDescription
source_orstring[]Match any of these collector sources (OR).
source_notstring[]Exclude these collector sources.

Accepted values: linkedin, indeed, ycombinator (aliases: yc, y combinator), workday, greenhouse, workable, smartrecruiters, ashby, lever, paylocity.

To get only ATS-direct postings, exclude the boards — this keeps working as new ATS sources are added:

{ "source_not": ["indeed", "linkedin"] }

Or pin an exact include list when you want only specific sources:

{ "source_or": ["workday", "greenhouse", "workable", "smartrecruiters", "ashby", "lever", "paylocity"] }

An unrecognized source is not an error: in source_or it matches nothing (the request returns zero jobs, so assert a non-zero count in integrations), and in source_not it excludes nothing.

Employer type

FieldTypeDescription
employer_type_orstring[]Match any of employer, agency, broker.
employer_type_notstring[]Exclude these employer types.

employer hires for itself, agency is a staffing or recruitment firm posting for a client, and broker is a job board republishing another company's listing.

The classifier behind this has not run yet, so every stored posting is unclassified and comes back as "employer". employer_type_or: ["employer"] therefore matches everything, because unclassified postings are deliberately included in it; ["agency"] or ["broker"] matches nothing; and employer_type_not excludes nothing, because unclassified postings are not any of the three values. Both filters are accepted and stable, but neither narrows results today.

Seniority

FieldTypeDescription
job_seniority_orstring[]Match any of these seniority levels, e.g. ["Senior"].
include_unlabeled_senioritybooleanAlso return jobs whose seniority is unknown.

Responses report entry_level, mid_level, senior, director and executive. The filter accepts those and also entry, mid, lead, exec, internship and associate, matched case-insensitively. director and lead are the same bucket, which is why an individual-contributor principal can appear under director - use is_manager to tell them apart.

Most postings state no level at all - 31.2% carry one in the coverage sample - and job_seniority_or drops every unlabeled job. Set include_unlabeled_seniority: true to keep them.

Employment type

FieldTypeDescription
employment_type_orstring[]Match any of full-time, part-time, contract, temporary, internship.

Underscored and unhyphenated spellings work too (full_time, fulltime), as do temp and intern. Postings whose type the source never stated match none of the values.

Occupation, industry & skills

Every posting is classified against international standards: the role into an ISCO-08 occupation unit group, the employer into an ISIC Rev.4 industry division, and the text against a curated skills lexicon.

FieldTypeDescription
skills_orstring[]Match jobs tagged with any of these skill slugs, e.g. ["python", "kubernetes"].
occupation_code_orstring[]ISCO-08 occupation codes. 4-digit codes match exactly ("2512" Software Developers); 1-3 digits match as prefixes ("25" = all ICT professionals).
isic_division_orstring[]ISIC Rev.4 industry divisions of the employer (2-digit), e.g. ["62"] Computer programming and consultancy.

By ID

FieldTypeDescription
job_id_orstring[]Return jobs matching any of these IDs.
job_idsstring[]Look up a specific set of job IDs.

Preview mode

FieldTypeDescription
blur_company_databooleanMask employer identity and links, and charge no credits.

With blur_company_data: true the response masks company, company_domain, url, source_url, description and every identifying field of company_object, empties hiring_team, and sets has_blurred_data: true. Job titles, locations, salary, dates and the result counts stay readable, and the call bills zero credits, so it is the way to size a search before paying for it.

The request schema is strict: unknown or misspelled fields are rejected with an HTTP 400, and the error names the offending field. The fields above are the supported, stable filters - use them exactly as spelled.

On this page