Workable Jobs Scraper & Careers Board API - ATS Job Listings avatar

Workable Jobs Scraper & Careers Board API - ATS Job Listings

Pricing

from $6.15 / 1,000 results

Go to Apify Store
Workable Jobs Scraper & Careers Board API - ATS Job Listings

Workable Jobs Scraper & Careers Board API - ATS Job Listings

Workable jobs scraper and careers board API. Scrape ATS job listings from any Workable board by slug or URL: title, company, location, salary, full description, apply links and application questions. Filter by keyword, location, department and more. Export recruiting data to JSON, CSV, Excel.

Pricing

from $6.15 / 1,000 results

Rating

5.0

(1)

Developer

Scrapers Lat

Scrapers Lat

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

0

Monthly active users

8 days ago

Last modified

Share

Workable Jobs & Careers Board Scraper

Workable Jobs Scraper & Careers Board API - ATS Job Listings

The most complete Workable jobs scraper and Workable jobs API on Apify. Turn any Workable careers board into clean, structured ATS job listings and recruiting data: point it at a company account slug or board URL and export every open role with full descriptions, salary, apply links, and the employer's application questions to JSON, CSV, or Excel.

Here is one real result, with every field the actor returns (the long companyDescription, description, and requirements values are abbreviated here for readability; the actor returns them in full):

{
"title": "Production Associate - Dundee, MI - $15-18hr",
"companyName": "Quick Hire Staffing",
"companyAccount": "quickhirestaffing",
"department": null,
"location": "Dundee, Michigan, United States",
"city": "Dundee",
"region": "Michigan",
"country": "United States",
"countryCode": "US",
"remote": false,
"workplace": "on_site",
"employmentType": "Contract",
"shortcode": "F36F5AA190",
"id": 6030590,
"url": "https://apply.workable.com/quickhirestaffing/j/F36F5AA190/",
"applyUrl": "https://apply.workable.com/quickhirestaffing/j/F36F5AA190/",
"postedAt": "2026-08-14T00:00:00.000Z",
"locations": [
{"city": "Dundee", "region": "Michigan", "country": "United States", "countryCode": "US", "hidden": false}
],
"locationsText": "Dundee, Michigan, United States",
"isMultiLocation": false,
"experienceLevel": "Entry level",
"educationLevel": "High School or equivalent",
"jobFunction": null,
"industry": "Automotive",
"code": null,
"language": "en",
"state": "published",
"isInternal": false,
"approvalStatus": "approved",
"accountUid": "eb11f8d3-57d7-486c-8d3a-ca652791d1ae",
"createdAt": "2026-08-14",
"shortlink": "https://apply.workable.com/j/F36F5AA190",
"directApplyUrl": "https://apply.workable.com/j/F36F5AA190/apply",
"companyDescription": "Welcome to Quick Hire, your go-to recruiting firm specializing in short-term staffing ...",
"applicationQuestions": [
{"id": "QA_12282257", "question": "How far is Dundee, MI, from you?", "type": "paragraph", "required": true, "maxLength": null, "choices": null, "section": "Details"}
],
"applicationQuestionsCount": 1,
"salaryMin": null,
"salaryMax": null,
"salaryCurrency": null,
"salaryType": null,
"description": "Quick Hire Staffing is currently seeking a dedicated and reliable Production Associate ...",
"requirements": "Responsibilities: Complete assembly tasks in accordance with standardized work processes ...",
"benefits": "Benefits explained upon permanent hire status",
"observedAt": "2026-08-26T06:30:54.500Z",
"error": null
}

This Workable careers page scraper reads any Workable careers board (the public Workable jobs API behind apply.workable.com) and returns every field the board and job pages expose, from title, company, and multi-location detail to employment type, workplace, experience and education level, industry, salary range, the full description, requirements, and benefits text, and the employer's application (screening) questions, plus 12 input filters to target exactly the roles you need. Use it as a Workable jobs API, an ATS job listings feed, a careers page scraper, a job board aggregator source, and a stream of recruiting data, hiring signals, and job-market intelligence.

📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples

Apify Coverage Output Billing

Table of contents

What it does

