Workable Jobs Scraper – Search All Workable Jobs avatar

Workable Jobs Scraper – Search All Workable Jobs

Pricing

Pay per usage

Go to Apify Store
Workable Jobs Scraper – Search All Workable Jobs

Workable Jobs Scraper – Search All Workable Jobs

Search every job on Workable by keyword, location and remote, or pull all openings from specific companies. Enriched with tech stack, seniority, job function, salary and company domain. Fast, no proxies.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Kunal Data

Kunal Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 hours ago

Last modified

Share

Search every job posted on Workable by keyword, location and remote status β€” or pull all openings from specific companies' Workable career pages. Each job is enriched with tech stack, seniority, job function, salary (when stated), years of experience and the employer's website domain.

Why use this actor

  • Keyword search across all Workable employers (thousands of companies), with location, remote and posted-within filters.
  • Company mode: give apply.workable.com/company URLs or slugs to get every open role at those companies.
  • Employer domain included in search results β€” ready for lead enrichment in Clay, Apollo or your CRM.
  • Enrichment β€” tech stack (180+ tools), seniority, job function, minimum years of experience, visa sponsorship mentions.
  • No browser, no proxies β€” fast runs at a low cost per job.

Use cases

  • Job aggregators and niche job boards β€” fill your board with fresh Workable jobs by keyword.
  • Lead generation β€” find companies hiring for roles that signal a need for your product (e.g. "SDR", "data engineer").
  • Labour-market research β€” demand for skills by country and remote share.
  • Job seekers and career coaches β€” daily alerts for new matching roles.

How to use

  1. Add one or more search keywords (and optionally a location), or add Workable company career-page URLs.
  2. Optionally narrow results with filters: title keywords, job function, seniority, remote only, posted within N days.
  3. Click Start. Download results as JSON, CSV, Excel or HTML, or connect them to Google Sheets, Clay, Make, Zapier or n8n.

Example input:

{
"searchQueries": [
"data engineer",
"account executive"
],
"searchLocation": "Germany",
"remoteOnly": false,
"postedWithinDays": 14,
"maxSearchResults": 200
}

Input options

FieldWhat it does
companiesWorkable careers URLs, custom career domains or Workable company names.
searchQueriesKeywords to search across every Workable employer.
searchLocationCity or country for keyword search.
maxSearchResultsMax jobs per keyword (default 100).
outputJobs, company hiring signals, or both.
includeDescriptionAdd the plain-text job description to each job.
trackChangesFlag new and closed roles since the previous run (use with a schedule).
titleKeywords / excludeTitleKeywordsKeep or drop jobs by words in the title.
jobFunctionsEngineering, data, product, design, sales, marketing, customer, operations, finance, people, legal, security, IT, research, healthcare.
seniorityIntern, junior, mid, senior, lead, manager, principal, director, executive.
locationsKeep jobs whose location contains any of these strings.
remoteOnlyOnly fully remote jobs.
postedWithinDaysOnly jobs posted in the last N days.
maxJobsPerCompanyNewest jobs first, capped per company.

Output

Each job row (real example from a run):

{
"recordType": "job",
"companyName": "Graham & Brown Holdings - a family of companies",
"companyDomain": "grahambrown.com",
"ats": "workable",
"jobId": "d8ccf73d-95e0-4bdd-83df-68d0a139d1b3",
"title": "Data Engineer",
"jobFunction": "data",
"seniority": "mid",
"department": "IT/Tech",
"team": null,
"employmentType": "Full-time",
"workplaceType": "onsite",
"remote": false,
"location": "Blackburn, England, United Kingdom",
"city": "Blackburn",
"country": "United Kingdom",
"countryCode": null,
"postedAt": "2026-10-15T10:56:49.310Z",
"daysSincePosted": 3,
"salaryMin": 40308,
"salaryMax": 48858,
"salaryCurrency": "GBP",
"salaryPeriod": "year",
"salarySource": "text",
"techStack": "Python, SQL, R, BigQuery, Databricks, dbt, Power BI, AWS, GCP, Azure, Google Analytics, NetSuite",
"minYearsExperience": null,
"visaSponsorship": null,
"isNewSinceLastRun": null,
"url": "https://jobs.workable.com/view/sLKdHcAG99Wxa7JeBrYnfB/data-engineer-in-blackburn-at-graham-%26-brown-holdings---a-family-of-companies",
"applyUrl": "https://jobs.workable.com/view/sLKdHcAG99Wxa7JeBrYnfB/data-engineer-in-blackburn-at-graham-%26-brown-holdings---a-family-of-companies",
"careersUrl": null,
"scrapedAt": "2026-10-19T09:58:20.645Z"
}

Field notes:

  • jobFunction, seniority and techStack are inferred from the title, department and description with deterministic rules β€” no AI guesswork, same input gives the same output.
  • salary* fields come from the platform's structured pay data when available (salarySource: "structured"), otherwise from salary ranges written in the job text (salarySource: "text").
  • isNewSinceLastRun and the company newJobsSinceLastRun / closedJobsSinceLastRun are filled when Track changes is on and a previous run exists.

Pricing

Free during launch. You pay only Apify's own platform usage, which is tiny for this actor: it reads public job-board feeds over plain HTTP, with no browser and no proxies (a typical small run uses well under $0.01 of platform credit).

Pay-per-result pricing will be introduced later; Apify notifies existing users in advance of any pricing change.

Use it from code

Run the actor and get the results in one call (replace <YOUR_TOKEN> with your Apify API token):

curl -X POST "https://api.apify.com/v2/acts/kunnu_data~workable-jobs-scraper/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"searchQueries":["data engineer","account executive"],"searchLocation":"Germany","remoteOnly":false,"postedWithinDays":14,"maxSearchResults":200}'
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_TOKEN>' });
const run = await client.actor('kunnu_data/workable-jobs-scraper').call({"searchQueries":["data engineer","account executive"],"searchLocation":"Germany","remoteOnly":false,"postedWithinDays":14,"maxSearchResults":200});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, items[0]);
from apify_client import ApifyClient
client = ApifyClient("<YOUR_TOKEN>")
run = client.actor("kunnu_data/workable-jobs-scraper").call(run_input={"searchQueries":["data engineer","account executive"],"searchLocation":"Germany","remoteOnly":False,"postedWithinDays":14,"maxSearchResults":200})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

Run it daily and get only what changed

  1. Save your input as a Task (Actor page β†’ Save as a new task) with Track changes turned on.
  2. In Schedules, run the task daily or weekly.
  3. Each job then has isNewSinceLastRun, and each company row has newJobsSinceLastRun / closedJobsSinceLastRun. Connect the task to Google Sheets, Slack or a webhook to get alerts.

Integrations and API

  • Google Sheets, Clay, Make, Zapier, n8n, Airbyte via Apify integrations.
  • REST API and SDKs (JavaScript, Python) β€” run the actor and fetch the dataset programmatically.
  • AI agents (MCP) β€” the actor can be called by AI agents through the Apify MCP server; inputs and outputs are fully described by schemas.
  • Schedules β€” run daily with Track changes on to get only what changed.

FAQ

Is this legal? The actor reads only publicly published job postings from official public job-board feeds β€” no login, no private data, no personal contact details. You are responsible for using the data in line with applicable laws and the terms of the sites involved.

A company was not found β€” why? Check that it uses Workable (the careers page usually links to it) and paste the careers page URL. Unresolved inputs are listed in the RUN_SUMMARY record of the run's key-value store.

How fresh is the data? Live β€” every run reads the job boards at that moment.

Something broke or you need a field? Open an issue on the actor's Issues tab β€” every report is reviewed and fixes are prioritised.