Workable Jobs Scraper: Careers Page API for Any Company avatar

Workable Jobs Scraper: Careers Page API for Any Company

Pricing

from $1.40 / 1,000 job rows

Go to Apify Store
Workable Jobs Scraper: Careers Page API for Any Company

Workable Jobs Scraper: Careers Page API for Any Company

Every open job from any Workable careers page (apply.workable.com), or search 1,512 Workable career sites by job title and location. Company, department, remote flag, seniority, skills and visa sponsorship. Track new and removed jobs. Pay per job.

Pricing

from $1.40 / 1,000 job rows

Rating

0.0

(0)

Developer

Navista Multani

Navista Multani

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Security

Limited permissions

Share

A Workable job board API for any company: get every open job from a company's Workable careers page (apply.workable.com) in one clean format, or search 2,137 Workable career sites by job title and location. Company, department, remote flag, seniority, skills and visa sponsorship on every row, and new, changed and removed jobs on a schedule.

This Actor reads Workable boards only. To mix platforms in one run (Greenhouse, Lever, Workday, Ashby, Workable and 8 more), use Career Site Jobs API (stippled_journey/ats-jobs).

Workable job board API: what you can use it for

  • Search Workable jobs across companies. Look for a job title and location across every Workable careers page in the directory at once, instead of one company at a time.
  • Monitor careers pages. List the companies you follow and get only their new, changed and removed jobs each day.
  • Use Workable's own job function and remote flag. category holds Workable's job function and workplace_type its remote setting, so you can filter on them directly.
  • Filter on seniority, years of experience, skills and visa sponsorship without reading descriptions: each is a column on every row.
  • Feed a job board, newsletter or AI agent. Every row stands alone, with the employer's own apply link.

Workable jobs data: sample output

One real row (blueground on Workable, read 2026-10-27; description shortened):

{
"id": "workable:blueground:37F908A92E",
"source": "workable",
"board": "blueground",
"company": "Blueground",
"title": "Warehouse Manager",
"department": "Shared Services",
"team": null,
"category": "General Business",
"employment_type": "full_time",
"workplace_type": null,
"location": "New York, New York, United States",
"locations": [
"New York, New York, United States"
],
"country": "United States",
"salary": {
"min": 60000.0,
"max": 70000.0,
"currency": "USD",
"period": "year",
"source": "description_text"
},
"salary_text": null,
"seniority": "manager",
"experience_years_min": 3,
"visa_sponsorship": null,
"skills": [
"Google Workspace",
"Inventory management",
"Warehouse management"
],
"posted_at": "2026-10-09T00:00:00Z",
"updated_at": null,
"url": "https://apply.workable.com/j/37F908A92E",
"apply_url": "https://apply.workable.com/j/37F908A92E/apply",
"description_text": "Redefining how people live.\nAt Blueground, we believe that when your base is reliable, the world opens up. T ...",
"content_hash": "e5fc988c288d8de9",
"scraped_at": "2026-10-27T16:30:54.746449Z"
}

