# VDAB.be Scraper (`solidcode/vdab-be-scraper`) Actor

\[💰 $1.4 / 1K] Extract job vacancies from VDAB.be, the Flemish public employment service. Search by keyword and location, filter by contract type and sort order, and get titles, companies, salaries, contract types, requirements, descriptions, bottleneck-job flags, and contact details.

- **URL**: https://apify.com/solidcode/vdab-be-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.40 / 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.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

## VDAB.be Scraper

Pull job vacancies from VDAB.be — the Flemish public employment service — at scale, including titles, employers, contract type, salary, work regime, experience and education requirements, language demands, and VDAB's own knelpuntberoep (bottleneck-occupation) flag. Every Dutch-language text field arrives as clean, ready-to-use plain text. Built for Belgian recruiters, labour-market researchers, and relocation services who need structured VDAB vacancy data without copy-pasting listings one page at a time.

### Why This Scraper?

- **VDAB's knelpuntberoep flag on every row** — a boolean `isBottleneckJob` marks each posting VDAB classifies as a bottleneck occupation, so you can instantly isolate the hardest-to-fill, highest-demand roles across Flanders.
- **Up to 2,000 vacancies per keyword, merged and de-duplicated** — run as many as 50 keywords in one go; overlapping results are collapsed by vacancy ID so the same job never appears twice.
- **Four employment categories on one dropdown** — filter by Regular jobs, Service vouchers (dienstencheques), Interim / temp work, or Social economy, mapped from plain English to VDAB's internal circuit codes for you.
- **Full detail enrichment from each vacancy page** — `description`, `salary`, `educationRequirements`, `languageRequirements`, `experienceLevel`, `workRegime`, and `employmentLocation` pulled straight from the vacancy detail, not just the search card.
- **Language requirements with proficiency levels** — `languageRequirements` lists each demanded language alongside its required competency (e.g. "Nederlands (Goed); Frans (Voldoende)"), parsed from VDAB's structured talenkennis data.
- **Linked-duplicate counter** — `duplicateCount` tells you how many other postings VDAB links to the same job, a strong signal for high-volume or multi-agency hiring.
- **Full Flanders plus Brussels coverage** — search any Flemish or Belgian city or municipality (Antwerpen, Gent, Brussel, Hasselt, Leuven, Brugge), resolved to the right province automatically.
- **Apply-ready external links** — `sourceDetailUrl` captures the employer's own application webadres where VDAB exposes it, plus the canonical public `url` for every vacancy.
- **Raw-payload passthrough for analysts** — flip on `includeRawData` to attach the untouched source records (`rawListing`, `rawDetail`) alongside the clean fields.

### Use Cases

**Recruitment & Sourcing**
- Build candidate-facing job feeds filtered to a city and contract type
- Surface bottleneck occupations to prioritise hard-to-fill openings
- Track which employers are hiring most actively in your region
- Pull apply links and reference codes for fast outreach

**Labour-Market Research**
- Measure vacancy volume by keyword, location, and contract category over time
- Quantify knelpuntberoep prevalence across Flemish provinces
- Compare full-time vs. part-time and interim vs. permanent supply
- Map education and language requirements by occupation

**Relocation & Mobility Services**
- Prepare role shortlists for clients moving to Flanders or Brussels
- Match incoming talent to language-appropriate openings
- Benchmark expected qualifications before a candidate relocates
- Filter for roles open to specific experience levels

**Competitive Salary Intelligence**
- Capture published salary and benefits text per vacancy
- Compare offered packages within an occupation or region
- Track how compensation language shifts across employers
- Feed salary signals into pay-benchmarking dashboards

**Data Enrichment & Integration**
- Enrich an applicant-tracking system with fresh VDAB openings
- Power a job-aggregation site with structured Flemish vacancies
- Build alerts for new postings matching saved keywords
- Sync deduplicated vacancy data into a BI warehouse

### Getting Started

#### Search by Keyword

The simplest run — one keyword, default settings:

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

#### Keyword and Location, Newest First

```json
{
    "searchQueries": ["verpleegkundige"],
    "location": "Antwerpen",
    "sort": "datum",
    "maxResults": 200
}
```

#### Filtered by Contract Type

```json
{
    "searchQueries": ["magazijnier", "logistiek medewerker"],
    "location": "Gent",
    "contractType": "interim",
    "maxResults": 300,
    "includeJobDetails": true
}
```

#### Paste a VDAB Search URL

Dialed in a search on the VDAB website? Paste it directly — any filters baked into the URL are honoured as-is:

