Workable Jobs Scraper - Descriptions & Apply Links avatar

Workable Jobs Scraper - Descriptions & Apply Links

Pricing

from $1.00 / 1,000 job results

Go to Apify Store
Workable Jobs Scraper - Descriptions & Apply Links

Workable Jobs Scraper - Descriptions & Apply Links

Scrape live job postings with full descriptions from any Workable career site, or search 1,600+ known Workable employers in one run. Titles, locations, departments, apply links.

Pricing

from $1.00 / 1,000 job results

Rating

0.0

(0)

Developer

Sulle H

Sulle H

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

10 hours ago

Last modified

Categories

Share

Workable Jobs Scraper — Full Descriptions, One Board or 1,710

Point it at a company and get every open role on its Workable board, description text included. Or leave the company list empty and search a bundled registry of 1,710 live Workable career sites (77,339 open postings at last count) in a single run.

{ "companies": ["crown-equipment", "jacuzzi-group"] }
{ "keywords": ["designer"], "remoteOnly": true, "maxJobs": 200 }

No login, no cookies, no proxies, no API key.

Workable publishes descriptions — use them

Unlike SmartRecruiters and Workday, Workable's public widget endpoint returns the full job description. This Actor decodes the HTML entities, strips the markup, and hands you readable plain text in descriptionText, capped at 20,000 characters so rows stay a predictable size.

That makes Workable one of the better applicant tracking systems to build on when you need the body text — for keyword analysis, for pulling out a salary the title never mentions, or for feeding a search index.

What you get

FieldDescription
providerAlways workable — the same schema the multi-ATS Actors below emit
company / companySlugEmployer name as Workable publishes it, and its account slug
jobIdWorkable shortcode — stable, so it works as a dedupe key across runs
titleJob title
locationCity, state and country, joined as published
departmentDepartment label
employmentTypeFull-time, part-time or contract
remoteWorkable's own telecommuting flag
postedAtPublication date, ISO 8601
applyUrlDirect application link on the employer's board
descriptionTextFull description as plain text
scrapedAtWhen this row was read

A word about rate limits

Workable rate-limits harder than any other applicant tracking system in this family. Measured while building the registry, it refuses a residential connection outright at four concurrent requests. This Actor therefore paces itself and backs off on 429 rather than hammering through.

The practical consequence: a run across many boards is steady rather than fast. One company in companies finishes in seconds. Breadth across the registry takes as long as it takes — the alternative is a run that gets blocked halfway and returns a partial dataset without telling you.

Input

OptionWhat it does
keywordsKeep only titles containing one of these. Case-insensitive.
excludeKeywordsDrop titles containing any of these, e.g. senior, intern.
locationsKeep only locations containing one of these.
remoteOnlyKeep only postings Workable flags as telecommuting.
postedWithinDaysFreshness filter, 90 days by default.
companiesAccount slugs. Leave empty to search all 1,710.
maxBoardsHow many boards to scan, largest-first.
maxJobsHard cap on rows, so a run costs what you expect.
includeDescriptionTurn off for a much faster, lighter run.

Finding an account slug

The board lives at apply.workable.com/<slug>, so the slug is the first path segment: apply.workable.com/crown-equipment gives crown-equipment. Companies that embed Workable into their own careers page still load it from that domain — open the network tab, or search the page source for apply.workable.com.

Or run without companies and read the companySlug column.

Recipes

Full-text search across employers. Descriptions come back as plain text, so a single run gives you a corpus you can grep for a tool, a framework, or a compensation figure.

Watch one company. One slug, run on a schedule, diff jobId between runs. New ids are openings; missing ids are roles that closed.

Feed a niche job board. Every row carries the employer's own applyUrl, so your users apply at the source rather than through a middleman.

Use it as an API

Most people who rely on this Actor never open the Apify console after the first run — they call it from their own code and read the rows straight back. One request in, job rows out, no polling and no dataset id to chase:

curl -X POST "https://api.apify.com/v2/acts/starbright_overlap~workable-jobs-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"keywords": ["designer"], "remoteOnly": true, "maxJobs": 200}'
import requests
rows = requests.post(
"https://api.apify.com/v2/acts/starbright_overlap~workable-jobs-scraper/run-sync-get-dataset-items",
params={"token": "YOUR_TOKEN"},
json={"keywords": ["designer"], "remoteOnly": True, "maxJobs": 200},
timeout=300,
).json()
for r in rows:
print(r["company"], "—", r["title"], "—", r["applyUrl"])
const rows = await (await fetch(
'https://api.apify.com/v2/acts/starbright_overlap~workable-jobs-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN',
{ method: 'POST', headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({"keywords": ["designer"], "remoteOnly": true, "maxJobs": 200}) },
)).json();

Your token is at Settings → Integrations in the Apify console. Keep maxJobs set to what you actually need — it is the cap that decides what the call costs.

Running it on a schedule instead

If you want the rows to arrive without asking, add a Schedule from the Actor page (Actions → Schedule) and point a webhook at your endpoint. A daily schedule plus the postedWithinDays filter is the usual setup for a job board or an alerting pipeline.

Pricing

Pay per result — you are charged per job row delivered. A board that fails or returns nothing costs you nothing. Platform usage is included rather than billed on top, so the per-result price is the whole price.

Beyond Workable

Companies move between applicant tracking systems, and most job-data projects need more than one:

  • Career Site Job Feed — the same engine across Workday, Greenhouse, SmartRecruiters, Workable, Lever, Ashby and Breezy: 27,000+ employer boards in one run, identical output schema.
  • New Job Alerts — the same coverage, but each run returns only what appeared since the previous run, so you are not diffing datasets yourself.

Rows from all of them share one schema, so you can union the datasets without a mapping layer.

Notes

  • A dead slug never aborts the run. Failures are collected into a FAILED_BOARDS record in the key-value store, with the reason for each.
  • companySlug:jobId is a stable key. It does not change while a posting is open, which makes it safe for detecting what opened and closed between runs.
  • No login, no proxies, no API key. Workable publishes this endpoint openly. Private boards are invisible to every scraper, including this one.