This is a Workable jobs scraper, a Workable careers board API, and an ATS job listings exporter in one. Point it at one or more Workable boards by account slug or full board URL, apply the filters you pass, and it writes one normalized record per job to the run's dataset, ready to export as JSON, CSV, or Excel. Each record carries the job title, company, department, one or more locations (with a parsed city, region, and country and a multi-location flag), remote and workplace flags, employment type, experience and education level, industry, salary range when published, the apply URLs, and the posting state.

With details enabled (the default), each job is enriched from its job page with the full description, requirements, and benefits text, plus the company description. Enable application questions and each job also returns the employer's custom screening questions with their text, type, required flag, and answer choices. Some filters (search query, employment type, remote) are applied server-side by Workable; the rest (location, department, job function, workplace, industry, experience level, posted-after) are applied by the actor after fetching. Runs are fast: the actor reads the JSON board API and fetches job pages in parallel per board.

How we compare

There are several Workable and multi-ATS scrapers on Apify. Here is an honest comparison so you can pick the right one.

ActorFull descriptionSalaryApplication questionsFilters (location, department, function, industry, experience, posted-after)Per-run capHeadline price
scrapers_lat/workable-scraper (this actor)YesYes, when publishedYes12 filtersNo hard capPay per result
hoholabs/workable-scraperHTML sectionsNoNokeyword, location, workplace, typePaged$1.00 / 1,000
deadlyaccurate/workable-jobs-scraperNot per job (widget API has none inline)NoNoregex location/department/keywordNone stated$2.00 / 1,000
ninhothedev/workable-jobs-scraperNoNoNonone (board mode only)2,000$1.00 / 1,000
hirebase/workable-jobsYes (+ raw HTML)YesNorichest filter set5,000 / run$3.00 / 1,000
novus/workable-jobs-scraperYesNoNoquery, location, remote onlyNone stated$10 / month rental
memo23/career-site-ats-jobs-api (multi-ATS)YesNoGreenhouse only, not Workabledeep, multi-ATSmaxItems$2.50 / 1,000

Why switch to us:

  • We return the employer's application (screening) questions for Workable jobs. None of the direct Workable actors above do, and the leading multi-ATS actor only extracts questions for Greenhouse, not Workable.
  • We combine full description, requirements, benefits, salary, and 12 filters in one Workable actor. The cheaper direct competitors drop the description, the salary, or the filters (or all three).
  • No hard per-run cap. hirebase stops at 5,000 jobs per run; we paginate the full board.
  • Clean, flat, documented fields with parsed city, region, country, multi-location detail, and honest nulls (we never invent a salary).

Where competitors win, stated plainly:

  • On headline price, hoholabs and ninhothedev are cheaper at $1.00 per 1,000 results. We are the completeness-first option, not the cheapest.
  • If you need many ATS at once (Greenhouse, Lever, Workday, Ashby, and more) plus email enrichment and change tracking, memo23/career-site-ats-jobs-api is broader and more adopted. We are Workable-specialized and go deeper on Workable-only fields such as application questions.

Use cases

  • Job boards and aggregators: ingest fresh Workable job listings with clean fields and apply links to power a job search site, job board aggregator, or feed.
  • Recruiting and sourcing: monitor competitor and target-company careers boards, pull full descriptions and screening questions, and track what roles are open across the Workable ATS.
  • Labor-market and salary research: collect roles by location, department, industry, and experience level for hiring-trend, compensation, and job-market analysis.
  • Hiring signals and talent intelligence: watch which teams a company is scaling, where, and how fast by tracking new Workable postings over time as a hiring-intent signal.
  • Sales leads to hiring companies: find companies actively hiring for a role (for example recruiters, HR tools, or staffing services) and reach out with the direct apply URL and company profile as context.

Quickstart

Open the actor, paste this into the input, and press Run. It returns 10 jobs from one Workable careers board with full details.

{
"accounts": ["quickhirestaffing"],
"maxJobs": 10,
"withDetails": true
}

Provide accounts (the slug after apply.workable.com/) or full startUrls, or both. Every filter is optional.

Input reference

