Le Forem Job Scraper
Pricing
from $1.50 / 1,000 results
Le Forem Job Scraper
Under maintenanceScrape 40,000+ job listings from Le Forem, the Wallonia public employment service. Filter by keyword, location, contract type and date. Rich output: description, skills, education.
Pricing
from $1.50 / 1,000 results
Rating
0.0
(0)
Developer
Unfenced Group
Actor stats
2
Bookmarked
2
Total users
1
Monthly active users
44 minutes ago
Last modified
Categories
Share
Le Forem Scraper

Extract structured job listings from Le Forem — the public employment service of Wallonia, Belgium. Covers 40,000+ active vacancies across all sectors. No API key required.
Why this scraper?
🔍 Full-text search with location filtering
Search by keyword and municipality, region, or postal code. Combine both to pinpoint exactly the roles you need.
📄 Rich structured output per listing
Every result includes title, employer, contract type, salary range, work schedule, required education, required skills, and a full job description in plain text, HTML, and Markdown.
🛡️ Built-in deduplication across runs
Jobs seen in previous runs are flagged as reposts so you only process genuinely new listings. Change tracking detects modified postings.
🗂️ Sector, education, and skills data
Detail pages expose required education level, soft skills, office skills, certifications, required driving licenses, and language proficiency levels — ready for structured analysis.
⚙️ Precise volume control
Set a maxItems cap and a daysOld filter to stay within budget and focus on recent listings only.
🔗 Direct URL mode
Pass a list of Le Forem job URLs directly to extract specific listings without a keyword search.
Input parameters
| Field | Type | Default | Description |
|---|---|---|---|
keywords | string | — | Search keywords (job title, skill, etc.) |
location | string | — | Municipality, region, or postal code |
contractType | string | — | Filter by contract type (e.g. CDI, CDD, Interim) |
workSchedule | string | — | Filter by work schedule (e.g. Temps plein, Temps partiel) |
daysOld | integer | — | Exclude listings older than N days |
maxItems | integer | — | Maximum number of results to return |
fetchDetails | boolean | true | Fetch full detail pages (skills, education, description) |
skipReposts | boolean | false | Skip listings seen in a previous run |
startUrls | array | — | Direct Le Forem job URLs to scrape |
Output schema
Each result contains the following fields.
Always present:
| Field | Type | Description |
|---|---|---|
id | string | Le Forem internal vacancy ID |
referenceNumber | string | Human-readable reference number |
jobTitle | string | Job title |
employer | string | Employer name |
locations | array | Work location objects (city, postal code) |
contractType | string | Contract type (CDI, CDD, Interim, etc.) |
workSchedule | string | Work schedule regime |
languages | array | Required languages (codes) |
sectors | array | Activity sectors |
numberOfPositions | integer | Number of open positions |
publishDate | string | Publication date (formatted) |
publishDateISO | string | Publication date (ISO 8601) |
expiresDate | string | Listing expiry date (ISO 8601) |
isApplicationEnabled | boolean | Whether online application is available |
salaryMin | number | Minimum salary (null if not published) |
salaryMax | number | Maximum salary (null if not published) |
salaryCurrency | string | Salary currency |
salaryPeriod | string | Salary period (monthly, hourly, etc.) |
salaryRaw | string | Raw salary string as shown on the site |
url | string | Direct URL to the listing |
scrapedAt | string | Timestamp of scrape (ISO 8601) |
isRepost | boolean | Whether this listing was seen in a previous run |
changeStatus | string | Change status: NEW / MODIFIED / UNCHANGED |
contentHash | string | Hash for change detection |
With fetchDetails: true (default):
| Field | Type | Description |
|---|---|---|
description | string | Full job description (HTML) |
descriptionText | string | Full job description (plain text) |
descriptionMarkdown | string | Full job description (Markdown) |
workSchedulePrecision | string | Additional schedule detail |
sector | string | Employer sector |
metier | string | Job category / métier |
isTravelRequired | boolean | Whether the role requires travel |
modifiedDate | string | Last modification date |
educationLevel | string | Required education level |
educationRequired | array | Required education fields with codes |
experienceRequired | array | Required experience with levels |
softSkills | array | Required soft skills |
officeSkills | array | Required IT / office skills |
certifications | array | Required certifications |
drivingLicenses | array | Required driving license categories |
drivingLicensesSummary | string | Simplified driving license summary |
languageDetails | array | Language requirements with proficiency levels |
benefitsComments | string | Benefits and additional perks (plain text) |
Example output record:
{"id": "123456","referenceNumber": "REF-2025-123456","jobTitle": "Comptable","employer": "Entreprise Dupont SA","locations": [{ "city": "Liège", "postalCode": "4000" }],"contractType": "CDI","workSchedule": "Temps plein","numberOfPositions": 1,"publishDateISO": "2025-04-15","expiresDate": "2025-05-15","isApplicationEnabled": true,"salaryMin": 2800,"salaryMax": 3400,"salaryCurrency": "EUR","salaryPeriod": "monthly","salaryRaw": "2.800 € - 3.400 € par mois","url": "https://www.leforem.be/recherche-offres/offre-detail/123456","scrapedAt": "2025-04-20T09:14:00.000Z","isRepost": false,"changeStatus": "NEW","descriptionText": "Nous recherchons un comptable expérimenté pour rejoindre notre équipe...","educationLevel": "Bachelier","educationRequired": [{ "code": "BAC", "field": "Sciences économiques" }],"experienceRequired": [{ "code": "EXP3", "title": "Expérience souhaitée", "level": "3 ans" }],"softSkills": ["Rigueur", "Organisation", "Travail en équipe"],"officeSkills": ["Excel avancé", "SAP"],"languages": [{ "code": "fr", "name": "Français" }],"languageDetails": [{ "code": "fr", "name": "Français", "level": "Langue maternelle", "comment": null }],"certifications": [],"drivingLicenses": ["B"],"benefitsComments": "Chèques-repas, assurance groupe, télétravail 2j/semaine","sectors": ["Finance / Comptabilité"],"sector": "Services financiers","metier": "Comptabilité – Finance","isTravelRequired": false,"workSchedulePrecision": "Horaire de jour"}
Examples
Search for IT roles in the Liège area:
{"keywords": "développeur","location": "Liège","fetchDetails": true,"maxItems": 100}
Full-time CDI jobs posted in the last 7 days:
{"contractType": "CDI","workSchedule": "Temps plein","daysOld": 7,"maxItems": 500}
Scrape specific listings by URL:
{"startUrls": ["https://www.leforem.be/recherche-offres/offre-detail/123456","https://www.leforem.be/recherche-offres/offre-detail/789012"]}
Daily new listings feed with deduplication:
{"daysOld": 1,"skipReposts": true,"fetchDetails": true}
💰 Pricing
$1.50 per 1,000 results — you only pay for successfully retrieved listings. 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.
Use the Max results cap in the input to control your spend exactly.
Performance
| Run size | Estimated time |
|---|---|
| 100 listings | ~1–2 min |
| 1,000 listings | ~5–10 min |
| 10,000 listings | ~45–90 min |
| Full catalogue (~40,000) | ~3–5 hours |
Times include full detail page fetching (fetchDetails: true). Disable fetchDetails to reduce run time by ~60%.
Known limitations
- Salary data is not always present —
salaryMin/salaryMaxwill benullwhen Le Forem does not publish it. - Skills, education, and description fields require
fetchDetails: true(enabled by default). - Le Forem does not expose employer contact persons — contact fields are not available.
Technical details
- Source: leforem.be — public employment service of Wallonia, Belgium
- Memory: 256 MB
- Repost storage: KeyValueStore
leforem-scraper-job-dedup, 90-day TTL - Retry: Automatic retry on network errors, exponential backoff, 3 attempts per request
Additional services
Need a custom actor, additional filters, scheduled runs, or integration support? Send an email to info@unfencedgroup.nl — we build on request.
Part of the Unfenced Group European job board scraper portfolio — 50+ job markets covered.
Built by unfenced-group · Issues? Open a ticket or send a message.