EURES Job Vacancy Scraper avatar

EURES Job Vacancy Scraper

Pricing

from $3.00 / 1,000 results

Go to Apify Store
EURES Job Vacancy Scraper

EURES Job Vacancy Scraper

Scrape live job vacancies from EURES, the European Union's official cross-border job mobility portal. Search 2M+ jobs across 31 EEA countries by keyword, country, sector, contract type, schedule, education level and more, or fetch full details for specific job IDs.

Pricing

from $3.00 / 1,000 results

Rating

0.0

(0)

Developer

Crawler Bros

Crawler Bros

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Scrape live job vacancies from EURES — the European Union's official job mobility portal for cross-border employment across the European Economic Area. EURES lists millions of open positions across 31 countries (all EU member states plus Iceland, Liechtenstein, Norway and Switzerland), making it one of the largest public job boards in Europe.

Use this actor to search jobs by keyword, country, business sector, contract type, work schedule, education level, required experience or language, or to fetch full details (description, employer, application link, required experience, locations) for specific job vacancy IDs.

No login, cookies, or API key required — this actor uses EURES's own public search API, so results are always fresh and directly sourced from the platform.

What data can I get?

For every job vacancy, the actor returns as much of the following as EURES publishes for that listing:

  • Job details — title, full description, publication date, last modified date, number of open posts, occupation classification (ESCO)
  • Location — country/countries, NUTS region code(s), city (detail mode), postal code
  • Employer — name, website, sector(s), description
  • Terms — contract type (direct hire, temporary, internship, etc.), work schedule (full-time/part-time/flexible), EURES cross-border flag, remote-work allowed flag (detail mode, when disclosed)
  • Requirements — required years of experience, required education level, required skills (ESCO), required driving licenses, working languages and per-language required proficiency level (detail mode)
  • Salary & benefits (detail mode, when disclosed) — minimum/maximum offered salary, currency, pay period (yearly/monthly/hourly) or a reference figure, plus any free-text salary description, a list of named extra benefits (accommodation included, meals included, relocation assisted, travel expenses, medical/dental/vision/life insurance, retirement plan, company car, etc.) and a separate free-text description of non-salary perks
  • Application — direct application URL and instructions, application deadline
  • Contact (detail mode) — recruiter/contact name, email, phone number and postal address when the employer publishes them
  • Links — the canonical EURES job vacancy page URL

Input