FieldTypeRequiredDefaultDescription
accountsstring[]no["quickhirestaffing"]Workable account slugs (the part after apply.workable.com/).
startUrlsstring[]no(empty)Full Workable careers board URLs, for example https://apply.workable.com/quickhirestaffing/.
searchQuerystringno(empty)Keyword matched server-side by Workable against the job title, department, or location.
employmentTypeenumno(all)Keep only roles of this type (server-side): full, part, contract, temporary, internship.
remoteOnlybooleannofalseOnly roles flagged as remote by the company (server-side).
locationstringno(empty)Keep only jobs whose city, region, or country (including secondary locations) contains this value.
departmentstringno(empty)Keep only jobs whose department contains this value (case-insensitive).
jobFunctionstringno(empty)Keep only jobs whose job function contains this value (case-insensitive).
workplaceenumno(all)Keep only jobs with this arrangement: remote, hybrid, on_site. Applied after fetching.
industrystringno(empty)Keep only jobs whose industry contains this value (case-insensitive).
experienceLevelstringno(empty)Keep only jobs whose experience level contains this value (case-insensitive).
postedAfterstringno(empty)Keep only jobs published on or after this date, for example 2026-01-01.
withDetailsbooleannotrueEnrich each job with the full description, requirements, and benefits text from its job page.
withQuestionsbooleannofalseEnrich each job with the employer's application (screening) questions. Paid plans only; one extra request per job.
includeHtmlbooleannofalseWith details on, also include the original HTML of description, requirements, and benefits.
maxJobsintegerno10Maximum jobs to collect.

Filters combine with logical AND.

Output reference

One dataset item per job. Types: string, integer, number, boolean, object[], or null when the source value is absent.

FieldTypeDescription
titlestringJob title.
companyNamestringHiring company name.
companyAccountstringWorkable account slug.
departmentstring[]Department(s) when set.
locationstringPrimary location string.
citystringParsed city of the primary location.
regionstringParsed region/state of the primary location.
countrystringCountry of the primary location.
countryCodestringTwo-letter country code.
remotebooleanWhether the role is remote.
workplacestringWorkplace arrangement: remote, hybrid, on_site.
employmentTypestringEmployment type, for example Full-time, Contract.
shortcodestringWorkable job shortcode (unique per job).
idintegerWorkable numeric job id.
urlstringJob page URL.
applyUrlstringApply URL for the job.
postedAtstringPublish timestamp (ISO 8601).
locationsobject[]All locations (city, region, country, countryCode, hidden).
locationsTextstringAll locations as one string.
isMultiLocationbooleanWhether the job spans multiple locations.
experienceLevelstringExperience level when set.
educationLevelstringEducation level when set.
jobFunctionstringJob function when set.
industrystringIndustry when set.
codestringInternal requisition code when set.
languagestringPosting language.
statestringPosting state, for example published.
isInternalbooleanWhether the role is internal.
approvalStatusstringApproval status.
accountUidstringWorkable account UID.
createdAtstringCreation date (YYYY-MM-DD).
shortlinkstringShort apply link.
directApplyUrlstringDirect apply URL.
companyDescriptionstringCompany "about" text (with details on).
applicationQuestionsobject[]Employer screening questions: id, question, type, required, maxLength, choices, section (with questions on).
applicationQuestionsCountintegerNumber of custom application questions on the job (with questions on).
salaryMinnumberMinimum salary when published.
salaryMaxnumberMaximum salary when published.
salaryCurrencystringSalary currency when published.
salaryTypestringSalary period when published.
descriptionstringFull job description text (with details on).
requirementsstringFull requirements text (with details on).
benefitsstringFull benefits text (with details on).
observedAtstringISO 8601 timestamp of when the record was collected.
errorstringnull on success. On a failed run, a single item with a populated error field is written instead.

Detail fields (companyDescription, description, requirements, benefits) are populated only when withDetails is enabled. applicationQuestions and applicationQuestionsCount are populated only when withQuestions is enabled (paid plans). With includeHtml, the HTML versions of the text fields are also included.

Example output record

Real record from a live run (input {"accounts":["quickhirestaffing"],"withQuestions":true}), showing an application question:

{
"title": "Production Supervisor $20-24 (Canton, MS)",
"companyName": "Quick Hire Staffing",
"companyAccount": "quickhirestaffing",
"location": "Canton, Mississippi, United States",
"city": "Canton",
"region": "Mississippi",
"country": "United States",
"countryCode": "US",
"remote": false,
"workplace": "on_site",
"employmentType": "Contract",
"shortcode": "6C5E962163",
"industry": "Automotive",
"experienceLevel": "Mid-Senior level",
"applicationQuestions": [
{"id": "QA_12280847", "question": "What is your suggested salary?", "type": "text", "required": true, "maxLength": 127, "choices": null, "section": "Details"},
{"id": "QA_12280848", "question": "Do you understand that you will not be considered for this position if you do not complete a video interview?", "type": "boolean", "required": true, "maxLength": null, "choices": null, "section": "Details"}
],
"applicationQuestionsCount": 2,
"salaryMin": null,
"observedAt": "2026-08-26T06:30:54.500Z",
"error": null
}

