Werk.nl Scraper $1πŸ’° Dutch Job Vacancies, Salaries & Contacts avatar

Werk.nl Scraper $1πŸ’° Dutch Job Vacancies, Salaries & Contacts

Pricing

Pay per usage

Go to Apify Store
Werk.nl Scraper $1πŸ’° Dutch Job Vacancies, Salaries & Contacts

Werk.nl Scraper $1πŸ’° Dutch Job Vacancies, Salaries & Contacts

From $1/1K. Scrape job vacancies from werk.nl, the official Dutch government job board by UWV. Uses werk.nl’s vacancy data service for fast, low-cost runs. Returns 40+ fields per job, including title, salary, full description, recruiter contact, application link, and employer profile.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

AbotAPI

AbotAPI

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

werk.nl Scraper - Dutch Jobs, Salaries, Recruiters & Employers

Scrape job vacancies from werk.nl, the official Dutch government job board run by UWV (250,000+ live vacancies). This actor talks directly to werk.nl's own vacancy data service - no browser - so it is fast, cheap, and returns 40+ structured fields per vacancy, including data the website only shows on the detail page: the full description, salary, recruiter contact (name, phone, e-mail), the application link, and the complete employer profile.

Why this scraper

This actorTypical werk.nl scrapers
ApproachDirect data API (no browser)Browser / HTML scraping
Fields per vacancy40+~15-25
Recruiter contact (name/phone/e-mail)βœ…partial / βœ…
Salary, contract, hours, full addressβœ…partial
Apprenticeship / internship / EURES flagsβœ…βŒ
Proxy costDatacenter-friendly (lowest)Residential-only
Handles the site's daily maintenance windowβœ… (won't emit junk)❌

What you get (per vacancy)

  • Identity: referenceNumber, url, externalReferenceId, source
  • Core: title, profession, relevanceScore
  • Dates: createdDate, modifiedDate, expirationDate
  • Location: city, postcode, workLocationType, countryCode, foreignCountry, distanceKm
  • Employment: contractType, contractStartDate/EndDate, minHours, maxHours, studyLevel
  • Salary: salaryIndication, termsOfEmployment
  • Description: description (plain text) + descriptionHtml
  • Flags: isApprenticeship, isInternship, isEuresPriority, isByEmployerDirectly
  • Employer: organisation + employer object (name, website, sector, full address)
  • Recruiter contact: contact object (name, department, phone, e-mail)
  • Apply: applicationMethods + applyUrl

Enable Include raw detail payload to also attach the untouched source record under raw.

Input

Search mode (default)

{
"mode": "search",
"keywords": ["developer"],
"location": "Amsterdam",
"contractType": ["1"],
"educationLevels": ["5", "6"],
"sortBy": "date",
"fetchDetails": true,
"maxItems": 50,
"proxy": { "useApifyProxy": true }
}

Filters available: profession (e.g. "Frontend developer"), educationLevels (1-7), hoursPerWeek (1-6), workingHours (1-2), drivingLicense (A/B/C/CE/AM), language, contractType (1=permanent, 2=possibly permanent, 3=temporary) and country. One search is run per keyword; leave keywords empty to list everything (optionally narrowed by the filters).

URL mode

Fetch specific vacancies by detail-page URL or bare reference number:

{
"mode": "url",
"urls": [
"https://www.werk.nl/nl/vacatures/67353746",
"69750687"
]
}

Key options

OptionDefaultDescription
fetchDetailstrueInclude each vacancy's full detail: complete description, salary, contact and employer profile. Turn off for a faster listing-only run.
maxItems20Max vacancies across all searches β€” the run's hard cap (0 = no limit).
maxPagesPerSearch-Optional secondary cap on result pages (20 each) per keyword; empty by default so maxItems is the binding cap.
includeRawDetailfalseAttach the raw source payload under raw.
residentialCap0Cost guard: max residential sessions used if the run auto-escalates from datacenter (0 = unlimited).

Send results into your apps (MCP connectors)

Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape β€” the Apify dataset is never changed.

What gets written to the connector: a condensed, human-readable summary of each record β€” not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.

  1. Authorize a connector once under Apify β†’ Settings β†’ Integrations (Notion, Linear, Airtable, or Apify).
  2. Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
  3. For Notion, also set notionParentPageUrl to the page where items should be created.

The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.

Proxy & cost

For reliability the actor keeps each worker on a consistent IP and automatically retries on a different one if a request is refused.

  • Datacenter (default) - the cheapest option and the verified happy path. Recommended for most runs.
  • Residential (Netherlands) - pick this for maximum reliability. The actor also auto-escalates to residential (with country rotation: NL β†’ BE β†’ DE) only when datacenter is being refused, then downgrades back to datacenter when it recovers - so you pay residential rates only when you have to.
  • A last-resort failover route is used if both are unavailable.

Free-tier accounts: enable Apify Proxy (the included datacenter allowance works). Without a proxy, requests to werk.nl are refused.

Reliability

werk.nl has a short daily maintenance window during which every page returns a placeholder. The actor detects this and backs off / retries instead of silently reporting zero results.

Notes

This actor collects only publicly available vacancy information. Vacancy contact details are published by employers on the public vacancy pages for the purpose of applications. Use the data in line with werk.nl's terms and applicable privacy law.