What each row holds:

  • Job: title, company, department, category (Workable's job function), employment_type, url, apply_url, posted_at
  • Place: location, locations (every listed location), country, workplace_type (remote from Workable's telecommuting flag, or remote/hybrid read from the title and location)
  • Pay: salary as {min, max, currency, period, source} when the description states a pay range (source: "description_text"); Workable's careers feed has no salary field
  • Read from the posting by fixed rules, on every row:
    • seniority: intern, entry, mid, senior, lead, manager, director or executive, from the title
    • experience_years_min: the years of experience the description asks for ("5+ years" gives 5)
    • visa_sponsorship: true if the posting says it sponsors visas, false if it says it does not, null if it says neither
    • skills: tools and skills named in the posting (Python, AWS, Salesforce, SQL, Figma and about 480 more)
  • Text: description_text (plain text, email addresses and phone numbers removed), optionally description_html
  • Tracking: stable id, source, board, content_hash, scraped_at, and in change mode change (new, changed, removed) and removed_at

team and updated_at stay null: Workable's careers feed does not have them.

The OUTPUT record summarizes the run: boards loaded, not found or failed, jobs found and returned. A board that does not exist does not fail the run; a run where no board loads does. The dataset has three views: Jobs, Seniority, skills and visa, and Changes.

How to find a Workable board

Open the company's careers page. Workable careers pages live at apply.workable.com/<slug>, and the slug is the first part of the path:

You seeBoardShort form
https://apply.workable.com/huggingfaceHugging Faceworkable:huggingface
https://<slug>.workable.comthe older subdomain formworkable:<slug>
https://apply.workable.com/j/<code>a single job: not accepteduse the company page

A single-job link (apply.workable.com/j/<code>) does not name the company; open it and follow the link to the company's page, then paste that.

Pricing

Pay per job row returned, $2.00 per 1,000 jobs. No start fee and no charge for jobs your filters drop. A removed-job row in change mode counts as one row. The run stops cleanly at your spending limit.

  • Test run, 20 jobs: $0.04.
  • 100 company careers pages of about 40 jobs each: about 4,000 jobs, $8.00.
  • Directory search for one job title, 200 jobs: $0.40.
  • Monitoring 25 boards daily: a first full run of about 2,500 jobs costs $5.00; after that a daily change-mode run with about 50 new, changed or removed jobs costs about $0.10, about $3 a month.

Workable jobs search: input examples and settings

Search Workable career sites by title and location

{
"keywords": [
"customer success",
"account manager"
],
"locations": [
"London",
"Remote"
],
"maxJobs": 200
}

With no boards, the run searches the built-in directory of Workable boards live, starting with the boards most likely to match (those whose titles and locations contained your words when the directory was built, largest first). It stops at maxJobs matches (500 when maxJobs is 0) or when searchTimeLimitSecs (default 150) runs out. At the time limit, boards still being read are cut off and the jobs from boards already read are returned, so the run ends close to the limit; its status says how many boards it searched and how many were cut off. Workable limits how fast its careers feeds can be read, so a directory search reads two Workable boards at a time; raise searchTimeLimitSecs for a rare title.

Read the Workable boards you choose, in full

{
"boards": [
"https://apply.workable.com/huggingface",
"https://apply.workable.com/blueground",
"workable:huggingface"
],
"workplaceTypes": [
"remote"
]
}

All input fields

FieldWhat it does
boardsWorkable career-site URLs or short forms (see How to find a Workable board). Empty: search the directory.
keywordsTitle words to look for (any of them). Without boards, these are the directory search.
locationsKeep jobs whose location or country contains any of these, for example London, Remote, United States.
maxJobsStop after this many jobs, newest first. 0: no limit with boards, 500 for a directory search.
workplaceTypesremote, hybrid, onsite. Jobs whose posting does not say are dropped while this is set.
seniorityKeep these levels: intern, entry, mid, senior, lead, manager, director, executive. Titles with no level are dropped while this is set.
postedWithinDaysKeep jobs first published within this many days.
visaSponsorshipKeep only jobs whose posting says it sponsors visas.
requireSalaryKeep only jobs that publish pay.
keywordsInDescriptionAlso match keywords in descriptions. Broader and noisier.
onlyChangesChange mode (see below).
stateNameOptional name for a separate change history with the same input.
includeDescriptionPlain-text description (on by default).
includeHtmlOriginal description HTML (off by default).
maxJobsPerBoardAt most this many jobs per board, newest first.
searchMaxBoardsDirectory search only: at most this many boards, largest first.
searchTimeLimitSecsDirectory search only: the time limit in seconds (default 150); see above.
minRowsFail the run when it returns fewer rows than this, so a scheduled run that comes back short triggers your alerts.

Track new and removed Workable jobs on a schedule

Turn on onlyChanges and run the same input on a schedule. The first run returns every job as change: "new" and remembers them; each later run returns only:

  • new: jobs that appeared since the last run,
  • changed: jobs whose title, team, location, workplace type, salary, description or apply link changed,
  • removed: jobs that are gone (filled or taken down), as {"id", "source", "board", "change": "removed", "removed_at"}.

A board that fails to load is skipped for that run; its jobs are not reported as removed.

Example: watch two Workable boards every morning.

  1. Save this input as a task:

    {
    "boards": [
    "https://apply.workable.com/huggingface",
    "https://apply.workable.com/blueground"
    ],
    "onlyChanges": true,
    "minRows": 0
    }
  2. In Apify Console, create a schedule (for example daily at 07:00, cron 0 7 * * *) and add the task to it.

  3. Read each run's dataset, or connect a webhook or integration to send the rows on.

The change history is kept per input (boards plus filters). Use stateName to keep two separate histories for the same input.

Other platforms and ready-made examples

This Actor accepts Workable boards only and says so if you paste another platform's URL. The same code, fields and price cover 13 platforms in Career Site Jobs API (stippled_journey/ats-jobs): Greenhouse, Lever, Ashby, Workday, Workable, JazzHR, Recruitee, Personio, Teamtailor, Gem, Pinpoint, Join and Paylocity, with a keyword search across all of their directories in one run. Use it when your companies are spread over several platforms; its page also has ready-made example searches (software engineers in the US, remote data engineers, jobs with salary ranges and more).

FAQ

Is there an official Workable job board API, and how is this different? Workable's official API is for employers: it serves their own account and needs their access token. Each company's public careers page loads its jobs from a public feed (apply.workable.com/api/v1/widget/accounts/<company>), and this Actor reads that feed. On top of it you get a search across many Workable companies by title and location, the seniority, years, visa and skills fields, rows in the same format as other platforms, and change tracking between runs.

Why is a Workable directory search slower than on other platforms? Workable answers too many parallel requests with HTTP 429, so boards are read two at a time. Each board's short job list (titles only) is read first, and the full feed with descriptions only when a title matches.

Where does the salary come from? Workable's careers feed has no pay field, so salary is filled only when the description states a pay range.

How fresh is the directory? It lists the Workable boards found in Common Crawl's public web index and public job lists on GitHub, each checked to have open jobs when it was built (2026-10-28; about 106,800 open jobs then). The jobs themselves are always read live. A company not in it can be read by listing its board. Workable boards with 1,000 or more open jobs (14 when it was built) are left out of a search (one such feed alone needs hundreds of MB); list them to read them.

How are seniority, years, visa and skills decided? By fixed, published word rules, not an AI model, so the same posting always gives the same answer and a field stays empty rather than guessed. seniority comes from title words ("Senior", "Staff", "Head of", "VP"); experience_years_min is the first number of years the description ties to experience; visa_sponsorship is set only by a sentence that ties sponsorship to a visa or work authorization; skills match whole words from a fixed list of 486 tools and skills. The rules read English best.

Can I use it from Python or an AI agent? Yes, through the Apify API (with the official Python or JavaScript client), the Apify MCP server, or any Apify integration such as Make, Zapier or n8n.

Does it return personal data? No. Email addresses and phone numbers are removed from descriptions, and recruiter or hiring-manager names are never returned.

Data sources and terms

Every job is read from the public job feed or career-site API that Workable publishes for the company's own careers page, the same postings anyone can see there. No login, no browser and no proxy are used, and nothing is read that the board does not show publicly. This Actor is independent and not affiliated with or endorsed by Workable. Job postings belong to the employers; use the data in line with your own obligations, for example when you republish it.