Search open jobs
https://trawle.com/v1/jobs/searchOpen jobs matching a JobQuery, newest first (or by pay). Paginate with cursor. For a daily "what's new" run, store nextSince and pass it back as postedSince next time. Data refreshes once a day.
Request body
application/json · SearchJobsRequestqueryobject · JobQueryrequiredA job search. Values inside one filter are OR, filters are AND. The same object is used by the website's links and saved views.
14 properties
qstringoptionalFree text. Every word must start a word of the job title or department (any order,
reactmatches "React/TypeScript"), or every word must start a word of the company name.- Limits
- 2 to 100 characters
- Example
react
rolesarray<string>optionalRole slugs, any of them. Look slugs up with
GET /v1/roles?q=(MCPfind_occupation).- Limits
- 1 to 20 items, items: pattern ^[a-z0-9][a-z0-9-]{0,79}$
- Example
["frontend-engineer"]
familiesarray<string>optionalJob family slugs (any role in the field). List them with
GET /v1/families.- Limits
- 1 to 10 items, items: pattern ^[a-z0-9][a-z0-9-]{0,79}$
- Example
["software-engineering"]
placesarray<integer>optionalWhere the person wants to work from, as GeoNames ids (multi-country regions are negative,
-1is worldwide). Matches onsite/hybrid jobs located in the place plus remote jobs open to people living there. Look ids up withGET /v1/places?q=(MCPresolve_location).- Limits
- 1 to 20 items
- Example
[2618425]
companiesarray<string>optionalCompany slugs. Look them up with
GET /v1/companies?q=.- Limits
- 1 to 50 items, items: pattern ^[a-z0-9][a-z0-9-]{0,79}$
- Example
["stripe"]
workplacearray<string>optional- One of
remotehybridonsite- Limits
- at least 1 item
seniorityarray<string>optional- One of
internentrymidseniorleadprincipaldirectorvpexecutive- Limits
- at least 1 item
employmentarray<string>optional- One of
full_timepart_timecontracttemporaryinternshipapprenticeshipseasonalvolunteer- Limits
- at least 1 item
postingLanguagesarray<string>optionalLanguages the posting is written in, ISO 639-1, any of them. Detected from the description; jobs without one never match. Not the languages a job requires (
JobDetail.languages).- Limits
- 1 to 10 items, items: pattern ^[a-z]{2}$
- Example
["en"]
salaryobject · SalaryRangeoptionalAnnual pay range, both ends inclusive, either end open (null). Jobs match when their own range overlaps it after converting currencies; jobs without pay never match.
3 properties
mininteger | nullrequired- Limits
- at least 0
- Example
60000
maxinteger | nullrequired- Limits
- at least 0
currencystringrequired- One of
USDEURGBPDKKSEKNOKCHFCADAUD
paystringoptionallisted: only jobs that show pay.- One of
listed
postedstringoptionalFirst seen by Trawle within this window. For scheduled agents, prefer
postedSincewith thenextSinceof the previous run.- One of
1d3d7d30d
repostsstringoptionalReposts are jobs seen before under another id, or closed and reopened.
hidekeeps only originals.- One of
hideonly
sortstringoptionalnewest(default) orpay(highest annual pay first; only jobs that show pay).- One of
newestpay
cursorstring | nulloptionalnextCursorfrom the previous page.limitintegeroptionalDefault 25.
- Limits
- 1 to 100
postedSincestring<date-time>optionalOnly jobs first seen at or after this instant. Scheduled agents pass the
nextSinceof their previous run to get only new jobs.- Example
2026-10-31T06:12:00.000Z
200A page of jobs.SearchJobsResult
jobsarray<object> · JobSummaryrequired19 propertiesper item
idstringrequiredStable public id; never changes across scans.
- Example
1234567
titlestringrequiredcompanyobject · CompanyRefrequired3 properties
slugstringrequired- Example
stripe
namestringrequired- Example
Stripe
domainstring | nullrequired- Example
stripe.com
roleobject | null · Refrequired2 properties
slugstringrequirednamestringrequired
familyobject | null · Refrequired2 properties
slugstringrequirednamestringrequired
locationsarray<object> · PlaceRefrequiredWhere the job is located (or, for remote jobs, who may apply), most specific first.
3 propertiesper item
idintegerrequiredGeoNames id (regions are negative).
namestringrequired- Example
Copenhagen
countrystring | nullrequiredISO 3166-1 alpha-2 country code; null for multi-country regions.
- Example
DK
workplacestring | nullrequired- One of
remotehybridonsite
remoteScopestring | nullrequiredFor remote jobs: who may apply, in words ("Anywhere", "United States only").
senioritystring | nullrequired- One of
internentrymidseniorleadprincipaldirectorvpexecutive
employmentTypestring | nullrequired- One of
full_timepart_timecontracttemporaryinternshipapprenticeshipseasonalvolunteer
salaryobject | null · SalaryrequiredPay as the employer listed it (not converted).
4 properties
mininteger | nullrequiredmaxinteger | nullrequiredcurrencystring | nullrequiredISO 4217 code.
- Example
EUR
periodstringrequired- One of
yearmonthweekdayhour
firstSeenAtstring<date-time>requiredFirst seen by Trawle under this id.
- Example
2026-10-31T06:12:00.000Z
lastSeenAtstring<date-time>requiredLast time a daily scan saw it open on the employer's site.
- Example
2026-10-31T06:12:00.000Z
postedAtstring<date-time> | nullrequired"Date posted" from the employer's ATS, when it has one. Often unreliable.
- Example
2026-10-31T06:12:00.000Z
openSincestring<date-time>requiredFirst time any posting of this job (reposts included) was seen; days open count from here.
- Example
2026-10-31T06:12:00.000Z
repostCountintegerrequiredEarlier postings of this job under other ids, plus reopenings. 0 = original.
closedAtstring<date-time> | nullrequiredWhen it disappeared; null while open.
- Example
2026-10-31T06:12:00.000Z
applyUrlstringrequiredThe employer's own posting (their ATS).
urlstringrequiredThis job on Trawle.
totalintegerrequiredMatches, capped at 10,000 (
totalCapped).totalCappedbooleanrequirednextCursorstring | nullrequiredNext page; null on the last.
labelsobjectrequiredNames for the ids and slugs in the query, keyed
filter:value(places:2618425→Copenhagen). Unknown values are absent and matched nothing.dataDatestring<date-time>requiredWhen the data was last refreshed (daily).
- Example
2026-10-31T06:12:00.000Z
nextSincestring<date-time>requiredPass as
postedSinceon the next scheduled run to get only jobs that are new since this one.- Example
2026-10-31T06:12:00.000Z
400Invalid request: see error.issues and error.hint.Error
errorobjectrequired4 properties
codestringrequiredMachine-readable:
invalid_request,not_found,forbidden,rate_limited,internal.- Example
invalid_request
messagestringrequired- Example
places: expected an array of GeoNames ids
hintstringoptionalWhat to do next, e.g. which lookup to call first.
- Example
Resolve place names to ids with GET /v1/places?q=
issuesarray<object>optionalValidation problems, one per invalid field.
2 propertiesper item
pathstringrequiredmessagestringrequired