# Nationalevacaturebank Jobs Search Scraper (`stealth_mode/nationalevacaturebank-jobs-search-scraper`) Actor

Efficiently scrape job listings from NationaleVacaturebank.nl, the Netherlands' leading job board. Extract comprehensive Dutch employment data including salaries, contract types, education requirements, and company details. Perfect for recruitment agencies, labor market research, and HR analytics.

- **URL**: https://apify.com/stealth\_mode/nationalevacaturebank-jobs-search-scraper.md
- **Developed by:** [Stealth mode](https://apify.com/stealth_mode) (community)
- **Categories:** Automation, Developer tools, Jobs
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

$20.00/month + usage

To use this Actor, you pay a monthly rental fee to the developer. The rent is subtracted from your prepaid usage every month after the free trial period.You also pay for the Apify platform usage, which gets cheaper the higher Apify subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#rental-actors

## 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

## NationaleVacaturebank.nl Jobs Search Scraper: Extract Dutch Job Market Data

**Excerpt:** Efficiently scrape job listings from NationaleVacaturebank.nl, the Netherlands' leading job board. Extract comprehensive Dutch employment data including salaries, contract types, education requirements, and company details. Perfect for recruitment agencies, labor market research, and HR analytics in the Dutch job market.

### Understanding NationaleVacaturebank.nl and Its Role in Dutch Recruitment

NationaleVacaturebank.nl (National Job Bank Netherlands) is one of the largest job platforms in the Netherlands, aggregating thousands of vacancies across all industries and career levels. The platform serves as a central hub connecting Dutch employers with job seekers, offering detailed filtering by salary ranges, contract types, education levels, and industries.

Unlike generic international job boards, NationaleVacaturebank specializes in the Dutch labor market with locally relevant classifications—working hours compliance with Dutch labor laws, education level systems (MBO, HBO, WO), and salary ranges in euros. For recruitment agencies operating in the Netherlands, HR professionals analyzing the Dutch job market, or businesses benchmarking compensation and hiring practices, this platform provides essential market intelligence.

Manually collecting job data across multiple searches, salary brackets, and industries requires extensive time navigating search results and copying information. The NationaleVacaturebank.nl Jobs Search Scraper automates this process, transforming search pages into structured datasets ready for analysis, recruitment pipelines, or competitive intelligence.

### What This Scraper Extracts and Who Should Use It

The NationaleVacaturebank.nl Jobs Search Scraper processes search result pages, capturing multiple job listings efficiently. This approach is ideal for building comprehensive datasets across different searches, industries, or salary ranges without processing individual job URLs.

**Key Data Extracted:**

**Core Job Information:** ID, title, function title, DCO titles (Dutch occupational classification), reference ID, and slugs enable precise job identification and categorization within Dutch labor market standards.

**Employment Details:** Contract type, contract types array, working hours, career level, start/end dates, and status provide complete employment terms—critical for matching candidates with appropriate opportunities and understanding market composition.

**Compensation Data:** Salary field contains structured compensation information, often including minimum/maximum ranges and frequency (monthly, annual). This enables salary benchmarking and compensation analysis across the Dutch market.

**Location & Workplace:** Working place, work location, and workplace type (office, remote, hybrid) specify job geography and working arrangements—essential for regional analysis and remote work trend tracking.

**Requirements:** Education level, education levels array, and requirements text detail qualification standards following Dutch education system classifications (MBO/HBO/WO).

**Company & Recruiter:** Company object, recruiter ID, and corporate identity template provide employer details and branding assets for building comprehensive company databases.

**Application Data:** Apply object with application methods, contact information, and number of applies shows how candidates engage with opportunities and tracks job popularity.

**Classification:** Categories, industries, and job titles arrays enable multi-dimensional job categorization and market segmentation analysis.

**Media Assets:** Logos array, video, and corporate identity templates provide visual branding materials for displaying jobs or analyzing employer branding strategies.

**Metadata:** Origin (job source), custom fields, links, and PBP flag (performance-based pricing indicator) reveal job posting channels and premium listing status.

**Target Users:**

**Dutch Recruitment Agencies** build candidate databases matched to Dutch labor market classifications and salary expectations. **HR Departments** benchmark salaries, monitor competitor hiring, and analyze market availability across regions. **Labor Market Researchers** track employment trends, skill demands, and compensation patterns in the Netherlands. **Job Aggregation Platforms** integrate NationaleVacaturebank data to expand Dutch job coverage. **Business Intelligence Teams** analyze hiring patterns for market entry or expansion planning in the Netherlands.

### Input Configuration: Search URLs and Parameters

The scraper processes search result page URLs from NationaleVacaturebank.nl, not individual job detail pages. These are pages displaying multiple job listings after applying filters.

**Example Input Configuration:**

```json
{
  "proxy": {
    "useApifyProxy": false
  },
  "offset": 0,
  "max_items_per_url": 20,
  "ignore_url_failures": true,
  "urls": [
    "https://www.nationalevacaturebank.nl/vacature/zoeken?query=audit&sort=relevance&filters[salary][min]=2500"
  ]
}
````

#### Example Screenshot:

![](https://i.ibb.co/B5Kz4F6X/Screenshot-from-2025-12-31-10-18-08.png)

**Parameter Breakdown:**

**proxy configuration:** Set to `false` if not using Apify proxy. For large-scale scraping or avoiding rate limits, enable residential proxies with `useApifyProxy: true` and select appropriate proxy groups.

**offset:** Starting position for pagination. Set to `0` to begin from first result. For paginated extraction, increment by page size (e.g., 0, 100, 200) to collect multiple pages systematically.

**max\_items\_per\_url:** Maximum job listings to extract per search URL. Default `20` matches typical page size. Increase to `50` or `100` for comprehensive extraction if pages contain more results.

**ignore\_url\_failures:** When `true`, scraper continues processing remaining URLs even if some fail. Essential when scraping multiple search pages—prevents one broken URL from stopping entire job.

**urls array:** Contains search result page URLs. You can include multiple URLs with different search parameters to collect diverse job categories, salary ranges, or industries in one run.

**Building Search URLs:** Perform searches manually on NationaleVacaturebank.nl using filters (keywords, salary, location, contract type), then copy resulting URLs. Key URL parameters:

- `query`: Search keyword (e.g., `audit`, `marketing`)
- `sort`: Result ordering (`relevance`, `date`)
- `filters[salary][min]`: Minimum salary filter
- `filters[location]`: Geographic filter
- `filters[contract_type]`: Employment type filter

**Pro Tip:** Test URLs in browser before scraping to verify filters return expected results. For large datasets spanning multiple pages, systematically increment offset or page parameters.

### Complete Output Structure: Understanding Each Field

**ID:** Unique identifier assigned by NationaleVacaturebank to each job posting. **Purpose:** Primary key for databases, tracking specific jobs over time, avoiding duplicates when merging datasets.

**Title:** Job position name as posted by employer. **Purpose:** Primary display field, search functionality, role categorization.

**Function Title / DCO Titles / Function Title Slug:** Standardized job function names following Dutch occupational classification (DCO - Dutch Classification of Occupations). **Purpose:** Consistent categorization across employers, labor market statistics alignment, skill demand analysis using government standards.

**DCO Title / DCO Title Slug:** Specific Dutch occupational classification code and title. **Purpose:** Compliance with Dutch labor statistics, integration with government employment data, precise occupational analysis.

**Job Titles:** Array of alternative job titles or related positions. **Purpose:** Improved searchability, understanding role variations, candidate matching across different title conventions.

**Description:** Full HTML job description including responsibilities, company information, and benefits. **Purpose:** Complete job context for candidate evaluation, keyword extraction for skill analysis, content for job boards.

**Requirements:** Detailed qualification requirements including skills, experience, certifications. **Purpose:** Candidate screening criteria, skill gap analysis, education/experience benchmarking.

**Salary:** Structured compensation object typically containing minimum, maximum, currency, and payment frequency. **Purpose:** Salary benchmarking, compensation analysis, market rate determination for specific roles and regions.

**Contract Type / Contract Types:** Employment contract classification (e.g., "permanent," "temporary," "freelance," "internship"). **Purpose:** Market composition analysis, matching candidates to preferred employment types, tracking permanent vs. flexible labor trends.

**Working Hours:** Contracted hours per week (e.g., "40 hours," "32-36 hours"). **Purpose:** Full-time vs. part-time classification, work-life balance analysis, Dutch part-time work culture tracking.

**Career Level:** Seniority classification (e.g., "starter," "medior," "senior," "management"). **Purpose:** Experience level filtering, career progression analysis, salary benchmarking by seniority.

**Education Level / Education Levels:** Required education following Dutch system (MBO - vocational, HBO - professional bachelor, WO - university, PhD). **Purpose:** Qualification filtering, education demand analysis, alignment with Dutch education credentials.

**Working Place / Work Location:** Job location details including city, region, or country. **Purpose:** Geographic analysis, regional job density mapping, remote vs. on-site categorization.

**Start Date / End Date:** Employment period boundaries. **Purpose:** Immediate availability requirements, project duration, seasonal hiring pattern analysis.

**Status:** Job posting state (e.g., "active," "filled," "expired"). **Purpose:** Filtering current opportunities, calculating fill rates, tracking job lifecycle duration.

**Company:** Employer object containing name, slug, and additional company details. **Purpose:** Employer profiling, linking jobs to company data, tracking hiring organizations.

**Recruiter ID:** Identifier for recruitment agency or hiring manager. **Purpose:** Distinguishing direct employers from third-party recruiters, tracking agency activity.

**Reference ID:** Employer's internal job reference number. **Purpose:** Cross-referencing with employer ATS systems, tracking job versions across platforms.

**Contact:** Contact information object including email, phone, contact person. **Purpose:** Application channels, direct employer engagement, data enrichment for recruitment databases.

**Apply:** Application object containing methods, URLs, and application counts. **Purpose:** Understanding application processes, tracking popular jobs via apply counts, optimizing application flows.

**Number Of Applies:** Count of applications received. **Purpose:** Job popularity metric, competition level indicator, employer brand strength assessment.

**Categories / Industries:** Job classification by sector and industry. **Purpose:** Industry-specific analysis, sector hiring trends, multi-dimensional job categorization.

**Logos:** Array of company logo URLs in various sizes. **Purpose:** Visual assets for job displays, employer brand analysis, enhancing recruitment platform UX.

**Corporate Identity Template:** Branding template or style guide reference. **Purpose:** Consistent employer brand presentation, premium listing identification.

**Video:** Video URL or embed code (if employer includes video). **Purpose:** Rich media job content, employer brand storytelling, enhanced job listing displays.

**Links:** Related URLs (company website, career page, social media). **Purpose:** Employer research, additional information sources, company profile enrichment.

**Origin:** Source of job posting (direct employer, aggregation, partner). **Purpose:** Tracking job sources, data quality assessment, identifying aggregated vs. original postings.

**Is PBP:** Performance-based pricing flag indicating premium listing. **Purpose:** Identifying sponsored jobs, analyzing employer investment in recruitment visibility.

**Custom Fields:** Additional employer-specific data fields. **Purpose:** Flexible data storage for unique employer requirements, industry-specific attributes.

**Metadata:** Technical metadata including scrape timestamp, source URL. **Purpose:** Data provenance tracking, quality assurance, temporal analysis.

**Sample Output:**

```json
[
  {
  "id": "6c2f47ca-2d15-410c-a587-52d202aabf31",
  "contact": {
    "first_name": "edwin.van.honk@aaff.nl",
    "last_name": "edwin.van.honk@aaff.nl",
    "street": "",
    "zipcode": "",
    "city": "",
    "email_address": "edwin.van.honk@aaff.nl",
    "phone_number": "edwin.van.honk@aaff.nl",
    "website": ""
  },
  "logos": {
    "152x54": "https://cdn.nationalevacaturebank.nl/vacature/logo/383e1d64-26c4-331b-a47f-3508fcc95f7e/152x54",
    "1000x1000": "https://cdn.nationalevacaturebank.nl/vacature/logo/383e1d64-26c4-331b-a47f-3508fcc95f7e/1000x1000",
    "100x35": "https://cdn.nationalevacaturebank.nl/vacature/logo/383e1d64-26c4-331b-a47f-3508fcc95f7e/100x35",
    "180x64": "https://cdn.nationalevacaturebank.nl/vacature/logo/383e1d64-26c4-331b-a47f-3508fcc95f7e/180x64",
    "199x71": "https://cdn.nationalevacaturebank.nl/vacature/logo/383e1d64-26c4-331b-a47f-3508fcc95f7e/199x71",
    "345x122": "https://cdn.nationalevacaturebank.nl/vacature/logo/383e1d64-26c4-331b-a47f-3508fcc95f7e/345x122",
    "110x39": "https://cdn.nationalevacaturebank.nl/vacature/logo/383e1d64-26c4-331b-a47f-3508fcc95f7e/110x39",
    "90x32": "https://cdn.nationalevacaturebank.nl/vacature/logo/383e1d64-26c4-331b-a47f-3508fcc95f7e/90x32",
    "260x92": "https://cdn.nationalevacaturebank.nl/vacature/logo/383e1d64-26c4-331b-a47f-3508fcc95f7e/260x92"
  },
  "metadata": {
    "jdco": "Manager Accountantskantoor-1211",
    "isco": "1211"
  },
  "salary": null,
  "working_place": null,
  "apply": {
    "option": "external",
    "url": "https://easyapply.jobs/r/dxMLied25sJT5d3QtDJM"
  },
  "career_level": "Ervaren",
  "categories": [
    "Juridisch"
  ],
  "company": {
    "website": null,
    "slug": "aaff",
    "name": "Aaff",
    "type": "direct_employer"
  },
  "contract_type": "Vast",
  "contract_types": [
    "Vast"
  ],
  "corporate_identity_template": null,
  "description": "<p><b>Functieomschrijving</b></p>\n Manager Audit in Dordrecht\n<p>Aangenaam, wij zijn aaff. De nieuwe naam in accountancy en advies met maar liefst 180 jaar ervaring. Bij ons ben je meer dan een werknemer: je bent één van de 2000 co-eigenaren. Met onze participatieregeling kun jij elk jaar investeren en zo meedelen in onze winst. Winst die er zonder jou niet was geweest. Maar co-eigenaarschap is meer dan certificaten alleen. Het is een houding, een gevoel. Ze zeggen ook wel: ‘run it, like you own it’. En dat is wat wij doen. Word jij als manager Audit een van onze 2000 co-eigenaren?  </p>\nWat ga je doen als manager Audit bij aaff? \n<p>Als manager Audit leid je het team op de opdracht. Je stuurt het team aan en coacht op inspirerende wijze je teamleden. Je bent niet eindverantwoordelijk, dat ligt bij de senior accountant of director. Wél ben je budgetverantwoordelijk voor alle opdrachten in jouw portefeuille. Daarnaast sta je voortdurend in contact met de senior accountant en de klant en zorg je voor een naadloze samenwerking. Waar nodig spring je bij zodat jouw team samen met jou de ‘klus’ kan klaren.  </p>\n<p>De sfeer is open, informeel en betrokken. Bij aaff bouwen we samen aan een betekenisvolle toekomst en duurzame relaties. Of je nu werkt met start-ups, familiebedrijven of gevestigde ondernemingen. Bij aaff krijg je meer dan een baan: je bouwt mee als co-eigenaar.  </p>\n Je belangrijkste verantwoordelijkheden zijn: \n<ul>\n <li>\n  <p>Je bent verantwoordelijk voor een vaktechnisch goed dossier. </p>\n </li>\n <li>\n  <p>Je bent verantwoordelijk voor de planning van een audit en realisatie binnen gestelde termijnen, maar je bent niet eindverantwoordelijk, dit ligt bij de senior accountant of director.</p>\n </li>\n <li>\n  <p>Je geeft leiding aan de junior accountants en junior managers.  </p>\n </li>\n <li>\n  <p>Je bespreekt regelmatig de voortgang van opdrachten met klanten, zorgt voor nauwkeurige controles en adviseert over financiële strategieën. </p>\n </li>\n <li>\n  <p>Het bijhouden van je vaktechnische kennis is voor jou vanzelfsprekend, en je deinst niet terug voor een interne of externe presentaties.  </p>\n </li>\n</ul>\nJouw arbeidsvoorwaarden: \n<ul>\n <li>\n  <p>Salaris: marktconform.</p>\n </li>\n <li>\n  <p>Keuzevrijheid in verlof: jij bepaalt hoeveel vrije dagen je opneemt, tot 38 per jaar. Kies uit regulier verlof, het aaff-budget of extra dagen via je salaris. Wat je van het aaff-budget niet gebruikt, keren we uit. </p>\n </li>\n <li>\n  <p>Thuiswerkbudget van € 550: om je werkplek thuis prettig en ergonomisch in te richten. </p>\n </li>\n <li>\n  <p>Vergoeding voor thuiswerken: € 2,40 per thuiswerkdag + € 40 netto internetvergoeding per maand. </p>\n </li>\n <li>\n  <p>Duurzaam onderweg: 0,30 per auto-km voor woon-werkritten, € 0,40 (€ 0,23 netto) per fiets-/wandelkilometer. Daarbovenop een volledige OV-vergoeding of – bij meer dan 7.500 zakelijke km/jaar – een elektrische leaseauto of mobiliteitsbudget. Bij elektrisch rijden ontvang je € 0,40 per kilometer. </p>\n </li>\n <li>\n  <p>Ruimte voor groei, verdieping en verbreding: ontwikkel je verder via de aaff academie of externe opleidingen, gewoon onder werktijd. </p>\n </li>\n <li>\n  <p>Jaarlijks € 200 vitaliteitsbudget: voor jouw mentale en fysieke gezondheid en altijd toegang tot ons online platform OpenUp. </p>\n </li>\n <li>\n  <p>Flexibel verlof sparen: voor een sabbatical, langere reis of tijd voor jezelf. </p>\n </li>\n <li>\n  <p>Feestdagen omruilen: kies twee dagen die passen bij jouw religie of cultuur. </p>\n </li>\n <li>\n  <p>Laptop en telefoon: alles wat je nodig hebt om je werk goed te doen. </p>\n </li>\n</ul>\nIs deze vacature iets voor jou? \n<p>We zijn benieuwd naar jouw verhaal en horen graag hoe jij ons als co-eigenaar komt versterken. Heb je nog vragen? Neem contact op met onze Recruiter externe diensten & projecten, Clinge Kuijsters - Bakker via clinge.kuijsters@aaff.nl of +31612964429. Of solliciteer direct. </p>",
  "education_level": "WO",
  "education_levels": [
    "WO"
  ],
  "end_date": "2026-01-31T23:00:00Z",
  "industries": [
    "Accountancy"
  ],
  "function_title": "Manager Audit",
  "dco_titles": [
    {
      "title": "Manager Accountantskantoor",
      "similarity": 0.82264227,
      "source": "external_classification_vacancy_enricher",
      "slug": "manager-accountantskantoor"
    },
    {
      "title": "Manager Controlepraktijk",
      "similarity": 0.8181037,
      "source": "external_classification_vacancy_enricher",
      "slug": "manager-controlepraktijk"
    },
    {
      "title": "Controleleider",
      "similarity": 0.8083225,
      "source": "external_classification_vacancy_enricher",
      "slug": "controleleider"
    }
  ],
  "function_title_slug": "manager-audit",
  "dco_title": "Manager Accountantskantoor",
  "dco_title_slug": "manager-accountantskantoor",
  "job_titles": [
    "audit manager"
  ],
  "origin": "ndp",
  "recruiter_id": "003Tm00000HSfzLIAT",
  "reference_id": "6c2f47ca-2d15-410c-a587-52d202aabf31",
  "requirements": null,
  "start_date": "2025-12-02T23:00:00Z",
  "status": "active",
  "title": "Manager Audit",
  "working_hours": {
    "min": 32,
    "max": 40
  },
  "work_location": {
    "street": "Binnen Walevest",
    "zip_code": "3311AA",
    "municipality": "DORDRECHT",
    "municipality_slug": "dordrecht",
    "source": "default",
    "city": "Dordrecht",
    "city_slug": "dordrecht",
    "country": {
      "iso": "NL",
      "name": "Nederland"
    },
    "province": "Zuid-Holland",
    "province_slug": "zuid-holland",
    "geolocation": {
      "latitude": "51.813788",
      "longitude": "4.668588"
    },
    "display_name": "Dordrecht"
  },
  "number_of_applies": 0,
  "is_pbp": false,
  "video": null,
  "custom_fields": [],
  "from_url": "https://www.nationalevacaturebank.nl/vacature/zoeken?query=audit&sort=relevance&page=3"
}
]
```

### Step-by-Step Usage Guide

**1. Define Target Data:** Identify job categories, industries, salary ranges, or locations needed. Consider employment types (permanent, freelance), seniority levels, and education requirements relevant to your research or recruitment goals.

**2. Build Search URLs:** Perform test searches on NationaleVacaturebank.nl with desired filters. Copy resulting URLs. For comprehensive datasets, create multiple URLs with different parameters (keywords, locations, salary brackets).

**3. Configure Input:** Set up JSON with collected URLs. Adjust `max_items_per_url` based on needs—`20` for standard pages, higher for comprehensive extraction. Enable `ignore_url_failures` for robustness when scraping multiple URLs.

**4. Launch Scraper:** Start via Apify console and monitor progress. Typical run processing 5-10 search pages with 20 items each completes in 2-4 minutes, varying with platform load.

**5. Review Results:** Preview dataset for data quality. Verify critical fields (title, company, salary, location) are populated correctly. Check for any systematic issues with specific search parameters.

**6. Export Data:** Export in preferred format—JSON for databases, CSV for spreadsheet analysis, Excel for business reporting. Apply filters to remove inactive jobs if focusing only on current opportunities.

**7. Handle Pagination:** For large datasets, include multiple page URLs (increment offset parameter) or set higher `max_items_per_url` to enable automatic pagination handling.

**Error Handling:** If URLs fail consistently, verify they're search result pages with valid filters. Check filter syntax hasn't changed. Activity log provides detailed error information for troubleshooting.

### Strategic Applications for Dutch Labor Market Intelligence

**Salary Benchmarking:** Build comprehensive compensation databases segmented by role, industry, region, and seniority. Track salary trends over time, identify regional differences (Amsterdam vs. other regions), and benchmark against market rates for recruitment budgets.

**Skills Demand Analysis:** Extract requirements and descriptions to identify trending skills. Track demand for specific technologies, certifications, or soft skills. Analyze skill gaps between available positions and candidate pools.

**Regional Market Mapping:** Geographic analysis reveals hiring hotspots, underserved regions, and remote work adoption rates. Inform office location decisions, target recruitment campaigns regionally, or identify expansion opportunities.

**Contract Type Trends:** Monitor permanent vs. temporary vs. freelance hiring patterns across industries. Track Dutch part-time work trends, flexible working arrangements, and contract type preferences by sector.

**Education Requirement Evolution:** Analyze education level demands (MBO/HBO/WO) across industries and roles. Identify credential inflation trends, alternative qualification acceptance, and education-salary correlations.

**Competitive Hiring Intelligence:** Track competitor job postings—what roles they hire, qualification standards, salary offerings, and posting frequency. Identify workforce expansion signals and talent acquisition strategies.

**Career Level Distribution:** Analyze seniority distribution across industries—which sectors hire more starters vs. senior professionals. Inform talent development programs and succession planning.

**Application Rate Analysis:** Number of applies field reveals job attractiveness. High application counts indicate competitive positions or strong employer brands. Low counts despite long posting duration signal difficult-to-fill roles or unrealistic requirements.

### Maximizing Data Value and Best Practices

**Schedule Regular Scraping:** Dutch job market dynamics require frequent updates. Weekly scraping captures new postings and tracks market changes. Store historical data to analyze seasonal patterns and long-term trends.

**Segment by Industry:** Create targeted searches by industry (finance, IT, healthcare, engineering) rather than broad queries. This produces cleaner, more actionable datasets for sector-specific analysis.

**Salary Filter Strategy:** Run multiple searches across salary bands (0-2500, 2500-4000, 4000+) to ensure comprehensive coverage, as some jobs may be excluded by single-filter searches.

**Combine with Company Data:** Enrich scraped jobs with LinkedIn company pages, Glassdoor reviews, or Chambers of Commerce data. Cross-reference salary data with CBS (Statistics Netherlands) reports for validation.

**DCO Classification Utilization:** Leverage Dutch occupational classification codes for government labor statistics alignment, funding application support, or policy research integration.

**Quality Assurance Checks:** Flag missing critical fields (salary, location, education level), unusual salary ranges (possible data errors), or suspicious patterns. Validate random samples manually for accuracy.

**Temporal Analysis:** Track when jobs first appear, how long they remain active, and when status changes to "filled." This reveals hiring urgency, time-to-fill benchmarks, and seasonal hiring cycles.

**PBP and Premium Tracking:** Monitor `is_pbp` flag to identify employers investing in recruitment visibility. Correlate premium status with application rates and time-to-fill for ROI analysis.

**Respect Platform Sustainability:** Space out large scraping runs, avoid excessive concurrent requests. Sustainable practices ensure continued data access and maintain platform relationship.

### Conclusion

The NationaleVacaturebank.nl Jobs Search Scraper transforms the Netherlands' leading job platform into actionable labor market intelligence. Whether building recruitment pipelines, conducting salary research, or analyzing competitive hiring landscapes across Dutch industries, this tool delivers comprehensive data aligned with Dutch labor market standards. Start extracting Dutch job market insights today and gain competitive advantage in Netherlands recruitment and HR analytics.

# Actor input Schema

## `urls` (type: `array`):

Add the URLs of the Jobs list urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.

## `offset` (type: `integer`):

The number of items to skip before starting to scrape.

## `ignore_url_failures` (type: `boolean`):

If true, the scraper will continue running even if some URLs fail to be scraped.

## `max_items_per_url` (type: `integer`):

The maximum number of items to scrape per URL.

## `proxy` (type: `object`):

Select proxies to be used by your scraper.

## Actor input object example

```json
{
  "urls": [
    "https://www.nationalevacaturebank.nl/vacature/zoeken?query=audit&sort=relevance&filters[salary][min]=2500"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# 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 = {
    "urls": [
        "https://www.nationalevacaturebank.nl/vacature/zoeken?query=audit&sort=relevance&filters[salary][min]=2500"
    ],
    "offset": 0,
    "ignore_url_failures": true,
    "max_items_per_url": 20,
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("stealth_mode/nationalevacaturebank-jobs-search-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 = {
    "urls": ["https://www.nationalevacaturebank.nl/vacature/zoeken?query=audit&sort=relevance&filters[salary][min]=2500"],
    "offset": 0,
    "ignore_url_failures": True,
    "max_items_per_url": 20,
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("stealth_mode/nationalevacaturebank-jobs-search-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 '{
  "urls": [
    "https://www.nationalevacaturebank.nl/vacature/zoeken?query=audit&sort=relevance&filters[salary][min]=2500"
  ],
  "offset": 0,
  "ignore_url_failures": true,
  "max_items_per_url": 20,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call stealth_mode/nationalevacaturebank-jobs-search-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Nationalevacaturebank Jobs Search Scraper",
        "description": "Efficiently scrape job listings from NationaleVacaturebank.nl, the Netherlands' leading job board. Extract comprehensive Dutch employment data including salaries, contract types, education requirements, and company details. Perfect for recruitment agencies, labor market research, and HR analytics.",
        "version": "0.0",
        "x-build-id": "DeftYfA7dLi8ZsXz2"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/stealth_mode~nationalevacaturebank-jobs-search-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-stealth_mode-nationalevacaturebank-jobs-search-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/stealth_mode~nationalevacaturebank-jobs-search-scraper/runs": {
            "post": {
                "operationId": "runs-sync-stealth_mode-nationalevacaturebank-jobs-search-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/stealth_mode~nationalevacaturebank-jobs-search-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-stealth_mode-nationalevacaturebank-jobs-search-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": {
                    "urls": {
                        "title": "URLs of the Jobs list urls to scrape",
                        "type": "array",
                        "description": "Add the URLs of the Jobs list urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "offset": {
                        "title": "Offset (number of items to skip - multiples of 100)",
                        "type": "integer",
                        "description": "The number of items to skip before starting to scrape."
                    },
                    "ignore_url_failures": {
                        "title": "Continue running even if some URLs fail to be scraped",
                        "type": "boolean",
                        "description": "If true, the scraper will continue running even if some URLs fail to be scraped."
                    },
                    "max_items_per_url": {
                        "title": "Max items per URL",
                        "type": "integer",
                        "description": "The maximum number of items to scrape per URL."
                    },
                    "proxy": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Select proxies to be used by your scraper."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
