How to download resumes from Workable with the API
Workable has no bulk resume download, and its help centre names the API as the way to do it. This guide walks through that route in order: the token, the calls that list a job's candidates and return each resume address, the rate limit, and the point where a script becomes more work than the job is worth.
The short answer
Workable's article How do I export candidate data? describes using the Workable API to build an automated download of candidate details and resumes. It says this may need time and resources, and developer help, on your side. The calls below are from Workable's API reference.
Step by step
- Create a token. Only an Admin can. Go to Settings > Integrations > Apps, and under API Access Tokens click + Generate API token. Name it, pick an expiry from 30 days to 2 years, tick the
r_jobsandr_candidatesscopes, and generate it. The token is not shown again after you close the window. Revoking it stops every script that uses it (Generating and revoking access tokens). - Find the job. Request
/spi/v3/jobson your account address, such asyourcompany.workable.com, with the headerAuthorization: Bearerfollowed by the token. You can filter bystate(draft, published, archived or closed), and each job has ashortcode. Followpaging.nextfor more pages (Jobs). - Optionally find the stage.
/spi/v3/stagesreturns each stage'sslug, name and kind (Stages). - List the candidates. Request
/spi/v3/candidateswithshortcode, optionallystage, andlimitup to 100, and followpaging.next. Each entry has the candidate's id, name, stage, email, phone and disqualified flag, plusresume_metadatawith the file name and type, but no download address (Candidates). - Fetch each candidate. Request
/spi/v3/candidates/followed by the id. The response hasresume_url, the address of the resume, andcover_letter, the text the candidate entered (Candidate). Skip candidates whoseresume_urlis empty. - Download and name. Save each file under a name you can sort, such as stage, last name and first name, using the file type from
resume_metadata. Keep a CSV of what was saved and what failed.
The rate limit
Workable's rate limit page allows an account token 10 requests per 10 seconds. Going over returns HTTP 429, and the headers X-Rate-Limit-Remaining and X-Rate-Limit-Reset tell you where you stand. Step 5 is one request per candidate, so a script has to wait between calls. The reference does not say how long a resume_url stays valid or whether downloading it needs the token, so test with one candidate, and download right after requesting the address.
Where a script stops being practical
- Someone has to write it, keep the token safe and fix it when it breaks.
- It has to pause on HTTP 429, retry failures, ask again for an address that expired and carry on after an interruption without starting over.
- Naming, clashing names and the index are yours to build.
- It is a lot of effort for one closed job, and the next job needs another run.
Option: Bulk Resume Downloader for Workable
Bulk Resume Downloader for Workable is a browser extension for Chrome, Edge and other Chromium-based browsers. It uses a Workable API token that your account admin creates, as in step 1. It lists a job's candidates, shows the file name each resume will get, and saves them all into one ZIP with an index.csv.
- Paced for Workable. It keeps to the limit of 10 requests in 10 seconds, about a minute for every 55 candidates, waits when Workable says to, retries server errors and asks again for a resume link that expired. You can pause, resume or stop, and what was saved is kept.
- Names and an index. You choose the job and its stages and see every name before anything downloads.
index.csvhas one row per candidate, including whether the file was saved and why not. - Limits. It downloads resumes and, if you ask, cover letters. Other files attached to a candidate are not downloaded.
- Nothing leaves your browser. Candidate data goes from your Workable account to the ZIP on your computer. Atesen Software never receives it.
Disclosure. Atesen Software, which publishes this guide, makes this extension. The API steps above work without it. For the no-code route see how to download all resumes from Workable at once.
Price. The free plan saves the first 10 resumes of each export, with no account and no key. Unlimited is $19 a month or $190 a year, sold on the extension's own site with checkout by Paddle. The extension is listed in the Chrome Web Store, is new there and has no review history yet.
About Bulk Resume Downloader for Workable Plans on its own site
Which route fits
- Regular exports into your own systems, with a developer: the API.
- Every resume of one job, named and indexed, without code: the extension.
- Leaving Workable: ask Workable for the full account export.
Atesen Software is independent. Workable is a trademark of its owner, and this page is not affiliated with, endorsed or supported by Workable. Workable's help articles and API reference were checked on 22 October 2026; menus and limits can change.
Questions about this guide: support@atesensoftware.com.