EURAXESS Jobs Scraper — Research & Academic Jobs
Pricing
from $0.90 / 1,000 euraxess job results
EURAXESS Jobs Scraper — Research & Academic Jobs
Search EURAXESS PhD, postdoc, fellowship, research, and faculty vacancies. Get structured records with complete descriptions, requirements, funding, deadlines, contacts, and locations when published.
Search public EURAXESS PhD, postdoctoral, fellowship, research, and faculty vacancies and receive consistent, source-linked records with complete job descriptions, requirements, funding, deadlines, contacts, and locations when EURAXESS publishes them.
Optional features can expand a keyword across major European languages, fill missing description-backed facts, or translate selected output fields to English. Source facts always win over optional enrichment.
This is an independent Actor. It is not affiliated with or endorsed by EURAXESS or the European Commission.
Ready-made resources: Agent skill · output contract · Python parser · n8n, Make, Airtable, MCP, API, and webhook integrations
Why use this Actor
- Research-focused coverage: PhD, postdoc, fellowship, research, and academic vacancies from the EURAXESS portal.
- One stable schema: every job uses
nomad-agent-job-v1, the same envelope used by other normalized Nomad Agent job sources. - Rich research-job details: research fields, seniority, requirements, education, experience, funding, benefits, deadlines, application channels, contacts, and all explicit locations when available.
- Source-faithful data: EURAXESS taxonomy stays distinct from applicant requirements, missing facts stay unknown, and optional enrichment never overwrites source facts.
- Multilingual search and output: optionally expand an exact keyword across major EURAXESS languages or translate selected display fields to English.
- Alert-friendly delivery: strict normalized filters and built-in cross-run deduplication support scheduled feeds without title-based guessing.
- Integration-ready: use the same n8n, Make, Airtable, MCP, REST API, webhook, parser, and Claude/Codex skill surfaces documented for LinkedIn.
What each result contains
Every item has exactly six top-level fields:
| Field | Meaning |
|---|---|
schemaVersion | Always nomad-agent-job-v1 |
identity | EURAXESS source, posting ID, and canonical job URL |
data | Normalized job, organisation, research, location, employment, application, requirement, benefit, funding, compensation, and constraint fields |
custom | Versioned EURAXESS-only facts, including source academic-level taxonomy |
llm | Status and provenance for optional description-backed enrichment |
raw | Complete description text and source HTML when includeRaw is true; otherwise null |
All declared fields are present. null means unknown or unavailable. []
means EURAXESS explicitly established an empty collection.
Important accuracy rules:
- EURAXESS
Positionsor academic-level labels stay incustom.data.academicLevelRaw; they are not converted into applicant education requirements; - a city, country, facility, or address does not by itself prove
onsite; - only named people are returned as hiring contacts;
- the EURAXESS posting URL and a separate application URL or email remain distinct;
- optional AI fills only allowlisted fields that remain
nullafter source parsing; - raw HTML is untrusted source content and must be sanitized before rendering.
Dataset rows remain one nomad-agent-job-v1 record per job. Separately, the
Actor writes a nomad-agent-run-summary-v4 record to the default key-value
store under RUN-SUMMARY. Use it to read the run outcome, delivered count,
whether results were limited, and any bounded retry recommendation.
Input
| Field | Default | Purpose |
|---|---|---|
schemaVersion | required | Must be nomad-agent-job-search-input-v1 |
keyword | "" | Job title, discipline, skill, or research term |
location | "" | Text matched against the location and country published by EURAXESS |
euraxessSearch | omitted | Optional translations of the exact keyword across major EURAXESS languages; never similar-title expansion |
postedWithin | "24h" | 24h, 7d, 30d, or any |
workArrangements | omitted | Any combination of explicitly stated remote, hybrid, and onsite |
filters | omitted | Versioned filters over normalized job fields |
maxItems | 100 | Maximum returned jobs; 0 requests the bounded 200-item window |
dedupe | enabled | Suppress jobs already delivered in the same scope |
aiEnrichment | disabled | Fill selected missing facts from the complete description |
translateToEnglish | false | Translate selected normalized display fields |
includeRaw | true | Include complete description text and HTML |
analyticsEnabled | false | Share privacy-preserving aggregate operational analytics |
Unknown input fields are rejected. This prevents misspelled or retired options from silently changing the meaning of a run.
Example search
{"schemaVersion": "nomad-agent-job-search-input-v1","keyword": "postdoctoral machine learning","location": "Germany","postedWithin": "30d","maxItems": 25,"dedupe": {"enabled": false, "key": ""},"aiEnrichment": {"enabled": false, "accuracy": "silver"},"translateToEnglish": false,"includeRaw": false,"analyticsEnabled": false}
EURAXESS publishes posting dates as calendar dates rather than exact
timestamps. 24h therefore includes the current and previous UTC calendar
date. It is not an exact rolling 24-hour window.
Disable cross-run deduplication for repeatable one-off searches. Leave it
enabled for scheduled alerts, using a stable public key only when multiple
searches should intentionally share delivery history. Use a new key when an
intentional fresh delivery scope is needed.
Optional features
Multilingual keyword expansion
The EURAXESS search extension keeps the original keyword and adds faithful translations used across major portal languages. It is an explicit, off-by- default input. It does not broaden the search to related titles, roles, or disciplines, and failure falls back to the original term. Similar-job search is not implemented because it would need a separate matching contract and per-result match evidence to remain explainable.
{"euraxessSearch": {"schemaVersion": "nomad-agent-euraxess-search-v1","translateKeywords": true}}
Description-backed AI enrichment
Enable aiEnrichment with a silver or gold accuracy profile. The Actor
reads the complete plain-text posting description and fills only supported
fields that source parsing left null. Source facts and source-established
empty arrays always win. No customer model key is required, and an enrichment
failure leaves the base job unchanged with a failed status in llm.
{"aiEnrichment": {"enabled": true, "accuracy": "silver"}}
English translation
translateToEnglish: true translates selected normalized display fields:
title, domains, applicant-requirement prose, benefits, eligibility and
selection text, work authorization, security clearance, and location
preference. Organisation names, locations, identifiers, URLs, source-raw
labels, skills, qualifications, certifications, programme names, descriptions,
raw HTML, and provenance remain unchanged. No customer translation key is
required.
Normalized filters
Use filters for versioned AND/OR expressions over supported normalized job
fields. Filters run on source-language values before optional output
translation. Unknown facts do not become guessed matches.
{"filters": {"schemaVersion": "nomad-agent-job-filter-v1","expression": {"all": [{"field": "data.locations[].countryCode", "operator": "eq", "value": "DE"},{"field": "data.title", "operator": "not_contains", "value": "internship"}]}}}
Run with Python
from decimal import Decimalfrom apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("nomad-agent/euraxess-enrich-translate-normalize-scraper").call(run_input={"schemaVersion": "nomad-agent-job-search-input-v1","keyword": "postdoctoral machine learning","location": "Germany","postedWithin": "30d","maxItems": 25,}, build="1.0.20", max_items=25, max_total_charge_usd=Decimal("0.10"))if run["buildNumber"] != "1.0.20":raise RuntimeError("unexpected Actor build")for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["data"]["title"], item["data"]["company"]["name"])
Pricing
The current pay-per-event prices are:
| Event | Price | Charged when |
|---|---|---|
| Job result | $0.0009 | A confirmed normalized job is delivered |
| English translation | $0.006 | A delivered row contains translated selected fields |
| Silver enrichment | $0.006 | A delivered row contains successful Silver enrichment |
| Gold enrichment | $0.010 | A delivered row contains successful Gold enrichment |
Optional events are not charged when the feature is unnecessary or fails. Check the Apify Pricing tab before a paid run in case prices have changed, and use Apify's maximum-cost-per-run setting when you need a hard budget.
Limits
- Public EURAXESS pages can change, block requests, or omit fields.
- A run returns at most 200 jobs, even when
maxItemsis0. - Location search matches source-published location text; it is not a geocoder.
- Work-arrangement filters match only explicit source or opted-in enrichment evidence.
- Optional enrichment improves coverage but does not make unknown source facts certain or guarantee accuracy on every future posting.
For lossless validation, table flattening, and integration examples, use the public integration repository.