# Workable Jobs Scraper: Search Every Company, Filter and Export (`getascraper/workable-jobs-scraper`) Actor

Scrape jobs.workable.com across every hiring company. Search many keywords and locations in one run, filter by remote or hybrid, contract type, experience level and date, refine by title, department and employer, and read pay when stated. Monitor new postings only. Export JSON, CSV, Excel. No login.

- **URL**: https://apify.com/getascraper/workable-jobs-scraper.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.68 / 1,000 job postings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## 💼 Workable Jobs Scraper: Search Every Company, Filter and Export

<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0;margin-bottom:0">
<tr>
<td style="padding:24px 28px;background:#EAF1FB;border:1px solid #C6D8F2;border-top:4px solid #1B5FC1;color:#1C1917;border-radius:10px 10px 0 0">
<span style="font-size:23px;font-weight:800;color:#1C1917;line-height:1.3">Every company hiring on Workable, in one search</span><br>
<span style="font-size:15px;color:#57534E;line-height:1.6">Search by keyword and place, narrow by remote, contract type and seniority, and download clean, spreadsheet-ready postings. Or get only the postings you have not seen yet.</span>
</td>
</tr>
</table>
<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0;margin-top:0">
<tr>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #C6D8F2;vertical-align:top;border-top:none;color:#1C1917;border-radius:0 0 0 10px">
<span style="font-size:15px;font-weight:800;color:#1B5FC1">🔎 Many searches, one file</span><br>
<span style="font-size:12px;color:#57534E">Several keywords and places per run, merged without duplicates.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #C6D8F2;border-left:none;vertical-align:top;border-top:none;color:#1C1917">
<span style="font-size:15px;font-weight:800;color:#1B5FC1">🎚️ Real filters</span><br>
<span style="font-size:12px;color:#57534E">Remote or hybrid, contract type, seniority level, posting date, department.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #C6D8F2;border-left:none;vertical-align:top;border-top:none;color:#1C1917">
<span style="font-size:15px;font-weight:800;color:#1B5FC1">💰 Pay when stated</span><br>
<span style="font-size:12px;color:#57534E">Salary range, currency and period read from the posting, never guessed.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #C6D8F2;border-left:none;vertical-align:top;border-top:none;color:#1C1917;border-radius:0 0 10px 0">
<span style="font-size:15px;font-weight:800;color:#1B5FC1">🔁 New postings only</span><br>
<span style="font-size:12px;color:#57534E">Name a feed, schedule it, and skip everything you already received.</span>
</td>
</tr>
</table>

**Search the Workable job board across every hiring company and download the results as JSON, CSV or Excel in minutes.** Each posting comes with the title, company, location, work setup, employment type, department, posting date and the link to apply. Add the full description, requirements and benefits when you need them.

***

### 🔍 What can you do with it?

- **I am a recruiter or sourcer** building a daily list of new openings for a role and region, so I can contact hiring teams before the posting gets crowded.
- **I run a job board or career newsletter** and need a steady feed of fresh, de-duplicated postings with clean locations and company links.
- **I sell to growing companies** and use hiring activity by role, country and department as a signal of who is expanding right now.
- **I am a labor market analyst** comparing remote, hybrid and on-site demand, contract types and seniority across countries.
- **I am a job seeker or career coach** who wants every remote junior or mid-level opening for one skill in a single sheet.

***

<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0"><tr>
<td style="border:none;padding:12px 18px;background:#EAF1FB;border-left:4px solid #1B5FC1;color:#1C1917">
<span style="font-size:15px;color:#1C1917">&#9889; <b>No login, no account.</b> Ready for the Apify scheduler: set it once and receive only new postings on every run.</span>
</td>
</tr></table>

### 🚀 How to use it

