# Hiring.cafe Jobs Scraper & API (`parsebird/hiring-cafe-scraper`) Actor

Scrape detailed job listings from Hiring.cafe — titles, salaries, companies, locations, tech stacks, and 30+ fields from 2.8M+ postings across 46 ATS platforms. Filter by keyword, location, salary, seniority, and more. Export as JSON, CSV, Excel, or access via API.

- **URL**: https://apify.com/parsebird/hiring-cafe-scraper.md
- **Developed by:** [ParseBird](https://apify.com/parsebird) (community)
- **Categories:** Jobs, Lead generation, Developer tools
- **Stats:** 5 total users, 2 monthly users, 90.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 job scrapeds

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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.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/platform/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

### Hiring.cafe Jobs Scraper

Scrape detailed job listings from Hiring.cafe — an AI-powered job aggregator with 2.8M+ postings from 46 ATS platforms including Greenhouse, Lever, Workable, and SuccessFactors. Extract 30+ structured fields per job.

<table><tr>
<td style="border-left:4px solid #2563EB;padding:12px 16px;font-weight:600">
Search by keyword, location, salary, company, seniority, tech stack, and 20+ other filters — get clean, structured job data ready for analysis, monitoring, or integration.
</td>
</tr></table>

##### Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

````

Apify Actor: parsebird/hiring-cafe-scraper. Scrapes job listings from Hiring.cafe. Call via ApifyClient: client.actor("parsebird/hiring-cafe-scraper").call(run\_input={"searchQueries": \["software engineer"], "locations": \[], "maxItems": 50, "workplaceTypes": \["Remote","Hybrid","Onsite"], "dateFetchedPastNDays": 30, "sortBy": "default"}). Returns 30+ fields per job: id, title, description, companyName, salaryMin, salaryMax, salaryCurrency, workplaceType, seniorityLevel, commitment, category, technicalTools, applyUrl, workplaceCities, workplaceCountries, source, boardToken, and more. Full API spec: https://apify.com/parsebird/hiring-cafe-scraper/api. Get your token: https://console.apify.com/settings/integrations.

````

### What does Hiring.cafe Jobs Scraper do?

This actor scrapes job listings from [Hiring.cafe](https://hiring.cafe), a platform that aggregates job postings from 46+ applicant tracking systems. It navigates Cloudflare protection automatically, then queries the internal search API to extract comprehensive job data.

You can filter by search keywords, geographic location, workplace type (remote/hybrid/onsite), seniority level, commitment type, salary range, company name, industry, tech stack, and more. The actor returns up to 1,000 structured job records per run with 30+ fields each.

### Input parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `searchQueries` | array | No | `[]` | Keywords to search (e.g. "software engineer", "data scientist"). Empty returns unfiltered results |
| `locations` | array | No | `[]` | Location filters (e.g. "San Francisco", "United States"). Empty returns worldwide |
| `workplaceTypes` | array | No | All three | `Remote`, `Hybrid`, `Onsite` |
| `seniorityLevels` | array | No | All six | `No Prior Experience Required`, `Entry Level`, `Mid Level`, `Senior Level`, `Director`, `Executive` |
| `commitmentTypes` | array | No | All seven | `Full Time`, `Part Time`, `Contract`, `Internship`, `Temporary`, `Seasonal`, `Volunteer` |
| `dateFetchedPastNDays` | integer | No | `30` | Only include jobs fetched within the last N days (max 365) |
| `maxItems` | integer | No | `50` | Maximum jobs to return across all queries (max 1,000) |
| `jobTitleQuery` | string | No | — | Filter to jobs whose title contains this phrase |
| `jobDescriptionQuery` | string | No | — | Filter to jobs whose description contains this phrase |
| `technologyKeywordsQuery` | string | No | — | Match against parsed tech-stack tags (e.g. python, react) |
| `requirementsKeywordsQuery` | string | No | — | Match against parsed requirement bullets |
| `companyNames` | array | No | `[]` | Whitelist — only jobs from these companies |
| `excludedCompanyNames` | array | No | `[]` | Blacklist — exclude jobs from these companies |
| `companyKeywords` | array | No | `[]` | Substring-match the company name (whitelist) |
| `excludedCompanyKeywords` | array | No | `[]` | Substring-match the company name (blacklist) |
| `industries` | array | No | `[]` | Limit to companies in these industries |
| `excludedIndustries` | array | No | `[]` | Exclude companies in these industries |
| `salaryCurrency` | string | No | Any | `USD`, `EUR`, `GBP`, `CAD`, `AUD`, `INR`, `JPY`, `CNY`, `MXN`, `BRL` |
| `salaryFrequency` | string | No | Any | `Yearly`, `Monthly`, `Weekly`, `Daily`, `Hourly` |
| `minSalary` | integer | No | — | Lower bound for compensation |
| `maxSalary` | integer | No | — | Upper bound for compensation |
| `onlyTransparentSalaries` | boolean | No | `false` | Drop jobs without a published salary range |
| `minYearsExperience` | integer | No | `0` | Minimum years of experience required |
| `maxYearsExperience` | integer | No | `20` | Maximum years of experience required |
| `sortBy` | string | No | `default` | `default` (relevance), `newest`, `oldest`, `salary_high_to_low`, `salary_low_to_high` |

### Output example

```json
{
    "id": "greenhouse___acme___4567890",
    "objectID": "greenhouse_acme_4567890",
    "source": "greenhouse",
    "boardToken": "acme",
    "applyUrl": "https://boards.greenhouse.io/acme/jobs/4567890",
    "title": "Senior Software Engineer, Backend",
    "description": "We are looking for a senior backend engineer to join our Platform team...",
    "isExpired": false,
    "coreJobTitle": "Software Engineer",
    "category": "Engineering",
    "seniorityLevel": "Senior Level",
    "roleType": "Individual Contributor",
    "commitment": "Full Time",
    "workplaceType": "Remote",
    "workplaceCountries": ["US"],
    "workplaceStates": ["California", "New York"],
    "workplaceCities": ["San Francisco", "New York"],
    "latitude": 37.7749,
    "longitude": -122.4194,
    "salaryMin": 160000.0,
    "salaryMax": 220000.0,
    "salaryCurrency": "USD",
    "salaryFrequency": "Yearly",
    "technicalTools": ["Python", "PostgreSQL", "Kubernetes", "Django"],
    "minYearsExperience": 5,
    "bachelorsDegreeRequirement": "Required",
    "companyName": "Acme Corp",
    "companyWebsite": "https://acme.example.com",
    "companyIndustries": ["Software", "SaaS"],
    "companyEmployees": "1001-5000",
    "companyHqCountry": "US",
    "scrapedAt": "2026-05-14T11:05:00+00:00"
}
````

### Use cases

- **Job market research** — Analyze hiring trends, salary ranges, and demand for specific skills across industries and geographies.
- **Competitive intelligence** — Monitor competitor hiring patterns, open headcount, and the technologies they use.
- **Talent acquisition** — Build automated pipelines that surface new job openings matching your criteria in real time.
- **Salary benchmarking** — Collect compensation data across roles, locations, and seniority levels for negotiation or budgeting.
- **Tech stack analysis** — Identify the most in-demand technologies by parsing tech-stack tags from thousands of listings.
- **Academic research** — Create datasets for labor economics, workforce mobility studies, or skills-gap analysis.

### How it works

1. **Cloudflare bypass** — Launches a stealth Chromium browser (Patchright) on a residential US proxy. Navigates to hiring.cafe and waits for the Cloudflare Managed Challenge to self-solve (typically 8–20 seconds). If the first attempt times out, it rotates the proxy session and retries up to 6 times.
2. **API query** — Once the browser has a valid session, the actor constructs a search payload from your input filters and calls Hiring.cafe's internal search API directly from the browser context, reusing the Cloudflare cookies.
3. **Pagination** — The API returns up to 1,000 jobs per page. The actor walks pages until `maxItems` is reached or results are exhausted.
4. **Data transformation** — Raw API responses are mapped to a clean 30+ field schema. HTML is stripped from descriptions and truncated to 2,000 characters.
5. **Output** — Results are pushed to the Apify dataset for download in JSON, CSV, Excel, or via API.

### Pricing

| Event | Price per event | Price per 1,000 |
|-------|----------------|-----------------|
| `job-scraped` | $0.003 | **$3.00** |

Each job listing pushed to the dataset counts as one event. A run fetching 200 jobs costs $0.60 in actor charges plus Apify platform costs.

### FAQ

**How fresh is the data?**
The `dateFetchedPastNDays` parameter controls freshness. The default is 30 days. Set to 7 for last-week postings, or 1 for last-24-hours monitoring.

**Why are some salaryMin / salaryMax values zero?**
Fewer than half of listings on Hiring.cafe disclose salary. When salary is not published, both fields default to 0.0.

**Can I search by company?**
Yes — use `companyNames` for exact-match whitelist, `excludedCompanyNames` for blacklist, or `companyKeywords` / `excludedCompanyKeywords` for substring matching. You can also put the company name in `searchQueries`, which matches against title, description, and company name.

**What is the difference between seniorityLevel and minYearsExperience?**
`seniorityLevel` is the categorical tag (Mid Level, Senior Level, etc.) assigned by Hiring.cafe's classifier. `minYearsExperience` is the numeric minimum years of experience extracted from the job description.

**Are expired jobs included?**
No — Hiring.cafe only returns active listings. The `isExpired` field is preserved in the output for consistency but will always be `false`.

**How many jobs can I get per run?**
Up to 1,000 jobs per run (set via `maxItems`). The API returns approximately 1,000 jobs per page, so most queries complete in 1–2 API calls.

**How does pagination work?**
The internal API returns up to 1,000 jobs per page. The actor increments the page number until `maxItems` is reached or results run out.

**Does this actor work without a proxy?**
On the Apify platform, a residential US proxy is applied automatically. For local testing, the actor runs without a proxy — Cloudflare may or may not block depending on your IP.

### Legal and compliance

This actor accesses only publicly available data from Hiring.cafe. It does not bypass login walls, access private accounts, or collect personal user data. The data collected consists of job postings that companies have intentionally made public for recruitment purposes. Users are responsible for ensuring their use of scraped data complies with applicable laws and Hiring.cafe's Terms of Service.

# Actor input Schema

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

Keywords to search on Hiring.cafe (e.g. "software engineer", "data scientist"). Leave empty to return unfiltered results.

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

Filter to jobs in these locations. Plain strings like "San Francisco" or "United States".

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

Filter by workplace type.

## `seniorityLevels` (type: `array`):

Filter by seniority level.

## `commitmentTypes` (type: `array`):

Filter by commitment type.

## `dateFetchedPastNDays` (type: `integer`):

Only include jobs fetched within the last N days.

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

Maximum number of jobs to return across all queries.

## `jobTitleQuery` (type: `string`):

Filter to jobs whose title contains this phrase.

## `jobDescriptionQuery` (type: `string`):

Filter to jobs whose description contains this phrase.

## `technologyKeywordsQuery` (type: `string`):

Match against parsed tech-stack tags (e.g. python, react).

## `requirementsKeywordsQuery` (type: `string`):

Match against parsed requirement bullets.

## `companyNames` (type: `array`):

Only include jobs from these companies (exact match).

## `excludedCompanyNames` (type: `array`):

Exclude jobs from these companies (exact match).

## `companyKeywords` (type: `array`):

Substring-match the company name (whitelist).

## `excludedCompanyKeywords` (type: `array`):

Substring-match the company name (blacklist).

## `industries` (type: `array`):

Limit to companies in these industries.

## `excludedIndustries` (type: `array`):

Exclude companies in these industries.

## `salaryCurrency` (type: `string`):

Filter by salary currency. Leave empty for any currency.

## `salaryFrequency` (type: `string`):

Filter by salary frequency. Leave empty for any frequency.

## `minSalary` (type: `integer`):

Lower bound for compensation in the chosen currency and frequency.

## `maxSalary` (type: `integer`):

Upper bound for compensation in the chosen currency and frequency.

## `onlyTransparentSalaries` (type: `boolean`):

Drop jobs that don't publish a salary range.

## `minYearsExperience` (type: `integer`):

Filter to jobs requiring at least this many years of experience.

## `maxYearsExperience` (type: `integer`):

Filter to jobs requiring at most this many years of experience.

## `sortBy` (type: `string`):

Sort order for results.

## Actor input object example

```json
{
  "searchQueries": [
    "software engineer"
  ],
  "locations": [],
  "workplaceTypes": [
    "Remote",
    "Hybrid",
    "Onsite"
  ],
  "seniorityLevels": [
    "No Prior Experience Required",
    "Entry Level",
    "Mid Level",
    "Senior Level",
    "Director",
    "Executive"
  ],
  "commitmentTypes": [
    "Full Time",
    "Part Time",
    "Contract",
    "Internship",
    "Temporary",
    "Seasonal",
    "Volunteer"
  ],
  "dateFetchedPastNDays": 30,
  "maxItems": 50,
  "jobTitleQuery": "",
  "jobDescriptionQuery": "",
  "technologyKeywordsQuery": "",
  "requirementsKeywordsQuery": "",
  "companyNames": [],
  "excludedCompanyNames": [],
  "companyKeywords": [],
  "excludedCompanyKeywords": [],
  "industries": [],
  "excludedIndustries": [],
  "salaryCurrency": "",
  "salaryFrequency": "",
  "onlyTransparentSalaries": false,
  "minYearsExperience": 0,
  "maxYearsExperience": 20,
  "sortBy": "default"
}
```

# Actor output Schema

## `dataset` (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"
    ],
    "locations": [],
    "workplaceTypes": [
        "Remote",
        "Hybrid",
        "Onsite"
    ],
    "seniorityLevels": [
        "No Prior Experience Required",
        "Entry Level",
        "Mid Level",
        "Senior Level",
        "Director",
        "Executive"
    ],
    "commitmentTypes": [
        "Full Time",
        "Part Time",
        "Contract",
        "Internship",
        "Temporary",
        "Seasonal",
        "Volunteer"
    ],
    "dateFetchedPastNDays": 30,
    "maxItems": 50,
    "sortBy": "default"
};

// Run the Actor and wait for it to finish
const run = await client.actor("parsebird/hiring-cafe-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"],
    "locations": [],
    "workplaceTypes": [
        "Remote",
        "Hybrid",
        "Onsite",
    ],
    "seniorityLevels": [
        "No Prior Experience Required",
        "Entry Level",
        "Mid Level",
        "Senior Level",
        "Director",
        "Executive",
    ],
    "commitmentTypes": [
        "Full Time",
        "Part Time",
        "Contract",
        "Internship",
        "Temporary",
        "Seasonal",
        "Volunteer",
    ],
    "dateFetchedPastNDays": 30,
    "maxItems": 50,
    "sortBy": "default",
}

# Run the Actor and wait for it to finish
run = client.actor("parsebird/hiring-cafe-scraper").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 '{
  "searchQueries": [
    "software engineer"
  ],
  "locations": [],
  "workplaceTypes": [
    "Remote",
    "Hybrid",
    "Onsite"
  ],
  "seniorityLevels": [
    "No Prior Experience Required",
    "Entry Level",
    "Mid Level",
    "Senior Level",
    "Director",
    "Executive"
  ],
  "commitmentTypes": [
    "Full Time",
    "Part Time",
    "Contract",
    "Internship",
    "Temporary",
    "Seasonal",
    "Volunteer"
  ],
  "dateFetchedPastNDays": 30,
  "maxItems": 50,
  "sortBy": "default"
}' |
apify call parsebird/hiring-cafe-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=parsebird/hiring-cafe-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Hiring.cafe Jobs Scraper & API",
        "description": "Scrape detailed job listings from Hiring.cafe — titles, salaries, companies, locations, tech stacks, and 30+ fields from 2.8M+ postings across 46 ATS platforms. Filter by keyword, location, salary, seniority, and more. Export as JSON, CSV, Excel, or access via API.",
        "version": "1.4",
        "x-build-id": "HH2qr6uXtutFIY2rt"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/parsebird~hiring-cafe-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-parsebird-hiring-cafe-scraper",
                "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/parsebird~hiring-cafe-scraper/runs": {
            "post": {
                "operationId": "runs-sync-parsebird-hiring-cafe-scraper",
                "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/parsebird~hiring-cafe-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-parsebird-hiring-cafe-scraper",
                "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": {
                    "searchQueries": {
                        "title": "Search Queries",
                        "type": "array",
                        "description": "Keywords to search on Hiring.cafe (e.g. \"software engineer\", \"data scientist\"). Leave empty to return unfiltered results.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "locations": {
                        "title": "Locations",
                        "type": "array",
                        "description": "Filter to jobs in these locations. Plain strings like \"San Francisco\" or \"United States\".",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "workplaceTypes": {
                        "title": "Workplace Types",
                        "type": "array",
                        "description": "Filter by workplace type.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "Remote",
                                "Hybrid",
                                "Onsite"
                            ],
                            "enumTitles": [
                                "Remote",
                                "Hybrid",
                                "Onsite"
                            ]
                        },
                        "default": [
                            "Remote",
                            "Hybrid",
                            "Onsite"
                        ]
                    },
                    "seniorityLevels": {
                        "title": "Seniority Levels",
                        "type": "array",
                        "description": "Filter by seniority level.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "No Prior Experience Required",
                                "Entry Level",
                                "Mid Level",
                                "Senior Level",
                                "Director",
                                "Executive"
                            ],
                            "enumTitles": [
                                "No Prior Experience Required",
                                "Entry Level",
                                "Mid Level",
                                "Senior Level",
                                "Director",
                                "Executive"
                            ]
                        },
                        "default": [
                            "No Prior Experience Required",
                            "Entry Level",
                            "Mid Level",
                            "Senior Level",
                            "Director",
                            "Executive"
                        ]
                    },
                    "commitmentTypes": {
                        "title": "Commitment Types",
                        "type": "array",
                        "description": "Filter by commitment type.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "Full Time",
                                "Part Time",
                                "Contract",
                                "Internship",
                                "Temporary",
                                "Seasonal",
                                "Volunteer"
                            ],
                            "enumTitles": [
                                "Full Time",
                                "Part Time",
                                "Contract",
                                "Internship",
                                "Temporary",
                                "Seasonal",
                                "Volunteer"
                            ]
                        },
                        "default": [
                            "Full Time",
                            "Part Time",
                            "Contract",
                            "Internship",
                            "Temporary",
                            "Seasonal",
                            "Volunteer"
                        ]
                    },
                    "dateFetchedPastNDays": {
                        "title": "Date Fetched (Past N Days)",
                        "minimum": 1,
                        "maximum": 365,
                        "type": "integer",
                        "description": "Only include jobs fetched within the last N days.",
                        "default": 30
                    },
                    "maxItems": {
                        "title": "Max Items",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Maximum number of jobs to return across all queries.",
                        "default": 50
                    },
                    "jobTitleQuery": {
                        "title": "Job Title Query",
                        "type": "string",
                        "description": "Filter to jobs whose title contains this phrase.",
                        "default": ""
                    },
                    "jobDescriptionQuery": {
                        "title": "Job Description Query",
                        "type": "string",
                        "description": "Filter to jobs whose description contains this phrase.",
                        "default": ""
                    },
                    "technologyKeywordsQuery": {
                        "title": "Technology Keywords Query",
                        "type": "string",
                        "description": "Match against parsed tech-stack tags (e.g. python, react).",
                        "default": ""
                    },
                    "requirementsKeywordsQuery": {
                        "title": "Requirements Keywords Query",
                        "type": "string",
                        "description": "Match against parsed requirement bullets.",
                        "default": ""
                    },
                    "companyNames": {
                        "title": "Company Names (Whitelist)",
                        "type": "array",
                        "description": "Only include jobs from these companies (exact match).",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "excludedCompanyNames": {
                        "title": "Excluded Company Names",
                        "type": "array",
                        "description": "Exclude jobs from these companies (exact match).",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "companyKeywords": {
                        "title": "Company Keywords (Whitelist)",
                        "type": "array",
                        "description": "Substring-match the company name (whitelist).",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "excludedCompanyKeywords": {
                        "title": "Excluded Company Keywords",
                        "type": "array",
                        "description": "Substring-match the company name (blacklist).",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "industries": {
                        "title": "Industries",
                        "type": "array",
                        "description": "Limit to companies in these industries.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "excludedIndustries": {
                        "title": "Excluded Industries",
                        "type": "array",
                        "description": "Exclude companies in these industries.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "salaryCurrency": {
                        "title": "Salary Currency",
                        "enum": [
                            "",
                            "USD",
                            "EUR",
                            "GBP",
                            "CAD",
                            "AUD",
                            "INR",
                            "JPY",
                            "CNY",
                            "MXN",
                            "BRL"
                        ],
                        "type": "string",
                        "description": "Filter by salary currency. Leave empty for any currency.",
                        "default": ""
                    },
                    "salaryFrequency": {
                        "title": "Salary Frequency",
                        "enum": [
                            "",
                            "Yearly",
                            "Monthly",
                            "Weekly",
                            "Daily",
                            "Hourly"
                        ],
                        "type": "string",
                        "description": "Filter by salary frequency. Leave empty for any frequency.",
                        "default": ""
                    },
                    "minSalary": {
                        "title": "Minimum Salary",
                        "type": "integer",
                        "description": "Lower bound for compensation in the chosen currency and frequency."
                    },
                    "maxSalary": {
                        "title": "Maximum Salary",
                        "type": "integer",
                        "description": "Upper bound for compensation in the chosen currency and frequency."
                    },
                    "onlyTransparentSalaries": {
                        "title": "Only Transparent Salaries",
                        "type": "boolean",
                        "description": "Drop jobs that don't publish a salary range.",
                        "default": false
                    },
                    "minYearsExperience": {
                        "title": "Min Years of Experience",
                        "minimum": 0,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Filter to jobs requiring at least this many years of experience.",
                        "default": 0
                    },
                    "maxYearsExperience": {
                        "title": "Max Years of Experience",
                        "minimum": 0,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Filter to jobs requiring at most this many years of experience.",
                        "default": 20
                    },
                    "sortBy": {
                        "title": "Sort By",
                        "enum": [
                            "default",
                            "newest",
                            "oldest",
                            "salary_high_to_low",
                            "salary_low_to_high"
                        ],
                        "type": "string",
                        "description": "Sort order for results.",
                        "default": "default"
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
