Workable Jobs Scraper icon

Jobs

Workable Jobs Scraper

Scrape job postings from any Workable-hosted employer board via Workable's own keyless public widget JSON API — titles, locations, departments, remote flags, full descriptions. One scraper, every Workable employer.

Free Apify credit covers a first run. No credit card to try.

What this Actor scrapes

Thousands of companies run their careers page on Workable, and every one of those boards is served by the same public widget JSON API (apply.workable.com/api/v1/widget/accounts/{subdomain}). This Actor talks to it directly: hand it one or more subdomains — the {subdomain} in apply.workable.com/{subdomain} or {subdomain}.workable.com — and it pulls every open posting for each board in one call, normalizing the result into one row schema. One scraper, every Workable employer.

What we handle for you

  • 🔑 Keyless public API — no OAuth, no token, no per-company setup; the same widget endpoint the careers page itself calls.
  • 🏢 Multi-company in one run — pass many subdomains; rows come back identically shaped, tagged with company / company_name.
  • 🎯 Client-side filters — narrow by free-text searchQuery, department, or location after the fetch, at no extra request cost.
  • 📝 Optional full descriptions — flip includeDescription on for the complete HTML posting body, or off for a faster, smaller payload.
  • 🔁 Retries with backoff + fingerprint impersonationcurl-cffi presents a real browser handshake and retries transient 429/5xx so a large multi-employer batch finishes instead of dying midway.
  • 🧊 Clean, typed rows — Pydantic-validated, ISO-8601 timestamps, stable IDs. Export JSON / CSV / Excel straight from the Apify Console.

Use cases

  • Recruiting & sourcing — pull every open req from a target employer's Workable board in one pass.
  • Job-board aggregation — add Workable coverage next to Workday / Greenhouse / Lever / Ashby / SmartRecruiters in one pipeline.
  • SDR / BD hiring-intent signal — track which companies are actively hiring, where, and in which departments.
  • HR-tech data pipelines — wire structured job rows into your CRM, dashboard, or n8n / Make workflow on a schedule.

Input

Paste this into the Apify Console, or send it as the run input over the API. Proxy settings are on by default; you rarely need to touch them.

FieldTypeRequiredWhat it does
companies array yes Workable subdomain, e.g. "remotebase" (the employer identifier in apply.workable.com/{subdomain}/ or {subdomain}.workable.com/), or a full board URL in either form — the subdomain is regex-extracted automatically. A…
searchQuery string no Client-side substring match on job title (and description when Include description is on). Never sent to Workable as a query param — Workable's server-side search facet is confirmed non-functional. Leave empty to skip.
department string no Client-side substring match on job department. Never sent to Workable as a query param. Leave empty to skip.
location string no Client-side substring match on job city/state/country. Never sent to Workable as a query param. Leave empty to skip.
maxResultsPerCompany integer no Cap job postings emitted per companies entry, applied after client-side filtering.
includeDescription boolean no When enabled, populate the full HTML job description for every emitted row. The description is already fetched in the one call made per company either way — this only gates whether it's emitted.
{
  "companies": [
    "remotebase"
  ],
  "maxResultsPerCompany": 25,
  "includeDescription": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}

Output

One row per result, schema-validated before it is written. Export JSON, CSV, Excel or XML from the run, or read it over the API.

job_idtitlecompanycompany_namedepartmentlocation_citylocation_countryis_remoteemployment_typeurlposted_datedescription_html

{
  "job_id": "6E7795E82F",
  "title": "AI Engineer",
  "company": "remotebase",
  "company_name": "Remotebase",
  "department": "Core",
  "location_city": null,
  "location_country": "Pakistan",
  "is_remote": true,
  "employment_type": null,
  "url": "https://apply.workable.com/j/6E7795E82F",
  "posted_date": "2026-04-01",
  "description_html": null,
  "scraped_at": "2026-07-23T15:00:00Z"
}

Pricing

EventPriceWhen
Actor start$0.20Once per run, covers warm-up and proxy session setup.
Result emitted$0.0015Per result written to the dataset.

You pay only for results that land. Cap any run with maxTotalChargeUsd. See pricing & billing for worked examples.

Limitations

  • One row per posting — a job listed at multiple locations[] entries emits only the first location.
  • Only currently-live postings; no historical/removed posting archive.
  • searchQuery / department / location filters run client-side after the fetch — Workable's own server-side facets don't work reliably for this endpoint.

Ready to run it?

Open the listing on Apify, paste the input above, and watch rows land. If it ever breaks, it is our problem before it is yours.

Related Actors

Teams that run this also run