European Job Search - Search 21 EU Job Boards at Once avatar

European Job Search - Search 21 EU Job Boards at Once

Pricing

from $2.00 / 1,000 result scrapeds

Go to Apify Store
European Job Search - Search 21 EU Job Boards at Once

European Job Search - Search 21 EU Job Boards at Once

Search 21 European national job boards in a single run. Merges and deduplicates postings into one unified feed with company, location and salary. No login required.

Pricing

from $2.00 / 1,000 result scrapeds

Rating

0.0

(0)

Developer

Studio Amba

Studio Amba

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

3 days ago

Last modified

Categories

Share

European Job Search

Search twenty-one European national job boards in a single run. This actor queries each board in parallel, normalizes every posting to a common schema, and removes duplicates of the same job appearing on multiple boards. One search, one unified feed.

No login. No cookies. No account.

What it does

  • Searches 21 European job boards at once: Arbeitsagentur (DE), Arbetsförmedlingen (SE), CV.lv (LV), CVbankas (LT), CVKeskus (EE), Duunitori (FI), eJobs (RO), France Travail (FR), Jobnet.dk (DK), Jobs.bg (BG), Jobs.cz (CZ), Kariyer.net (TR), Karriere.at (AT), Net-Empregos (PT), NoFluffJobs (PL), Poslovi Infostud (RS), Profesia (SK), Profession (HU), ProUnity (BE), StepStone.be (BE), VDAB (BE).
  • Normalizes every posting to a common schema (title, company, location, salary, contract type, sector, source).
  • Deduplicates the same job posted on several boards by matching title, company, and location.
  • Returns one clean, country-tagged feed sorted by country and title.

How to scrape European job board data

  1. Enter a role or keywords in the Search Query field, for example software engineer, nurse, or accountant. A common role name gives the broadest match across countries.
  2. Optionally restrict to certain countries with the Countries field (for example ["DE", "AT"]). Leave it empty to query every board.
  3. National boards index postings in the national language, so an English term under-returns on non-English boards — searching "VAT" mostly misses French, Dutch, and German postings, which are titled TVA, BTW, and Mehrwertsteuer. Use Query By Country to override the search term per board's country, e.g. {"FR": "TVA", "BE": "TVA", "NL": "BTW", "DE": "Mehrwertsteuer"}. Countries not listed fall back to Search Query.
  4. Optionally narrow to a city or region with Location (e.g. Berlin, Brno, Gent). Forwarded to every board that supports it; ProUnity and Jobnet.dk have no location field of their own and always return unfiltered results.
  5. Set Max Items Per Board to control how many postings are pulled from each board.
  6. Run the actor. Each board is queried in parallel, results are normalized and deduplicated.
  7. Open the dataset. Each row is one unique job with the board it came from.

Input

FieldTypeDescription
searchQuerystringJob title or keywords. Defaults to software engineer.
queryByCountryobjectOptional per-country search term override, e.g. {"FR": "TVA", "NL": "BTW"}. Countries not listed fall back to searchQuery.
countriesarrayOptional country filter. Empty means all boards.
locationstringOptional city or region filter, e.g. Berlin. Forwarded to every board with its own location field; ProUnity and Jobnet.dk have none and always return unfiltered.
maxItemsPerBoardintegerMax postings per board (1–200, default 20).
timeoutPerBoardSecsintegerMax seconds to wait per board (30–600, default 120).
proxyConfigurationobjectProxy settings passed to the underlying scrapers. Residential recommended.

Example input

{
"searchQuery": "data analyst",
"countries": ["DE", "AT", "PL"],
"maxItemsPerBoard": 25,
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}

Output

Each item in the dataset is one unique job posting:

{
"itemTitle": "Senior Data Analyst",
"company": "Acme GmbH",
"location": "Vienna",
"country": "AT",
"language": "de",
"salary": "€65,000 - €80,000",
"contractType": "Full-time",
"sector": "IT",
"url": "https://...",
"source": "Karriere.at",
"postedDate": "2026-06-12",
"descriptionSnippet": "We are looking for a data analyst with 3+ years of experience in...",
"scrapedAt": "2026-06-15T18:00:00.000Z"
}
FieldDescription
itemTitleJob title.
companyHiring company or employer, if available.
locationCity or region, if available.
countryISO country code of the source board.
languageISO 639-1 code of the posting's language. Null for boards that mix languages (e.g. bilingual Belgian boards), rather than guessing.
salarySalary text as listed (format varies by board).
contractTypeEmployment or contract type, if available.
sectorIndustry or category, if available.
urlLink to the original posting.
sourceName of the board the job came from.
postedDatePosting date, if available.
descriptionSnippetUp to 400 characters of the posting's own description text, HTML stripped, when the source board provides one. Null otherwise.
scrapedAtISO 8601 timestamp.

