Workable Jobs Scraper — Full Job Posts, Any Board avatar

Workable Jobs Scraper — Full Job Posts, Any Board

Pricing

from $4.00 / 1,000 jobs

Go to Apify Store
Workable Jobs Scraper — Full Job Posts, Any Board

Workable Jobs Scraper — Full Job Posts, Any Board

Scrape any Workable job board, full posting text included. Paste a board slug, board URL or company domain and get every open role with its complete description as HTML and text, plus parsed salary, seniority, remote flag and apply URL. Pay per job; boards we cannot reach are free.

Pricing

from $4.00 / 1,000 jobs

Rating

0.0

(0)

Developer

Blackcube

Blackcube

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Career Site & ATS Jobs Suite  •  12 Actors, one codebase, one job posting billed once
Career Page Job Postings Scraper & API
Any Company, 14 ATS
SmartRecruiters Jobs Scraper & API
Any SmartRecruiters Board
Workable Jobs Scraper & API
Any Workable Board
Recruitee Jobs Scraper & API
Any Recruitee Board
Personio Jobs Scraper & API
Any Personio Board
BambooHR Jobs Scraper & API
Any BambooHR Board
Rippling Jobs Scraper & API
Any Rippling Board
Breezy Jobs Scraper & API
Any Breezy Board
Teamtailor Jobs Scraper & API
Any Teamtailor Board
Pinpoint Jobs Scraper & API
Any Pinpoint Board
SmartRecruiters Jobs Scraper
Full Job Posts, Any Board
Workable Jobs Scraper
➤ You are here

More from this account: YouTube Transcript Suite · Website Contact & Email Suite · Google News Suite · Keyword Research Suite · Shopify Store Intelligence Suite · eBay Data Suite · Amazon Reviews Suite · Reddit · Meta Ad Library · Vinted · Trustpilot Review Intelligence Suite · App Store & Google Play Reviews Suite · Business Reviews Suite · Amazon Product Data Suite

Every open role from any Workable job board, in one clean schema — with the full posting text.

Paste a Workable board slug, a board URL, or just the company's domain — you get every open posting on that board, read live at the moment you run it, each one carrying its complete description as clean HTML and as plain text.

You pay per job returned. A board we cannot reach is free, and so is a board with no open roles — there is no start fee on any plan. Every company that produces no jobs still comes back as a row telling you why. On a re-run with "only new or changed", a board that was read but had nothing new is billed once as a board checked — the price of a single posting, not of the whole board.

Unofficial. Not affiliated with, endorsed by, or connected to Workable or any employer whose board it reads. It reads only the vacancies employers publish for the public on their own career pages.


Why this one for Workable

Live, not a snapshot. This is not a pre-crawled database with an indexing delay. Every row carries a scrapedAt timestamp and was open on that board at that moment. If a role closed an hour ago, it is not in your results.

Workable's strength is used properly. One of the few boards that names the employer on every posting, with a genuine remote flag plus structured city, state and country.

And its limits are published, not hidden. Salary is stated in prose rather than a field, so roughly half of postings yield a parsed range.

You are never billed someone else's jobs. Company names collide across boards, and a plausible-looking match can belong to an unrelated account. Where the board cannot be confirmed as the company you asked for, you get a free row saying so — not a stranger's postings on your invoice.

Finding the board

It is the account name in the board URL: apply.workable.com/<account>.

You can also pass a bare company domain and let the Actor find the board for you.

What Workable actually gives you

Measured on a real run, not claimed. These are field fill rates:

DepartmentSeniorityLocationRemoteEmployment typeSalaryPosted date
100%83%100%100%87%48%100%

Where a field is unavailable you get an explicit null — never a guess, and never a missing key. Seniority is derived rather than reported: almost no ATS publishes it at all, so it is normalized here to 11 comparable levels.

Input

FieldDefaultWhat it does
companiesworkable:tetrascienceWorkable board slugs, board URLs, or company domains.
onlyNewJobsfalseReturn only postings that are new or materially changed since your last run.
titleKeywords / excludeTitleKeywordsFilter on the job title.
locationKeywords, remoteOnlyFilter on location; remote excludes hybrid and unknown.
seniority, employmentType, departmentsFilter on the normalized fields.
hasSalary, postedWithinDaysOnly postings with a parsed range / published recently.
maxJobs, maxJobsPerCompanyCaps, honoured exactly.
includeDescriptiontrueOn by default here. Turn it off for a faster run.

Filters are applied before billing, so you pay for the rows you keep.

Repeat runs only charge for what changed

