# Workable Jobs Scraper — Job Board to JSON (`actorworks/workable-jobs-scraper`) Actor

Get every job from any Workable job board as clean, normalized JSON — titles, locations, departments, salaries where published, and full contact-scrubbed descriptions. Official public endpoints, no fragile HTML.

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

## Pricing

Pay per event

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Workable Jobs Scraper — Job Board to JSON

**Turn any Workable job board into clean, normalized JSON in one run.** Point this scraper at one or more Workable companies (`apply.workable.com/{company}`) and get every open role with title, location, department, employment type, posting date, salary where published, and the full description — via Workable's official public endpoints, not fragile HTML.

| Job title | Company | Location | Type | Posted |
|---|---|---|---|---|
| Senior Software Engineer | blueground | Remote, Europe | FullTime | 2026-08-12 |
| Product Manager | blueground | New York, NY | FullTime | 2026-08-20 |

### Why this one

- ✅ **Official public API** — complete, fast, stable results; no HTML parsing to break
- ✅ **Normalized schema** — identical fields across every company you scrape
- ✅ **Contact-scrubbed, company-level data** — recruiter emails/phones removed automatically
- ✅ **Automated health tests** — the adapter is exercised continuously against live boards
- Uses the same public endpoints the apply.workable.com boards load.

### Input

```json
{
  "companies": ["blueground","moodle"],
  "maxJobsPerCompany": 500,
  "includeDescription": true
}
```

The company identifier is the slug in the board URL: `apply.workable.com/{company}`. Full URLs also work.

### Pricing

Pay per result: roughly **$1 per 1,000 jobs** (plus a fractional start fee), cheaper on paid Apify plans. No subscription.

### FAQ

**How fresh is the data?** Live — every run reads the board's current public listings at that moment.

**Can I run it on a schedule?** Yes — use Apify Schedules for hourly/daily feeds, and webhooks or the API to pipe results anywhere (n8n, Make, Zapier, Google Sheets, your DB).

**Does it work with AI agents?** Yes — this actor is exposed via Apify's MCP server and supports agentic payments, so AI agents can call it directly.

**A company I need isn't returning jobs?** Check the slug matches the board URL. Still stuck? Open an issue — it goes straight to the maintainer.

**Need more than Workable?** Use **[ATS Jobs Scraper](https://apify.com/actorworks/ats-jobs-scraper)** — Greenhouse, Lever, Ashby, SmartRecruiters and Workday in one run, same schema.

### More job-data actors from ActorWorks

- [ATS Jobs Scraper — Greenhouse, Lever, Ashby, Workday & More](https://apify.com/actorworks/ats-jobs-scraper)
- [Remote Jobs Aggregator — RemoteOK, Remotive, WWR & More](https://apify.com/actorworks/remote-jobs-aggregator)

*Workable is a trademark of its owner; this independent tool is not affiliated with or endorsed by it.*

# Actor input Schema

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

Workable company identifiers — the slug from apply.workable.com/{company} — or full board URLs.

## `maxJobsPerCompany` (type: `integer`):

Cap on jobs fetched per company.

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

Fetch full job descriptions (HTML + plain text).

## Actor input object example

```json
{
  "companies": [
    "blueground",
    "moodle"
  ],
  "maxJobsPerCompany": 500,
  "includeDescription": true
}
```

# Actor output Schema

## `jobs` (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 = {
    "companies": [
        "blueground",
        "moodle"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("actorworks/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 = { "companies": [
        "blueground",
        "moodle",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("actorworks/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 '{
  "companies": [
    "blueground",
    "moodle"
  ]
}' |
apify call actorworks/workable-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,actorworks/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/GsE1Ic4Jh28E6HhIr/builds/iYLR69lqWqhe2bNNj/openapi.json
