# Career Sites Jobs API 💎 (`karaulal/career-sites-jobs-api`) Actor

GET low-cost premium access to 2M+ /jobs from 120,000+ career sites & 59 ATS platforms. Real-time stream of new jobs.

- **URL**: https://apify.com/karaulal/career-sites-jobs-api.md
- **Developed by:** [Luka](https://apify.com/karaulal) (community)
- **Categories:** Jobs
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.70 / 1,000 job results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use 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

## Jobs API 💎

GET low-cost premium access to 2M /jobs from 120,000+ career sites & ATS. Ongoing real-time stream of new jobs.

**2,000,000+ jobs. 59 ATS platforms. One endpoint.**

The Jobs API gives you a read window into a single PostgreSQL table of jobs that we scrape continuously from 59 ATS platforms — Greenhouse, Workday, Lever, Ashby, SmartRecruiters, iCIMS, Personio, Rippling, BambooHR, Workable, Breezy, Recruitee, Teamtailor, Jobvite, Zoho, Paylocity, Paycom, Ultipro, OracleCloud, Taleo, and the rest. Every posting is parsed, normalized, scored, deduplicated, and indexed.

You get `GET /api/jobs`. That's the API.

---

### The endpoint

````

GET /api/jobs?is\_remote=true\&country=United%20States\&job\_score\_order=desc\&limit=50

````

Response:

```json
{
  "backend": "postgresql",
  "total": 12480,
  "jobs": [
    {
      "id": "4819237401",
      "slug": "4819237401",
      "firestore_id": "4819237401",
      "job_id": "4819237401",
      "source_id": "greenhouse:4819237401",

      "title": "Senior Content Writer",
      "company_name": "Acme Co",
      "company_type": "startup",
      "company_logo_url": "https://logo.clearbit.com/acme.com",

      "job_type": "writer",
      "job_family": "Writing",
      "subcategory": "Content Writing",

      "workplace_type": "remote",
      "employment_type": "FULL_TIME",
      "experience_level": "senior",
      "is_remote": true,

      "location": "Austin, Texas, United States",
      "city": "Austin",
      "state": "Texas",
      "country": "United States",
      "location_country": "United States",

      "salary": "120000-160000",
      "compensation": {
        "currency": "USD",
        "min": 120000,
        "max": 160000,
        "period": "year"
      },

      "description": "Acme Co is hiring a Senior Content Writer to lead long-form content across our blog, docs, and customer education surfaces. You'll partner with product marketing, SEO, and design to ship 4-6 pieces a month that move pipeline and onboard users.",
      "description_html": "<p>Acme Co is hiring a <strong>Senior Content Writer</strong> to lead long-form content…</p>",

      "responsibilities": [
        "Own the editorial calendar across blog, docs, and lifecycle emails",
        "Write 4-6 long-form pieces per month tied to pipeline and activation goals",
        "Partner with SEO on keyword strategy and on-page optimization",
        "Interview subject-matter experts and translate technical concepts for a developer audience",
        "Maintain a consistent voice across surfaces, with documentation and tooling to match"
      ],

      "requirements": [
        "5+ years writing for B2B SaaS or technical audiences",
        "Portfolio of long-form published work with measurable outcomes",
        "Comfort working with SEO tooling (Ahrefs, Clearscope, or similar)",
        "Experience interviewing engineers and translating dense technical material",
        "Native-level written English"
      ],

      "benefits": [
        "Fully remote across the US and EU",
        "Equity in a profitable, growing company",
        "Unlimited PTO with a 3-week minimum",
        "Health, dental, vision (US) / private health stipend (EU)",
        "$2,000/year learning budget",
        "Home office stipend",
        "Quarterly company offsite"
      ],

      "hard_skills": ["SEO", "Content Strategy", "Editorial Planning", "CMS"],
      "soft_skills": ["Cross-functional Collaboration", "Ownership"],
      "tools": ["Ahrefs", "Clearscope", "Webflow", "Notion"],

      "apply_url": "https://acme.com/careers/4819237401",

      "job_score": 87,
      "job_score_breakdown": {
        "compensation": 90,
        "remote": 100,
        "freshness": 95,
        "company": 70,
        "completeness": 80
      },

      "source": "greenhouse",

      "date_posted": "2026-07-22T15:04:11Z",
      "created_at": "2026-07-22T16:11:09Z",

      "image_data": {
        "imageFile": "https://jobs.example.com/api/jobs/4819237401/image",
        "imageUrl": "https://jobs.example.com/screenshot/4819237401",
        "screenshotReadyAt": "2026-07-22T16:14:02Z"
      }
    }
  ],
  "limit": 50,
  "offset": 0,
  "filters": {
    "is_remote": "true",
    "country": "United States",
    "job_score_order": "desc",
    "limit": "50",
    "offset": "0"
  }
}
````

**Response envelope:**

| Field | Meaning |
|---|---|
| `backend` | The data backend (`"postgresql"`) |
| `total` | Total rows matching the filters, before `limit`/`offset` |
| `jobs` | Array of job rows |
| `limit` / `offset` | Echo of your pagination |
| `filters` | Echo of every filter you sent (snake\_case, canonical) |

Every response is `Cache-Control: no-store, no-cache, must-revalidate` — what you get is what's in the database right now. CORS is wide open (`Access-Control-Allow-Origin: *`).

***

### Query parameters

| Param | Type | Default | What it does |
|---|---|---|---|
| `title` | string | — | Case-insensitive substring (`ILIKE %…%`). `title=writer` matches "Senior Content Writer". |
| `country` | string | — | Exact match on `location_country`. `United States`, `Germany`, … |
| `is_remote` | `true` / `false` / `1` / `0` | — | Both spellings work |
| `workplace_type` | string | — | `remote`, `hybrid`, `on_site` |
| `employment_type` | string | — | `FULL_TIME`, `PART_TIME`, `CONTRACTOR` |
| `experience_level` | string | — | `entry`, `mid`, `senior` |
| `job_family` | string | — | Coarse grouping (`Writing`, `Engineering`, …) |
| `company_type` | string | — | `startup`, `enterprise`, `agency` |
| `source` | string | — | Which ATS the row came from — `greenhouse`, `workday`, `lever`, … |
| `date_posted_from` | ISO timestamp | — | `date_posted >= value` |
| `date_posted_to` | ISO timestamp | — | `date_posted <= value` |
| `job_score_order` | `asc` / `desc` | — | Sort by quality score. Without it, you get `created_at DESC, date_posted DESC` (freshest first) |
| `limit` | int (1–100) | `50` | Hard cap at 100 per page |
| `offset` | int (0–1,000,000) | `0` | Standard pagination |

Snake\_case is canonical. CamelCase aliases (`workplaceType`, `datePostedFrom`, `isRemote`, …) work too.

#### Pagination walk

```bash
## Page 1
curl 'https://jobs.example.com/api/jobs?limit=100&offset=0'
## Page 2
curl 'https://jobs.example.com/api/jobs?limit=100&offset=100'
## …keep going while jobs.length == limit, or while offset < total
```

#### Filter combinations that work well

```bash
## High-quality remote jobs posted this week, US
/api/jobs?is_remote=true&country=United%20States&date_posted_from=2026-07-18&job_score_order=desc

## Senior engineering roles in Germany
/api/jobs?experience_level=senior&job_family=Engineering&country=Germany

## All Greenhouse postings mentioning "kubernetes" in the title
/api/jobs?source=greenhouse&title=kubernetes

## Hybrid contractor roles at startups
/api/jobs?workplace_type=hybrid&employment_type=CONTRACTOR&company_type=startup
```

***

### The 59 ATS platforms

Every row in the table came from one of these. Each one has its own quirks — Greenhouse returns public job boards, Workday hides behind `wd1`/`wd5` subdomains, Lever needs company slugs, Ashby uses `posting-api/job-board/{clientname}`, SmartRecruiters uses `jobs-v2`, iCIMS returns XML unless you pass `content=false`, Personio paginates with offset/limit, BambooHR needs an auth token, Rippling uses `ats-api`. The scraping pipeline handles all of that and normalizes the output into one schema, so you don't have to know which is which.

`greenhouse`, `workday`, `lever`, `ashby`, `smartrecruiters`, `icims`, `personio`, `recruitee`, `teamtailor`, `workable`, `breezy`, `bamboohr`, `jobvite`, `rippling`, `zoho`, `workstream`, `oraclecloud`, `paylocity`, `paycom`, `ultipro`, `eightfold`, `comeet`, `gem`, `pinpoint`, `polymer`, `trakstar`, `dayforce`, `successfactors`, `taleo`, `hibob`, `adp-workforce-now`, `adp-myjobs`, `gohire`, `hireology`, `hirehive`, `hiringthing`, `jobscore`, `joincom`, `loxo`, `manatal`, `pageup`, `pyjamahr`, `recooty`, `applicantpro`, `avahr`, `freshteam`, `homerun`, `applytojob`, `easy.jobs`, `dover`, `recruitpro`, `catsone`, `candidatemanager`, `brassring`, `careerplug`, `careerpuck`, `applicantstack`, `apploi`, `harri`, `isolved`

Every row carries its source in the `source` column. Filter by it to slice. Ignore it otherwise.

***

### The `job_family` values

The `job_family` column is a closed enumeration. Use any of these values with the `job_family` filter — they're the canonical taxonomy the dataset is bucketed into.

`Administration`, `Agriculture`, `Aviation & Maritime`, `Customer`, `Customer Support`, `Data`, `Design`, `Development`, `Education`, `Engineering`, `Finance`, `Government`, `Healthcare`, `Hospitality`, `Legal`, `Manufacturing`, `Marketing`, `Media & Entertainment`, `Mining & Resources`, `Operations`, `People`, `Personal Services`, `Product`, `QA & Testing`, `Real Estate`, `Research`, `Retail`, `Sales`, `Science & Research`, `Security`, `Skilled Trades`, `Sports`, `Veterinary`, `Writing`

That's 34 canonical values. A handful of legacy rows still carry the older `Qa` spelling (a duplicate of `QA & Testing`) — treat them as the same. Older rows where the family hasn't been assigned yet have `job_family = "unspecified"`.

Under each family you'll find `subcategory` values — those are open-ended. `Writing` has `Content Writing`, `Copywriting`, `Technical Writing`, `Editing`, `Journalism`, `Translation`. `Development` has `Frontend`, `Backend`, `Full Stack`, `Mobile`, `DevOps`, `ML Engineering`, `Security Engineering`, and so on. Filter by `subcategory` when you need that level of granularity.

***

### What a job row looks like

The fields you'll actually use:

| Field | Type | What it is |
|---|---|---|
| `id` / `slug` | text | Deterministic 10-digit numeric id, same in both |
| `firestore_id` | text | Legacy doc id (older rows) |
| `job_id` / `source_id` | text | Source-system ids |
| `title` | text | Job title |
| `company_name` | text | Hiring company |
| `company_type` | text | `startup`, `enterprise`, `agency` |
| `job_type` | text | Normalized bucket (`writer`, `engineer`, …) |
| `job_family` | text | Coarse grouping — one of the filter facets |
| `subcategory` | text | Finer grouping under `job_family` |
| `workplace_type` | text | `remote`, `hybrid`, `on_site` |
| `employment_type` | text | `FULL_TIME`, `PART_TIME`, `CONTRACTOR` |
| `experience_level` | text | `entry`, `mid`, `senior` |
| `is_remote` | bool | Indexed boolean — the hot filter |
| `location` | text | Raw location string as posted |
| `city` / `state` / `country` | text | Parsed components |
| `location_country` | text | Canonical country used by the `country` filter |
| `date_posted` | timestamptz | When the source listed it |
| `created_at` | timestamptz | When the pipeline wrote the row |
| `salary` | text | Raw salary line |
| `compensation` | jsonb | Parsed `{currency, min, max, period}` when extractable |
| `job_score` | numeric | 0–100 quality score |
| `apply_url` | text | Apply link |
| `description` / `description_html` | text | Raw + sanitized |
| `responsibilities` / `requirements` | text | Extracted bullets (newer rows) |
| `hard_skills` / `soft_skills` / `tools` | array | Extracted skill tags |
| `source` | text | Which ATS — `greenhouse`, `workday`, … |
| `image_data` | jsonb | Rendered preview `{imageFile, imageUrl, screenshotReadyAt}` |

Indexes built for the queries that matter: `(is_remote, created_at DESC)`, `(is_remote, job_family, created_at DESC)`, `(is_remote, location_country, created_at DESC)`, `(is_remote, company_type, created_at DESC)`, `(is_remote, date_posted DESC, created_at DESC)`, plus a GIN trigram on `title`. Substring search and common filter combinations stay fast as the table grows past 2M.

***

### What you can build

**A search widget on your site.** Drop a country dropdown, a remote-only toggle, a job-family picker — every common filter maps to a query param. `fetch('/api/jobs?…')` and render the results. 100-row page size, paginate with `offset`.

**A Slack or Telegram "new jobs" bot.** Every hour, hit `/api/jobs?date_posted_from=<one hour ago>&job_score_order=desc&limit=10`. Post the top 10 to your channel. The filter does the work.

**A daily email digest.** Cron at 8am. `date_posted_from=<yesterday>`, sort by `job_score_order=desc`, group by `job_family`, render to email. Each link goes to `apply_url`.

**A salary tracker.** Pull all rows where `compensation IS NOT NULL`, group by `location_country` and `job_family`, average `compensation.min` and `compensation.max`. One query, structured data.

**A recruiting funnel for outbound.** Pull candidates with `job_score_order=desc&limit=100`, filter by `experience_level` and `company_type` to match your ICP, hit `apply_url` directly. The score sort means the top of the list is the highest-signal postings.

**A vertical job board.** If you're building for designers, marketers, engineers, devs, writers — filter by `subcategory` and you have a curated vertical feed. Add a sign-up gate, monetize the apply click.

**A talent-marketplace watchlist.** Save a query (`is_remote=true&job_family=Engineering&country=Germany&title=staff`). Hit it daily, diff against yesterday, alert your users when a match lands.

**ATS migration.** If you're building a job-board product, you don't need to engineer 59 scrapers yourself. Pull from this endpoint and ship your product. We already maintain the parsers, the proxies, the rate-limit handling, the de-duplication, the scoring.

***

### For Excel File Exports

Visit [jobstore.co](https://jobstore.co) for continous export of jobs in Excel file. Same data, same filters, build your file, and export.

Why? Community owners, online coaches, conference organizers, share jobs files with ther members. This solution makes the job sharing super simple.

***

### What you're getting

- 2,000,000+ rows, growing continuously
- 59 ATS platforms normalized into one schema
- Query latency dominated by the index — most filter combinations return in tens of milliseconds
- CORS on, no auth on read, no rate limits on the read endpoint
- `no-store` cache header, so polling is safe

One endpoint, one table, every job across 59 ATS platforms.

# Actor input Schema

## `title` (type: `string`):

Case-insensitive substring match anywhere in the job title. Example: 'writer' matches 'Senior Content Writer'.

## `country` (type: `string`):

Exact match against the canonical country name on the parsed location. Use the full English country name, e.g. 'United States'.

## `is_remote` (type: `string`):

Filter by remote-friendly roles. 'Any' returns all roles regardless of workplace.

## `workplace_type` (type: `string`):

Exact match on workplace arrangement.

## `employment_type` (type: `string`):

Exact match on employment contract type.

## `experience_level` (type: `string`):

Exact match on seniority band.

## `job_family` (type: `string`):

One of the 34 canonical job families the dataset is bucketed into.

## `subcategory` (type: `string`):

Finer-grained bucket under a job family, e.g. 'Content Writing', 'Backend'. Open-ended vocabulary.

## `source` (type: `string`):

Filter to postings from one specific ATS platform.

## `date_posted_from` (type: `string`):

Lower bound (inclusive) on when the source ATS listed the job. Use YYYY-MM-DD or a full ISO 8601 timestamp.

## `date_posted_to` (type: `string`):

Upper bound (inclusive) on when the source ATS listed the job. Use YYYY-MM-DD or a full ISO 8601 timestamp.

## `job_score_order` (type: `string`):

Sort by the 0-100 quality score instead of freshest-first.

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

Total number of jobs to fetch across pages. The actor paginates the API (100 rows/page) until this many are collected or results are exhausted.

## `offset` (type: `integer`):

Number of jobs to skip before returning results. Useful for resuming a walk through a large result set.

## Actor input object example

```json
{
  "title": "writer",
  "country": "United States",
  "is_remote": "",
  "workplace_type": "",
  "employment_type": "",
  "experience_level": "",
  "job_family": "",
  "subcategory": "Content Writing",
  "source": "",
  "date_posted_from": "2026-07-18",
  "date_posted_to": "2026-07-25",
  "job_score_order": "",
  "maxItems": 50,
  "offset": 0
}
```

# Actor output Schema

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

The full dataset of normalized job postings fetched on this run. Each item is a Job object as defined by the dataset schema.

## `summary` (type: `string`):

A small JSON record with metadata about this run: total matched, items fetched, filters used, pagination, charges.

# 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 = {
    "title": ""
};

// Run the Actor and wait for it to finish
const run = await client.actor("karaulal/career-sites-jobs-api").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 = { "title": "" }

# Run the Actor and wait for it to finish
run = client.actor("karaulal/career-sites-jobs-api").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "title": ""
}' |
apify call karaulal/career-sites-jobs-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=karaulal/career-sites-jobs-api",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Career Sites Jobs API 💎",
        "description": "GET low-cost premium access to 2M+ /jobs from 120,000+ career sites & 59 ATS platforms. Real-time stream of new jobs.",
        "version": "0.0",
        "x-build-id": "DHOrDXiDAVlpYryvq"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/karaulal~career-sites-jobs-api/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-karaulal-career-sites-jobs-api",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/karaulal~career-sites-jobs-api/runs": {
            "post": {
                "operationId": "runs-sync-karaulal-career-sites-jobs-api",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/karaulal~career-sites-jobs-api/run-sync": {
            "post": {
                "operationId": "run-sync-karaulal-career-sites-jobs-api",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "title": {
                        "title": "Job title contains",
                        "type": "string",
                        "description": "Case-insensitive substring match anywhere in the job title. Example: 'writer' matches 'Senior Content Writer'."
                    },
                    "country": {
                        "title": "Country",
                        "type": "string",
                        "description": "Exact match against the canonical country name on the parsed location. Use the full English country name, e.g. 'United States'."
                    },
                    "is_remote": {
                        "title": "Remote",
                        "enum": [
                            "",
                            "true",
                            "false"
                        ],
                        "type": "string",
                        "description": "Filter by remote-friendly roles. 'Any' returns all roles regardless of workplace.",
                        "default": ""
                    },
                    "workplace_type": {
                        "title": "Workplace type",
                        "enum": [
                            "",
                            "remote",
                            "hybrid",
                            "on_site"
                        ],
                        "type": "string",
                        "description": "Exact match on workplace arrangement.",
                        "default": ""
                    },
                    "employment_type": {
                        "title": "Employment type",
                        "enum": [
                            "",
                            "FULL_TIME",
                            "PART_TIME",
                            "CONTRACTOR"
                        ],
                        "type": "string",
                        "description": "Exact match on employment contract type.",
                        "default": ""
                    },
                    "experience_level": {
                        "title": "Experience level",
                        "enum": [
                            "",
                            "entry",
                            "mid",
                            "senior"
                        ],
                        "type": "string",
                        "description": "Exact match on seniority band.",
                        "default": ""
                    },
                    "job_family": {
                        "title": "Job family",
                        "enum": [
                            "",
                            "Administration",
                            "Agriculture",
                            "Aviation & Maritime",
                            "Customer",
                            "Customer Support",
                            "Data",
                            "Design",
                            "Development",
                            "Education",
                            "Engineering",
                            "Finance",
                            "Government",
                            "Healthcare",
                            "Hospitality",
                            "Legal",
                            "Manufacturing",
                            "Marketing",
                            "Media & Entertainment",
                            "Mining & Resources",
                            "Operations",
                            "People",
                            "Personal Services",
                            "Product",
                            "QA & Testing",
                            "Real Estate",
                            "Research",
                            "Retail",
                            "Sales",
                            "Science & Research",
                            "Security",
                            "Skilled Trades",
                            "Sports",
                            "Veterinary",
                            "Writing"
                        ],
                        "type": "string",
                        "description": "One of the 34 canonical job families the dataset is bucketed into.",
                        "default": ""
                    },
                    "subcategory": {
                        "title": "Subcategory",
                        "type": "string",
                        "description": "Finer-grained bucket under a job family, e.g. 'Content Writing', 'Backend'. Open-ended vocabulary."
                    },
                    "source": {
                        "title": "ATS source",
                        "enum": [
                            "",
                            "greenhouse",
                            "workday",
                            "lever",
                            "ashby",
                            "smartrecruiters",
                            "icims",
                            "personio",
                            "recruitee",
                            "teamtailor",
                            "workable",
                            "breezy",
                            "bamboohr",
                            "jobvite",
                            "rippling",
                            "zoho",
                            "workstream",
                            "oraclecloud",
                            "paylocity",
                            "paycom",
                            "ultipro",
                            "eightfold",
                            "comeet",
                            "gem",
                            "pinpoint",
                            "polymer",
                            "trakstar",
                            "dayforce",
                            "successfactors",
                            "taleo",
                            "hibob",
                            "adp-workforce-now",
                            "adp-myjobs",
                            "gohire",
                            "hireology",
                            "hirehive",
                            "hiringthing",
                            "jobscore",
                            "joincom",
                            "loxo",
                            "manatal",
                            "pageup",
                            "pyjamahr",
                            "recooty",
                            "applicantpro",
                            "avahr",
                            "freshteam",
                            "homerun",
                            "applytojob",
                            "easy.jobs",
                            "dover",
                            "recruitpro",
                            "catsone",
                            "candidatemanager",
                            "brassring",
                            "careerplug",
                            "careerpuck",
                            "applicantstack",
                            "apploi",
                            "harri",
                            "isolved"
                        ],
                        "type": "string",
                        "description": "Filter to postings from one specific ATS platform.",
                        "default": ""
                    },
                    "date_posted_from": {
                        "title": "Posted from",
                        "type": "string",
                        "description": "Lower bound (inclusive) on when the source ATS listed the job. Use YYYY-MM-DD or a full ISO 8601 timestamp."
                    },
                    "date_posted_to": {
                        "title": "Posted to",
                        "type": "string",
                        "description": "Upper bound (inclusive) on when the source ATS listed the job. Use YYYY-MM-DD or a full ISO 8601 timestamp."
                    },
                    "job_score_order": {
                        "title": "Sort by quality score",
                        "enum": [
                            "",
                            "desc",
                            "asc"
                        ],
                        "type": "string",
                        "description": "Sort by the 0-100 quality score instead of freshest-first.",
                        "default": ""
                    },
                    "maxItems": {
                        "title": "Max jobs to fetch",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Total number of jobs to fetch across pages. The actor paginates the API (100 rows/page) until this many are collected or results are exhausted.",
                        "default": 50
                    },
                    "offset": {
                        "title": "Start offset",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Number of jobs to skip before returning results. Useful for resuming a walk through a large result set.",
                        "default": 0
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