```json
{
    "startUrls": [
        "https://www.vdab.be/vindeenjob/vacatures?trefwoord=verpleegkundige"
    ],
    "maxResults": 100
}
```

#### Full-Featured Example

```json
{
    "searchQueries": ["data analist", "data engineer"],
    "location": "Brussel",
    "contractType": "regular",
    "sort": "datum",
    "maxResults": 500,
    "includeJobDetails": true,
    "includeRawData": false
}
```

### Input Reference

#### Search

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `searchQueries` | string\[] | `["software engineer"]` | Job titles or keywords to search for, such as "software engineer", "verpleegkundige", or "magazijnier". Each keyword runs a separate search and results are merged and de-duplicated. Up to 50 keywords per run. Leave empty if you only want to use direct VDAB URLs. |
| `startUrls` | URL\[] | `[]` | Paste full VDAB search-result URLs and/or individual vacancy-page URLs. Any filters baked into a search URL are scraped exactly as-is. To keep a location filter from a pasted search URL, also set the `location` field, since a pasted URL may carry only the place name and not VDAB's internal location code. Up to 100 URLs per run. |

#### Filters & Limits

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `location` | string | `""` | A city or municipality in Flanders or Belgium, such as "Antwerpen", "Gent", "Brussel", or "Hasselt". Leave empty to search all locations. |
| `contractType` | select | `Any` | Filter by employment category: Any, Regular jobs, Service vouchers (dienstencheques), Interim / temp work, or Social economy. |
| `sort` | select | `Default` | Order in which vacancies are collected: Default, or Newest first. |
| `maxResults` | integer | `100` | Maximum vacancies to collect per search keyword (1–2,000). Use 50 for a quick scan or higher for deep research. Small requests return about as many vacancies as you ask for; larger requests round up to the end of the last full page (about 50), so the final count can slightly overshoot. |

#### Advanced

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `includeJobDetails` | boolean | `true` | Fetch the full description, requirements, salary, and contact details from each vacancy's detail page. Turn off for faster, lighter scans — the description, requirements, salary, and contact fields will then be empty. |
| `includeRawData` | boolean | `false` | Attach the raw source payload to each record (as `rawListing` and `rawDetail`) for advanced analysis. |

### Output

Each vacancy becomes one flat record. Here's a representative result with full details enabled:

```json
{
    "vacancyId": "62849173",
    "referenceId": "2026-118842",
    "title": "Verpleegkundige",
    "companyName": "AZ Sint-Lucas",
    "supplierName": "",
    "location": "Gent",
    "employmentLocation": "Groenebriel 1, 9000 Gent",
    "contractType": "Vast werk",
    "workRegime": ["Voltijds", "Dagwerk"],
    "experienceLevel": "Geen ervaring nodig",
    "educationRequirements": "Bachelor verpleegkunde",
    "languageRequirements": "Nederlands (Goed)",
    "salary": "Verloning volgens IFIC-barema, maaltijdcheques, hospitalisatieverzekering",
    "description": "Als verpleegkundige op onze afdeling sta je in voor de dagelijkse zorg...",
    "isBottleneckJob": true,
    "isClosed": false,
    "duplicateCount": 2,
    "firstPublishedAt": "2026-06-09T08:14:00Z",
    "lastModifiedAt": "2026-06-12T10:02:00Z",
    "contactEmail": "",
    "sourceDetailUrl": "https://www.azsintlucas.be/vacatures/verpleegkundige",
    "url": "https://www.vdab.be/vindeenjob/vacatures/62849173",
    "searchQuery": "verpleegkundige",
    "scrapedAt": "2026-06-17T14:30:00Z"
}
```

#### Core Fields

| Field | Type | Description |
|-------|------|-------------|
| `vacancyId` | string | VDAB vacancy identifier |
| `title` | string | Job title |
| `companyName` | string | Employer organisation name |
| `supplierName` | string | Supplier / intermediary organisation (for agency listings) |
| `location` | string | Vacancy location label |
| `contractType` | string | Contract / employment-circuit label |
| `salary` | string | Salary and benefits text, when available |
| `isBottleneckJob` | boolean | Knelpuntberoep (bottleneck occupation) flag |
| `url` | string | Public VDAB vacancy URL |

#### Job Details

Populated when `includeJobDetails` is on.

