# Nationale Vacaturebank Scraper (`solidcode/nationalevacaturebank-scraper`) Actor

\[💰 $1.60 / 1K] Extract job listings from Nationale Vacaturebank (nationalevacaturebank.nl), one of the Netherlands' largest job boards. Search by keyword, location, contract type, education, and career level to get titles, companies, salaries, locations, descriptions, contacts, and apply links.

- **URL**: https://apify.com/solidcode/nationalevacaturebank-scraper.md
- **Developed by:** [SolidCode](https://apify.com/solidcode) (community)
- **Categories:** Jobs, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.60 / 1,000 results

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

Learn more: https://docs.apify.com/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/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

## Nationale Vacaturebank Scraper

Pull job listings from Nationale Vacaturebank — one of the Netherlands' largest job boards, with roughly 102,000 live vacancies — including title, company, salary range, GPS coordinates, apply links, and employer contact details where published, as clean structured rows. Search by keyword, city, province, contract type, education level, and posting date, or paste a search URL you already filtered. Built for Dutch-market recruiters, labour-market analysts, and lead-generation teams who need fresh NL vacancy data without copy-pasting postings by hand.

### Why This Scraper?

- **Around 102,000 live Dutch vacancies** — one run reaches the full breadth of a top-tier Netherlands job board, with no per-city setup or link-building.
- **GPS coordinates on every job** — latitude and longitude for each posting, ready for map dashboards and radius analysis with no separate geocoding step.
- **Employer contacts where published** — recruiter name and email on the majority of listings, plus a direct phone number where the employer lists one; descriptions are also mined for any extra emails, phones, and links they contain.
- **Three Dutch education levels** — filter by MBO (vocational), HBO (university of applied sciences), or WO (university), the exact taxonomy Dutch employers hire against.
- **City and province targeting** — search a single city like Amsterdam, or sweep an entire province like Noord-Holland; all 12 Dutch provinces are recognised automatically.
- **Parsed salary min, max, and period** — a normalised euro range plus a month/year/hour period on every job that publishes pay, not just a raw text blob.
- **Four contract types and two career levels** — Permanent (Vast), Temporary (Tijdelijk), Internship (Stage), and Freelance/ZZP, combined with Starter or Experienced.
- **Plain-text or HTML descriptions** — choose clean text, the original HTML, or both; the full body is always included and never truncated.
- **Up to 5,000 jobs per keyword, 50 keywords per run** — batch dozens of role searches at once, globally de-duplicated on job ID so overlapping searches never repeat a listing.

### Use Cases

**Recruitment & Sourcing**
- Build target lists of open roles by keyword, city, or province
- Track competitor hiring across MBO, HBO, and WO education levels
- Monitor fresh postings with the "Posted Within" window (last 1–30 days)
- Pull recruiter name and email for outreach, with a direct phone where the employer lists one

**Labour-Market Research**
- Map vacancy density across the 12 Dutch provinces using GPS coordinates
- Analyse salary ranges by sector, city, or education level
- Track hiring demand for specific skills and job titles over time
- Compare full-time vs part-time supply using the working-hours range

**Lead Generation**
- Build employer contact lists with recruiter name and email, plus phone where published
- Identify companies actively hiring in your niche
- Capture company website and logo when the employer publishes them
- Harvest every email, phone, and link embedded in job descriptions

**Salary Benchmarking**
- Compare parsed salary minimums and maximums across cities and sectors
- Normalise monthly, yearly, and hourly pay for apples-to-apples analysis
- Track compensation trends for specific job titles
- Benchmark Starter vs Experienced pay bands

**Data Enrichment & Integration**
- Feed live Dutch vacancy data into dashboards and applicant-tracking systems
- Power job-aggregator and comparison sites
- Enrich existing employer databases with current openings
- Trigger downstream alerts on new postings that match saved searches

### Getting Started

#### Quick Keyword Search

The simplest way to start — one keyword and a result cap:

```json
{
    "searchQueries": ["software developer"],
    "maxResults": 50
}
````

#### City Search with Filters

```json
{
    "searchQueries": ["verpleegkundige"],
    "location": "Rotterdam",
    "contractType": "permanent",
    "educationLevel": "hbo",
    "maxResults": 200
}
```

#### Province Sweep, Fresh Jobs Only

```json
{
    "searchQueries": ["projectmanager", "data analist", "recruiter"],
    "location": "Noord-Holland",
    "careerLevel": "experienced",
    "datePosted": "7",
    "descriptionFormat": "both",
    "maxResults": 1000
}
```

#### Using a Nationale Vacaturebank URL

Paste a search-results URL you already filtered in your browser — its filters are honoured as-is and pagination is automatic:

```json
{
    "startUrls": [
        { "url": "https://www.nationalevacaturebank.nl/vacatures?query=marketing&filters[city][]=Amsterdam" }
    ],
    "maxResults": 500
}
```

### Input Reference

#### Search

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `searchQueries` | string\[] | `["software developer"]` | Job titles or keywords, such as "verpleegkundige" or "projectmanager". Each keyword runs its own search; results are merged and de-duplicated. Up to 50 keywords. |
| `startUrls` | URL\[] | `[]` | Paste full Nationale Vacaturebank search-result URLs. Any filters already in the URL are used exactly as-is, and pagination is handled for you. Up to 100 URLs. |

#### Filters & Limits

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `location` | string | `""` | A Dutch city or province, e.g. "Amsterdam", "Rotterdam", or "Noord-Holland". Names shared by a city and a province (Utrecht, Groningen, Overijssel) match the whole province — search a nearby distinct city to target just the city. Empty searches the whole of the Netherlands. |
| `contractType` | select | `Any` | Permanent (Vast), Temporary (Tijdelijk), Internship (Stage), or Freelance / ZZP. |
| `educationLevel` | select | `Any` | MBO (vocational), HBO (university of applied sciences), or WO (university). |
| `careerLevel` | select | `Any` | Starter or Experienced (Ervaren). |
| `datePosted` | select | `Any time` | Only jobs published within the last 24 hours, 3, 7, 14, or 30 days. |
| `maxResults` | integer | `50` | Maximum jobs to collect per keyword, up to 5,000. Returns approximately this many — a few extra rows may be added to finish the final page. |

#### Advanced

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `descriptionFormat` | select | `Plain text` | Return the full description as clean plain text, original HTML, or both in their own fields. |

### Output

Each job is returned as one flat row. Here's a representative result:

```json
{
    "jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "title": "Senior Software Developer",
    "company": "Coolblue",
    "location": "Amsterdam",
    "city": "Amsterdam",
    "province": "Noord-Holland",
    "postalCode": "1011 AC",
    "latitude": 52.3702,
    "longitude": 4.8952,
    "contractType": "Permanent",
    "educationLevel": "HBO",
    "careerLevel": "Experienced",
    "workingHoursMin": 32,
    "workingHoursMax": 40,
    "sector": ["ICT", "Software Development"],
    "numberOfApplies": 14,
    "salaryText": "€3.500 - €5.848",
    "salaryMin": 3500,
    "salaryMax": 5848,
    "salaryPeriod": "month",
    "publishDate": "2026-07-08T00:00:00Z",
    "expiryDate": "2026-08-08T00:00:00Z",
    "descriptionSnippet": "Als Senior Software Developer werk je in een team aan schaalbare webapplicaties...",
    "description": "Als Senior Software Developer werk je in een team aan schaalbare webapplicaties. Je hebt ruime ervaring met moderne cloud-infrastructuur en teamwork...",
    "descriptionHtml": "<p>Als Senior Software Developer werk je in een team...</p>",
    "contactName": "Sanne de Vries",
    "contactEmail": "recruitment@coolblue.nl",
    "contactPhone": "+31 20 123 4567",
    "extractedEmails": ["recruitment@coolblue.nl"],
    "extractedPhones": ["+31 20 123 4567"],
    "extractedUrls": ["https://werkenbij.coolblue.nl"],
    "applyUrl": "https://www.nationalevacaturebank.nl/vacature/a1b2c3d4/solliciteren",
    "companyWebsite": "https://www.coolblue.nl",
    "companyLogo": "https://cdn.nationalevacaturebank.nl/logos/coolblue-500x500.png",
    "jobUrl": "https://www.nationalevacaturebank.nl/vacature/a1b2c3d4/senior-software-developer",
    "searchQuery": "software developer",
    "scrapedAt": "2026-07-12T14:30:00Z"
}
```

#### Core Fields

| Field | Type | Description |
|-------|------|-------------|
| `jobId` | string | Unique Nationale Vacaturebank job identifier |
| `title` | string | Job title |
| `company` | string | Hiring company / employer name |
| `sector` | string\[] | Sectors, industries, and categories the job is filed under |
| `numberOfApplies` | number | Number of applicants so far, when published |
| `publishDate` | string | Date the job was posted (ISO-8601) |
| `expiryDate` | string | Application deadline / expiry date, when present |
| `jobUrl` | string | Canonical Nationale Vacaturebank job-page URL |
| `applyUrl` | string | Apply / application URL (falls back to the job page) |
| `searchQuery` | string | The keyword or URL that produced this row |
| `scrapedAt` | string | ISO timestamp of when the record was collected |

#### Location & Coordinates

| Field | Type | Description |
|-------|------|-------------|
| `location` | string | Listed location text as shown on the posting |
| `city` | string | Parsed city name |
| `province` | string | Dutch province |
| `postalCode` | string | Dutch postal code, when present |
| `latitude` | number | Latitude of the workplace |
| `longitude` | number | Longitude of the workplace |

#### Role Details

| Field | Type | Description |
|-------|------|-------------|
| `contractType` | string | Permanent, Temporary, Internship, or Freelance |
| `educationLevel` | string | Required education level (MBO / HBO / WO) |
| `careerLevel` | string | Starter or Experienced |
| `workingHoursMin` | number | Minimum weekly hours, when stated |
| `workingHoursMax` | number | Maximum weekly hours, when stated |

#### Compensation

| Field | Type | Description |
|-------|------|-------------|
| `salaryText` | string | Formatted euro salary range, e.g. "€3.500 - €5.848" |
| `salaryMin` | number | Parsed minimum salary |
| `salaryMax` | number | Parsed maximum salary |
| `salaryPeriod` | string | Pay period: month, year, or hour |

#### Description

| Field | Type | Description |
|-------|------|-------------|
| `descriptionSnippet` | string | Short teaser drawn from the full description |
| `description` | string | Full description as plain text (when format includes text) |
| `descriptionHtml` | string | Full description as HTML (when format includes HTML) |

#### Employer & Contact

| Field | Type | Description |
|-------|------|-------------|
| `contactName` | string | Recruiter / contact name, when published |
| `contactEmail` | string | Contact email, when published |
| `contactPhone` | string | Contact phone number, when published |
| `extractedEmails` | string\[] | Every email address parsed from the description |
| `extractedPhones` | string\[] | Every phone number parsed from the description |
| `extractedUrls` | string\[] | Every link parsed from the description (assets excluded) |
| `companyWebsite` | string | Company profile / website URL, when present |
| `companyLogo` | string | Company logo image URL, when present |

### Tips for Best Results

- **Start small** — run 50 results first to confirm the data matches your needs, then raise `maxResults` for a full sweep.
- **Sweep a whole region with the province filter** — set `location` to a province like "Zuid-Holland" or "Noord-Brabant" to capture every city in it at once, instead of listing cities one by one.
- **Combine a keyword with a city for precision** — pairing "verpleegkundige" with "Rotterdam" is far tighter than either alone and cuts irrelevant rows. (Note: names shared by a city and a province — Utrecht, Groningen, Overijssel — search the whole province; pick a nearby distinct city to stay city-only.)
- **Use `datePosted` for fresh-only monitoring** — set it to 1 or 3 days on a scheduled run to capture only new vacancies and avoid re-collecting the whole board.
- **Batch related keywords in one run** — add several role variations (e.g. "data analist", "data engineer", "BI analist") to `searchQueries`; results are de-duplicated on job ID automatically.
- **Choose the right description format** — pick "Plain text" for analysis and search, "HTML" to preserve formatting for republishing, or "Both" when you need each.
- **Mine descriptions for contacts** — `extractedEmails` and `extractedPhones` occasionally surface direct hiring contacts that aren't in the structured recruiter fields; treat them as a bonus, not a primary source.

### Pricing

**From $1.60 per 1,000 results** — cheaper than comparable Dutch job-board extractors, with no per-run start-up premium. Bronze, Silver, and Gold subscribers pay progressively less; the table below shows the total cost at each discount tier.

| Results | No discount | Bronze | Silver | Gold |
|---------|-------------|--------|--------|------|
| 100 | $0.19 | $0.18 | $0.17 | $0.16 |
| 1,000 | $1.90 | $1.80 | $1.70 | $1.60 |
| 10,000 | $19.00 | $18.00 | $17.00 | $16.00 |
| 100,000 | $190.00 | $180.00 | $170.00 | $160.00 |

A "result" is any job row in the output dataset. No compute or time-based charges — you pay per result, plus a small fixed per-run start fee.

### Integrations

Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:

- **Zapier** / **Make** / **n8n** — Workflow automation
- **Google Sheets** — Direct spreadsheet export
- **Slack** / **Email** — Notifications on new results
- **Webhooks** — Trigger custom integrations on run completion
- **Apify API** — Full programmatic access

### Legal & Ethical Use

This actor is designed for legitimate recruitment research, labour-market analysis, and lead generation. Users are responsible for complying with applicable laws — including the GDPR when handling personal data such as recruiter contact details — and with Nationale Vacaturebank's Terms of Service. Do not use extracted data for spam, harassment, or any unlawful purpose.

# Actor input Schema

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

Job titles or keywords to search for, such as 'software developer', 'verpleegkundige', or 'projectmanager'. Each keyword runs its own search and the results are merged and de-duplicated. Up to 50 keywords per run. Leave empty if you only want to use the direct URLs below.

## `startUrls` (type: `array`):

Paste full nationalevacaturebank.nl search-result URLs (for example a search page you already filtered in your browser) and/or individual job-page URLs. Any filters already in a search URL are scraped exactly as-is, and pagination is handled automatically. Up to 100 URLs per run.

## `location` (type: `string`):

A Dutch city or province, such as 'Amsterdam', 'Rotterdam', 'Noord-Holland', or 'Zuid-Holland'. Names shared by a city and a province (Utrecht, Groningen, Overijssel) match the whole province — search a nearby distinct city to target just the city. Leave empty to search the whole of the Netherlands.

## `contractType` (type: `string`):

Filter by the type of contract. Leave on 'Any' for all types.

## `educationLevel` (type: `string`):

Filter by the required education level. Leave on 'Any' for all levels.

## `careerLevel` (type: `string`):

Filter by career level. Leave on 'Any' for all levels.

## `datePosted` (type: `string`):

Only show jobs published within this time period. Leave on 'Any time' for all jobs.

## `maxResults` (type: `integer`):

Maximum number of jobs to collect per search keyword (up to 5,000). Use 50 for a quick scan or a higher number for deep research. The run returns approximately this many — a few extra rows may be added to complete the final page.

## `descriptionFormat` (type: `string`):

How to return the full job description (always included). 'Text' gives clean plain text, 'HTML' preserves the original formatting, 'Both' includes each in its own field.

## Actor input object example

```json
{
  "searchQueries": [
    "software developer"
  ],
  "startUrls": [],
  "contractType": "",
  "educationLevel": "",
  "careerLevel": "",
  "datePosted": "",
  "maxResults": 50,
  "descriptionFormat": "text"
}
```

# Actor output Schema

## `overview` (type: `string`):

Table of scraped job listings with key fields.

## `detail` (type: `string`):

Complete job records including descriptions, salary, contact details, and company metadata.

# 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 developer"
    ],
    "startUrls": [],
    "location": "",
    "contractType": "",
    "educationLevel": "",
    "careerLevel": "",
    "datePosted": "",
    "maxResults": 50,
    "descriptionFormat": "text"
};

// Run the Actor and wait for it to finish
const run = await client.actor("solidcode/nationalevacaturebank-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 developer"],
    "startUrls": [],
    "location": "",
    "contractType": "",
    "educationLevel": "",
    "careerLevel": "",
    "datePosted": "",
    "maxResults": 50,
    "descriptionFormat": "text",
}

# Run the Actor and wait for it to finish
run = client.actor("solidcode/nationalevacaturebank-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 developer"
  ],
  "startUrls": [],
  "location": "",
  "contractType": "",
  "educationLevel": "",
  "careerLevel": "",
  "datePosted": "",
  "maxResults": 50,
  "descriptionFormat": "text"
}' |
apify call solidcode/nationalevacaturebank-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Nationale Vacaturebank Scraper",
        "description": "[💰 $1.60 / 1K] Extract job listings from Nationale Vacaturebank (nationalevacaturebank.nl), one of the Netherlands' largest job boards. Search by keyword, location, contract type, education, and career level to get titles, companies, salaries, locations, descriptions, contacts, and apply links.",
        "version": "1.0",
        "x-build-id": "YHyG9XyQjI8DvNrTs"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/solidcode~nationalevacaturebank-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-solidcode-nationalevacaturebank-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/solidcode~nationalevacaturebank-scraper/runs": {
            "post": {
                "operationId": "runs-sync-solidcode-nationalevacaturebank-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/solidcode~nationalevacaturebank-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-solidcode-nationalevacaturebank-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 Keywords",
                        "maxItems": 50,
                        "type": "array",
                        "description": "Job titles or keywords to search for, such as 'software developer', 'verpleegkundige', or 'projectmanager'. Each keyword runs its own search and the results are merged and de-duplicated. Up to 50 keywords per run. Leave empty if you only want to use the direct URLs below.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "startUrls": {
                        "title": "Direct URLs",
                        "maxItems": 100,
                        "type": "array",
                        "description": "Paste full nationalevacaturebank.nl search-result URLs (for example a search page you already filtered in your browser) and/or individual job-page URLs. Any filters already in a search URL are scraped exactly as-is, and pagination is handled automatically. Up to 100 URLs per run.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "A Dutch city or province, such as 'Amsterdam', 'Rotterdam', 'Noord-Holland', or 'Zuid-Holland'. Names shared by a city and a province (Utrecht, Groningen, Overijssel) match the whole province — search a nearby distinct city to target just the city. Leave empty to search the whole of the Netherlands."
                    },
                    "contractType": {
                        "title": "Contract Type",
                        "enum": [
                            "",
                            "permanent",
                            "temporary",
                            "internship",
                            "freelance"
                        ],
                        "type": "string",
                        "description": "Filter by the type of contract. Leave on 'Any' for all types.",
                        "default": ""
                    },
                    "educationLevel": {
                        "title": "Education Level",
                        "enum": [
                            "",
                            "mbo",
                            "hbo",
                            "wo"
                        ],
                        "type": "string",
                        "description": "Filter by the required education level. Leave on 'Any' for all levels.",
                        "default": ""
                    },
                    "careerLevel": {
                        "title": "Career Level",
                        "enum": [
                            "",
                            "starter",
                            "experienced"
                        ],
                        "type": "string",
                        "description": "Filter by career level. Leave on 'Any' for all levels.",
                        "default": ""
                    },
                    "datePosted": {
                        "title": "Posted Within",
                        "enum": [
                            "",
                            "1",
                            "3",
                            "7",
                            "14",
                            "30"
                        ],
                        "type": "string",
                        "description": "Only show jobs published within this time period. Leave on 'Any time' for all jobs.",
                        "default": ""
                    },
                    "maxResults": {
                        "title": "Max Results per Search",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Maximum number of jobs to collect per search keyword (up to 5,000). Use 50 for a quick scan or a higher number for deep research. The run returns approximately this many — a few extra rows may be added to complete the final page.",
                        "default": 50
                    },
                    "descriptionFormat": {
                        "title": "Description Format",
                        "enum": [
                            "text",
                            "html",
                            "both"
                        ],
                        "type": "string",
                        "description": "How to return the full job description (always included). 'Text' gives clean plain text, 'HTML' preserves the original formatting, 'Both' includes each in its own field.",
                        "default": "text"
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
