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 5 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

5.0

(2)

Developer

ScholarStack

ScholarStack

Maintained by Community

Actor stats

2

Bookmarked

20

Total users

13

Monthly active users

3 days ago

Last modified

Share

Find every PhD position, postdoc job, and research vacancy in Europe in one run. This actor aggregates 5 major academic job portals — EURES, DAAD PhDGermany, EuroScienceJobs, UniversityPositions, and INOMICS — 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 five 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). Keywords are matched in the job title by default (euresKeywordScope), then the academic filter keeps only academic/research roles. 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; full country listing filtered by keyword in the title/tags.
  • 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.
  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": 300,
"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.["DE"]
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. 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.300 (max 5000)
maxTotalResultsOverall cap after dedup. 0 = no cap.0
enabledSourcesWhich portals to query.all 5
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: first ~400 chars, HTML stripped. DAAD: synthetic summary from metadata fields. EuroScienceJobs/UniversityPositions: not populated. Emails and IBANs always redacted.
applicationUrlstring|nullDirect link to the posting
sourcePortalstringEURES / DAAD / EuroScienceJobs / UniversityPositions / INOMICS
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 5 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) and add more countries. EURES is the only source large enough to scale; 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, or INOMICS.