<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0">
<tr>
<td style="padding:16px 14px;width:33%;background:#EAF1FB;border:1px solid #C6D8F2;border-radius:10px 0 0 10px;vertical-align:top;color:#1C1917">
<span style="font-size:12px;font-weight:800;color:#1B5FC1;letter-spacing:1px">STEP 1</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Describe the roles</span><br>
<span style="font-size:12px;color:#57534E">Enter keywords and places, or paste a Workable search page link.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#EAF1FB;border:1px solid #C6D8F2;border-left:none;vertical-align:top;color:#1C1917">
<span style="font-size:12px;font-weight:800;color:#1B5FC1;letter-spacing:1px">STEP 2</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Narrow it down</span><br>
<span style="font-size:12px;color:#57534E">Pick work setup, contract type, experience level and how recent.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#EAF1FB;border:1px solid #C6D8F2;border-left:none;border-radius:0 10px 10px 0;vertical-align:top;color:#1C1917">
<span style="font-size:12px;font-weight:800;color:#1B5FC1;letter-spacing:1px">STEP 3</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Run and download</span><br>
<span style="font-size:12px;color:#57534E">Click Start, then export JSON, CSV or Excel.</span>
</td>
</tr>
</table>

### ⚙️ Input

All fields are optional. With no changes, the Actor returns 25 postings from the last 7 days that match the keyword software engineer.

| Field | Type | Required | Description |
| :--- | :--- | :--- | :--- |
| Search keywords | array of text | No | Job titles or keywords, one search per entry, such as nurse, data analyst or welder. Leave empty to browse everything that matches your other filters. |
| Search page URLs | array of URLs | No | Paste Workable search pages. Their keyword, place and filters are used as they are. |
| Locations | array of text | No | Countries, regions or cities, such as Germany, DE, Bavaria, London or remote. Each keyword is searched in every location. |
| Work setup | array of enums | No | Remote, hybrid or on-site. Pick several to combine them. |
| Employment types | array of enums | No | Full-time, part-time, contract, temporary or other. |
| Experience levels | array of enums | No | Internship, entry level, associate, mid-senior level, director or executive. |
| Title must contain | array of text | No | Keep a posting only if its title has at least one of these words. |
| Title must not contain | array of text | No | Drop postings whose title has any of these words, such as intern or assistant. |
| Departments | array of text | No | Keep postings whose department name contains one of these words. |
| Only these companies | array of URLs | No | Paste Workable company page links to list only those employers' openings. |
| Exclude companies | array of text | No | Drop employers whose name contains any of these words. |
| Only postings with a stated salary | boolean | No | Keep only postings that state a pay amount or range in their text. |
| Posted within | enum | No | Last 24 hours, 7 days, 30 days or any time. Default 7 days. |
| Maximum postings in total | integer | No | Stop after this many postings across all searches. Default 25. |
| Maximum postings per search | integer | No | Cap for each keyword and place combination. Default 25. |
| Maximum result pages per search | integer | No | Each page holds up to 20 postings. Bounds how deep a run digs. Default 5. |
| Include full description | boolean | No | Adds the posting text as plain text. Off by default. |
| Include description as HTML | boolean | No | Adds the posting text with its original formatting. Off by default. |
| Include requirements and benefits | boolean | No | Adds both sections as plain text when the employer wrote them. Off by default. |
| Include company profile text | boolean | No | Adds the employer's profile text and tagline. Off by default. |
| Only new postings since last run | boolean | No | Returns only postings earlier runs of the same feed have not delivered. |
| Monitor name | text | No | Name of the feed. Use a different name for each feed and keep it between scheduled runs. |
| Proxy configuration | object | No | Network settings. The default works for most runs. |

***

### 📦 Output

Each row is one job posting. Fields a posting does not provide are left out instead of being filled with placeholders.

```json
{
  "id": "cc36d811-77d6-44d6-a692-819d96ecbf8e",
  "title": "Software Engineer",
  "company": "Avalore, LLC",
  "companyWebsite": "http://avalore.ai",
  "location": "Chantilly, Virginia, United States",
  "city": "Chantilly",
  "region": "Virginia",
  "country": "United States",
  "workplaceType": "on_site",
  "isRemote": false,
  "employmentType": "Full-time",
  "department": "LPO",
  "postedAt": "2026-10-21T17:14:47.357Z",
  "url": "https://jobs.workable.com/view/rdANY2TNXBkUtYtXFmVHE7/software-engineer-in-chantilly-at-avalore%2C-llc",
  "snippet": "Avalore is seeking a full stack developer supporting a backend development team focused on middleware and backend services for our US Government client.",
  "salaryMin": 150000,
  "salaryMax": 265000,
  "salaryCurrency": "USD",
  "salaryPeriod": "year",
  "salaryText": "$150,000 - $265,000 per year",
  "scrapedAt": "2026-10-23T19:14:46.663Z"
}
```

