werk APIwerk.nl ↗
Search thousands of Dutch job vacancies on werk.nl (UWV). Returns job title, company, location, hours, contract type, education level, and publication date.
What is the werk API?
The werk.nl API provides access to job vacancy listings from the Dutch national job board operated by UWV, returning up to 7 structured fields per listing through a single search_vacancies endpoint. You can filter by keywords such as job title or profession and by geographic location, getting paginated results with 20 vacancies per page sorted newest first. This covers one of the Netherlands' largest public sources of active job postings.
curl -X GET 'https://api.parse.bot/scraper/3ee1a065-f222-48b9-8807-7a95a138c033/search_vacancies?keywords=finance+controller' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace werk-nl-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Werk.nl vacancies SDK — search Dutch job listings."""
from parse_apis.werk_nl_api import WerkNl, InputFormatInvalid
client = WerkNl()
# Search for finance controller jobs, cap at 5 results total.
for vacancy in client.vacancies.search(keywords="finance controller", limit=5):
print(vacancy.job_title, "-", vacancy.company_name, f"({vacancy.location})")
# Narrow by location and drill into the first result.
hit = client.vacancies.search(keywords="developer", location="Amsterdam", limit=1).first()
if hit is not None:
print(hit.job_title, "|", hit.hours, "|", hit.contract_type)
print("Education:", hit.education_level)
print("Published:", hit.publication_date)
# Browse all vacancies (no keyword filter), capped to 10 items.
try:
for vacancy in client.vacancies.search(limit=10):
print(vacancy.job_title, vacancy.company_name)
except InputFormatInvalid as e:
# Raised when search parameters are malformed upstream.
print("Invalid input:", e.message)
print("exercised: vacancies.search (with keywords, with location, unfiltered)")
Search job vacancies on werk.nl by keywords and/or location. Returns paginated results sorted by newest first, with 20 results per page. Each result includes job title, company name, location, working hours, contract type, education level, and publication date. When keywords is omitted all vacancies are returned. When location is omitted no geographic filter is applied. Use the page parameter to paginate through results.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination (1-based). Each page returns up to 20 results. |
| keywords | string | Search keywords: job title, profession, or reference number (e.g. 'finance controller', 'developer'). |
| location | string | City name or postal code to filter results geographically (e.g. 'Amsterdam', '1012'). |
{
"type": "object",
"fields": {
"page": "integer current page number",
"vacancies": "array of vacancy objects with job_title, company_name, location, hours, contract_type, education_level, publication_date",
"total_results": "integer total number of matching vacancies"
},
"sample": {
"data": {
"page": 1,
"vacancies": [
{
"hours": "32 - 40 uur",
"location": "ZEIST",
"job_title": "PE Controller",
"company_name": "Varbisto B.V.",
"contract_type": "Vast",
"education_level": "HBO/bachelor",
"publication_date": "2026-08-24 00:00:00"
},
{
"hours": "32 - 40 uur",
"location": "AMSTELVEEN",
"job_title": "Financieel Controller",
"company_name": "YoungCapital",
"contract_type": "Tijdelijk",
"education_level": "HBO/bachelor",
"publication_date": "2026-08-24 00:00:00"
}
],
"total_results": 996
},
"status": "success"
}
}About the werk API
What the API Returns
The search_vacancies endpoint queries the werk.nl job board and returns a paginated list of vacancy objects. Each object includes job_title, company_name, location, hours, contract_type, education_level, and publication_date. The response also contains total_results (the full count of matching vacancies) and page (the current page number), making it straightforward to iterate through large result sets 20 records at a time.
Filtering and Pagination
The endpoint accepts two optional filter parameters: keywords and location. The keywords parameter accepts free-text input such as a job title, profession, or vacancy reference number (e.g., finance controller, developer). The location parameter accepts a Dutch city name or postal code (e.g., Amsterdam, 1012). Both can be used independently or together. Pagination is controlled via the page parameter, which is 1-based. When neither keywords nor location is provided, the endpoint returns the most recently published vacancies across the board.
Source Coverage
werk.nl is maintained by UWV (Uitvoeringsinstituut Werknemersverzekeringen), the Dutch public employment service. It aggregates vacancies from employers across all sectors in the Netherlands, including both full-time and part-time roles. The contract_type and hours fields reflect how employers have classified each posting, and education_level indicates the minimum qualification specified in the listing.
The werk API is a managed, monitored endpoint for werk.nl — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when werk.nl changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official werk.nl API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Aggregate Dutch job market data by filtering
contract_typeandeducation_levelacross sectors - Build a job alert service that polls new listings using
publication_dateand keyword filters - Analyse regional labour demand by querying
locationwith different Dutch cities or postal codes - Track hiring activity for specific companies by scanning
company_nameacross paginated results - Feed a job recommendation engine with structured vacancy data including
hoursandcontract_type - Monitor entry-level vacancies in a specific field by combining
keywordswitheducation_levelfiltering
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does werk.nl have an official developer API?+
What does the search_vacancies endpoint return beyond the job title and company?+
location, hours (working hours), contract_type (e.g. permanent or temporary), education_level, and publication_date in addition to job_title and company_name. The response also carries total_results so you know how many pages to expect for a given query.Does the API return full vacancy descriptions or apply links?+
Are vacancies from all Dutch regions included, or is coverage limited?+
location parameter can narrow results to a specific city or postal code, but the underlying dataset is not limited to any particular region. Coverage depends on what employers have actively posted to werk.nl at query time.Can I filter by contract type or education level directly in the API?+
keywords and location filters; contract_type and education_level are returned as response fields for client-side filtering. You can fork it on Parse and revise to add those as explicit query parameters.