List Jobs
Returns a page of normalized job listings matching your filters, each with title, location, salary, company, and more (see the schema below). Lists are paginated with opaque cursors rather than page numbers: the response includes pagination.limit, pagination.next_page, and pagination.prev_page. There is no page query parameter.
sort_by as before, and pass the token from the last response's next_page or prev_page back on the following request. The direction is baked into the token itself, not into which name you send it as — cursor, next_page, and prev_page are three interchangeable names for the same query parameter; whichever you use, the API reads whatever token you passed and moves in the direction it encodes.application_url is left out of every job in the response — use GET /jobs/:id/apply to unlock it for a specific job. Every other plan gets it directly, as shown below.application_url is a cleanjobdata.com/apply/{id} redirect that resolves to the employer's page. Paid plans (Starter, Pro and Enterprise) return the employer's direct application URL.There are three ways to ask for “recent” jobs, and they measure different dates:
max_ageis a rolling window on the published date (the date the employer posted the job), for example7dfor jobs posted in the last 7 days.published_afteris a fixed cut-off (ISO 8601) on the same published date. If you send it,max_ageis ignored for that request.created_max_ageis a rolling window on the date we indexed the job, for example24hfor everything added to the API in the last day.
Use max_age or published_after to show visitors recent postings. Use created_max_age to keep your own database in sync: an employer may post a job days before we index it, and only the indexed date catches it. Results are always ordered by published date, whichever filter you use. See the sync guide for a full walkthrough.
Full copy-paste types (including the FilterApplied union) live on the API types (TypeScript).
Allowed tokens for fields, exclude_fields, and extra_fields: id, title, location, locations, application_url, published, has_remote, remote_type, is_active, expired_at, language, employment_type, salary_min, salary_max, salary_currency, salary_text, experience_level, experience_levels, company, description
Query Parameters
Search & Keywords
titlestringsoftware engineersearchstringsoftware engineersort_bystringrelevanceGeographic Filtering
Pro Tip: Use the Geo Suggest API to find IDs for 100% accuracy.
city_idnumber5391959state_idnumber5332921country_idnumber233locationstringUS,CAremotebooleantrueremote_typestringfully_remoteCompany
company_namestringStripeemployer_idstringa1B2c3, x9Y8z7company_website_urlstringstripe.comdomainstringacme.comField selection (list only)
Default list responses return a summary set of columns (no full description). Use the parameters below to trim or extend the payload. Unknown field names are ignored.
fieldsstringid,title,company,publishedinclude_fieldsstringid,title,companyextra_fieldsstringdescriptionexclude_fieldsstringdescription,companycountbooleantrueCompensation & Seniority
salarystring100000,150000min_salarynumber100000require_salarybooleantrueexperience_levelstringSE,EXemployment_typestringFULL_TIME,CONTRACTFreshness & Pagination
published_afterstring2024-05-01T00:00:00.000Zmax_agestring24h, 7d, 1w, or 7created_max_agestring24h, 7d, 1w, or 7limitnumber50cursorstring(value from prior response)next_pagestring(value from prior response)prev_pagestring(value from prior response)include_expiredbooleantrueResponse Schema
The body includes data (jobs), pagination (see below), and meta.
The Envelope
dataarraypaginationobjectmetaobjecttitle,experience_level:key,value,display_label.salary:key,min,max,display_label.published_after,max_age:key,value,display_label(value is hours since cutoff for max_age).city_id/state_id/country_id:key,kind,name,display_label, plus the matching*_idfield.location(ISO2 codes from the location query param):key,value,display_label(code).- Remote-only filter (from
remote=true): rowkeyisremote_only;valueis alwaystrue. company_name,remote_type:key,value,display_label.
employer_id, company_website_url, domain, created_max_age, include_expired, and count are applied to the query but do not currently produce a filters_applied row.
The Job Object
Primaryidnumbertitlestringlocationstring | nullNullablelocationsarray | nullNullablepublishedstringdescriptionstring | nullNullableapplication_urlstringemployment_typestring | nullNullableexperience_levelstring | nullNullablehas_remotebooleanremote_typestring | nullNullableis_activebooleanexpired_atstring | nullNullablelanguagestring | nullNullablesalary_minnumber | nullNullablesalary_maxnumber | nullNullablesalary_currencystring | nullNullablesalary_textstring | nullNullableexperience_levelsarraycompanyobject | nullNullableemployer_idstringThe Company Object
NestedVerified metadata about the hiring organization, stored on the job object. Not every key is present for every listing—treat optional fields as nullable/missing.
company.namestringcompany.logostring | nullNullablecompany.website_urlstring | nullNullablecompany.descriptionstring | nullNullablecompany.industrystring | nullNullablecompany.employee_countstring | nullNullablecompany.linkedin_urlstring | nullNullablecompany.twitter_urlstring | nullNullablecompany.github_urlstring | nullNullablecompany.facebook_urlstring | nullNullablecompany.instagram_urlstring | nullNullablecompany.youtube_urlstring | nullNullablecompany.teamarrayname: Full name of the team member.title: Job title or role (nullable).linkedin_url: Link to their professional profile (nullable).photo_url: URL to their profile photo (nullable).
The Location Object
Array ItemEach item in the locations[] array is a fully resolved geographic entity.
locations[].kindstring | nullNullablecity_state_country: Fully resolved.city_country: City and country resolved.state_country: State and country resolved, no specific city named.city,state, orcountry: Single level resolved.
locations[].display_labelstring | nullNullablelocations[].city_namestring | nullNullablelocations[].city_idnumber | nullNullablelocations[].state_namestring | nullNullablelocations[].state_idnumber | nullNullablelocations[].state_codestring | nullNullablelocations[].country_namestring | nullNullablelocations[].country_idnumber | nullNullablelocations[].country_codestring | nullNullablelocations[].timezonestring | nullNullablelocations[].is_remotebooleanlocations[].is_primaryboolean