Workable job board API: the public endpoint, its fields and its rate limit
Workable has two job APIs. The full one, under {subdomain}.workable.com/spi/v3, needs the account's own access token. The one a careers page reads is public: GET https://www.workable.com/api/accounts/{account}?details=true returns every published job, full text included, with no token. This page covers the public endpoint: what comes back, the limits we measured, and what it leaves you to build.
The request
curl -L "https://www.workable.com/api/accounts/careers?details=true"
careers is the account behind Workable's own careers page. Workable documents the endpoint for companies that build their own careers page, in the help centre article Using the Workable API to create a careers page (read 6 October 2026): details=true adds each job's description, and two more public endpoints, /locations and /departments under the same address, list the places and departments of the published jobs. The address answers HTTP 302, a redirect to https://apply.workable.com/api/v1/widget/accounts/{account}?details=true, so let your client follow it, as -L does above.
The account name is the first part of the path on the company's careers page, apply.workable.com/{account}/. Checked against the live endpoint on 25 September 2026:
- An unknown account answers HTTP 404 with the plain-text body
Not Found, not JSON. - Short links name no account. The
urlthe endpoint gives each job isapply.workable.com/j/{shortcode}, which cannot tell you whose board it came from. The link on the careers page itself,apply.workable.com/{account}/j/{shortcode}, does. - The rate limit. After about eight requests in forty seconds from one address,
apply.workable.comanswered HTTP 429 with Cloudflare's one-line pageerror code: 1015in place of JSON. The help article gives no limit for these endpoints.
What a job entry holds
The response is {"name", "description", "jobs": [...]}: the company's name, its own blurb, and the jobs. Each job entry carries the same 20 keys, in this order: title, shortcode, code, employment_type, telecommuting, department, url, shortlink, application_url, published_on, created_at, country, city, state, education, experience, function, industry, locations and description. That held on 79 entries across three boards on 25 September and on Workable's own board on 6 October. Four of them need care:
- One job, several entries. A job open in three cities appears three times, with the same
shortcode, title and text and one place each: one board we read had 70 entries for 27 jobs. Group byshortcodebefore you count. - Hidden places. Each item in
locationshascountry,countryCode,city,regionandhidden, the flag Workable's API reference gives a place the company hides from its careers page. The entry's owncountry,cityandstaterepeat its place even when that place is hidden, so filter onlocations. - Remote, and nothing else.
telecommutingis true on remote jobs. False means only "not remote": a job that its own page called hybrid read false. - No pay field. The public endpoint has no salary key. Where a company states pay, it is in the
descriptiontext. The token API's job record, as the same help article shows it, does carry asalaryobject.
published_on is a date without a time, such as 2026-10-05, and created_at is when the job was created inside Workable, which can come before it was published.
Measured on Workable's own careers page
Workable's own board listed one job on Tuesday 6 October 2026, read in one request in 2 seconds (run 7eR8Au0rhjMhVY0bR):
- a full-time marketing role in London, in the Revenue department, published on 5 October 2026;
telecommutingfalse, so the endpoint says nothing about whether it is on-site or hybrid;- pay stated only in its text, as "A salary of £65,000–£85,000", with no period given, so the period stays empty rather than guessed.
One job shows the shape and nothing about spread. The counts in the section above come from the three larger boards read on 25 September.
Where it stops
The endpoint answers "what is this company advertising now", one company per request. Watching companies over time leaves three jobs to you:
- Pacing. At about eight requests in forty seconds, 500 companies take at least 40 minutes to read once, and a request over the limit gets a Cloudflare page, not data.
- Grouping and filtering. Entries become jobs by
shortcode, and hidden places have to be dropped before anyone filters by city. - Change detection. Nothing in an entry says it was edited, so a changed job is found only by comparing it with the last read.
Workable Jobs Scraper handles all three: by default it reads one board at a time, at most ten a minute, and on a 429 it waits as long as Workable asks, or 30 seconds, then asks again from the same address, never from another one. It returns one row per job with only the places the careers page shows, and in incremental mode it returns, and charges for, only jobs that are new, changed, back or gone. Its page has the price and every field. For Workable beside Greenhouse, Lever, Ashby and eleven more systems in one table, use the Career Site Jobs Scraper.
The same reference for other systems
- Ashby job board API: endpoint, fields and pay data, measured
- Breezy HR job board API: the public JSON feed, the keyed API and where the text lives
- Greenhouse job board API: endpoints, fields and limits, measured
- JazzHR job board API: the keyed API, the public career page and what each holds
- Lever job board API: the Postings API on its two hosts, measured
- Recruitee job board API: the offers endpoint, its fields and the 2027 token deadline
- Rippling job board API: the public list, the job record and pay by tier
- Workday job board API: the careers-page JSON, its paging and its 2,000 cap
Published 2026-10-06.