Greenhouse, Lever, Ashby & Workday jobs API: filter by title, location, remote and posting date before you pay. Also Workable, SmartRecruiters and Recruitee.
One company per line. Accepted forms: a domain such as figma.com; a careers page URL such as https://www.notion.so/careers; a job-board URL on boards.greenhouse.io, job-boards.greenhouse.io, jobs.lever.co, jobs.eu.lever.co, jobs.ashbyhq.com, apply.workable.com, jobs.smartrecruiters.com, .recruitee.com or a Workday career site (.myworkdayjobs.com, .myworkdaysite.com) or a Personio career page (.jobs.personio.de, .jobs.personio.com) or a Teamtailor career site (.teamtailor.com); or an explicit token in the form ats:token, where ats is greenhouse, lever, lever-eu, ashby, workable, smartrecruiters, recruitee, workday, personio or teamtailor (for example greenhouse:stripe or workday:nvidia.wd5/NVIDIAExternalCareerSite). Explicit tokens and board URLs are the fastest and most reliable. Companies whose board can't be found are returned as a row with status not_found and are not charged. Personio boards can only be read when the employer has switched on Personio's public XML job feed; otherwise the row has status feed_disabled (or not_found for a guessed board) and is not charged.
Type:array
Min. items:1
Max. items:5000
Default:
[
"figma.com",
"discord.com",
"https://jobs.lever.co/spotify",
"linear.app",
"ashby:ramp"
]
Include job description text
includeDescription
Optional
Add a plain-text descriptionText field to every job. Email addresses and phone numbers are removed from the text. Off by default because descriptions make the dataset much larger and runs slower.
Type:boolean
Default:false
Max jobs per company
maxJobsPerCompany
Optional
Limit the number of job rows returned for each company. 0 means no limit (all open jobs). Ignored in monitor mode, where every change is reported.
Type:integer
Minimum:0
Default:0
Title keywords (match any)
titleKeywords
Optional
Keep only jobs whose title contains at least one of these words or phrases. Ignores case and accents; whole words: engineer matches "Software Engineer" but not "Engineering Manager", so add engineering too if you want both. A single word of 5+ letters also matches at the end of a compound word and with German -in/-innen endings: entwickler matches "Softwareentwickler" and "Entwicklerin". Examples: engineer, product manager, data scientist. Jobs removed by any filter are never returned or charged.
Type:array
Exclude title keywords
excludeTitleKeywords
Optional
Drop jobs whose title contains any of these words or phrases (same matching as title keywords: ignores case and accents, whole words, compound endings for words of 5+ letters). Examples: intern, manager, senior.
Type:array
Locations (match any)
locations
Optional
Keep only jobs whose location contains one of these places (whole words, ignoring case and accents). Examples: London, United Kingdom, München, Remote. About 50 groups of place names are matched together, e.g. Munich/München, Cologne/Köln, Zurich/Zürich, Vienna/Wien, NYC/New York, UK/United Kingdom/England, USA/US, Germany/Deutschland. Cities aren't matched to countries. Remote also matches jobs the board flags as remote (including local words like Homeoffice). Jobs with no location on the board are dropped when this filter is set.
Type:array
Remote jobs only
remoteOnly
Optional
Keep only jobs with isRemote: true or workplaceType: "remote". Hybrid jobs are not included. isRemote comes from the board's remote flag or, when the board has none, the word "remote" in the job's location or title, or a local remote word in the location (Homeoffice, télétravail, teletrabajo, remoto, thuiswerk and similar).
Type:boolean
Default:false
Departments (match any)
departments
Optional
Keep only jobs whose department or team contains one of these texts (ignores case and accents, partial match: eng matches "Engineering"). Examples: Engineering, Sales, Data. Department names are whatever each employer uses on its board. Jobs with no department or team are dropped when this filter is set.
Type:array
Posted within the last N days
postedWithinDays
Optional
Keep only jobs whose postedAt is within this many days of the run (0 or empty = any date). Counts back from each run, so a scheduled run always looks at the latest days. Example: 1 for the last 24 hours, 7 for the last week. Workday listings show only relative dates ("Posted 3 Days Ago"); those are converted to a date accurate to about a day and get one extra day of leeway.
Type:integer
Minimum:0
Maximum:3650
Keep jobs with no posted date
keepJobsWithoutPostedDate
Optional
Some boards don't publish a posted date for every job. With Posted within the last N days set, those jobs are kept by default and flagged postedAtUnknown: true. Turn this off to drop them instead.
Type:boolean
Default:true
Monitor mode (only new and removed jobs)
monitorMode
Optional
When on, the Actor compares each company's board with the previous run and returns only jobs that are new (changeType: "new") or have been removed (changeType: "removed"). Companies with no changes return one summary row with status no_change. Schedule the Actor daily or weekly with the same input to get a hiring-signal feed. The previous job lists are kept in the named key-value store set below.
Type:boolean
Default:false
Return all jobs on the first monitor run
emitBaselineOnFirstRun
Optional
In monitor mode, the first run for a company has nothing to compare with. When on, all current jobs are returned as new (and charged as jobs). When off, the first run only saves the baseline and returns one baseline_saved row per company.
Type:boolean
Default:true
State key-value store name
stateStoreName
Optional
Name of the key-value store in your account that remembers previously seen jobs (for monitor mode and the firstSeenAt field) and which board each company uses. Use a different name for each separate monitoring list.
Type:string
Default:careers-jobs-api-state
Remember jobs between normal runs
persistState
Optional
In normal (non-monitor) mode, save the jobs seen in this run so firstSeenAt stays accurate across runs. Monitor mode always saves state.
Type:boolean
Default:true
Scan the company website for job-board links
scanCareersPage
Optional
If guessing the board from the domain fails, fetch up to 4 pages of the company website (the careers URL you gave, /careers, /jobs and the homepage) and look for links to a supported job board.
Type:boolean
Default:true
Max parallel requests
maxConcurrency
Optional
Maximum number of HTTP requests in flight at once, across all companies. The default is deliberately polite to the job-board APIs.
Type:integer
Minimum:1
Maximum:10
Default:5
Request timeout (seconds)
requestTimeoutSecs
Optional
Timeout for each request to a job-board API. Failed or timed-out requests are retried up to 3 times with backoff.