Nationale Vacaturebank Scraper
Pricing
from $1.20 / 1,000 results
Nationale Vacaturebank Scraper
Scrape 105,000+ listings from Nationale Vacaturebank — the #1 Dutch job board. Structured output: title, company, salary, contract type & full descriptions (HTML, text, Markdown). Deduplication, repost detection & daysOld filtering. No API key required.
Pricing
from $1.20 / 1,000 results
Rating
0.0
(0)
Developer
Unfenced Group
Maintained by CommunityActor stats
1
Bookmarked
31
Total users
10
Monthly active users
3 days ago
Last modified
Categories
Share

Extract structured job listings from Nationale Vacaturebank — the largest Dutch job board with 100,000+ active vacancies. Filter by keyword, city, radius, work mode (remote/hybrid/on-site), contract type, education level, career level, salary minimum, and more.
No API key required. No login. Runs entirely in the cloud.
What You Get
Every scraped record contains 35 structured fields:
| Category | Fields |
|---|---|
| Identity | id, referenceId, url |
| Job basics | title, functionTitle, dcoTitle, categories, industries |
| Work mode | workingPlace (Werken op afstand / Hybride / Werken op locatie) |
| Employer | company, companyType, companyWebsite, logoUrl |
| Location | city, municipality, zipCode, province, latitude, longitude |
| Salary | salary (display text), salaryMin, salaryMax, salaryType |
| Hours | hours (display text), hoursMin, hoursMax |
| Contract | contractType, employmentType, educationLevel, careerLevel |
| Apply | applyOption, applyUrl |
| Description | description (HTML), descriptionText (plain), descriptionMarkdown |
| Dates | publishDate, expiryDate, scrapedAt |
| Signals | numberOfApplies |
Sample Output
{"id": "16c66447-14f9-442c-ba7b-87469b45764e","title": "Senior Software Engineer","url": "https://www.nationalevacaturebank.nl/vacature/16c66447-.../senior-software-engineer","company": "TechCorp BV","companyType": "direct_employer","companyWebsite": "https://www.techcorp.nl","workingPlace": "Hybride","city": "Amsterdam","municipality": "Amsterdam","zipCode": "1014AB","province": "Noord-Holland","latitude": 52.3794,"longitude": 4.8975,"salary": "€4.500 - €6.000","salaryMin": 4500,"salaryMax": 6000,"salaryType": "monthly","contractType": "Vast","educationLevel": "HBO","careerLevel": "Ervaren","applyOption": "internal","applyUrl": "https://www.nationalevacaturebank.nl/solliciteer/...","numberOfApplies": 14,"publishDate": "2026-06-08","expiryDate": "2026-08-08","description": "<p>Wij zoeken een...</p>","descriptionText": "Wij zoeken een...","descriptionMarkdown": "Wij zoeken een...","scrapedAt": "2026-06-10T09:00:00.000Z"}
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
searchQuery | string | — | Job title or keyword, e.g. developer, marketing manager |
city | string | — | City to search in, e.g. Amsterdam, Rotterdam |
radius | select | 40 | Search radius around city: 5, 10, 20, 30, 40, 50, 75, 100 km |
workingPlace | select | — | Werken op afstand (remote), Hybride, or Werken op locatie (on-site) |
contractType | select | — | Vast / Tijdelijk / Freelance / ZZP / Bijbaan / Stage / Interim / Vrijwilliger / Vakantiewerk / Leer-werk / Thuiswerk / Franchise |
educationLevel | select | — | VMBO / MBO / HBO / WO / VWO / HAVO / LBO / Lagere school / Postdoctoraal |
careerLevel | select | — | Geen ervaring / Starter / Ervaren / Leidinggevend / Senior management / Directie |
salaryMin | integer | — | Minimum monthly salary in €, e.g. 3000 |
sort | select | relevance | relevance, date, popularity, or distance |
maxResults | integer | 5 | Maximum number of vacancies to return (1–5,000) |
daysOld | integer | — | Only return vacancies posted within this many days |
skipReposts | boolean | false | Skip vacancies already seen in a previous run (for incremental daily feeds) |
startUrls | array | — | Scrape specific vacancy URLs instead of searching |
Use Cases
Labour Market Research
Pull vacancies across regions and sectors for salary analysis, education-level segmentation, and occupation-level supply/demand mapping using the dcoTitle canonical job title and categories/industries tags.
Recruitment Intelligence
Track competitor job postings by company. Monitor time-on-market via publishDate vs expiryDate. Gauge demand by numberOfApplies. Filter by workingPlace to compare remote-vs-office trends.
Daily Job Alerts
Enable skipReposts: true and schedule the actor to run daily. Only net-new vacancies are emitted on each run. Combine with daysOld: 1 for a clean daily delta.
ATS / Job Board Feeds
The applyOption field tells you whether candidates apply internally (on NVB) or are redirected externally. description, descriptionText, and descriptionMarkdown give you the full job text in whichever format your system requires.
Code Examples
JavaScript / Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('unfenced-group/nationale-vacaturebank-scraper').call({searchQuery: 'developer',city: 'Amsterdam',radius: '40',workingPlace: 'Hybride',contractType: 'vast',maxResults: 100,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Daily Incremental Feed (Apify Scheduler)
await client.schedules().create({name: 'nvb-daily',cronExpression: '0 6 * * *',isEnabled: true,actions: [{type: 'RUN_ACTOR',actorId: 'unfenced-group/nationale-vacaturebank-scraper',runInput: {searchQuery: 'software engineer',city: 'Utrecht',maxResults: 500,skipReposts: true,daysOld: 2,},}],});
Python
from apify_client import ApifyClientclient = ApifyClient(token="YOUR_API_TOKEN")run = client.actor("unfenced-group/nationale-vacaturebank-scraper").call(run_input={"searchQuery": "data analyst","city": "Rotterdam","workingPlace": "Werken op afstand","educationLevel": "hbo","maxResults": 100,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["title"], "|", item["company"], "|", item.get("workingPlace"), "|", item.get("salaryMin"))
Tips for Large-Scale Scraping
Segment by city for national coverage NVB returns up to ~5,000 results per search. For complete national coverage, run parallel searches across: Amsterdam, Rotterdam, Utrecht, Den Haag, Eindhoven, Groningen, Tilburg, Almere, Breda, Nijmegen.
Use daysOld + skipReposts for incremental pipelines
Set skipReposts: true and daysOld: 2 on a daily schedule. The actor tracks seen vacancy IDs across runs and only emits new listings.
Filter workingPlace before filtering by city
Remote vacancies often list a nominal HQ city but are genuinely national. Filter workingPlace: "Werken op afstand" without a city filter to capture all remote roles across the Netherlands.
Identify direct employers vs. recruitment agencies
companyType distinguishes between direct_employer and intermediary (staffing/recruitment agency). Combine with contactEmail to build targeted outreach lists.
Technical Notes
- Architecture: Direct HTTP requests to the NVB internal JSON API — no browser, no Playwright.
- Geographic precision: Haversine post-filter cross-checks API distance results using GPS coordinates, with city-name fallback for listings that omit coordinates.
- Memory: Default 1024 MB.
- Proxy: Datacenter proxies. NVB does not require residential proxies.
- Rate limits: The actor uses polite delays between page requests and backs off automatically on 429 responses.
FAQ
Does this require a Nationale Vacaturebank account? No. All scraped data is from publicly accessible listings.
How fresh is the data? The data reflects what is live on the site at the moment of the run. Schedule the actor for up-to-date results.
Can I filter by multiple contract types at once? Currently one filter value per run. For multi-filter collection, run parallel actor instances.
Why does salary say null?
Salary disclosure is optional on NVB. When the employer doesn't publish a figure, all salary fields are null.
Related scrapers
Other scrapers in our Jobs — Netherlands collection:
- Adzuna NL API Scraper
- Freelancer.nl Opdrachten Scraper
- Intermediair.nl Vacatures Scraper
- Jobbird.com Vacatures Scraper
- Randstad.nl Vacatures Scraper
Veelgestelde vragen
Welke vacatures haalt deze actor van Nationale Vacaturebank?
Alle vacatures die bij je zoekopdracht passen — functietitel, werkgever, locatie, dienstverband, en de sollicitatielink. Je geeft de zoektermen op en de actor haalt de volledige set op, niet alleen de eerste pagina.
Kan ik filteren op sector of regio?
Ja. Geef je zoektermen en locatie mee in de input en de actor levert alleen de passende vacatures. Voor meerdere sectoren draai je een run per sector; alles komt terug in één dataset.
Krijg ik alleen nieuwe vacatures of alles?
Standaard krijg je alles wat bij je zoekopdracht past. Wil je een dagelijkse feed van nieuwe vacatures, plan dan een run in en vergelijk met je vorige dataset — elke run heeft een tijdstempel.
In welk formaat komt de data?
Een gestructureerde dataset die je exporteert als JSON, CSV of Excel, of direct via de API ophaalt. Elk veld is consistent over alle runs.
Draai het op een schema
Deze actor is gemaakt voor herhaald gebruik. Stel hem in om dagelijks, wekelijks of elk uur te draaien, en de data blijft binnenkomen zonder dat je er iets voor hoeft te doen.
- Plan runs in — open de actor, ga naar Schedules en kies een frequentie. Elke run rekent alleen de resultaten af die hij oplevert.
- Koppel het aan je stack — stuur resultaten rechtstreeks naar Google Sheets, Slack, een webhook of je database via Apify Integrations. Geen extra code nodig.
- Haal resultaten op via de API — elke run schrijft een schone dataset die je met één API-call ophaalt, klaar voor waar je hem ook voor gebruikt.
Stel het één keer in en het draait vanzelf.
Need a custom scraper?
We build scrapers for any website — delivered as a private Apify Actor, ready to run in minutes.
👉 Request a custom scraper at unfencedgroup.nl
Pay only for results. No subscriptions. No setup costs.