#### Field reference

| Field | Type | Description |
| :--- | :--- | :--- |
| `id` | string | Unique posting identifier. |
| `title` | string | Job title as published. |
| `company`, `companyId` | string | Employer name and identifier. |
| `companyUrl`, `companyWebsite`, `companyLogo` | string | Employer page on Workable, its own website and logo. |
| `location`, `city`, `region`, `country` | string | Where the job is based. |
| `locations` | array | All listed locations of the posting. |
| `workplaceType`, `isRemote` | string, boolean | remote, hybrid or on_site, and a simple remote flag. |
| `employmentType` | string | Full-time, part-time, contract and so on, as the employer set it. |
| `department` | string | Department or team, when the employer sets one. |
| `language` | string | Language code of the posting. |
| `postedAt`, `updatedAt` | string | First published and last updated time. |
| `url` | string | Link to the posting and its application form. |
| `snippet` | string | Short summary written by the employer. |
| `salaryMin`, `salaryMax` | number | Pay range read from the posting text, only when written there. |
| `salaryCurrency`, `salaryPeriod` | string | Currency code and period (hour, day, week, month, year) when stated. |
| `salaryText` | string | The pay wording as written in the posting. |
| `sourceDomain` | string | Partner site the posting was also published through, when applicable. |
| `isFeatured` | boolean | Marked as featured by the employer. |
| `description`, `descriptionHtml` | string | Full posting text, plain or formatted. Only with the extra details on. |
| `requirements`, `benefits` | string | Separate sections when the employer wrote them. Only with the extra details on. |
| `companyDescription`, `companyTagline` | string | Employer profile text. Only with the extra details on. |
| `scrapedAt` | string | When the row was collected. |

***

### 💰 Pricing

Pricing is pay per event, and the only event is **Job posting**: you pay for each posting saved to your dataset. There is no start fee, so runs with no results cost nothing, and the extra details (descriptions, requirements, benefits, company profile) do not add a second charge. The price per posting follows your Apify plan, so higher plans pay less, and the maximum charge you set for a run is always respected. There are no monthly subscriptions or hidden fees. Free-plan runs are limited to 25 postings per run, 3 runs per day, and a short wait between runs. Paid plans have no such limits.

***

### ⭐ Enjoying Workable Jobs Scraper?

<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0">
<tr>
<td style="padding:20px 24px 14px;background:#EAF1FB;border:1px solid #EAF1FB;border-left:5px solid #1B5FC1;border-radius:10px 10px 0 0;color:#1C1917">
<span style="font-size:20px;letter-spacing:4px">⭐ ⭐ ⭐ ⭐ ⭐</span><br>
<span style="font-size:17px;font-weight:800;color:#1C1917">If this saves you hours of searching job boards by hand, tell us about it.</span><br>
<span style="font-size:14px;color:#57534E">A 5-star rating takes 10 seconds and helps other recruiters and analysts find it. Your feedback also tells us what to build next.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#1B5FC1;border:1px solid #1B5FC1;border-left:5px solid #1B5FC1;border-top:none;border-radius:0 0 10px 10px;text-align:center;color:#FFFFFF">
<a href="https://apify.com/getascraper/workable-jobs-scraper/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this Actor on Apify</a>
</td>
</tr>
</table>

***

### ✨ Tips and best practices

- **Build a daily hiring feed.** Turn on the new-postings option, give the feed a name, set Posted within to the last 24 hours and schedule the Actor. Every run returns only postings you have not received before. The first run delivers everything up to your result limit.
- **Search several roles at once.** Add every title variant as its own keyword and every country as its own location. Duplicates are removed for you.
- **Tight lists need a title filter.** A keyword can match anywhere in a posting. Add Title must contain to keep only roles where it is the job.
- **Go deeper when you need volume.** Raise the maximum postings and the result pages. Each page holds up to 20 postings.
- **Check one employer.** Paste its Workable company page link under Only these companies to see every opening it has.
- **Copy a search from Workable.** Set up the filters on the site, paste the page link into Search page URLs, and get exactly that list.

***

### ❓ FAQ

##### Does it need a Workable account?

No. It collects publicly visible postings and needs no login, account or key.

