# Workable jobs scraper for career pages and job search

> Workable jobs scraper for company career pages and the Workable job search. Get job text, places and optional salary. Track new and removed jobs.

URL: https://cliqtomedia.com/actors/workable-jobs-monitor-scraper/

Category: Jobs & hiring · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/workable-jobs-monitor-scraper?fpr=cliqto

Add Workable companies, or search Workable jobs by keyword and place. You get one clean row per job. On a schedule, get only new, changed and removed jobs.

## How to use it: 3 steps

1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `costello-medical` in Companies on Workable. Each start is one run.
3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

## What it does

Workable Jobs Monitor & Scraper collects public jobs from company career pages on Workable (`apply.workable.com/<company>`) and from the Workable job search (`jobs.workable.com`). It returns one clean row per job, and on a schedule it can return only new, changed and removed jobs.

- Company career pages. Add a company name or its career page URL. The Actor returns every published job of that company with title, locations, department, employment type, experience, industry, posting date, links and the full job description split into description, requirements and benefits. This uses 2 requests per company, even for companies with hundreds of jobs.
- Workable job search. Add keywords and/or a location. The Actor goes through the search results page by page (20 jobs per page) and returns each job with company, location, workplace type and description.

### Good for

- Watch the career pages of competitors, clients or target accounts and get new jobs every day.
- Build a job board or a job alert from Workable companies and keywords.
- Collect hiring signals (department, location, seniority) for sales or market research.

### Not a good fit

- Only public, published jobs. No applicant data, no private postings.
- Companies with their own career site and no `apply.workable.com/<company>` page are not supported.
- Salary is published by only some employers. You get it only with Add salary and exact workplace type on, and only for company pages. The search does not return salary.
- Workable limits how many requests one IP address can make per day. Large runs can stop early with a clear `partial` status (see Pricing and limits).
- Up to 5,000 jobs per run.

## Price

Pay per event. Apify bills you, not us.

| What you pay for | Price | When |
|---|---|---|
| Start fee | $0.002 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. |
| Job row | $0.0009 | One Workable job, or one new/changed/removed job in monitoring mode, saved to the Dataset. |

- One job: about $0.0029.
- 1,000 jobs: about $0.90.
- Every day 100 jobs, for 30 days: about $2.76 a month.

Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed.

Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/workable-jobs-monitor-scraper?fpr=cliqto

## Questions

### Do I need a Workable API key?

No. The tool reads public career pages and the public job search.

### Why is the salary empty?

Salary needs details on, and only company pages have it. Search has no salary.

### How many jobs can one run return?

Up to 5,000 jobs. Workable also limits requests per day.

### What does partial mean?

A limit stopped the run early. The saved rows are still correct.

### How fresh is the data?

Each run reads Workable at run time. `scraped_at` shows when each row was made.

### Can I get all jobs from Workable?

No. One run returns up to 5,000 jobs, and Workable limits requests per day. Use companies, keywords, locations and `postedWithin` to focus on the jobs you need.

### Are duplicates removed?

Yes. A company added twice is read once, and a job that appears on two search pages is returned once. The same job found by two different keywords appears once per search.

## Data fields

- `id` (string)
- `source_type` (string)
- `source_input` (string)
- `title` (string)
- `state` (string)
- `language` (string)
- `date_posted` (string)
- `date_updated` (string)
- `url` (string)
- `application_url` (string)
- `shortcode` (string)
- `company_slug` (string)
- `company_id` (string)
- `company_title` (string)
- `company_website` (string)
- `company_url` (string)
- `company_image` (string)
- `location` (string)
- `location_city` (string)
- `location_subregion` (string)
- `location_country` (string)
- `location_country_code` (string)
- `locations` (array)
- `workplace_type` (string)
- `employment_type` (string)
- `department` (string)
- `experience` (string)
- `industry` (string)
- `function` (string)
- `education` (string)
- `salary_min` (number)
- `salary_max` (number)
- `salary_currency` (string)
- `salary_period` (string)
- `is_featured` (boolean)
- `social_sharing_description` (string)
- `description_html` (string)
- `description_text` (string)
- `requirements` (string)
- `requirements_html` (string)

## Input settings

- `companies` (array): Company career pages on Workable. Use the account name (costello-medical) or a URL like https://apply.workable.com/costello-medical/. A job URL from the same company also works. Up to 200 companies.
- `searchKeywords` (array): Search all Workable jobs on jobs.workable.com. Each keyword is a separate search, for example "software engineer". Up to 20 keywords.
- `searchLocation` (string): Location for every keyword search, for example "United States", "London" or "Germany". You can also use it alone, without keywords.
- `postedWithin` (string): Only jobs posted in this period. Works for both search and companies.
- `workplaceTypes` (array): Keep only remote, hybrid or on-site jobs. Leave empty for all. For companies, hybrid and on-site are known only when "Add salary and exact workplace type" is on; otherwise only remote jobs are recognized.
- `titleKeywords` (array): Keep a job if its title contains at least one of these words (not case-sensitive).
- `excludeTitleKeywords` (array): Drop a job if its title contains any of these words, for example "intern".
- `locationKeywords` (array): Keep a job if any of its locations contains one of these words, for example "Germany" or "London".
- `departmentKeywords` (array): Keep a job if its department contains one of these words, for example "Engineering".
- `includeDetails` (boolean): For companies: one extra request per job to get salary and hybrid/on-site workplace type. Descriptions, requirements and benefits are included even when this is off. Workable allows only a limited number of these requests per day; when the limit is hit, the Actor stops asking, keeps all jobs and marks the company as partial.
- `mode` (string): "All jobs" returns every matching job. "Only changes" compares with the previous run of the same input and returns new, changed and removed jobs. The first changes run returns all jobs as new.
- `monitorStateKey` (string): Optional. Runs with the same monitor name share memory. Leave empty to use the companies, searches and filters as the name. Letters, digits, - and _ only.
- `includeUnchanged` (boolean): Only for "Only changes" mode: also return jobs that did not change, marked unchanged.
- `maxJobsPerSource` (integer): Stop each company or search after this many matching jobs (1–5000). The source is then marked partial.
- `maxJobsTotal` (integer): Stop the whole run after this many matching jobs (1–5000). Bigger jobs: split companies or searches into several runs.

