EU Academic Jobs: PhD, Postdoc & Research Positions avatar

EU Academic Jobs: PhD, Postdoc & Research Positions

Pricing

from $4.00 / 1,000 result returneds

Go to Apify Store
EU Academic Jobs: PhD, Postdoc & Research Positions

EU Academic Jobs: PhD, Postdoc & Research Positions

All PhD, postdoc, professor, and research positions from 9 major EU portals — EURES, DAAD, EuroScienceJobs, UniversityPositions, INOMICS — in one deduplicated dataset. Keyword, country, and date filters; academic-only mode drops corporate noise. Weekly scheduled runs surface only new postings.

Pricing

from $4.00 / 1,000 result returneds

Rating

4.6

(3)

Developer

ScholarStack

ScholarStack

Maintained by Community

Actor stats

5

Bookmarked

46

Total users

17

Monthly active users

4 days ago

Last modified

Share

Find every PhD position, postdoc job, and research vacancy in Europe in one run. This actor aggregates 9 major academic job portals — EURES, DAAD PhDGermany, EuroScienceJobs, UniversityPositions, INOMICS, AcademicTransfer (NL), jobs.ac.uk (UK), Nature Careers, and CNRS Emploi (FR) — into a single normalized, deduplicated dataset (JSON / CSV / Excel / XML). Keyword auto-translation finds local-language postings an English-only search misses, and academic-only mode drops the corporate noise that EURES mixes into general "research" searches.

Manually checking nine portals every week takes hours. This actor does it in minutes — and with a scheduled weekly run in incremental mode, you only ever see new postings, for about $0.20/week.

Who is this for?

  • PhD & postdoc job seekers — set up a weekly scheduled run with incrementalMode: true and only see new positions in your field and countries
  • Research groups — monitor hiring across Germany, Netherlands, France, etc.
  • Recruitment platforms & career services — enrich your listings database with structured EU academic job data via the Apify API
  • Data analysts — track hiring trends in specific fields (Physics, CS, Economics) over time

Job portals covered (EURES, DAAD, EuroScienceJobs, UniversityPositions, INOMICS)

  • EURES — European Employment Services (a general EU job board with millions of listings). With academicOnly on, the actor filters server-side by 155 ESCO academic occupations (lecturers, researchers, scientists, professors) — surfacing thousands of tagged academic jobs, including strong Nordic coverage (SE/NO/DK) other boards miss — and additionally matches your keywords in the job title (euresKeywordScope). The academic filter then drops loosely-tagged corporate noise. This is the main volume source.
  • DAAD PhDGermany — Germany's official PhD position database (Germany only; skipped automatically if you don't request DE).
  • EuroScienceJobs — Science and research jobs across Europe; the actor pulls each country's full listing and filters by keyword in the title/tags.
  • UniversityPositions — University and research-institute positions EU-wide. The actor walks the full paginated catalogue (~300 jobs) plus a server-side keyword search, and extracts structured data including salary ranges, application deadlines, and exact posting dates.
  • INOMICS — Economics, finance, and social-science academic jobs. Because it's economics-focused, non-economics keywords (e.g. biology) will legitimately return few or no results from this source.
  • AcademicTransfer — The official jobs portal of the Dutch research universities, UMCs, and NWO institutes. Strongest single source for Netherlands (NL) coverage. Honours academicOnly to switch between scientific-only and full vacancy lists.
  • jobs.ac.uk — The UK's dominant academic jobs board, ~2,500 live listings. Covers UK universities plus a meaningful share of continental EU postings.
  • Nature Careers — Top-tier science postings from Springer Nature, including Max Planck, EMBL, DKFZ, and other premier research institutes. Smaller volume but high-quality.
  • CNRS Emploi — France's national research org (CNRS) job portal, ~630 positions across all CNRS labs nationwide. Strongest single source for FR research coverage.