Turn on Only new or changed jobs and a scheduled run returns — and bills for — only postings that are new, or whose title, department, location, salary, employment type or workplace type moved since last time. Description edits deliberately do not count, so a re-worded posting is never re-charged.

Full descriptions, on by default

Every role arrives with descriptionHtml and descriptionText populated — the complete posting body, not a truncated preview. That is what makes this the right listing if you are feeding a model, matching on requirements, or reading the text itself rather than filtering structured fields.

It costs run time and nothing else: billing is per job either way, so turning it on never changes your invoice. On one measured run of this Actor's default board, 17 open roles came back with full descriptions in 3 seconds — boards change size constantly, so treat that as a sense of scale rather than a promise. If you only want the structured fields, switch includeDescription off.

There is a sibling listing, Workable Jobs Scraper & API, which is the same engine with descriptions off by default — use that one if you want the lean feed.

Need more than Workable?

This is one platform's listing of a 14-ATS engine. If you track companies across several systems, the multi-ATS version takes a mixed list and detects each one for you — same schema, same billing, same code.


Reads only publicly published job listings — the vacancies employers deliberately publish for candidates to find. It does not log in, bypass authentication, solve captchas, or touch applicant data.

Job postings are company information rather than personal data. You are responsible for how you use the output, including any outreach you base on it.


Unofficial project. Uses only publicly available data. Not affiliated with Workable or any employer.

Use it from n8n, MCP, the API or a schedule

Built to be called by a workflow, not only from the Store form. The Actor is vonsensey/workable-jobs-scraper; every snippet below sends {}, which runs the defaults shown on the form — replace it with your own input.

n8n

Install the Apify community node (@apify/n8n-nodes-apify under Settings → Community Nodes, or search "Apify" on n8n Cloud). Add Apify → Run Actor with Actor vonsensey/workable-jobs-scraper and your input JSON, then Apify → Get Dataset Items on the run's defaultDatasetId and pipe the rows anywhere. For scheduled runs, the On new Apify Event trigger fires when a run of this Actor finishes.

MCP (Claude, Cursor, VS Code, any MCP client)

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=vonsensey/workable-jobs-scraper",
"headers": {
"Authorization": "Bearer <YOUR_APIFY_TOKEN>"
}
}
}
}

Your agent then calls vonsensey/workable-jobs-scraper as a tool with the same input the form takes and reads the dataset back.

REST API (one call, rows in the response)

curl -X POST "https://api.apify.com/v2/acts/vonsensey~workable-jobs-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" -d '{}'

Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("vonsensey/workable-jobs-scraper").call(run_input={})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
print(row)

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('vonsensey/workable-jobs-scraper').call({});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Make, Zapier, LangChain, CrewAI

The Apify app in Make and Zapier has a Run an Actor module: pick vonsensey/workable-jobs-scraper. In LangChain and CrewAI the Apify tool wrappers take the same Actor id. A daily schedule needs nothing but the Console: Schedules → Create → this Actor → cron, and the dataset fills on its own.

Run it without configuring anythingWorkable jobs with full descriptions, a ready-made example you can start as-is or copy.

Use cases

  • Hiring as a buying signal. A company posting roles in a function you sell to is a company with budget — track a target list and act on the change.
  • Build a niche job board. Pull real postings straight from company career pages, with the apply URL intact, instead of re-listing an aggregator.
  • Watch a competitor's headcount plan. What a rival hires for, and where, tells you what it is about to ship.
  • Talent-market research. Departments, seniority, location and employment type arrive as structured fields, so a market map is a pivot table away.

Run it on a schedule

A one-off pull answers a question; a schedule answers it every day without you. Open Schedules in the Apify Console, point a cron at this Actor, and the dataset keeps filling on its own — no server, no cron box, no babysitting. Everything here is built to be re-run: you are billed per job posting delivered, so a scheduled run that finds nothing new costs nothing.

FAQ

Do I need an API key for each ATS?

No. Give it a company domain or a board slug and it detects the applicant tracking system behind the page for you.

Can I get only the jobs that are new since my last run?

Yes. Turn on change tracking and a scheduled run returns only new or changed postings — which is also all you are charged for.

What happens if a company has no open roles?

You get a free row saying so. "No jobs today" and "we could not reach the board" are different answers, and neither one costs you anything.

Which applicant tracking systems are supported?

Greenhouse, Lever, Ashby, Workday, Workable, BambooHR, SmartRecruiters, Teamtailor, Recruitee, Personio, Rippling, Breezy, Pinpoint and Dover — 14 in all.


Something wrong, or a field you need that is missing? Open an issue on the Issues tab — it is read and it gets fixed. If this saved you time, a rating on the Store page helps the next person find it.