Workable Jobs Scraper
Pricing
from $1.50 / 1,000 results
Workable Jobs Scraper
Scrape every open job posting from any Workable-hosted employer board via Workable's own public widget JSON API, no login or browser required. Filter by keyword, department, or location entirely client-side, and add full HTML descriptions on request.
Pricing
from $1.50 / 1,000 results
Rating
0.0
(0)
Developer
DevilScrapes
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
🎯 What this 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.
🔥 Features
- 🔑 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, orlocationafter the fetch, at no extra request cost. - 📝 Optional full descriptions — flip
includeDescriptionon for the complete HTML posting body, or off for a faster, smaller payload. - 🔁 Retries with backoff + fingerprint impersonation —
curl-cffipresents a real browser handshake and retries transient429/5xxso 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.
⚙️ How to use it
- Click Try for free at the top of the Store listing.
- Add one or more Companies — a Workable subdomain (e.g.
remotebase) or a full board URL in either recognized form. - Optionally set Search query, Department, Location, Max results per company, and toggle Include description.
- Click Start. Rows stream into the dataset as each company's board is fetched.
- Export from Storage → Dataset as JSON, CSV, or Excel — or pull via the Apify API.
📥 Input
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
companies | array | ✅ | — | Workable subdomains or full board URLs (e.g. remotebase, https://apply.workable.com/remotebase/, https://remotebase.workable.com/). |
searchQuery | string | no | null | Client-side substring filter on job title (+ description). |
department | string | no | null | Client-side substring filter on department. |
location | string | no | null | Client-side substring filter on city/state/country. |
maxResultsPerCompany | integer | no | 100 | Cap on rows emitted per company, applied after filtering. |
includeDescription | boolean | no | false | Populate the full HTML job description for every emitted row. |
proxyConfiguration | object | no | {"useApifyProxy": true} | Apify Proxy configuration. |
Example input
{"companies": ["remotebase"],"maxResultsPerCompany": 25,"includeDescription": true,"proxyConfiguration": { "useApifyProxy": true }}
📤 Output
One dataset item per job posting.
| Field | Type | Notes |
|---|---|---|
job_id | string | Stable Workable job shortcode. |
title | string | Job title. |
company | string | Normalized subdomain you supplied. |
company_name | string | null | Employer display name. |
department | string | null | Job department. |
location_city | string | null | Posting city. |
location_country | string | null | Posting country. |
is_remote | boolean | Whether the posting is remote-eligible. |
employment_type | string | null | Employment type, when Workable reports one. |
url | string | Canonical posting URL. |
posted_date | string | Date the posting went live (YYYY-MM-DD). |
description_html | string | null | Full HTML description when includeDescription is on. |
scraped_at | string | ISO-8601 timestamp of row construction. |
Example output
{"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
Pay-per-event (PPE) — you're only charged for what actually runs and lands.
| Event | Price | Trigger |
|---|---|---|
| Actor start | $0.005 | Once per run |
| Result | $0.0015 | Per job posting written to the dataset |
$1.50 / 1 000 results. No data → no charge (only the small actor-start warm-up fee).
🚧 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/locationfilters run client-side after the fetch — Workable's own server-side facets don't work reliably for this endpoint.
❓ FAQ
Do I need a Workable API key? No — this Actor uses Workable's own public, unauthenticated widget endpoint.
What if a subdomain doesn't exist? It's logged as a warning and treated as zero jobs; the run still completes and other companies keep processing.
Can I filter server-side to save money? No — Workable's facet params don't reliably filter results, so all filtering happens client-side after the one fetch per company. You're still only charged per emitted row.
🙌 Your feedback
Found a field that's missing, a board that behaves differently, or have a feature request? Reach out via DevilScrapes on Apify — we ship fixes fast.
Changelog
See CHANGELOG.md.