Werkzoeken.nl Scraper
Pricing
from $1.50 / 1,000 results
Werkzoeken.nl Scraper
Scrape 195,000+ job listings from Werkzoeken.nl. Filter by keyword, location, contract type and hours. No API key required.
Pricing
from $1.50 / 1,000 results
Rating
0.0
(0)
Developer
Unfenced Group
Actor stats
1
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share

Scrape job listings from werkzoeken.nl — one of the Netherlands' largest job boards with 195,000+ active listings from 10,000+ employers. Filter by keyword, location, contract type and hours. No API key required.
Why this scraper?
⚡ Fast and cost-efficient
At $1.50 per 1,000 results, this scraper is built for scale. All core fields — title, company, location, contract type, salary, experience level — are extracted from the listing page without requiring a detail fetch per job. Use fetchDetails: true only when you need the full description.
🔄 Automatic repost detection
Employers regularly republish the same vacancy to stay visible in search results. Every scraped job is fingerprinted using a content hash provided by the platform. On subsequent runs, jobs whose fingerprint matches a previously seen listing are flagged with isRepost: true, along with originalPublishDate and originalUrl. Set skipReposts: true to exclude them from the dataset entirely.
📄 Three description formats
When fetchDetails is enabled, the full job description is returned in three formats for maximum pipeline compatibility:
| Field | Format | Use case |
|---|---|---|
description | Raw HTML | Rendering in apps |
descriptionText | Plain text | Full-text search, NLP |
descriptionMarkdown | Markdown | RAG pipelines, LLM agents |
💰 Structured salary data
Minimum salary is available on every listing. When fetchDetails is enabled, the complete salary range from the detail page is returned:
| Field | Example |
|---|---|
salaryMin | 3000 |
salaryMax | 4000 |
salaryRange | "3.000 - € 4.000 p/m (bruto)" |
salaryType | "p/m" |
⏱️ daysOld age filter
Only retrieve recently posted vacancies. The daysOld parameter maps to the platform's built-in date filter (supports 1, 2, 5, 7, or 14 days). Combined with scheduled runs, this makes incremental data collection straightforward.
🔗 Direct start URL support
Bypass the search form entirely by providing one or more Werkzoeken.nl search URLs via startUrls. Useful for re-running a specific search or scraping category pages directly.
Input parameters
| Parameter | Type | Description | Default |
|---|---|---|---|
searchQuery | string | Job title or keyword, e.g. "developer" or "verpleegkundige" | "" |
location | string | City or region, e.g. "Amsterdam" or "Utrecht" | "" |
radius | integer | Search radius in km from location. Options: 0, 5, 10, 15, 20, 30, 40, 50, 75 | 30 |
contractType | array | Contract types to include: 1=Vast, 3=Tijdelijk, 2=Detachering, 4=Freelance, 8=Traineeship, 6=Stage | [] |
educationLevel | array | Education levels: 14=Geen diploma, 1=VMBO, 2=MBO, 3=HBO, 4=Universiteit | [] |
hoursPerWeek | array | Hours category: 1=37–40u, 2=33–36u, 3=25–32u, 4=17–24u, 5=9–16u, 6=0–8u | [] |
minSalary | integer | Minimum monthly salary in €. Options: 2000, 2500, 3000, 3500, 4000, 5000, 6000 | 0 |
employerType | array | Employer category: 1=Directe werkgever, 2=Werving en selectie, 4=Uitzendbureau | [] |
daysOld | integer | Only include jobs posted within this many days. Supported: 1, 2, 5, 7, 14 | — |
maxResults | integer | Maximum number of listings to return | — |
fetchDetails | boolean | Fetch each detail page for full description, salary range, and benefits | false |
skipReposts | boolean | Exclude jobs flagged as reposts from previous runs | false |
startUrls | array | List of Werkzoeken.nl search URLs to scrape directly, overrides all filters above | — |
Output schema
{"id": "15562580","title": "Sales | New Business Developer | Thuiswerk","url": "https://www.werkzoeken.nl/vacature/15562580-sales-new-business-developer/","company": "Werkzoeken.nl","companyType": "Directe werkgever","companyLogo": "https://cdn.werkzoeken.nl/logo_groot/abc123.png","location": "Barendrecht","contractType": "Loondienst (vast)","hoursPerWeek": "Fulltime","educationLevel": "HBO of hoger","experienceLevel": "Ervaren,Starter","salaryMin": 3000,"salaryMax": 4000,"salaryRange": "3.000 - € 4.000 p/m (bruto)","salaryType": "p/m","hoursRange": "36 - 40 uur","educationRequired": "HBO of hoger","experienceRequired": "Ervaren/Starter","benefits": ["Bonusregeling", "Thuiswerken"],"applyUrl": "https://www.werkzoeken.nl/reageer-direct-per-email/5476/15562580/?pos=0","description": "<p>In de rol van New Business Developer...</p>","descriptionText": "In de rol van New Business Developer...","descriptionMarkdown": "In de rol van **New Business Developer**...","publishDate": "2026-03-16","publishedAge": "11 dagen geleden","isRepost": false,"originalPublishDate": null,"originalUrl": null,"contentHash": "a97491cd3cfa6d9c0d32b3a1964131f90ca1a9105d748da9a298cd0f7a987a4f","scrapedAt": "2026-03-27T10:00:00.000Z"}
Note:
description,descriptionText,descriptionMarkdown,salaryMax,salaryRange,hoursRange,educationRequired,experienceRequired,benefits, andapplyUrlare only populated whenfetchDetails: true.
Examples
Developer jobs in Amsterdam:
{"searchQuery": "developer","location": "Amsterdam","radius": 20,"maxResults": 100}
Fulltime HBO+ vacancies with salary filter:
{"searchQuery": "projectmanager","location": "Utrecht","radius": 30,"contractType": [1],"educationLevel": [3, 4],"minSalary": 3500,"hoursPerWeek": [1],"fetchDetails": true,"skipReposts": true}
Recent freelance IT vacancies with full descriptions:
{"searchQuery": "data engineer","contractType": [4],"daysOld": 7,"fetchDetails": true,"maxResults": 50}
Scrape a specific search URL directly:
{"startUrls": ["https://www.werkzoeken.nl/vacatures/?what=verpleegkundige&where=Groningen&r=25"],"fetchDetails": false,"maxResults": 200}
💰 Pricing
$1.50 per 1,000 results — you only pay for successfully retrieved vacancies. Failed retries and filtered reposts are never charged.
| Results | Cost |
|---|---|
| 100 | ~$0.15 |
| 1,000 | ~$1.50 |
| 10,000 | ~$15.00 |
| 100,000 | ~$150.00 |
Flat-rate alternatives typically charge $29–$49/month regardless of usage. At 10,000 results/month, this scraper costs significantly less with no commitment.
Use the Max results cap in the input to control your spend exactly.
Performance
| Run | Mode | Time |
|---|---|---|
| 100 vacancies | Listing only | ~10s |
| 1,000 vacancies | Listing only | ~1.5 min |
| 5,000 vacancies | Listing only | ~7 min |
| 100 vacancies | With detail pages | ~2.5 min |
| 1,000 vacancies | With detail pages | ~25 min |
Performance varies based on server response time.
fetchDetails: falseis recommended for large-scale data collection.
Known limitations
daysOldprecision: The platform's built-in date filter only supports fixed intervals (1, 2, 5, 7, 14 days). Values outside this range are mapped to the nearest supported option.- Salary (listing level): Only
salaryMinis available without fetching detail pages.salaryMaxrequiresfetchDetails: true. - Published date: Exact publication timestamps are not provided by the platform. Dates are computed from relative age strings such as "11 dagen geleden" and are accurate to the day.
30+ dagen geleden: Listings older than 30 days are reported as "30+ dagen geleden" — the exact original date cannot be determined without fetching the detail page.fetchDetailsperformance: Each detail page requires a separate HTTP request and adds approximately 1–2 seconds per listing.
Technical details
- Source: werkzoeken.nl — Dutch job board with 195,000+ active listings
- Memory: 256 MB
- Repost storage: KeyValueStore
werkzoeken-nl-job-dedup, 90-day TTL - Retry: Automatic retry on network errors, exponential backoff, up to 3 attempts
Additional services
Need a custom actor, additional filters, scheduled runs, or integration support? Send an email to info@unfencedgroup.nl — we build on request.
Built by unfenced-group · Issues? Open a ticket or send a message.