PhD, Postdoc & Research Jobs Scraper — 12 Sources in 1 avatar

PhD, Postdoc & Research Jobs Scraper — 12 Sources in 1

Pricing

from $3.00 / 1,000 job results

Go to Apify Store
PhD, Postdoc & Research Jobs Scraper — 12 Sources in 1

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.

Pricing

from $3.00 / 1,000 job results

Rating

0.0

(0)

Developer

Nomad Dev

Nomad Dev

Maintained by Community

Actor stats

0

Bookmarked

18

Total users

3

Monthly active users

2 days ago

Last modified

Categories

Share

PhD, Postdoc & Research Jobs Scraper — 11 Sources in 1

Claude / Codex skill to describe and setup this actor: SKILL.md

PhD, postdoc, academic, research, policy and NGO job boards behind one endpoint.

Most academic job scrapers cover a single portal. This one merges 11 sources, dedupes them within the run, and hands you one canonical six-root dataset.

EURAXESS · jobs.ac.uk · UN Careers · ReliefWeb · Impactpool
Ikerbasque · U. of Copenhagen · Universitat de Barcelona
AcademicPositions · EURES · LinkedIn

Why this one

This ActorTypical single-portal scraperOther academic aggregators
Sources1119 (EU only)
CoverageEU + UK + global academia and UN / NGO / policyone boardEU academia only
Cross-source dedupen/a
Bundle price per 1,000 jobs$3.00 for the default in-process set$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. The 10 default sources run inside this Actor, so a default run has only this bundle's charges. AcademicPositions is the 11th, opt-in source; it runs as a separate child Actor and adds that Actor's own start/result fees to the bundle charges.

EventPrice
Actor start$0.01 per run
Job result$0.003 per unique job returned

$3.00 per 1,000 unique jobs delivered by this bundle. The separate AcademicPositions fees are not included in that rate.

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.

AcademicPositions is off by default. Selecting it explicitly starts the separate child Actor and incurs both the bundle's charges and the child Actor's independently configured charges.

Local integration status

The fleet-v2 bundle described here is a local, unreleased mixed-fleet integration. These files are not evidence that the Store Actor has been deployed or migrated. Dedupe is limited to records in the current run; cross-run inventory and dedupe remain disabled and deferred.

The shared runtime is installed from the checked-in nomad-job-scraper-core==1.1.22 wheel, whose exact SHA-256 is pinned in requirements.lock; no Actor-local core source copy is shipped.

Input

Everything is optional. Run it with {} and you get a sensible default sweep.

FieldDefaultWhat it does
sources10 in-process boardsWhich boards to include; AcademicPositions is opt-in.
keywordFree-text filter, forwarded to the boards that support it (machine learning, climate, postdoc…).
maxItemsPerSource20Cap per board before merging.
maxItems220Hard cap on the merged output — and therefore on your bill. 0 = no cap.
mistralApiKey / anthropicApiKeyOptional 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

Breaking fleet-v2 output: every dataset item is a canonical nomad-agent-job-v1 record with exactly six roots. Flat bundle rows and diagnostic warning rows are no longer emitted.

Abbreviated root layout (actual data objects contain every canonical field):

{
"schemaVersion": "nomad-agent-job-v1",
"identity": {"source": "euraxess", "externalId": "123456", "url": "https://euraxess.ec.europa.eu/jobs/123456"},
"data": {"title": "Postdoctoral Researcher in Machine Learning", "company": {"name": "KU Leuven"}},
"custom": {
"schemaId": "https://raw.githubusercontent.com/Exdenta/OinkJobSearch/main/apify/job_custom_schemas/euraxess-v1.schema.json",
"data": {
"academicLevelRaw": ["PhD Positions"],
"researchInfrastructureStaffPosition": null,
"unmappedJobInformation": null,
"unparsedGeofields": null
}
},
"llm": {"status": "not_requested", "requestedFields": [], "filledFields": [], "provider": null, "model": null, "promptVersion": null, "completedAt": null},
"raw": {"description": "The complete position description...", "descriptionHtml": null}
}

Every normalized field is present. null means unknown; arrays are empty only when the source explicitly established emptiness. Full source descriptions are in raw.description. Bounded source status and counters are written separately to the default key-value store record RUN-SUMMARY.

Run it from your own code

from apify_client import ApifyClient
client = 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():
company = job["data"]["company"]
print(
job["data"]["title"],
"—",
company["name"] if company else None,
"—",
job["identity"]["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 failure is recorded in logs and RUN-SUMMARY without adding a non-job row to the dataset.


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.