Two optional opt-in sources are not in the default enabledSources list. AcademicPositions (academicpositions.com, ~1,150 European jobs with explicit application deadlines and position types; the deepest source for Belgium, Sweden, Switzerland, and Luxembourg) — add "academicpositions" to enable it; if the run reports Cloudflare blocks, enable RESIDENTIAL proxy. And Euraxess (the European Commission's official researcher-mobility portal, ~8,300 jobs across all EU member states) — add "euraxess" to enable it. It works in two modes. Without proxy it collects up to ~750 listings and stops gracefully the moment the euraxess.fr per-IP rate limit kicks in, keeping everything gathered so far. With Apify proxy (proxyConfiguration.useApifyProxy: true, RESIDENTIAL group) rotating IPs lift that limit and the full catalogue becomes reachable, with country filters applied server-side for fast targeted runs.

By enabling the opt-in source you confirm you have the right to access the target site's data per its terms of service in your jurisdiction.

  1. Click Try for free on the Apify page.
  2. Adjust keywords (e.g. ["postdoc", "PhD"]) and countries (e.g. ["DE", "NL"]).
  3. Leave academicOnly = true unless you specifically want corporate R&D as well.
  4. Click Start. Download results as JSON / CSV / Excel / XML from the Output tab.

Quick-start input — copy and paste this:

{
"keywords": ["research"],
"countries": ["DE", "NL", "FR"],
"academicOnly": true,
"translateKeywords": true,
"maxResultsPerSource": 500,
"postedWithinDays": 30,
"incrementalMode": false
}

Set up a weekly job alert (scheduled runs + incremental mode)

The strongest way to use this actor — a personal academic job alert that costs ~$0.20/week:

  1. Run the actor once with your keywords and countries to seed the baseline.
  2. In Apify Console, open Schedules and schedule the actor weekly with the same input plus incrementalMode: true.
  3. Every scheduled run now returns only jobs not seen in previous runs — your weekly "new positions" digest.
  4. Optional: attach an Apify integration (email, Slack, webhook) to get the new postings delivered automatically.

Filter by keyword, country, and posting date

FieldDescriptionDefault
keywordsSearch terms, combined with OR — a job matching any keyword is kept (results are merged fairly across keywords). Use a multi-word entry like "machine learning" to match that phrase. Each portal matches the keyword in the job title (EURES title scope, and title/tags on the curated boards), so add several related terms if you want broader recall.["research"]
countriesISO country codes. Leave empty to search all of Europe.[] (all EU)
translateKeywordsAuto-expand keywords into the languages of the selected countries (e.g. researchrecherche (FR), Forschung (DE), ricerca (IT)). Surfaces local-language jobs an English-only search misses — French results jumped from ~2 to 50+ in testing. Unrecognised keywords are searched as-is.true
academicOnlyKeep only genuine academic / research roles. On EURES this also activates a server-side filter on 155 ESCO academic occupations, surfacing thousands of tagged academic jobs. Drops corporate and staffing-agency postings (e.g. "Research Associate" at a GmbH / AG / CRO / Personalservice) while keeping universities and research institutes — including those legally registered as a GmbH (Helmholtz, Forschungszentrum Jülich, etc.).true
euresKeywordScopeHow EURES matches keywords. title = keyword must be in the job title (precise, recommended). everywhere = match anywhere in the listing (broad but noisy — machine learning matches 200k+ jobs). Only affects EURES.title
maxResultsPerSourceCap per portal (after the academic filter). Raise it for more results — portals like EURES have thousands of listings.500 (max 5000)
maxTotalResultsOverall cap after dedup. 0 = no cap.0
enabledSourcesWhich portals to query.all 9
postedWithinDaysOnly return jobs posted within N days. 0 = all.0
incrementalModeOnly return jobs not seen in previous runs.false
proxyConfigurationOptional Apify proxy.disabled
debugShow detailed diagnostic logs (per-request URLs, page-by-page progress). Off by default for a clean run log; enable only for troubleshooting.false

Output: what each job record contains

Each item is a flat JSON object. Example:

{
"id": "daad_d5366ddc0d43c536",
"title": "PhD Student (f/m/d) ImmunoFLASH: CAR T immunotherapy with FLASH radiotherapy",
"institution": "Helmholtz-Zentrum Dresden-Rossendorf",
"department": "Institute of Radiooncology – OncoRay",
"country": "DE",
"city": "Dresden",
"deadline": "2026-06-30",
"postedDate": "2026-05-12",
"salaryInfo": null,
"salaryMonthlyEur": null,
"contractDuration": "01.10.2026",
"workingLanguage": "German, English",
"jobType": "Full PhD",
"requiredDegree": "Master, Diplom",
"field": "Medicine",
"fundingSource": "Helmholtz Association",
"applicationUrl": "https://www.daad.de/en/.../phd-student-fmd-immunoflash-...",
"sourcePortal": "DAAD",
"scrapedAt": "2026-05-14T17:24:18.823Z"
}

You can download the dataset in JSON, CSV, Excel, or XML from the Output tab or via the Apify API.

Data fields

FieldTypeNotes
idstringFormat: {sourceCode}_{md5hash}. Cross-source duplicates dedupe to one row; the kept id is the first source seen.
titlestringJob title
institutionstringHiring organization
departmentstring|nullLab / faculty if available
countrystring|nullISO-2 code (e.g. DE, NL)
citystring|nullCity or region name; NUTS region codes resolved to human-readable names
deadlinestring|nullISO date when available
postedDatestring|nullISO date
salaryInfostring|nullRaw salary text when explicitly stated on the listing (rare; most listings don't expose structured salary).
salaryMonthlyEurnumber|nullNormalized monthly gross EUR — best-effort parse from salaryInfo. Frequently null.
contractDurationstring|nullSchedule ("Full-time" / "Part-time" from EURES & UniversityPositions) OR start date from DAAD.
workingLanguagestring|nullDAAD only
jobTypestring|nulle.g. "Full PhD", "Structured programme"
requiredDegreestring|nullDAAD only
fieldstring|nullInferred research field (Physics, CS, Medicine, etc.)
fundingSourcestring|nullFunding agency OR research-consortium affiliation when mentioned in the listing. Examples: "DFG", "ERC", "Horizon Europe", "MSCA", "BMBF", "Helmholtz Association", "Max Planck Society", "Leibniz Association", "Fraunhofer". Heuristic — verify on the source page if critical.
tagsarray|nullEuroScienceJobs / UniversityPositions tag chips
descriptionRawstring|nullEURES/INOMICS/UniversityPositions: first ~400 chars, HTML stripped. DAAD: synthetic summary from metadata fields. EuroScienceJobs: not populated. Emails and IBANs always redacted.
applicationUrlstring|nullDirect link to the posting
sourcePortalstringEURES / DAAD / EuroScienceJobs / UniversityPositions / INOMICS / AcademicTransfer / JobsAcUk / NatureCareers / CNRS (+ Euraxess and AcademicPositions if enabled)
scrapedAtstringISO timestamp

How much does it cost to scrape EU academic jobs?

Pay-per-result: $4.00 per 1,000 results.

Concrete examples:

  • 200 academic jobs across all 9 sources = $0.80
  • A weekly incremental run that surfaces ~50 new jobs = $0.20/week

Incremental mode is free to enable and significantly reduces cost on recurring runs.

For recruitment platforms and career services: API access

Everything works programmatically through the Apify API — start runs with your own keyword/country matrix, fetch normalized JSON, and feed it into your own job board, CRM, or analytics pipeline. Combine schedules, incrementalMode, and webhooks to keep a continuously fresh EU academic jobs feed without re-paying for unchanged listings.

Tips

  • Non-English countries: leave translateKeywords on — searching research across ["FR","DE","IT"] automatically also matches recherche, Forschung, ricerca, so you don't need to know the local words. (In testing this took France from ~2 results to 50+.)
  • More results vs. more precision: the default matches your keyword in the job title (precise). For broader recall, add related keywords (e.g. ["biology", "molecular", "genetics"]) or set euresKeywordScope: "everywhere" (more results from EURES, but noisier).
  • Want more total results? Raise maxResultsPerSource (up to 5000). For the maximum haul, run with empty keywords and academicOnly: true — EURES then returns its full occupation-tagged academic inventory (thousands of jobs EU-wide, auto-partitioned per country). The specialist boards are smaller and are already returned in full.
  • Turn academicOnly off only if you specifically want corporate R&D positions from EURES.
  • Use postedWithinDays: 14 for fresh-only feeds.
  • Combine incrementalMode: true with a scheduled run to build a deduplicated weekly digest.
  • For large multi-country crawls, enable proxyConfiguration to avoid IP rate-limiting on INOMICS / EuroScienceJobs.
  • Countries must be ISO-2 codes ("DE", "NL", "FR") — full country names are not supported.

FAQ

How do I get notified about new PhD positions every week?

Schedule the actor weekly in Apify Console with incrementalMode: true — each run returns only postings not seen before. Attach an email or Slack integration to deliver them automatically. Typical cost: ~$0.20/week.

Does it find jobs posted in German, French, or Dutch?

Yes — with translateKeywords on (the default), your keywords are auto-expanded into the languages of the selected countries, so local-language postings are found without you knowing the local terms.

Which countries are supported?

Any European country by ISO-2 code. Verified with DE; the other sources expose NL, FR, AT, CH, BE, SE, DK, FI, NO, IT, ES, PL, IE, GR and more. DAAD only covers Germany; other sources cover broader EU.

Can I get only university positions, no company jobs?

Yes — that's the default (academicOnly: true). It drops corporate and staffing-agency postings while keeping universities and research institutes, including those legally registered as a GmbH (Helmholtz, Forschungszentrum Jülich, etc.).

Why are some salaryInfo / deadline fields null?

Not all portals expose them. EURES doesn't return deadlines via API; salary is rarely structured. We extract what's available.

Why don't I get all the jobs a portal's website shows?

Two reasons. First, the website count is unfiltered — with academicOnly on, the actual academic share is much smaller. Second, EURES's search API only serves the first 10,000 results of any single query (a fixed result-window limit, unrelated to proxies or your plan); for narrower keyword searches this is never a problem since they return well under 10,000.

The Actor only fetches publicly-listed job postings. It respects rate limits, identifies itself, and redacts emails / IBANs from descriptions. You are responsible for downstream use complying with each portal's terms.

Support / bugs

Use the Issues tab on this Actor page to report problems or request features.

Disclaimer

The Actor scrapes third-party websites whose layouts may change without notice. Results are best-effort; verify critical details (deadlines, salaries) on the source page before applying. This is an independent, unofficial tool — not affiliated with or endorsed by EURES, DAAD, EuroScienceJobs, UniversityPositions, INOMICS, AcademicTransfer, jobs.ac.uk, Nature Careers, CNRS, Euraxess, or AcademicPositions.