| Field | Type | Description |
|-------|------|-------------|
| `description` | string | Full vacancy description as plain text |
| `employmentLocation` | string | Detailed work address, when available |
| `workRegime` | string\[] | Work schedule (e.g. full-time, day work, shifts) |
| `experienceLevel` | string | Experience requirement label |
| `educationRequirements` | string | Educational credential expectations |
| `languageRequirements` | string | Required languages with proficiency levels |
| `referenceId` | string | Employer / reference code for the vacancy |
| `sourceDetailUrl` | string | Employer's external application URL, when available |
| `contactEmail` | string | Contact email, when published |

#### Metadata

| Field | Type | Description |
|-------|------|-------------|
| `isClosed` | boolean | Whether the vacancy is closed |
| `duplicateCount` | integer | Count of linked duplicate vacancies |
| `firstPublishedAt` | string | Publication timestamp (ISO 8601) |
| `lastModifiedAt` | string | Last modification timestamp (ISO 8601) |
| `searchQuery` | string | The keyword or URL this record was found under |
| `scrapedAt` | string | When this record was collected (ISO 8601) |
| `rawListing` | object | Raw search payload (only when `includeRawData` is on) |
| `rawDetail` | object | Raw detail payload (only when `includeRawData` is on) |

### Tips for Best Results

- **Filter on `isBottleneckJob` to find the hottest roles** — bottleneck occupations (knelpuntberoepen) are VDAB's official hard-to-fill list, so a `true` value is a strong demand signal for sourcing and labour-market analysis alike.
- **Sort by Newest first for fresh leads** — set `sort` to Newest first when you want the most recently published vacancies at the top, ideal for daily monitoring runs.
- **Toggle details for speed vs. depth** — turn off `includeJobDetails` for a fast scan of titles, companies, and locations; turn it on for description, salary, education, and language requirements.
- **Run several keywords together** — list synonyms and Dutch/English variants (e.g. "magazijnier" and "logistiek medewerker") in one run; duplicates across keywords are removed automatically.
- **Start small, then scale** — set `maxResults` to 50 on your first run to confirm the data fits your needs, then raise it toward 2,000 for deep research.
- **Use a specific municipality** — entering a city like "Gent" or "Hasselt" narrows results to that area; leave `location` empty to cover all of Flanders and Brussels.
- **Watch `duplicateCount` for multi-agency hiring** — a high duplicate count often means several agencies are recruiting for the same role, useful when mapping which employers are scaling up.

### Pricing

**From $1.40 per 1,000 results** — undercuts comparable VDAB scrapers while delivering full detail enrichment. Bronze, Silver, and Gold subscribers pay progressively less; the table below shows total cost at each discount tier.

| Results | No discount | Bronze | Silver | Gold |
|---------|-------------|--------|--------|------|
| 100 | $0.165 | $0.16 | $0.15 | $0.14 |
| 1,000 | $1.65 | $1.60 | $1.50 | $1.40 |
| 10,000 | $16.50 | $16.00 | $15.00 | $14.00 |
| 100,000 | $165.00 | $160.00 | $150.00 | $140.00 |

A "result" is any vacancy 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 APIs on run completion
- **Apify API** — Full programmatic access

### Legal & Ethical Use

This actor is designed for legitimate recruitment, labour-market research, and relocation use. You are responsible for complying with applicable laws and VDAB's Terms of Service. Do not use extracted data for spam, harassment, or any unlawful purpose, and handle any personal data in line with GDPR and other applicable privacy regulations.

# Actor input Schema

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

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

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

Paste full VDAB search-result URLs (for example https://www.vdab.be/vindeenjob/vacatures?trefwoord=verpleegkundige) and/or individual vacancy-page URLs. Any filters baked into a search URL are scraped exactly as-is. To keep a location filter from a pasted search URL, set the Location field above as well, since a pasted URL may carry only the place name and not VDAB's internal location code. Useful when you have already dialed in a search on the VDAB website. Up to 100 URLs per run.

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

A city or municipality in Flanders or Belgium, such as 'Antwerpen', 'Gent', 'Brussel', or 'Hasselt'. Leave empty to search all locations.

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

Filter by employment category. Leave on 'Any' to include all categories.

## `sort` (type: `string`):

Choose the order in which vacancies are collected.

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

Maximum number of vacancies to collect per search keyword (up to 2,000). Use 50 for a quick scan or a higher number for deep research. Small requests return about as many vacancies as you ask for; for larger requests the final count rounds up to the end of the last full page (about 50), so it can slightly overshoot this number.

## `includeJobDetails` (type: `boolean`):

Fetch the full description, requirements, salary, and contact details from each vacancy's detail page. Leave on for the richest data. Turn off for faster, lighter scans — the description, requirements, salary, and contact fields will then be empty.

## `includeRawData` (type: `boolean`):

Attach the raw source payload to each record (as 'rawListing' and 'rawDetail') for advanced analysis. Most users can leave this off.

## Actor input object example

```json
{
  "searchQueries": [
    "software engineer"
  ],
  "startUrls": [],
  "contractType": "",
  "sort": "standaard",
  "maxResults": 100,
  "includeJobDetails": true,
  "includeRawData": false
}
```

# Actor output Schema

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

Table of scraped vacancies with key fields.

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

Complete vacancy records including descriptions, requirements, salary, and contact details.

# 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"
    ],
    "startUrls": [],
    "location": "",
    "contractType": "",
    "sort": "standaard",
    "maxResults": 100,
    "includeJobDetails": true,
    "includeRawData": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("solidcode/vdab-be-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"],
    "startUrls": [],
    "location": "",
    "contractType": "",
    "sort": "standaard",
    "maxResults": 100,
    "includeJobDetails": True,
    "includeRawData": False,
}

