Workable Jobs Scraper
Pricing
$0.90 / 1,000 jobs
Workable Jobs Scraper
Pull every active Workable job — search 170k+ postings across all Workable customers, or grab every job from one Workable company in one run. Returns titles, locations, departments, employment type, full HTML descriptions, and apply URLs.
Pricing
$0.90 / 1,000 jobs
Rating
0.0
(0)
Developer
Nate Schnell
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
What does Workable Jobs Scraper do?
Workable Jobs Scraper pulls every active job from the Workable ATS — either by searching across all Workable customers (170,000+ active postings on Workable's own meta-search at jobs.workable.com) or by pulling every job from a specific Workable-hosted company (via apply.workable.com/{slug}). Paste a search query, one or many company slugs, or both — the actor returns a clean, structured record per posting straight from Workable's public JSON endpoints. No headless browser, no proxy, no rendered HTML to fight with.
Built for talent-intelligence teams, ATS-aggregator job boards, sourcing tools, hiring-velocity dashboards, recruiter prospecting, and anyone who needs Workable job data without writing a paginator or stitching two endpoints by hand.
What data can you extract from Workable?
- Identity —
id(composite, stable across runs),uuid(Workable's internal UUID for search-mode records),shortcode,code(employer-set reference) - Title —
title - Company —
companyName,companySlug(apply.workable.com slug),companyId(Workable UUID),companyWebsite - Taxonomy —
department,function,industry,employmentType,experienceLevel,education - Workplace —
workplace(remote/hybrid/on_site), convenienceisRemoteboolean,language - Location — primary
location(country, countryCode, city, region, fullLocation) plus alocationsarray for multi-location postings - URLs —
url(public listing page),shortlink,applyUrl, optionallinkoutUrl(employer redirect, when present) - Timing —
publishedAt,createdAt,updatedAt - Flags —
isFeatured - Description —
descriptionHtml,requirementsHtml,benefitsHtml(kept separate by default); optional combineddescriptionHtmland plain-textdescriptionTextfor embeddings / LLM ingestion - Social —
socialSharingDescription - Provenance —
scrapedAt,source
35 fields per posting, all named and typed in the dataset schema.
How to use Workable Jobs Scraper
- Sign in to Apify (create a free account if you don't have one — Apify's free tier covers most experiments).
- Open the actor and click Try for free.
- Pick a mode (or combine both):
- Search mode — set
query,location,workplace,employmentType, and/ordayRange. Returns matching jobs across every company on Workable. - Per-company mode — paste apply.workable.com slugs into
companies(e.g.allucent,northramp,same-day-water-heaters). The actor pulls every active job at each slug.
- Search mode — set
- (Optional) Apply filters. Client-side:
titleFilter,titleExcludeFilter,departmentFilter,functionFilter,industryFilter,experienceLevels,countryFilter,remoteOnly,postedAfter,descriptionContains. - (Optional) Toggle
includeDescriptionoff if you only need titles + metadata (per-company mode then uses a leaner payload, ~10× smaller). ToggleparseDescriptionon for a plain-textdescriptionTextfield. TogglecombineDescriptionto stitch description + requirements + benefits into one HTML body. - Click Run. Results stream into the dataset as they're scraped.
- Download as JSON, JSONL, CSV, Excel, XML, or fetch via the Apify dataset API.
How much does it cost?
$1 per 1,000 job postings ($0.001 per posting) plus a small $0.005 actor-start fee. Pay only for postings the actor emits to the dataset — failed company slugs, filtered-out jobs, and out-of-range dates cost nothing. The actor uses public Workable endpoints directly with no proxy, so there are no proxy charges and no per-CPU-second charges; the per-record price covers the whole compute.
A search run for "remote engineer" capped at 200 records → $0.205 ($0.005 start + 200 × $0.001). A multi-company run of 5 Workable companies averaging 25 jobs each → 125 records → $0.13. Enabling includeDescription (default ON) is already baked into the per-record price.
Apify's $5 monthly free tier covers about 5,000 postings of trial use.
Input
The actor takes no required fields — supply either search params (query, location, workplace, employmentType, dayRange) or per-company slugs (companies), or combine them. Client-side filters narrow the output (and the bill, since you pay per emitted record). maxItems, maxItemsPerCompany, and maxItemsPerSearch cap output for cost-bounded test runs.
{"query": "software engineer","workplace": "remote","dayRange": 14,"companies": ["allucent", "northramp"],"titleExcludeFilter": ["senior", "principal"],"countryFilter": ["United States", "United Kingdom"],"postedAfter": "2026-04-01","includeDescription": true,"parseDescription": true,"maxItems": 500}
Output
One record per active Workable posting. Every field is typed in the dataset schema — open the Output tab on the actor page for the full column list, then export to JSON / CSV / Excel / XML. Below is a real per-company record (description truncated):
{"id": "allucent:52D18CB3E4","uuid": null,"shortcode": "52D18CB3E4","code": null,"title": "Associate Director/Director, Pharmacometrician","companyName": "Allucent","companySlug": "allucent","companyId": null,"companyWebsite": null,"department": "Product Development Strategy (PDS)","function": "Research","industry": "Biotechnology","employmentType": "Full-time","experienceLevel": "Director","education": null,"workplace": "remote","isRemote": true,"language": null,"location": {"country": "United States","countryCode": null,"city": null,"region": null,"fullLocation": "United States"},"locations": [{ "country": "United States", "countryCode": "US", "city": null, "region": null, "hidden": false }],"url": "https://apply.workable.com/j/52D18CB3E4","shortlink": "https://apply.workable.com/j/52D18CB3E4","applyUrl": "https://apply.workable.com/j/52D18CB3E4/apply","linkoutUrl": null,"publishedAt": "2026-05-06","createdAt": "2026-05-04","updatedAt": null,"isFeatured": null,"descriptionHtml": "<p><strong>Associate Director/Director, Pharmacometrician</strong></p><p>Step into a role where science meets strategy…</p>","requirementsHtml": null,"benefitsHtml": null,"descriptionText": "Associate Director/Director, Pharmacometrician\n\nStep into a role where science meets strategy…","socialSharingDescription": null,"scrapedAt": "2026-05-22T15:30:00.000Z","source": "https://apply.workable.com/api/v1/widget/accounts/allucent?details=true"}
Search-mode records use the same shape but populate uuid, companyId, requirementsHtml, benefitsHtml, language, isFeatured, socialSharingDescription, and updatedAt (which the per-company widget doesn't expose). The id is wk:<uuid> for search-mode records, <companySlug>:<shortcode> for per-company records — both are stable across runs so you can dedupe on id into your warehouse.
Integrations
Use the actor's results in Make, n8n, Zapier, LangChain, LlamaIndex, your own pipelines via the Apify API, or wire up webhooks to fire whenever a run finishes. Schedule daily / hourly pulls with Apify Scheduler and dedupe into your warehouse on the stable id field.
Related actors
- Greenhouse Jobs Scraper — same shape, same author, for any Greenhouse-hosted careers board.
- Lever Jobs Scraper — for any Lever-hosted careers board.
- Ashby Jobs Scraper — for any Ashby-hosted careers board.
- SmartRecruiters Jobs Scraper — for any SmartRecruiters careers page.
- Indeed Jobs Scraper — when you need open-market job-board coverage on top of direct-from-employer ATS data.
Combine any two to cover both ATSes in one warehouse table — every actor in this family normalizes to a similar record shape.
FAQ
How does Workable Jobs Scraper work?
It calls two public Workable JSON endpoints directly:
- Search mode —
jobs.workable.com/api/v1/jobs?query=…&workplace=…(Workable's own cross-customer meta-search). Paginated vianextPageToken, capped at 20 jobs per page by Workable; the actor paginates automatically. - Per-company mode —
apply.workable.com/api/v1/widget/accounts/{slug}?details=true(the same endpoint Workable's embed widget uses on customers' own career sites). Returns every active job at the company in one response.
No headless browser, no proxy, no scraping fragile HTML. Both endpoints are public, unauthenticated, and respond to standard User-Agent headers.
Can I use Workable Jobs Scraper as an API?
Yes. Start a run by POSTing to the Apify Run Actor endpoint with your input JSON, then read the dataset via GET /v2/datasets/{datasetId}/items. Apify also exposes the actor as a synchronous run with run-sync and as a task if you want to save reusable input presets.
Can I use Workable Jobs Scraper in Python or Node.js?
Yes. With the apify-client package:
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("schnellscrapers/workable-jobs-scraper").call(run_input={"query": "engineer", "workplace": "remote", "maxItems": 200})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["title"], item["companyName"], item["location"]["fullLocation"])
Is it legal to scrape Workable job listings?
Workable's jobs.workable.com is Workable's own public meta job board — they actively encourage indexing and even ship an LLM-friendly /jobs.md documentation endpoint describing the search parameters. apply.workable.com/{slug} is each customer's public hosted careers page. Scraping publicly accessible job postings is generally legal in the US and EU. This actor only fetches public data — no logged-in scraping, no captcha-bypass, no PII beyond what employers chose to publish. Respect Workable's terms, rate-limit your runs, and don't reuse scraped data in ways that violate GDPR, CCPA, or your local employment-data regulations.
How do I find a company's Workable slug?
Open the company's careers page. If the URL is https://apply.workable.com/allucent then allucent is the slug. You can also paste a full apply.workable.com URL into the companies field; the actor extracts the slug for you. Note that not every company you see on Workable's meta-search is hosted on apply.workable.com — Workable also indexes external careers pages — so if a slug returns 0 jobs, the company is likely on a different ATS or routes through their own domain.
Can I search across all Workable customers without picking specific companies?
Yes — that's search mode. Set any combination of query, location, workplace, employmentType, and dayRange, and the actor paginates Workable's meta-search (170k+ active postings) until you hit maxItems or run out of results. Combine with titleExcludeFilter and countryFilter to narrow further.
What's the difference between search mode and per-company mode?
- Search mode is best when you don't know which companies have what you want — search broadly and let Workable's index surface the matches. Returns up to ~170k records cross-customer.
- Per-company mode is best when you have a list of target employers — pulls every active job at each (no 20-per-page cap, no search ranking), and exposes a few extra fields the search index doesn't (
function,industry,experienceLevel,education,code). - You can combine both in a single run; results are deduped by
id.
Why is descriptionHtml null for some records?
You disabled includeDescription. Per-company mode then uses Workable's lighter details=false payload (~10× smaller) which omits the description. Search-mode records always include the description regardless of this setting (Workable's search returns it inline). Re-enable includeDescription to populate it.
Can I filter by department, function, or industry?
Yes — use departmentFilter, functionFilter, industryFilter. All are case-insensitive substring matches. Note that function and industry are only populated on per-company records (Workable's search index doesn't expose them).
What's the 170,000-job ceiling about?
Workable's jobs.workable.com/api/v1/jobs meta-search currently indexes roughly 170k active postings across all Workable customers. That's the practical upper bound for a "scrape everything" search-mode run. Per-company runs aren't subject to this — pull each company directly.
Will Workable rate-limit or block me?
We've seen no rate-limiting or anti-bot challenges in months of operation across hundreds of company slugs and thousands of search pages. Both endpoints respond to plain User-Agent headers without proxy. The actor inserts a small courtesy delay between search pages.
Your feedback
Open an issue on this actor's Issues tab on Apify with bug reports or feature requests — additional output fields, multi-keyword search, salary parsing, or AI enrichment are all on the table.