A final __SUMMARY__ item reports what the run actually covered. It is run metadata, not a job: its source is meta and its country and url are blank, so filter on source !== 'meta' if you only want postings.

Summary fieldMeaning
boardsQueriedBoards that finished and returned postings.
boardsNoResultsBoards that finished and had no match for your query. Not an error.
boardsTimedOutBoards still running when timeoutPerBoardSecs elapsed. Whatever they had already returned is included, so their coverage is partial. Raise the timeout to include them fully.
boardsFailedBoards that errored. This is the only one that means something is broken.
countriesUnsupportedCountry codes you asked for that have no board. They return nothing.
totalJobs, rawBeforeDedup, duplicatesRemovedCounts for the run.

How deduplication works

Postings are deduplicated by a key built from the normalized title, company, and location. The first occurrence of each unique job is kept. This collapses the same role that appears on multiple boards (common for large employers and aggregator-fed boards) into a single entry, while keeping genuinely distinct postings separate.

Use cases

  • Building a cross-border talent-market dataset for a specific role.
  • Salary benchmarking across countries for the same job title.
  • Feeding a recruitment or labor-market dashboard with normalized listings.
  • Monitoring hiring activity for a sector across multiple European markets.

Notes

  • This is a meta-actor. It orchestrates our individual national job-board scrapers and runs them in parallel, so a single run can cover many countries at once.
  • Salary and posted-date fields depend on each board exposing them; not all boards provide every field.
  • Coverage for a given query depends on each underlying board returning results for it. A broad role name matches more boards than a narrow or local-language niche term.
  • Use residential proxies for the most reliable results.

Cost and performance

This actor charges $0.02 per run (start fee, based on its 4 GB memory allocation) plus $0.002 per result scraped. 100 results costs about $0.22; 1,000 results about $2.02. A run's usage cost only settles after it reports SUCCEEDED.

Tips and tricks

  • Start small: test with maxItemsPerBoard: 5 before running large scrapes.
  • Use proxies: residential proxies give the best success rates for European Job.
  • Schedule runs: set up recurring runs to keep your data fresh automatically.
  • Integrate via API: use the Apify API or client libraries to fetch results programmatically.
  • No login required: this actor scrapes publicly available data without needing an account.

Limitations

  • Data is scraped from the public website and may change without notice.
  • Not every board answers every run; the __SUMMARY__ row separates boards that had no matches, boards that timed out, and boards that errored.
  • Boards run in parallel and each gets timeoutPerBoardSecs to finish. Most need 60-150 seconds; Net-Empregos (Portugal) regularly needs 300 or more, so raise the timeout when you search PT.
  • Very large scraping jobs may be slower due to proxy rotation and rate limiting.
  • Respect the website's terms of service and use responsibly.

Features

  • No login required — scrapes publicly available data from European Job without needing credentials or cookies.
  • Structured output — results are returned as clean JSON objects, ready for processing.
  • Pagination handling — automatically follows multiple pages of results.
  • Proxy support — configurable proxy settings for reliable, large-scale scraping.
  • Scheduled runs — run on a schedule to keep your dataset up to date automatically.
  • API access — integrate results into your workflow using the Apify API or webhooks.

FAQ

Is it legal to scrape European Job? Web scraping of publicly available data is generally permitted. This actor only accesses information that is publicly visible to any website visitor. Always review the website's terms of service before scraping.

How often should I run this scraper? For hiring-signal tracking or recruiting pipelines, daily or weekly runs are common. Set up a schedule in Apify Console to automate this.

Can I export the data to Google Sheets or Excel? Yes. After each run, you can download results in CSV, JSON, or Excel format directly from Apify Console. You can also connect results to Google Sheets using Apify integrations.

What if the scraper stops working? Websites change their structure occasionally. If you notice issues, please open an issue on the actor's page. We actively maintain this scraper and fix issues promptly.

Pricing and cost

This actor charges its own start fee and a small per-result fee. The job-board scrapers it launches each bill their own pricing to your account on top, exactly as if you ran them directly. Expect roughly double the meta's own per-item price once sub-scraper charges are included.