PhD, Postdoc & Research Jobs Scraper — 12 Sources in 1
Pricing
from $3.00 / 1,000 job results
PhD, Postdoc & Research Jobs Scraper — 12 Sources in 1
Every PhD, postdoc and research job source behind one endpoint: EURAXESS, jobs.ac.uk, UN Careers, ReliefWeb, Impactpool, Devex, Ikerbasque, EURES, LinkedIn, AcademicPositions + 2 university boards. One run returns a merged, deduped dataset - billed once. Incremental mode surfaces only new postings.
Claude / Codex skill to describe and setup this actor: SKILL.md
Every PhD, postdoc, academic, research, policy and NGO job board behind one endpoint, one run, one bill.
Most academic job scrapers cover a single portal. This one merges 12 of them, dedupes across all of them, and hands you a single flat dataset — so you stop running (and paying for) a dozen scrapers and stitching their output together yourself.
EURAXESS · jobs.ac.uk · UN Careers · ReliefWeb · ImpactpoolIkerbasque · U. of Copenhagen · Universitat de BarcelonaAcademicPositions · EURES · LinkedIn
Why this one
| This Actor | Typical single-portal scraper | Other academic aggregators | |
|---|---|---|---|
| Sources | 12 | 1 | 9 (EU only) |
| Coverage | EU + UK + global academia and UN / NGO / policy | one board | EU academia only |
| Cross-source dedupe | ✅ | n/a | ✅ |
| Price per 1,000 jobs | $3.00 all-in | $0.50 – $4.90 | $4.00 |
No other Actor in the store combines academic boards and the UN / NGO / development-career sources (UN Careers, ReliefWeb, Impactpool). If you track research careers that cross between a university and an international organisation, this is the only single feed that sees both.
Pricing
Pay-per-event. You are billed by this Actor and nothing else — the sources run inside this Actor, so there are no hidden child-Actor fees stacked on top.
| Event | Price |
|---|---|
| Actor start | $0.01 per run |
| Job result | $0.003 per unique job returned |
$3.00 per 1,000 unique jobs. A default run (all boards, 20 jobs each) returns ~170 deduped postings and costs about $0.52.
One detail that keeps the bill honest:
- You pay per unique job. Cross-source duplicates are dropped before billing, not after. A posting that shows up on both EURAXESS and jobs.ac.uk is one charge, not two.
One exception:
AcademicPositionsneeds a real browser to clear Cloudflare, so it runs as a separate child Actor and adds that Actor's own fees on top of this one's. It is off by default — tick it only if you want it.
Input
Everything is optional. Run it with {} and you get a sensible default sweep.
| Field | Default | What it does |
|---|---|---|
sources | all 11 in-process boards | Which boards to include. |
keyword | — | Free-text filter, forwarded to the boards that support it (machine learning, climate, postdoc…). |
maxItemsPerSource | 20 | Cap per board before merging. |
maxItems | 220 | Hard cap on the merged output — and therefore on your bill. 0 = no cap. |
mistralApiKey / anthropicApiKey | — | Optional keys retained for compatible source features; not needed for full-description extraction. |
{"keyword": "machine learning","sources": ["euraxess", "jobs_ac_uk", "un_careers", "eures"],"maxItemsPerSource": 25}
Devex availability
Devex is excluded from the bundle until its canonical job pages can be fetched reliably. Search-result snippets and model reconstructions are not accepted as complete position descriptions.
Output
One flat, deduped row per posting:
{"source": "euraxess","id": "123456","title": "Postdoctoral Researcher in Machine Learning","company": "KU Leuven","location": "Leuven, Belgium","url": "https://euraxess.ec.europa.eu/jobs/123456","postedAt": "2026-07-10","deadline": "2026-08-31","description": "The complete position description...","snippet": "The complete position description...","salary": ""}
| Field | Meaning |
|---|---|
source | Which board the record came from, e.g. "euraxess" |
id | Stable source-side identifier ("" when the board has none) |
title | Job title as posted |
company | Hiring organisation |
location | Location / duty station (may include remote hints) |
url | Direct link to the posting — also the cross-source dedupe key |
postedAt | Posting date where the board provides it, else "" |
deadline | Application deadline — populated by euraxess, jobs_ac_uk, un_careers, reliefweb, math_ku_phd, ub_doctoral; the others return "" |
description | Complete posting description; records without one are omitted |
snippet | Backward-compatible alias of the complete description |
salary | Salary text — only jobs_ac_uk populates this today; the others return "" |
hiringContactName | LinkedIn rows: person named as the job poster (null elsewhere) |
hiringContactTitle | That person's LinkedIn headline |
hiringContactUrl | Their LinkedIn profile URL |
Fields a board doesn't provide come back as "", never missing — so the schema stays stable across all 11 boards. Warning rows carry an extra warning field, with every other field null.
Run it from your own code
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("nomad-agent/researcher-bundle").call(run_input={"keyword": "postdoc", "maxItems": 50})for job in client.dataset(run["defaultDatasetId"]).iterate_items():print(job["title"], "—", job["company"], "—", job["url"])
Typical uses
- Job-alert products — schedule full-snapshot runs and compare the rows downstream before piping alerts into email, Telegram or Slack.
- Academic labour-market research — one dataset spanning EU, UK and international-organisation research posts.
- Recruiting and talent mapping — see who is hiring researchers, where, and on what deadline cadence.
Reliability
Every board fails open: if one is down or slow, the run still returns everything the others found, and the failing board is named in the log. A run that hits an unexpected error still finishes SUCCEEDED carrying a diagnostic row, rather than failing and losing the results you already paid for.
Found a bug, or want a board added? Open an issue on the Actor page — we read them. If this saved you time, a review helps other researchers find it.
Is this Actor useful to you? A quick ⭐ review on the Actor's Reviews tab helps other researchers and PhD applicants find it — and tells us what to build next.
From the maker of Oink — an open-source, AI-powered job-search bot for Telegram that runs on these Actors. Try the free bot, get a managed instance at oinkjobsearch.com, or browse the full catalog of 50+ Actors.