##### Does it return salaries?

Only when a posting states one in its text. Many employers do not publish pay, so the Actor leaves the fields out rather than guessing.

##### Can I scrape one company's careers page?

Yes. Paste the employer's Workable company page link under Only these companies. Your keyword, place and date filters still apply.

##### How do I get only new jobs every day?

Turn on Only new postings since last run, keep the same Monitor name, set Posted within to the last 24 hours, and schedule the Actor daily.

##### Does it return recruiter or candidate contact details?

No. It returns public posting and employer information only: no resumes, candidate data or private contact details.

***

### 🛡️ Disclaimers and support

- **Disclaimer:** This Actor retrieves publicly available job postings. It is an independent tool and is not affiliated with or endorsed by Workable. Make sure your use complies with the site's terms and applicable laws.
- **Support:** Open an issue from the Actor page in the Apify Console for bug reports or feature requests.

### 🔗 Other actors

- [Lever jobs scraper](https://apify.com/getascraper/lever-jobs-monitor) ↗ - Open roles and new postings from companies hiring on Lever.
- [Ashby Jobs Scraper: Hiring Change Monitor](https://apify.com/getascraper/ashby-jobs-monitor) ↗ - Track openings and changes on Ashby job boards.
- [SmartRecruiters jobs scraper: hiring alerts & board monitoring](https://apify.com/getascraper/smartrecruiters-jobs-monitor) ↗ - Hiring alerts from SmartRecruiters career sites.
- [WeWorkRemotely Jobs Scraper: Remote Jobs, Salary and New Alerts](https://apify.com/getascraper/weworkremotely-jobs-scraper) ↗ - Remote jobs with salary and new-posting alerts.

# Changelog

This Actor's version history is a separate document: https://apify.com/getascraper/workable-jobs-scraper/changelog.md

# Actor input Schema

## `searchQueries` (type: `array`):

Job titles or keywords to search across every company on the Workable job board, one search per entry (for example nurse, data analyst, welder). Results from several entries are merged and de-duplicated. Leave empty to browse all postings that match your other filters.

## `searchUrls` (type: `array`):

Optional. Paste jobs.workable.com search page URLs (for example https://jobs.workable.com/search?query=nurse\&location=Berlin\&workplace=remote). The keyword, location, work setup, employment type, experience and date filters in the link are used as they are.

## `locations` (type: `array`):

Countries, regions or cities, one search per entry (for example Germany, DE, Bavaria, London, remote). Each keyword is searched in every location. Leave empty for worldwide.

## `workplaceTypes` (type: `array`):

Keep only remote, hybrid or on-site roles. Pick more than one to combine them. Leave empty to include all.

## `employmentTypes` (type: `array`):

Keep only the contract types you want, such as full-time or contract. Leave empty to include all.

## `experienceLevels` (type: `array`):

Keep only roles at the seniority levels you pick, from internship to executive. This filter is missing from most Workable scrapers. Leave empty to include all.

## `titleMustContain` (type: `array`):

Keep a posting only if its title contains at least one of these words. Useful to cut broad keyword matches down to the exact role.

## `titleMustNotContain` (type: `array`):

Drop postings whose title contains any of these words, for example intern, assistant or junior.

## `departments` (type: `array`):

Keep a posting only if its department or team name contains one of these words (for example Sales, Engineering). Only postings that publish a department can match.

## `companies` (type: `array`):

Optional. Paste Workable company page URLs (https://jobs.workable.com/company/.../jobs-at-name) to list the open roles of those employers only. Your keyword, location and date filters still apply.

## `excludeCompanies` (type: `array`):

Drop postings from employers whose name contains any of these words, for example staffing agencies you do not want in the data.

## `onlyWithSalary` (type: `boolean`):

Keep only postings whose text states a pay amount or range. Workable has no salary field, so the amount is read from the posting text and only filled in when it is clearly written there.

## `postedWithin` (type: `string`):

Only postings published inside this window. Use the last 24 hours for a daily feed.

## `maxItems` (type: `integer`):

Stop after this many postings across all searches. Free plan runs are capped at 25.

## `maxItemsPerSearch` (type: `integer`):

Cap for each keyword and location combination, so the first search cannot use up the whole total.

## `maxPagesPerSearch` (type: `integer`):

Each page holds up to 20 postings. This also bounds how far the run digs when title, department, company or salary filters discard many postings.

## `includeDescription` (type: `boolean`):

Add the full posting text as plain text. Off by default to keep rows small and fast.

## `includeDescriptionHtml` (type: `boolean`):

Add the posting text with its original formatting (lists, bold, links) for display in your own tools.

## `includeRequirementsAndBenefits` (type: `boolean`):

Add the separate requirements and benefits sections as plain text when the employer wrote them.

## `includeCompanyProfile` (type: `boolean`):

Add the employer's profile text and short tagline from its Workable company page.

## `monitorMode` (type: `boolean`):

Return only postings that earlier runs with the same monitor name have not delivered yet. Schedule the Actor daily to get a feed of new jobs.

## `monitorName` (type: `string`):

Name of the saved list of delivered postings. Use a different name for each feed you run, and keep the same name between scheduled runs.

## `proxyConfiguration` (type: `object`):

Optional. Requests go out directly by default and switch to Apify datacenter proxy by themselves if Workable rate limits the connection. Choose a proxy here to use it from the first request.

## Actor input object example

```json
{
  "searchQueries": [
    "software engineer"
  ],
  "searchUrls": [],
  "locations": [],
  "workplaceTypes": [],
  "employmentTypes": [],
  "experienceLevels": [],
  "titleMustContain": [],
  "titleMustNotContain": [],
  "departments": [],
  "companies": [],
  "excludeCompanies": [],
  "onlyWithSalary": false,
  "postedWithin": "7d",
  "maxItems": 25,
  "maxItemsPerSearch": 25,
  "maxPagesPerSearch": 5,
  "includeDescription": false,
  "includeDescriptionHtml": false,
  "includeRequirementsAndBenefits": false,
  "includeCompanyProfile": false,
  "monitorMode": false,
  "monitorName": "workable-feed",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchQueries": [
        "software engineer"
    ],
    "searchUrls": [],
    "locations": [],
    "workplaceTypes": [],
    "employmentTypes": [],
    "experienceLevels": [],
    "titleMustContain": [],
    "titleMustNotContain": [],
    "departments": [],
    "companies": [],
    "excludeCompanies": [],
    "onlyWithSalary": false,
    "postedWithin": "7d",
    "maxItems": 25,
    "maxItemsPerSearch": 25,
    "maxPagesPerSearch": 5,
    "includeDescription": false,
    "includeDescriptionHtml": false,
    "includeRequirementsAndBenefits": false,
    "includeCompanyProfile": false,
    "monitorMode": false,
    "monitorName": "workable-feed",
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/workable-jobs-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchQueries": ["software engineer"],
    "searchUrls": [],
    "locations": [],
    "workplaceTypes": [],
    "employmentTypes": [],
    "experienceLevels": [],
    "titleMustContain": [],
    "titleMustNotContain": [],
    "departments": [],
    "companies": [],
    "excludeCompanies": [],
    "onlyWithSalary": False,
    "postedWithin": "7d",
    "maxItems": 25,
    "maxItemsPerSearch": 25,
    "maxPagesPerSearch": 5,
    "includeDescription": False,
    "includeDescriptionHtml": False,
    "includeRequirementsAndBenefits": False,
    "includeCompanyProfile": False,
    "monitorMode": False,
    "monitorName": "workable-feed",
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/workable-jobs-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchQueries": [
    "software engineer"
  ],
  "searchUrls": [],
  "locations": [],
  "workplaceTypes": [],
  "employmentTypes": [],
  "experienceLevels": [],
  "titleMustContain": [],
  "titleMustNotContain": [],
  "departments": [],
  "companies": [],
  "excludeCompanies": [],
  "onlyWithSalary": false,
  "postedWithin": "7d",
  "maxItems": 25,
  "maxItemsPerSearch": 25,
  "maxPagesPerSearch": 5,
  "includeDescription": false,
  "includeDescriptionHtml": false,
  "includeRequirementsAndBenefits": false,
  "includeCompanyProfile": false,
  "monitorMode": false,
  "monitorName": "workable-feed",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call getascraper/workable-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,getascraper/workable-jobs-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/CcIzU6U2aVnqWsDDt/builds/X8KaYT5j8KfOiOPmy/openapi.json