# Run the Actor and wait for it to finish
run = client.actor("solidcode/vdab-be-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"
  ],
  "startUrls": [],
  "location": "",
  "contractType": "",
  "sort": "standaard",
  "maxResults": 100,
  "includeJobDetails": true,
  "includeRawData": false
}' |
apify call solidcode/vdab-be-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "VDAB.be Scraper",
        "description": "[💰 $1.4 / 1K] Extract job vacancies from VDAB.be, the Flemish public employment service. Search by keyword and location, filter by contract type and sort order, and get titles, companies, salaries, contract types, requirements, descriptions, bottleneck-job flags, and contact details.",
        "version": "1.0",
        "x-build-id": "0TkymqqaOgaN6O5Px"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/solidcode~vdab-be-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-solidcode-vdab-be-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~vdab-be-scraper/runs": {
            "post": {
                "operationId": "runs-sync-solidcode-vdab-be-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~vdab-be-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-solidcode-vdab-be-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 engineer', 'verpleegkundige', or 'magazijnier'. Each keyword runs a separate search and the results are merged and de-duplicated. Up to 50 keywords per run. Leave empty if you only want to use direct VDAB URLs below.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "startUrls": {
                        "title": "Direct VDAB URLs",
                        "maxItems": 100,
                        "type": "array",
                        "description": "Paste full VDAB search-result URLs (for example https://www.vdab.be/vindeenjob/vacatures?trefwoord=verpleegkundige) and/or individual vacancy-page URLs. Any filters baked into a search URL are scraped exactly as-is. To keep a location filter from a pasted search URL, set the Location field above as well, since a pasted URL may carry only the place name and not VDAB's internal location code. Useful when you have already dialed in a search on the VDAB website. 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 city or municipality in Flanders or Belgium, such as 'Antwerpen', 'Gent', 'Brussel', or 'Hasselt'. Leave empty to search all locations."
                    },
                    "contractType": {
                        "title": "Contract Type",
                        "enum": [
                            "",
                            "regular",
                            "service-vouchers",
                            "interim",
                            "social-economy"
                        ],
                        "type": "string",
                        "description": "Filter by employment category. Leave on 'Any' to include all categories.",
                        "default": ""
                    },
                    "sort": {
                        "title": "Sort By",
                        "enum": [
                            "standaard",
                            "datum"
                        ],
                        "type": "string",
                        "description": "Choose the order in which vacancies are collected.",
                        "default": "standaard"
                    },
                    "maxResults": {
                        "title": "Max Results per Search",
                        "minimum": 1,
                        "maximum": 2000,
                        "type": "integer",
                        "description": "Maximum number of vacancies to collect per search keyword (up to 2,000). Use 50 for a quick scan or a higher number for deep research. Small requests return about as many vacancies as you ask for; for larger requests the final count rounds up to the end of the last full page (about 50), so it can slightly overshoot this number.",
                        "default": 100
                    },
                    "includeJobDetails": {
                        "title": "Fetch Full Job Details",
                        "type": "boolean",
                        "description": "Fetch the full description, requirements, salary, and contact details from each vacancy's detail page. Leave on for the richest data. Turn off for faster, lighter scans — the description, requirements, salary, and contact fields will then be empty.",
                        "default": true
                    },
                    "includeRawData": {
                        "title": "Include Raw Data",
                        "type": "boolean",
                        "description": "Attach the raw source payload to each record (as 'rawListing' and 'rawDetail') for advanced analysis. Most users can leave this off.",
                        "default": false
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
