EURES EU Jobs Scraper
Pricing
from $1.20 / 1,000 results
EURES EU Jobs Scraper
Scrape 2M+ job vacancies from EURES (europa.eu) — the EU's official job portal across 31 countries. Filter by keyword, country, contract type & working hours. No login needed.
Pricing
from $1.20 / 1,000 results
Rating
0.0
(0)
Developer
Unfenced Group
Maintained by CommunityActor stats
1
Bookmarked
7
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share

Extract job listings from EURES (ec.europa.eu) at scale, in a clean, consistent structure ready for analysis, job boards, recruiting tools and market research. No API key required.
Why this scraper?
🎯 Built for the European Union
A dedicated pan-European scraper, not a global tool with a country dropdown. Search, locations and currency (EUR) are tuned for EURES (ec.europa.eu).
📄 Complete job data
Full job title and description, direct listing URL and publish date for every record.
💶 Salary data
Salary information parsed from the listing where the employer publishes it, in EUR. Missing salaries are returned as null, never guessed.
🏢 Company details
Hiring company name plus the profile details the source publishes, such as logo and company page.
📍 Location fields
Structured location data for every listing, ready for filtering and analysis.
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
keywords | string | "developer" | Search keywords (job title, skills, company). Leave empty to return all jobs. |
keywordsScope | string | "EVERYWHERE" | Where to search for keywords. |
countryCodes | array | (empty) | Filter by country ISO codes (e.g. NL, DE, FR, BE). Leave empty for all 31 EURES countries. |
positionScheduleCodes | array | (empty) | Filter by working-hours type. |
positionOfferingCodes | array | (empty) | Filter by contract type. |
sortBy | string | "MOST_RECENT" | How to sort results. |
maxResults | integer | 5 | Maximum number of job listings to return. EURES caps at 10,000 per search query. |
fetchDetails | boolean | false | Fetch full detail page for each job (adds city, postal code, salary, application deadline, driving licences required). Slower — uses one extra API call per job. |
Output schema
Every field below is present on every record. Fields the source does not publish for a given job are returned as null rather than omitted.
| Field | Type | Description |
|---|---|---|
id | string | Unique listing ID from the source. |
title | string | Job title as published. |
company | string | Hiring company name. |
city | string | City of the position. |
postalCode | string | Postal code of the position. |
countryCode | string | Country code. |
country | string | Country of the position. |
nutsCode | string | Nuts code. |
contractType | string | Contract type as published. |
workingHours | string | Working hours. |
educationLevel | string | Education level. |
experienceRequired | string | Experience required. |
publicationDate | string | Publication date. |
applicationDeadline | string | Application deadline. |
numberOfPosts | number | Number of posts. |
euresFlag | boolean | Eures flag. |
availableLanguages | array | Available languages. |
description | string | Full job description in plain text. |
descriptionMarkdown | string | Description markdown. |
salary | string | Salary as displayed (null if not published by the employer). |
applyUrl | string | Direct application link. |
referenceNumber | string | Reference number. |
source | string | Source. |
url | string | Direct link to the listing. |
requiredDrivingLicenses | string | Required driving licenses. |
Example record
{"id": "NjE1Mzc1OSAxMjE","title": "Dental Personal söker en tandsköterska till Tandhälsan i Laholm ","company": "Malmö Personal AB","city": "Limhamn","postalCode": "21643","countryCode": "SE","country": "Sweden","nutsCode": "se224","contractType": "directhire","workingHours": "parttime","educationLevel": null,"experienceRequired": null,"publicationDate": "2026-06-09","applicationDeadline": null,"numberOfPosts": 1,"euresFlag": false,"availableLanguages": ["sv"],"description": "Dental Personal söker nu en tandsköterska med hjärtat på rätt ställe för tillsvidareanställning hos Tandhälsan i Lahom. Huvuduppdrag och arbetsuppgifter Idag arbetar jag som ensam tandläkare tillsamma …","descriptionMarkdown": "Dental Personal söker nu en tandsköterska med hjärtat på rätt ställe för tillsvidareanställning hos Tandhälsan i Lahom. \n \nHuvuduppdrag och arbetsuppgifter \n \nIdag arbetar jag som ensam tandläkare …","salary": null,"applyUrl": "https://arbetsformedlingen.se/platsbanken/annonser/31160355","referenceNumber": "6153759","source": "PES-SWEDEN","url": "https://europa.eu/eures/portal/jv-se/jv-details/NjE1Mzc1OSAxMjE?lang=en","requiredDrivingLicenses": null}
Examples
Search for nurse roles in Brussels:
{"keywords": "nurse","maxResults": 100}
Broad nationwide crawl:
{"keywords": "nurse","maxResults": 1000}
Larger run with a hard cap:
{"keywords": "nurse","maxResults": 500}
Daily feed (run on a schedule):
{"keywords": "nurse","maxResults": 500}
Schedule this input in the Apify Scheduler (for example daily at 07:00) to keep an always-fresh feed of the newest listings.
💰 Pricing
$1.5 per 1,000 results — you only pay for successfully retrieved listings. Failed retries are never charged.
| Results | Cost |
|---|---|
| 100 | ~$0.15 |
| 1,000 | ~$1.5 |
| 10,000 | ~$15 |
| 100,000 | ~$150 |
Flat-rate alternatives typically charge $29–$49/month regardless of usage.
Subscription tiers lower the rate further, down to $0.9 per 1,000 at the highest tier. Use the Max results cap in the input to control your spend exactly.
Performance
| Run size | Typical time |
|---|---|
| 100 results | under 1 minute |
| 1,000 results | 2–4 minutes |
| 10,000 results | 20–35 minutes |
Known limitations
- Salary is only returned when the employer publishes it — many listings carry
nullsalary fields. - Company details vary per listing; the scraper returns what the source publishes and never invents data.
- Very large result sets are bounded by the source's own paging limits.
- Listings can be removed by the source at any time, so a small share of URLs may expire shortly after scraping.
Technical details
- Source: EURES (ec.europa.eu) — the European Union job listings
- Coverage: everything the public search exposes, filterable via the input parameters above
- Retry: automatic retry on network errors with exponential backoff
Need a custom scraper?
Unfenced Group builds Apify actors for any website — for free.
If the site you need isn't in our portfolio yet, just ask. We scope, build, and publish it at no cost to you. You only pay for results — we absorb the compute and proxy costs ourselves. Same pay-per-result pricing, same quality, same standards as every actor in this portfolio.
Get in touch: www.unfencedgroup.nl