Eures Job Scraper
Pricing
from $0.80 / 1,000 results
Eures Job Scraper
Scrape EURES job listings across 30+ EU countries. Extract salaries, companies, job titles, and employment data in seconds. Perfect for job aggregators, recruitment agencies, and career platforms. Automate European job market analysis with zero coding.
Pricing
from $0.80 / 1,000 results
Rating
5.0
(3)
Developer
Shahid Irfan
Maintained by CommunityActor stats
2
Bookmarked
88
Total users
17
Monthly active users
6 days ago
Last modified
Categories
Security
Limited permissionsShare
What does EURES Job Scraper do?
EURES Job Scraper collects structured job vacancy data from EURES, the European employment portal operated for job mobility across the EU and participating countries. Start with a keyword, a location, or a complete EURES search URL, set a result limit, and receive detailed vacancy records with employer data, locations, descriptions, salary ranges, application deadlines, education and experience requirements, and direct vacancy links.
The dataset is built for recruitment research, hiring intelligence, job aggregation, labor market analysis, employer research, salary benchmarking, and recurring vacancy monitoring across European countries. Results can be exported from Apify as JSON, CSV, Excel, or XML, or delivered to other systems through the Apify API, webhooks, and integrations.
Why use EURES Job Scraper?
- European vacancy coverage - Collect vacancies published through EURES from many national employment services and employers in one consistent dataset.
- Three ways to search - Use a keyword, a location or country, or an EURES search URL that already contains your filters.
- Detailed vacancy context - Capture salary ranges, application deadlines, education levels, required experience, skills, working languages, employment periods, and structured city and postal data.
- Application links - Keep direct application URLs when the vacancy publishes one.
- Readable descriptions - Use
description_textfor analysis anddescription_htmlwhen the original formatting matters. - Clean datasets - Duplicate vacancies are skipped, empty values are removed, and records are saved as each page completes.
- Repeatable collection - Use result and page limits for quick tests, scheduled monitoring, or larger research runs.
- Resilient runs - Temporary request failures are retried, detail failures never discard a job record, and the actor keeps working when the portal changes how it serves data.
What data can you extract from EURES?
Each record can include the vacancy title, employer, location, publication context, full description, salary, requirements, and application information. EURES does not publish every field for every vacancy, so some values can be empty.
Core vacancy fields
| Field | Type | Description |
|---|---|---|
identifier | String | EURES vacancy identifier. |
title | String | Job or vacancy title. |
url | String | Direct EURES vacancy detail URL. |
company | String | Hiring company or organization. |
employer_name | String | Employer name when published separately. |
employer_legal_id | String | Employer legal identifier when available. |
employer_website | String | Employer website when available. |
employer_sector_codes | String | Comma-separated employer sector codes. |
employer_size_code | String | Employer organization size code. |
employer_ownership_type_code | String | Employer ownership type code. |
employer_description | String | Plain-text employer description from the vacancy detail. |
publication_date | String | ISO publication date derived from the vacancy creation timestamp. |
creation_date | Number | Source creation timestamp in epoch milliseconds. |
last_modification_date | Number | Source last update timestamp in epoch milliseconds. |
number_of_posts | Number | Number of advertised positions. |
eures_flag | Boolean | Whether the vacancy is EURES-flagged. |
position_offering_code | String | Contract or offering code, such as direct hire or temporary. |
position_schedule_codes | String | Comma-separated working time codes, such as full time. |
job_category_codes | String | Comma-separated ESCO or ISCO occupation codes. |
job_category_primary | String | Primary occupation code. |
available_languages | String | Comma-separated listing language codes. |
translation_type | String | Translation type reported by EURES. |
translation_language | String | Language code of the alternate translation. |
translated_title | String | Alternate translated title when available. |
translated_description_text | String | Plain-text alternate translated description. |
location_country_codes | String | Comma-separated country codes. |
location_region_codes | String | Comma-separated NUTS region codes. |
location_cities | String | Comma-separated city names when published. |
location_postal_codes | String | Comma-separated postal codes when published. |
description_html | String | Vacancy description with safe formatting preserved. |
description_text | String | Plain-text vacancy description. |
summary | String | Short text summary derived from the description. |
source | String | Source label, normally EURES. |
source_url | String | Data service URL used for the run. |
search_url | String | Portal search URL used for the run. |
Salary, requirements, and application fields
| Field | Type | Description |
|---|---|---|
salary_min | Number | Minimum salary when published. |
salary_max | Number | Maximum salary when published. |
salary_reference | Number | Reference salary when published. |
salary_currency | String | Salary currency code, such as EUR. |
salary_interval | String | Pay interval, such as year, month, or hour. |
salary_type | String | Remuneration type, such as base pay. |
salary_basis | String | Remuneration basis, such as salaried. |
salary_description | String | Plain-text salary description. |
salary_benefits | String | Benefit descriptions returned with the remuneration package. |
last_application_date | String | ISO application deadline when published. |
employment_period_start | String | ISO employment start date when published. |
employment_period_end | String | ISO employment end date when published. |
employment_period_description | String | Employment period description. |
immediate_start | Boolean | Whether the employer marks the role for immediate start. |
required_education_level_code | String | Required education or qualification level code. |
required_years_of_experience | Number | Required years of experience when published. |
required_experiences | String | Experience requirement descriptions. |
required_skills | String | Comma-separated ESCO skill identifiers. |
required_skill_count | Number | Number of required skills reported. |
required_driving_licenses | String | Comma-separated required driving license categories. |
working_language_codes | String | Comma-separated working language codes. |
position_language_requirements | String | Language codes with required or desired levels, such as en(B1). |
application_instructions | String | Plain-text application instructions. |
application_url | String | Application link extracted from the vacancy instructions. |
travel_willingness | Boolean | Whether travel is required or accepted. |
travel_percentage | Number | Travel percentage when published. |
detail_language | String | Language of the vacancy detail profile used for enrichment. |
How to use EURES Job Scraper
- Open the Actor on Apify Store.
- Choose a search mode: enter a keyword, enter a location or country, or paste a complete EURES search URL.
- Optionally set the sort order, result limit, and page limit.
- Keep vacancy details enabled for salary, deadlines, and requirement fields.
- Run the Actor and review the dataset preview.
- Export the dataset or connect it to your workflow.
Search precedence is simple and predictable:
- A supplied keyword is used first.
- Location and country codes narrow a keyword search. If only location or country is supplied, the search runs without a keyword.
- When no keyword or location is supplied, the start URL is used.
- A keyword or location search ignores the start URL completely, including its query filters.
Input Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
startUrl | String | No | EURES software engineer search URL | Complete EURES search results URL. Used only when no keyword, location, or country is supplied. |
keyword | String | No | - | Search term matched across vacancy fields. Takes precedence over the start URL. |
location | String | No | - | EURES location or NUTS codes, such as de, fr, or fi1b. Comma-separated values are supported. |
country | String | No | - | ISO country codes, such as de, fr, or fi. Combined with location codes. |
sort | String | No | BEST_MATCH | Sort order for keyword and location searches. Accepted values are BEST_MATCH and MOST_RECENT. |
results_wanted | Integer | No | 20 | Maximum number of vacancy records to save. Range: 1 to 1000. |
max_pages | Integer | No | 10 | Maximum number of result pages to request. Range: 1 to 200. |
include_details | Boolean | No | true | Fetch each vacancy detail to add salary, deadlines, requirements, and structured locations. |
proxyConfiguration | Object | No | {} | Optional Apify Proxy or custom proxy settings for repeated or large runs. |
Usage Examples
Keyword search
Collect recent software engineering vacancies across Europe.
{"keyword": "software engineer","sort": "MOST_RECENT","results_wanted": 50,"max_pages": 5}
Location-only search
Collect vacancies in Germany without a keyword.
{"location": "de","sort": "MOST_RECENT","results_wanted": 100,"max_pages": 10}
Search with a country filter
Combine a keyword with a country code to narrow the results.
{"keyword": "nurse","country": "nl","results_wanted": 40,"max_pages": 4}
Complete EURES search URL
Reuse a search that you already configured on the EURES portal.
{"startUrl": "https://europa.eu/eures/portal/jv-se/search?page=1&resultsPerPage=50&orderBy=BEST_MATCH&keywordsEverywhere=data%20analyst&lang=en","results_wanted": 100,"max_pages": 5}
Faster runs without detail enrichment
Use core listing data only when you do not need salary or application deadline fields.
{"keyword": "developer","results_wanted": 200,"max_pages": 10,"include_details": false}
Sample Output
{"identifier": "NWQzODU2YzItNmEwMS1jOTM0LWUwNjMtNjg5M2IyMGE0ZjNlIDQy","title": "Software Engineer (H/F)","url": "https://europa.eu/eures/portal/jv-se/jv-details/NWQzODU2YzItNmEwMS1jOTM0LWUwNjMtNjg5M2IyMGE0ZjNlIDQy?lang=en","company": "Example Technologies SAS","employer_name": "Example Technologies SAS","employer_website": "https://example.com","publication_date": "2026-10-16T05:44:59.000Z","creation_date": 1760593499000,"last_modification_date": 1761198299000,"number_of_posts": 2,"eures_flag": false,"position_offering_code": "directhire","position_schedule_codes": "fulltime","job_category_codes": "http://data.europa.eu/esco/occupation/f2b15a0e-e65a-438a-affb-29b9d50b77d1","location_country_codes": "FR","location_region_codes": "FRJ13","location_cities": "Marseille","location_postal_codes": "13008","salary_min": 40000,"salary_max": 45000,"salary_currency": "EUR","salary_interval": "year","salary_type": "basepay","last_application_date": "2026-11-07T00:00:00.000Z","immediate_start": true,"required_education_level_code": "6","required_years_of_experience": 3,"required_skills": "http://data.europa.eu/esco/skill/6d97bf55-6fb6-4795-8282-3ef915ae0bb8","working_language_codes": "fr,en","position_language_requirements": "fr(C1),en(B2)","application_url": "https://example.com/careers/apply/12345","application_instructions": "Send your application through the employer website.","description_html": "<p>We are looking for a software engineer to join our platform team.</p>","description_text": "We are looking for a software engineer to join our platform team.","summary": "We are looking for a software engineer to join our platform team.","available_languages": "fr,en","translation_type": "FIRST_LANGUAGE","detail_language": "fr","source": "EURES","source_url": "https://europa.eu/eures/api/jv-searchengine/public/jv-search/search","search_url": "https://europa.eu/eures/portal/jv-se/search?lang=en&keywordsEverywhere=software%20engineer"}
Tips for Best Results
- Start with 20 to 50 results to check the fields for your target country and occupation.
- Use
MOST_RECENTwhen you monitor new vacancies andBEST_MATCHwhen you search a specific role. - Keep
include_detailsenabled when you need salary, deadlines, education, experience, or application links. - Use comma-separated country codes when you want to compare several labor markets in one run.
- Empty optional fields mean EURES did not publish the value for that vacancy. They do not indicate a failed run.
- Use
max_pagestogether withresults_wantedto control the size and duration of large runs. - For recurring monitoring, schedule the Actor with
MOST_RECENTand a small result limit.
Integrations
- Google Sheets - Send vacancy datasets to spreadsheets for review and reporting.
- Webhooks - Trigger your own workflow after each run.
- Make or Zapier - Connect vacancy data to no-code automations.
- API - Read datasets programmatically from your applications.
- Data warehouses - Export to CSV, JSON, or Excel for analytics and salary benchmarking.
- Notification workflows - Send new matching vacancies to email, Slack, or a CRM.
Frequently Asked Questions
Can I export EURES job data to CSV or Excel?
Yes. Apify datasets can be downloaded as CSV, Excel, JSON, XML, and other supported formats.
Can I run this Actor on a schedule?
Yes. You can schedule it in Apify Console to run hourly, daily, weekly, or at another interval. Use MOST_RECENT for change monitoring.
Do I need an EURES account or API key?
No. The Actor collects publicly available vacancy data and does not require an EURES login or API key.
Can I search several countries in one run?
Yes. Use comma-separated values in country or location, such as de,fr,nl, or place multiple location codes in a single EURES search URL.
Why are salary or deadline fields missing?
EURES only publishes those values when the employer or national employment service supplies them. The Actor never invents missing salary or contact information.
Why does a location-only search ignore my start URL?
A keyword or location search is treated as the active search mode and the start URL is ignored completely. Clear the keyword and location fields if you want to run the start URL exactly as supplied.
Does the Actor keep job records when a detail request fails?
Yes. Listing data is saved even when optional detail enrichment fails, and enrichment pauses automatically after repeated failures so the run can finish.
Is this Actor suitable for non-technical users?
Yes. It runs from the Apify Console with form-based inputs, and the dataset can be downloaded without writing code.
Is it legal to collect EURES job data?
The Actor is intended for legitimate collection of publicly available vacancy data. You are responsible for complying with applicable laws, EURES terms of use, and privacy rules in your jurisdiction.
Support
For issues, feature requests, or custom Actor work, use the Issues tab on the Actor page or contact the developer through Apify.
Legal Notice
This Actor is designed for legitimate data collection from publicly available sources. Users are responsible for using the data responsibly and complying with applicable laws and website terms.