Founding offer: 40% off the first payment on selected apps with code FOUNDING40, until 30 November 2026.40% off selected apps’ first payment: FOUNDING40 until 30 Nov. See founding prices

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

  1. 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_jobs and r_candidates scopes, 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).
  2. Find the job. Request /spi/v3/jobs on your account address, such as yourcompany.workable.com, with the header Authorization: Bearer followed by the token. You can filter by state (draft, published, archived or closed), and each job has a shortcode. Follow paging.next for more pages (Jobs).
  3. Optionally find the stage. /spi/v3/stages returns each stage's slug, name and kind (Stages).
  4. List the candidates. Request /spi/v3/candidates with shortcode, optionally stage, and limit up to 100, and follow paging.next. Each entry has the candidate's id, name, stage, email, phone and disqualified flag, plus resume_metadata with the file name and type, but no download address (Candidates).
  5. Fetch each candidate. Request /spi/v3/candidates/ followed by the id. The response has resume_url, the address of the resume, and cover_letter, the text the candidate entered (Candidate). Skip candidates whose resume_url is empty.
  6. 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.csv has 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.