## Step by step on Apify

1. Open the Input tab.
2. In Companies on Workable (`companies`) keep the prefilled `costello-medical` or add your own company name or URL.
3. Keep the other settings as they are. By default the Actor returns all current jobs (`mode`: `all`).
4. Click Start.
5. Open the Output tab. The table shows one row per job with title, company, location and job URL.

## Use cases

| Task | Input | You get | Key fields | Next step |
|---|---|---|---|---|
| Track hiring at known companies | `companies` + `mode: changes` on a schedule | new / changed / removed job | `change_type`, `title`, `location`, `url` | Send new rows to Slack, email or a sheet |
| Find jobs by keyword and place | `searchKeywords` + `searchLocation` | job | `title`, `company_title`, `workplace_type`, `date_posted` | Job board, alert, CRM |
| Hiring signals for sales | `companies` | job | `department`, `experience`, `function`, `locations` | Lead scoring |
| Salary research (where published) | `companies` + `includeDetails: true` | job | `salary_min`, `salary_max`, `salary_currency`, `salary_period` | Spreadsheet |

## Tips

- Use the account name from apply.workable.com/name, or paste the link.
- Company pages are cheap: 2 requests per company, even with many jobs.
- Use posted within to limit search results to fresh jobs.

## Limits



- 5,000 jobs per run (`maxJobsTotal`). A tested run returned 5,000 rows in about 6.5 minutes.
- Workable daily request limits. Workable limits how many search pages and job-detail requests one IP address can make per day. When the limit is reached, Workable asks to wait about 24 hours. The Actor then stops asking for that kind of data, saves everything found so far and marks the source `partial` with the reason. In a test run this happened after about 400 search pages (about 8,000 search jobs). Company pages without `includeDetails` use only 2 requests per company and are rarely affected.
- Default memory 512 MB and timeout 30 minutes are enough for 5,000 rows.

## Sample result

```json
{
  "id": "266B371E9C",
  "source_type": "company",
  "source_input": "costello-medical",
  "title": "Accounts Assistant",
  "state": "published",
  "date_posted": "2026-09-23T00:00:00.000Z",
  "url": "https://apply.workable.com/costello-medical/j/266B371E9C/",
  "application_url": "https://apply.workable.com/costello-medical/j/266B371E9C/apply/",
  "company_title": "Costello Medical",
  "company_url": "https://apply.workable.com/costello-medical/",
  "location": "Boston, Massachusetts, United States",
  "location_country_code": "US",
  "locations": ["Boston, Massachusetts, United States"],
  "workplace_type": null,
  "employment_type": "Full-time",
  "department": "Operations",
  "experience": "Entry level",
  "industry": "Pharmaceuticals",
  "function": "Finance",
  "salary_min": null,
  "description_text": "Role Summary\n\n- Responsibilities: By stepping into the Accounts Assistant role at Costello Medical, you will support …",
  "requirements": "About You\n\nWe are looking for an enthusiastic and ambitious individual …",
  "benefits": "About Costello Medical\n\nCostello Medical is a rapidly growing global healthcare agency …",
  "change_type": null,
  "content_hash": "…"
}
```

## Use it from code

Actor ID: `cliqtomedia/workable-jobs-monitor-scraper`

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/workable-jobs-monitor-scraper").call(run_input={
    "companies": [
        "costello-medical"
    ],
    "postedWithin": "any"
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

```bash
curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~workable-jobs-monitor-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"companies": ["costello-medical"], "postedWithin": "any"}'
```

```python
# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool

tool = ApifyActorsTool("cliqtomedia/workable-jobs-monitor-scraper")
result = tool.invoke({"run_input": {"companies": ["costello-medical"], "postedWithin": "any"}})
print(result)
```

run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/

## Use cases with this tool

- [Reach out when the company is ready](https://cliqtomedia.com/actors/use-cases/buying-signals/): Know when a company hires, raises money or wins a contract. Reach out at the right moment.

## Similar tools

- [Greenhouse Jobs Monitor & Scraper](https://cliqtomedia.com/actors/greenhouse-jobs-monitor-scraper/)
- [Lever Job Scraper](https://cliqtomedia.com/actors/lever-jobs-scraper/)
- [Ashby Jobs Scraper](https://cliqtomedia.com/actors/ashby-jobs-scraper/)
- [Wellfound Jobs Scraper](https://cliqtomedia.com/actors/wellfound-jobs-scraper/)
- [Recruitee Job Snapshots & Changes](https://cliqtomedia.com/actors/recruitee-jobs-monitor-scraper/)
- [SmartRecruiters Jobs Monitor & Scraper](https://cliqtomedia.com/actors/smartrecruiters-jobs-monitor-scraper/)