Run via API and CLI

Start a run and read the dataset. Replace <TOKEN> with your Apify API token.

Run synchronously and get dataset items in one call:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~workable-scraper/run-sync-get-dataset-items?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"accounts":["quickhirestaffing"],"employmentType":"full","remoteOnly":true,"maxJobs":50}'

Start a run asynchronously:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~workable-scraper/runs?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"startUrls":["https://apply.workable.com/quickhirestaffing/"],"department":"Engineering","withQuestions":true,"maxJobs":100}'

Apify CLI:

apify call scrapers_lat/workable-scraper \
--input '{"accounts":["quickhirestaffing"],"searchQuery":"inspector"}'

Fetch results

Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:

# JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"
# CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"
# Paginate large datasets
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"

<DATASET_ID> is returned as defaultDatasetId in the run object. clean=true drops empty and internal fields.

Billing and limits

  • Pay per result. Each job record bills on the result event. See the pricing tab for the current per-result price.
  • Job details billed separately. With withDetails on, fetching a job page for its full description, requirements, and benefits bills the details event, charged per job only when a detail page is actually fetched.
  • Application questions are included. With withQuestions on (paid plans), the extra screening-questions fetch is not billed as a separate event.
  • No charge on failure. If a run errors, the actor writes a single item with a populated error field and does not charge for it. Empty runs cost nothing.
  • Spend cap respected. Set maxTotalChargeUsd on the run; once reached, the actor stops emitting and charging further billable results.
  • Free Apify plans are capped at 10 records per run, and application questions are disabled on free plans. Upgrade for higher maxJobs and questions.

FAQ and troubleshooting

Is this a Workable jobs API? Yes, effectively. It reads Workable's public careers-board data and returns clean, normalized JSON, so you can use it as a Workable jobs API and careers board API without keys or setup. Call it over the Apify API or CLI (see above) and get one structured record per job.

How do I scrape all jobs from a company on Workable? Pass the company's account slug in accounts (or its board URL in startUrls) and set maxJobs high enough (or leave it to collect the full board). The actor paginates the entire Workable careers board and returns every open role with full details.

Can I export Workable job listings to CSV or Excel? Yes. Every run writes to a dataset you can download as JSON, CSV, or Excel (see Fetch results). This makes it a fast way to export ATS job listings and recruiting data for analysis.

What is a Workable account slug? The part of a careers board URL after apply.workable.com/. For https://apply.workable.com/quickhirestaffing/, the slug is quickhirestaffing. Pass it in accounts, or use the full URL in startUrls.

Can I scrape many companies in one run? Yes. Pass multiple slugs in accounts or multiple board URLs in startUrls; the actor scrapes each board and tags every job with its company.

Do you return application (screening) questions? Yes. Enable withQuestions (paid plans). Each job returns applicationQuestions with the question text, type (text, boolean, dropdown, and so on), whether it is required, and any answer choices. Jobs without custom questions return an empty list.

Which filters run server-side and which after fetching? searchQuery, employmentType, and remoteOnly are applied by Workable server-side. location, department, jobFunction, workplace, industry, experienceLevel, and postedAfter are applied by the actor after fetching each job.

Why are salary fields null? Workable returns salary only when the company publishes it. Missing values are returned as null, never invented.

Why are description and requirements empty? They come from the job page. Enable withDetails (on by default). With it off, only the board-listing fields are returned.

A run returned 0 records. Why? The account had no matching jobs, or the filters excluded everything. Verify the slug or URL and loosen filters. Zero-result runs are not charged.

Is this an official Workable tool? No. This actor is independent and is not affiliated with Workable. It reads only publicly visible careers-board data. Use it in accordance with Workable's terms and applicable law.

More scrapers at scrapers.lat

Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.


Independent tool, not affiliated with Workable. Accesses only publicly visible Workable careers-board data. Use in accordance with Workable's terms of service.