VDAB Search Scraper
Pricing
from $2.99 / 1,000 vdab job records
VDAB Search Scraper
Scrape current VDAB search and detail pages with rich job, employer, contract, profile, skill, salary, workplace, and application data.
Pricing
from $2.99 / 1,000 vdab job records
Rating
0.0
(0)
Developer
Jobs API
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
VDAB Jobs Search Scraper
Search VDAB's public vacancy listings and enrich selected jobs from their public detail records. The Actor returns business information published for each vacancy and stores a separate compact run summary.
Choose a mode
searchsearches VDAB byquery, then enriches up tomaxItemsvacancies. This is the default mode.singleenriches exactly one URL injobUrls.multipleenriches 1 to 20 URLs injobUrls.
Vacancy URLs must use the public HTTPS route https://www.vdab.be/vindeenjob/vacatures/<numeric-id> with an optional single slug. The apex domain vdab.be is accepted and normalized to www.vdab.be. Query strings, fragments, credentials, ports, and other routes are rejected.
Input fields
All ten fields are optional in the input object and receive the defaults below. jobUrls is conditionally required by direct modes. Unknown fields and legacy aliases such as jobUrl and startUrls are rejected. Values are validated as supplied; the Actor does not coerce or clamp them.
| Field | Type | Required? | Default | Bounds or notes |
|---|---|---|---|---|
mode | string | No | search | search, single, or multiple. |
query | string | No | ontwikkelaar | Non-empty, up to 100 Unicode characters. Direct modes accept only the default value. |
jobUrls | array of strings | Conditional | [] | 0 to 20 native VDAB vacancy URLs. Search requires an empty array; single requires exactly 1; multiple requires 1 to 20. Each URL is at most 2,048 characters. |
maxPages | integer | No | 1 | Search: 1 to 5 pages. Direct modes require 1. |
maxItems | integer | No | 3 | 1 to 100 records in every mode. |
pageSize | integer | No | 28 | Search: 1 to 100 results per page. Direct modes require 28. |
maxRequests | integer | No | 20 | 1 to 200 total source requests, including robots checks and redirect hops. |
requestDelayMs | integer | No | 1000 | 1,000 to 10,000 milliseconds between source requests. |
requestTimeoutSecs | integer | No | 30 | 5 to 30 seconds per request. |
proxyConfiguration | object | No | {} | Apify proxy controls or 1 to 10 custom HTTP(S) proxy URLs, each at most 2,048 characters. The two proxy styles cannot be combined. See below. |
For a search, the Actor reads VDAB's public /vindeenjob/jobs/<query> listing pages. The site's visible page size is 28, which is also the default. Direct modes use only the supplied vacancy URLs; they accept the default query, one page, and page size 28 because search settings do not apply there.
Proxy settings
proxyConfiguration supports these standard Apify fields:
| Field | Type | Bounds or notes |
|---|---|---|
useApifyProxy | boolean | Enables Apify Proxy when true. |
apifyProxyGroups | array of strings | Up to 5 unique names, 1 to 64 characters, using uppercase letters, digits, and underscores; requires useApifyProxy: true, including for an empty array. |
apifyProxyCountry | string | Two uppercase letters; requires useApifyProxy: true. |
proxyUrls | array of strings | 1 to 10 valid HTTP(S) proxy URLs, each at most 2,048 characters. Cannot appear with any Apify proxy field. |
Example search input:
{"mode": "search","query": "software ontwikkelaar","maxPages": 1,"maxItems": 3,"pageSize": 28,"maxRequests": 20,"requestDelayMs": 1000,"requestTimeoutSecs": 30}
The repository also includes INPUT.json, INPUT-single.json, and INPUT-multiple.json examples using the supported input fields.
Job records
Each dataset row is a business record for a public vacancy. jobId, jobTitle, and jobUrl are required. Other values are omitted when VDAB does not publish them; explicit false and 0 values are retained. The listing employer label can differ from the company-profile name, so company and companyProfileName are separate fields. The client object is included only when VDAB makes those client details visible.
| Field | Meaning |
|---|---|
jobId | Numeric VDAB vacancy identifier. |
jobTitle | Vacancy title from the public detail record. |
jobUrl | Canonical public VDAB page URL. |
company | Employer or recruiter label, using the search-card label when available. |
companyId | Public identity number for the employer organization. |
companyProfileName | Organization name in the company-profile section. |
companyWebsite, companyLogo | Public website and logo URLs from the company profile. |
companyDescription | Published company-profile description. |
companyLocality | Municipality published for the company profile; this is separate from the vacancy's work location. |
client | Visible client or hiring-organization details; included only when VDAB explicitly permits the opdrachtgever to be shown. Nested fields are listed below. |
location, country, address, workplace | Primary work-location label, country, address, and other published workplace wording. |
locations | Structured work locations; nested fields are listed below. |
description, descriptionHtml | Full readable description and its sanitized HTML version. |
requirements, requirementsHtml | Full readable qualifications and requirements, with sanitized HTML when available. |
offer, offerHtml | Compensation and benefits wording, with sanitized HTML when available. |
professionalSkills | Published skills and competencies. |
personalCompetencies | Published personal competencies; omitted when VDAB provides none. |
attestations | Attestations published as vacancy requirements; omitted when empty. |
vocationalAttestations | Vocational or professional competency attestations; omitted when empty. |
responsibilities | Responsibilities published for the vacancy. |
educationRequirements | Published education requirement wording. |
contractDetails | Published contract, duration, schedule, or work-time labels. |
employmentTypes | Employment types published for the vacancy. |
languages | Published language names and proficiency levels. |
requiredStudies | Published study or education labels. |
experience | Published experience requirements. |
licenses | Driving or other licenses published as job requirements. |
workHours | Published work-hour values or schedule details. |
otherFacts | Additional published facts from occupation or qualification sections. |
proposedEmploymentContract | Proposed contract details; nested fields are listed below. |
studiesEquivalentByExperience | Whether VDAB says experience can count as equivalent to the listed studies. |
regulatedProfession | Whether VDAB marks the occupation as a regulated profession. Explicit false is retained. |
workplaceType | Published workplace arrangement or location type. |
jobStartDate | Expected start date or timestamp. |
contractDuration | Published contract-duration wording. |
positionsAvailable | Nonnegative integer count of published vacancies. |
directApply | Whether the vacancy is marked for direct application. |
salaryText | Published salary wording or a concise range made from explicit salary values. |
salaryCurrency, salaryMin, salaryMax, salaryPeriod | Published currency, lower and upper salary bounds, and salary period. |
datePosted, lastUpdatedOn, validThrough | Published posting, modification, and application-validity dates or timestamps. Date-only source values remain date-only. |
isShortageOccupation | Whether VDAB marks the occupation as a shortage occupation. |
occupation, jobDomain | Published occupation or professional-profile name and job-domain label. |
referenceNumber | Employer or VDAB vacancy reference. |
applicationInstructions, applicationInstructionsHtml | Published application instructions, with sanitized HTML when available. |
applicationContact | Published application contact name or organization. |
applicationAddress | Published application address details. |
applicationMethods | Published application channels; nested fields are listed below. |
applicationEmail, applicationPhone, applicationUrl | Published application email, phone number, and external application URL. |
applicationViaVDAB, applicationViaVisit, applicationViaLetter | Whether VDAB explicitly lists application through VDAB, in person, or by letter. |
locations is an array of objects. Each object can contain locality (city or municipality), postalCode, countryCode, region, and address. The optional client object contains the visible client name, companyNumber, address, locality, postalCode, and country; companyNumber is text so leading zeroes are preserved. proposedEmploymentContract can contain contract (contract type), contractLine (published contract wording), and startAsSoonAsPossible (whether VDAB says the job should start as soon as possible). Explicit false and true values are retained. applicationMethods is an array of channel objects with type (such as web, email, phone, letter, visit, or Via VDAB), label (the displayed channel name), value (the published destination or wording), and url (for a web link). The other list fields contain strings; optional skills and attestation arrays are omitted when empty.
Fictional job record
The following complete example is fictional. Its employer uses the reserved .example domain, and its vacancy identifier is illustrative; it is not a record retrieved from VDAB.
{"jobId": "99999999","jobTitle": "Fictional Senior Product Engineer","company": "Example Public Employer","companyId": 432100,"companyProfileName": "Example Product Cooperative","companyWebsite": "https://company.example","companyLogo": "https://company.example/logo.svg","companyDescription": "An explicitly fictional cooperative that builds accessible civic software.","companyLocality": "Leuven","client": {"name": "Fictional Public Services Client","companyNumber": "0012345678","address": "Exampledreef 5","locality": "Mechelen","postalCode": "2800","country": "België"},"location": "9000 Gent","country": "België","address": "Exampleplein 12, 9000 Gent","locations": [{"locality": "Gent","postalCode": "9000","countryCode": "BE","region": "Oost-Vlaanderen","address": "Exampleplein 12, 9000 Gent"}],"workplace": "Gent en hybride","description": "This fictional role designs and maintains accessible public-service software. The engineer works with product, design, and operations colleagues to plan changes, build reliable services, document decisions, and improve systems using feedback from their users.","descriptionHtml": "<p>This fictional role designs and maintains <strong>accessible public-service software</strong>.</p><ul><li>Plan and build reliable services</li><li>Document decisions and improve systems</li></ul>","requirements": "Applicants should have at least three years of experience building web services, an understanding of accessible interface design, and the ability to explain technical decisions clearly. A related degree is welcome; equivalent professional experience is accepted.","requirementsHtml": "<p>Applicants should have at least <strong>three years of experience</strong> building web services.</p><p>Equivalent professional experience is accepted.</p>","offer": "The fictional employer offers a permanent full-time contract, flexible hours, a monthly salary range of EUR 3,200 to EUR 4,100, meal vouchers, and a learning budget.","offerHtml": "<p>A permanent full-time contract with flexible hours.</p><ul><li>EUR 3,200 to EUR 4,100 per month</li><li>Meal vouchers and a learning budget</li></ul>","professionalSkills": ["Softwareontwikkeling","Toegankelijke webinterfaces ontwerpen"],"personalCompetencies": ["Careful communication with service users"],"attestations": ["Fictional first-aid attestation"],"vocationalAttestations": ["Fictional accessibility testing attestation"],"responsibilities": "Plan, build, test, and maintain accessible public-service software with a cross-functional team.","educationRequirements": "Bachelor degree in computer science or equivalent experience.","contractDetails": ["Vaste job","voltijds","Flexibele uren"],"employmentTypes": ["FULL_TIME"],"languages": ["Nederlands (Zeer goed)","Engels (Goed)"],"requiredStudies": ["Bachelor: Informatica"],"experience": ["Minstens 3 jaar ervaring"],"licenses": ["Rijbewijs B"],"workHours": ["38 uur per week","Flexibele daguren"],"otherFacts": ["Fictional team works across product, design, and operations."],"proposedEmploymentContract": {"contract": "Vaste arbeidsovereenkomst","contractLine": "Vaste job van onbepaalde duur","startAsSoonAsPossible": false},"studiesEquivalentByExperience": true,"regulatedProfession": false,"workplaceType": "HYBRID","jobStartDate": "2027-02-01","contractDuration": "Onbepaalde duur","positionsAvailable": 2,"directApply": true,"applicationInstructions": "Send a short introduction and a link to relevant work using the application website.","applicationInstructionsHtml": "<p>Send a short introduction and a link to relevant work using the <a href=\"https://company.example/apply\">application website</a>.</p>","salaryText": "min 3200 max 4100 EUR per maand","salaryCurrency": "EUR","salaryMin": 3200,"salaryMax": 4100,"salaryPeriod": "maand","datePosted": "2027-01-12","lastUpdatedOn": "2027-01-13T09:30:00.000Z","validThrough": "2027-03-12","isShortageOccupation": false,"occupation": "Product Engineer","jobDomain": "Informatica","referenceNumber": "FICTIONAL-PE-02","applicationContact": "Fictional Hiring Team","applicationAddress": ["Exampleplein 12","9000 Gent","België"],"applicationMethods": [{"type": "web","label": "Website","value": "https://company.example/apply","url": "https://company.example/apply"},{"type": "email","label": "E-mail","value": "jobs@company.example"},{"type": "visit","label": "In person","value": "By appointment at the published company address."}],"applicationEmail": "jobs@company.example","applicationPhone": "+32 9 555 01 23","applicationViaVDAB": false,"applicationViaVisit": true,"applicationViaLetter": false,"applicationUrl": "https://company.example/apply","jobUrl": "https://www.vdab.be/vindeenjob/vacatures/99999999/fictional-senior-product-engineer"}
Run summary and source access
The Actor writes OUTPUT_SUMMARY separately from job records. It contains exactly three properties: status, the run status; itemsStored, the number of records successfully written; and isPartial, whether a later request, write, or finalization problem limited the result after records were saved. A run with no saved records fails; saved records are preserved if a later problem occurs. For example:
{"status": "SUCCEEDED","itemsStored": 3,"isPartial": false}
The Actor uses public VDAB listing and vacancy information. Requests stop when VDAB returns an access denial or source-authored challenge; there are no retries or alternate routes after such a response.