VDAB.be Scraper: Belgium Flanders Jobs, Vacatures & Employers
Pricing
Pay per event
VDAB.be Scraper: Belgium Flanders Jobs, Vacatures & Employers
Extract job listings from VDAB.be, Belgium's Flemish public employment service. Returns title, company, location, Flemish province, employment type, salary, full description and contact details. Covers Flanders and Brussels.
Pricing
Pay per event
Rating
0.0
(0)
Developer
NanoScrape
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
VDAB.be Scraper: Belgium Flanders Jobs, Vacatures and Employers
Extract job listings from VDAB.be, Belgium's official Flemish public employment service (Vlaamse Dienst voor Arbeidsbemiddeling en Beroepsopleiding). Returns structured job data including title, company, Flemish province, employment type, salary, full description, external apply URL, company website and company social media links.
Covers Flanders and Brussels Capital Region — where the majority of Belgian tech, logistics, healthcare and engineering roles are posted. Wallonia uses a separate PES (Forem).
What It Does
- Searches VDAB.be for any keyword in Dutch or English
- Extracts job cards: title, company, location, Flemish province, contract type, logo, posted date
- Fetches detail pages using Googlebot pre-rendering to unlock full job data (no browser required)
- Returns full description in plain text, HTML and Markdown from JSON-LD structured data
- Extracts external apply URL (employer's ATS or jobs portal link, e.g. Jobat, StepStone)
- Extracts company website from the VDAB detail page
- Optionally fetches company profile for social media links (LinkedIn, Twitter, Facebook, Instagram) and company about text
- Extracts salary from JSON-LD structured data (min/max, currency, period)
- Maps Belgian employment types (voltijds, deeltijds, interim, stage, leercontract)
- Maps locations to Flemish provinces (Antwerpen, Oost-Vlaanderen, West-Vlaanderen, Vlaams-Brabant, Limburg) and Brussels
- Sorts results by newest first by default — ideal for scheduled daily scrapes
Sample Output
{"_type": "job","id": "74510331","title": "Junior Software Engineer","job_url": "https://www.vdab.be/vindeenjob/vacatures/74510331/junior-software-engineer","source_url": "https://www.vdab.be/vindeenjob/vacatures/74510331/junior-software-engineer","source_platform": "vdab.be","company_name": "Noel Franklin","company_website": "https://www.noelfranklin.com","company_logo_url": "https://cdn.app-prd-cdn.aws.vdab-prd.be/vindeenjob/templates/bedrijven/4117/logo.jpg","company_social_urls": ["https://www.linkedin.com/company/18802263/","https://www.facebook.com/DeFranklins","https://www.instagram.com/noelfranklin.agency/"],"company_about": "Bij Noël Franklin draait alles om de juiste match. Wij voorzien echte begeleiding, inside info over bedrijven en toegang tot opportuniteiten die je nergens anders vindt...","location": "Roeselare","postal_code": "8800","country": "BE","region": "West-Vlaanderen","posted_at_text": "1 sep. 2026","posted_at_datetime": "2026-09-01T17:15:29Z","employment_type": "permanent","workplace_type": null,"salary_min": 2800.0,"salary_max": 4000.0,"salary_currency": "EUR","salary_period": "month","salary_text": "EUR 2800 - 4000 per month","description": "Ben jij een junior software engineer met een sterke interesse in automotive en embedded systemen?...","description_full": "Ben jij een junior software engineer met een sterke interesse in automotive en embedded systemen?...","description_html": "<p>Ben jij een <strong>junior software engineer</strong>...</p>","description_md": "Ben jij een **junior software engineer** met een sterke interesse...","contact_emails": [],"contact_phones": [],"contact_urls": [],"apply_url": "https://jobs.noelfranklin.com/nl/?utm_source=vdab&utm_medium=bedrijfspagina","search_query": "software engineer","scraped_at": "2026-09-02T10:00:00Z"}
Pricing
| Event | When triggered | Price |
|---|---|---|
actor-start | Once per run | $0.001 |
job-serp-result | Per job returned (SERP only mode) | $0.003 |
job-detail-result | Per job returned (with detail fetch) | $0.005 |
Example costs:
- 100 jobs (SERP only): $0.001 + 100 x $0.003 = $0.31
- 100 jobs (with details): $0.001 + 100 x $0.005 = $0.51
- 1000 jobs (SERP only): $0.001 + 1000 x $0.003 = $3.00
New Apify users get $5 free monthly credit — enough for 1,600+ SERP-only job extractions.
Input Fields
| Field | Type | Default | Description |
|---|---|---|---|
searchQueries | array | - | Keywords in Dutch or English (e.g. "programmeur", "verpleegkundige", "software engineer") |
location | string | - | Flemish city or region filter (e.g. "Antwerpen", "Gent", "Brussel") |
searchUrls | array | - | Paste VDAB.be search or direct vacancy URLs. Supports /vindeenjob/jobs/ SERP pages, /vindeenjob/vacatures/?trefwoord= search pages, and direct /vindeenjob/vacatures/{id}/{slug} vacancy URLs. |
sortBy | string | "newest" | "newest" sorts by posting date descending (recommended for daily scraping); "relevance" uses VDAB's default ranking |
maxResults | integer | 100 | Total result cap across all queries |
maxResultsPerQuery | integer | 100 | Cap per keyword or URL |
includeJobDetails | boolean | true | Fetch detail pages for full description, salary and apply URL |
includeCompanyDetails | boolean | false | Also fetch company profile for social links and about text |
maxConcurrency | integer | 5 | Concurrent requests (1-20) |
Output Fields
| Field | Description |
|---|---|
_type | Always "job" |
id | VDAB vacancy ID |
title | Job title |
job_url | Canonical vacancy URL on vdab.be |
source_url | Same as job_url |
source_platform | Always "vdab.be" |
company_name | Employer name |
company_logo_url | Employer logo from VDAB CDN |
company_website | Employer website URL (from detail page when includeJobDetails=true) |
company_social_urls | Array of social media URLs: linkedin, twitter, facebook, instagram, youtube in that order (when includeCompanyDetails=true) |
company_about | Company about/description text from VDAB company profile (when includeCompanyDetails=true) |
location | City or municipality |
postal_code | Belgian postal code (from JSON-LD structured data) |
country | Always "BE" |
region | Flemish province: Antwerpen / Oost-Vlaanderen / West-Vlaanderen / Vlaams-Brabant / Limburg / Brussel |
posted_at_text | Dutch date format: "13 jul. 2026" |
posted_at_datetime | ISO 8601 UTC datetime (from JSON-LD datePosted when includeJobDetails=true, date-only otherwise) |
employment_type | permanent / part-time / temporary / internship / apprenticeship / flexi / freelance |
workplace_type | on-site / hybrid / remote (when available in description) |
salary_min | Minimum salary in EUR (from JSON-LD baseSalary when listed) |
salary_max | Maximum salary in EUR |
salary_currency | Always "EUR" when salary is present |
salary_period | month / year / hour / week / day |
salary_text | Salary summary string |
description | Job description snippet (up to 500 characters) |
description_full | Full plain-text description with line breaks preserved |
description_html | HTML rendering of the full description |
description_md | Markdown source of the description (from VDAB's CMS) |
contact_emails | Email addresses found in description |
contact_phones | Belgian phone numbers found in description |
contact_urls | External URLs found in description |
apply_url | External apply URL from employer's ATS or jobs portal (from JSON-LD hiringOrganization.sameAs). Falls back to VDAB job URL when not available. |
search_query | Query that returned this result |
scraped_at | ISO 8601 UTC scrape timestamp |
How It Works
VDAB.be uses Angular Universal (server-side rendering for SEO). The scraper uses a two-stage fetch:
-
SERP — Verbolia static HTML pages at
/vindeenjob/jobs/{keyword-slug}serve up to 28 job cards per page as plain HTML (no JS required). These contain: title, company name, location, contract type, logo URL, posted date, description snippet. -
Detail — Vacancy detail pages at
/vindeenjob/vacatures/{id}/{slug}are fetched using a Googlebot User-Agent. VDAB's Angular Universal pre-renders full content for this UA (~79KB vs 46KB SPA shell), exposing JSON-LD JobPosting data with: full description in Markdown, salary (min/max/currency/period), ISO datePosted, postal code, company info and apply URL. -
Company (optional) — Company profile pages at
/vindeenjob/bedrijven/{id}are also pre-rendered for Googlebot, exposing: company about text, social media links (Facebook, Twitter, LinkedIn, Instagram).
Use with AI Agents (MCP)
{"mcpServers": {"apify": {"command": "npx","args": ["-y", "@apify/mcp-server"],"env": { "APIFY_TOKEN": "your_token" }}}}
Then ask your AI: "Search VDAB for software engineer jobs in Antwerpen and return the results as JSON."
Why This Scraper
- Full descriptions: Extracts complete job descriptions via Angular Universal pre-rendering — no browser, no Playwright
- External apply URLs: Returns the real employer ATS link, not just the VDAB page
- Company enrichment: Social media profiles and about text from VDAB company pages
- Structured salary data: Parsed from JSON-LD structured data (min/max/period)
- Public sector data: VDAB is the official Flemish public employment service — all listings are freely accessible
- HTTP-only Go: No browser, no Playwright, no Puppeteer. Fast, cheap, reliable
- Flemish market coverage: VDAB is the primary job board for Flemish speakers in Belgium
- Apprenticeship coverage: VDAB includes dual-training jobs (leercontract) not found on commercial boards
- Province mapping: Automatically maps Belgian municipalities to Flemish province
- Incremental-ready: Default sort-by-newest makes daily scheduled runs trivial
Common Use Cases
- Scheduled daily scraping: Run on a schedule with
sortBy: "newest"and a smallmaxResultscap (e.g. 50-100) to capture only new listings each day. Deduplicate downstream byidorjob_url. - Market research: Track job postings in specific Flemish provinces or sectors
- Salary benchmarking: Identify salary ranges for Belgian roles (structured min/max data from JSON-LD)
- Talent pipeline: Monitor which companies are hiring in Flanders
- Lead generation: Combine company_website and company_social_urls for B2B outreach
- Public sector jobs: VDAB lists Belgian government, education and healthcare vacancies
- Apprenticeship tracking: Monitor dual-training (leercontract) opportunities by sector
Notes and Limits
- Coverage: Flanders and Brussels Capital Region only. Wallonia (French-speaking) uses Forem.
- Language: Most listings are in Dutch (nl-BE). Some Brussels listings may be in French or English.
- Results per query: Up to 28 results per keyword search via the static SERP pages.
- apply_url: Points to the employer's ATS homepage (e.g.
jobs.noelfranklin.com/nl/) with VDAB tracking UTMs. The deep-link to the specific vacancy on the external ATS is only available inside the Angular SPA. - company_social_urls: Requires
includeCompanyDetails: true. Fetches one additional page per job. - company_open_jobs_count: Not available (VDAB's count API requires authentication).
- Authentication: VDAB's session-gated REST API is not used — all data comes from public pages.
- Update frequency: VDAB listings refresh daily. Run daily for fresh data.
- Salary data: Belgian salaries are often listed as gross monthly ("brut per maand"). "In overleg" means negotiable.
- Employment types: voltijds (full-time), deeltijds (part-time), interim (temp agency), stage (internship), leercontract (apprenticeship).
Related Actors
- Job Feed Aggregator - Multi-country job aggregator including Belgium
- Career Site Jobs Scraper - Scrape any company careers page
- Website Job Extractor - Extract jobs from any website
- Indeed Scraper - Global jobs including Belgium
- CVLibrary Scraper - UK job board
- IrishJobs.ie Scraper - Ireland jobs
- Prospects UK Scraper - UK graduate jobs
Support
Issues or questions? Open a ticket on the Issues tab or email contact@nanoscrape.com.