FieldTypeDescription
modeselectsearch (default) — keyword + filter search. byIds — fetch specific job vacancies by ID.
searchQuerystringFree-text keyword, e.g. developer, nurse, warehouse.
searchInselectWhere to match the keyword: everywhere (title + description + employer), job title only, job description only, or employer name only.
jobIdsarrayJob vacancy IDs to fetch directly (mode=byIds).
countriesarray (select)Restrict to job locations in one or more of the 31 EEA countries.
regionCodesarrayRestrict to job locations in one or more EU NUTS region codes for finer-grained geographic filtering than countries, e.g. deb (Berlin, Germany) or no0b (Trondelag, Norway). Combines with countries as a union. Copy region codes from the nutsRegionCodes field of a previous result.
sectorsarray (select)Restrict to one or more NACE Rev.2 business sectors.
positionOfferingCodesarray (select)Restrict to contract types (direct hire, temporary, internship, apprenticeship, etc.).
positionScheduleCodesarray (select)Restrict to full-time, part-time or flexible schedules.
educationLevelsarray (select)Restrict to required education level (basic to doctoral).
experienceLevelsarray (select)Restrict to required-experience bands.
languageSkillsarray (select)Restrict to jobs requiring specific languages.
benefitCodesarray (select)Restrict to jobs that explicitly advertise specific extra benefits (accommodation, meals, relocation, travel expenses, insurance types, retirement plan, company car, etc.). Most listings don't disclose this, so it narrows results significantly.
occupationUrisarrayRestrict to jobs classified under specific ESCO occupation URIs (copy from a previous result's occupationUris field).
skillUrisarrayRestrict to jobs requiring specific ESCO skill URIs (copy from a previous mode=byIds result's requiredSkills field).
euresFlagOnlybooleanOnly return jobs explicitly flagged for cross-border EURES candidates.
publicationPeriodselectOnly jobs published within the last day / 3 days / week / month.
minNumberOfPostsintegerOnly return vacancies offering at least this many open posts (find bulk-hiring vacancies).
sortByselectRelevance (best match) or most recent. "Most recent" orders by each listing's last-synced timestamp in EURES's index (lastModifiedDate), which is usually the same as publicationDate but can differ when a source employment service re-syncs an unchanged listing. Most-recent ordering only applies when searchQuery is empty; a keyword search is always ordered by relevance to keep results on-topic.
maxItemsintegerMaximum number of records to return (1–2000).

Output

One dataset item per job vacancy. Example fields (omit-empty — only fields with real data are included):

{
"jobId": "MzQwNDYwIDU",
"title": "Software Developer",
"description": "We are looking for an experienced developer...",
"publicationDate": "2026-08-10T09:05:00+00:00",
"numberOfPosts": 1,
"euresFlag": true,
"countries": ["de"],
"countryNames": ["Germany"],
"nutsRegionCodes": ["DE300"],
"positionScheduleCodes": ["fulltime"],
"positionOfferingCode": "directhire",
"employerName": "Acme GmbH",
"employerWebsite": "https://acme.example",
"employerSectorCodes": ["j"],
"recordType": "jobVacancy",
"sourceUrl": "https://europa.eu/eures/portal/jv-se/jv-details/MzQwNDYwIDU?lang=en",
"scrapedAt": "2026-08-10T09:10:00+00:00"
}

Every job vacancy also includes nutsRegionCodes — the EU NUTS statistical region code(s) covering the job's location(s), e.g. DE300 (Berlin) — useful for regional aggregation beyond country level. Feed these codes back into the regionCodes input filter to search a specific region directly.

When using mode=byIds, additional fields become available: documentId (the source employment service's own internal document/reference number, when different from reference), locations (with postal codes), postalCodes, workingLanguages, requiredYearsOfExperience (or requiredExperienceDescription — a free-text summary of the experience requirement — when the source feed only provides text instead of a number), requiredEducationLevelCode (raw ISCED-based education level code), requiredSkills (ESCO skill URIs), requiredLanguageSkills (per-language required/desired CEFR level), drivingLicensesRequired, employmentPeriod, employmentStartDate, employmentEndDate, applicationUrl, applicationInstructions, applicationDeadline, employerLegalId, employerSizeCode (employer's organisation size band, e.g. microenterprise, smallenterprise, medium-sizedenterprise, largeenterprise, when disclosed), remoteWorkAllowed (when the employer has explicitly indicated whether remote work is allowed), immediateStart (whether the employer indicated the position starts immediately), salaryMin/salaryMax (or salaryReference when only a single figure is given), salaryCurrency, salaryPeriod (e.g. year, month, hour), salaryDescription (free-text pay notes, when the employer discloses pay information), benefits (a list of named extra benefits the employer explicitly ticked, e.g. "Accommodation included", "Travel expenses", "Medical insurance" — corresponds to the benefitCodes search filter), benefitsDescription (free-text non-salary perks such as meal vouchers, company car or remote-work days, when disclosed), contentLanguage (the language code the returned title/description text is actually written in), travelRequired (whether the role involves travel, when the employer specified it), travelPercentage and travelDescription (extra detail on travel expectations, when disclosed) and — when the employer publishes them — contactName, contactEmail, contactPhone, contactAddress.

FAQ

Do I need an API key or to log in to EURES? No. EURES's job search is fully public — the actor uses the same public search endpoint that powers the EURES website, with no authentication required.

How many jobs can I scrape? EURES lists millions of active vacancies at any time. Use maxItems to cap the number of records, and narrow with searchQuery, countries, sectors or other filters to target the jobs you need.

Can I get jobs from a specific country only? Yes — set countries to one or more of the 31 supported EEA country codes.

Can I filter by a specific city or region, not just a whole country? Yes — set regionCodes to one or more EU NUTS region codes (found in the nutsRegionCodes field of any previous result), e.g. deb for Berlin. This narrows results below country level and combines with countries as a union.

Can I filter by contract type or work schedule? Yes — use positionOfferingCodes (direct hire, temporary, internship, etc.) and positionScheduleCodes (full-time, part-time, flexible).

How do I get full job details including the direct application link? Run mode=search first to collect jobId values, then run mode=byIds with those IDs to fetch full details including applicationUrl and applicationDeadline.

Is the data up to date? Yes — every run queries EURES live; nothing is cached or scraped from a snapshot.

Can I find vacancies that are hiring for many positions at once? Yes — set minNumberOfPosts to only return vacancies advertising at least that many open posts (useful for finding bulk-hiring campaigns).

Do results include a recruiter's contact details? When the employer publishes them, mode=byIds results include contactName, contactEmail, contactPhone and contactAddress alongside the direct applicationUrl.

Can I tell if a job allows remote work? When the employer has explicitly indicated it, mode=byIds results include a remoteWorkAllowed boolean field.

Does the actor return salary information? When the employer discloses it, mode=byIds results include salaryMin/salaryMax (or salaryReference for a single reference figure), salaryCurrency and salaryPeriod (yearly, monthly or hourly). Not every listing publishes a salary — EURES only exposes it when the source employer/job board provides it.

Can I search only job descriptions or only employer names? Yes — set searchIn to DESCRIPTION to match only within the job description text, or EMPLOYER to match only against the employer/company name (useful for finding every open vacancy at a specific company).

Why does sortBy=MOST_RECENT sometimes return a job with an older publicationDate before one that's newer? "Most recent" orders results by each listing's last-synced timestamp in EURES's own index (mirrored in the output as lastModifiedDate), not by publicationDate. National employment services periodically re-sync their feeds, which can refresh a listing's sync timestamp without it being a genuinely new posting. lastModifiedDate itself is always strictly newest-first under this sort order.

Can I find jobs that offer specific benefits, like relocation or accommodation? Yes — set benefitCodes to one or more benefit types (accommodation included, meals included, relocation assisted, travel expenses, medical/dental/vision/life insurance, retirement plan, company car, etc.). Note that most EURES listings don't disclose extra-benefit information at all, so this filter can narrow results significantly; leave it empty to include all jobs regardless of disclosed benefits. Matching benefits appear in mode=byIds results as the benefits field.

Does the actor say whether a job requires travel? When the employer specified it, mode=byIds results include a travelRequired boolean, plus travelPercentage and a free-text travelDescription when the employer gave more detail. Most listings don't disclose this.

Can I filter by ESCO occupation or skill? Yes. Every job vacancy is classified against the EU's ESCO taxonomy. Run a search first, copy an occupation URI from a result's occupationUris field (or a skill URI from a mode=byIds result's requiredSkills field), then pass it into occupationUris or skillUris on a follow-up run to find similar vacancies.