# EURAXESS Jobs Scraper | Full Details & AI Enrichment (`job-atlas/euraxess-enrich-translate-normalize-scraper`) Actor

From $0.90 per 1,000 research jobs. Search EURAXESS PhD, postdoc and faculty vacancies with deadlines, funding and application links. Export structured data, avoid repeat alerts, and optionally add AI enrichment or English translation.

- **URL**: https://apify.com/job-atlas/euraxess-enrich-translate-normalize-scraper.md
- **Developed by:** [Job Atlas](https://apify.com/job-atlas) (community)
- **Categories:** Jobs
- **Stats:** 1 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.90 / 1,000 euraxess job results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## EURAXESS Jobs Scraper | Full Details & AI Enrichment

**From $0.90 per 1,000 job results.** Find PhD, postdoc, fellowship, research and faculty vacancies on EURAXESS. Get job details, funding, deadlines and application links when published. Export JSON, CSV or Excel, or connect the results to your own app.

Choose this Actor for structured research-job data, repeatable exports and optional AI enrichment. It uses the same output format as the normalized Nomad Agent LinkedIn Actor.

[Quick guide](https://nomadagent.dev/actors/euraxess) · [API and agent setup](https://github.com/Exdenta/nomad-agent-job-scrapers/blob/main/docs/euraxess.md) · [Agent skill](https://github.com/Exdenta/nomad-agent-job-scrapers/blob/main/.agents/skills/euraxess-enrich-translate-normalize-scraper/SKILL.md)

### Start with five jobs

1. Open the Input tab. Enter a research term and, optionally, a country.
2. Choose a date range and set **Maximum results** to **5**.
3. Click Start. Open the dataset when the run finishes, then export your results.

Repeat alerts, AI enrichment and translation are off by default. The Console example excludes full descriptions and HTML. Enable **Include raw description text and HTML** to include them. API calls that omit `includeRaw` include raw text and HTML by default; send `includeRaw: false` for a smaller export.

```json
{
  "schemaVersion": "nomad-agent-job-search-input-v1",
  "keyword": "research",
  "postedWithin": "30d",
  "maxItems": 5,
  "dedupe": {"enabled": false, "key": ""},
  "aiEnrichment": {"enabled": false, "accuracy": "silver"},
  "translateToEnglish": false,
  "includeRaw": false,
  "analyticsEnabled": false
}
```

### What you can build

- Research-job alerts for a discipline, country or institution.
- A PhD or postdoc tracker in Google Sheets, n8n or Make.
- Search tools and AI assistants that link every job to its published source.
- Research hiring analysis using deadlines, funding and academic fields.

### See the output

The following excerpt comes from a real job returned on September 4, 2026. Fields are omitted here for readability; the downloadable example shows the full record. A sample is not a promise that the vacancy is still open.

```json
{
  "schemaVersion": "nomad-agent-job-v1",
  "identity": {
    "url": "https://euraxess.ec.europa.eu/jobs/463803",
    "source": "euraxess",
    "externalId": "463803"
  },
  "data": {
    "title": "NOTICE FOR THE OPENING OF AN INTERNATIONAL SELECTION TENDER PROCEDURE FOR THE HIRING OF RESEARCH ASSISTANT CTTI-PI-53/26-IPC (1)",
    "company": {
      "name": "University of Minho"
    },
    "application": {
      "deadline": "2026-09-15T22:59:59+00:00",
      "postedAt": "2026-09-04"
    }
  }
}
```

[Download the full example](https://raw.githubusercontent.com/Exdenta/nomad-agent-job-scrapers/main/examples/euraxess-job.json).

Every full record has six fields: `schemaVersion`, `identity`, `data`, `custom`, `llm` and `raw`. `data` holds the job facts; `custom` holds EURAXESS-specific details. `null` means unknown. An empty list means the source explicitly says there are no entries. Missing facts are never guessed by the base scraper.

### Optional features and pricing

| Feature | Price per 1,000 delivered jobs | What it adds |
|---|---:|---|
| Job results | $0.90 | Structured job records and source links |
| English translation | +$6.00 | Selected short display fields in English |
| Silver AI enrichment | +$6.00 | Missing supported facts extracted from the description |
| Gold AI enrichment | +$10.00 | The alternative Gold processing profile |

Prices were checked September 5, 2026. Check the [Pricing tab](https://apify.com/job-atlas/euraxess-enrich-translate-normalize-scraper/pricing) before running. Set a maximum cost per run in Apify. Successful extras add to the base price; unnecessary or failed extras are not charged.

Enable AI with the checkbox and select Silver or Gold. No customer AI key is needed. Source facts and explicit empty lists remain unchanged. Neither profile guarantees accuracy.

Keyword translation can add translations of your exact search term; it does not add related roles. English output translation changes selected display fields, not full descriptions, organisation names or source evidence.

### Frequently asked questions

**Why did I get no jobs?** Try a broader term, remove a country filter or widen the date range. If you enabled repeat-alert filtering, previously delivered jobs are skipped. Zero rows can also mean the run hit a limit; automations should inspect `RUN-SUMMARY`.

**Can I repeat a search?** Yes. Cross-run deduplication is off by default. For alerts, enable it to skip jobs already delivered for that search. Use a stable public scope key only when searches should share delivery history.

**How many jobs can I collect?** Up to 200 per run. `maxItems: 0` also means 200, not unlimited. The Actor searches a bounded current collection and does not promise a complete historical archive.

**What does “24h” mean?** EURAXESS supplies dates, not exact posting times. It includes today and yesterday in UTC. Other date ranges also include the cutoff date.

### For API users and AI agents

Use the [maintained integration guide](https://github.com/Exdenta/nomad-agent-job-scrapers/blob/main/docs/euraxess.md) for examples using `latest`. Save the immutable build ID and build number returned with each run.

Require a successful terminal run, read its `RUN-SUMMARY`, then fetch the complete dataset and compare its row count with `delivered`. A limited or partial result is not a complete search. Follow a recommended retry at most once with the same input and cost cap. See the [run-summary reference](https://github.com/Exdenta/nomad-agent-job-scrapers/blob/main/.agents/skills/euraxess-enrich-translate-normalize-scraper/references/run-summary.md).

Advanced JSON filters remain available for combined conditions. Unknown fields and unsupported values are rejected. A country or city alone does not establish on-site work, and academic-level labels do not become applicant education requirements.

### Privacy and removal

This independent Actor is not affiliated with EURAXESS or the European Commission. It uses public job information. Optional AI sends description text to the managed AI provider; optional translation sends selected fields to the translation provider. Neither feature promises EU-only processing or zero retention. Aggregate analytics is opt-in.

Keep applicant and private profile data out of searches and alert keys. Sanitize raw HTML before displaying it. For a listing correction, contact its publisher through EURAXESS. For an Actor data or privacy concern, contact the developer through the Apify Issues tab. Review applicable source terms and your own obligations before republishing records.

### Job Atlas

Explore the Job Atlas job-data and matching Actors. Use `latest` and retain the immutable build ID returned by each run.

- [Linkedin](https://apify.com/job-atlas/linkedin-enrich-translate-normalize-scraper)
- [Euraxess](https://apify.com/job-atlas/euraxess-enrich-translate-normalize-scraper)
- [YC](https://apify.com/job-atlas/ycombinator-enrich-translate-normalize-scraper)
- [Scorer](https://apify.com/job-atlas/ai-job-fit-scorer)

[Website and integration guides](https://nomadagent.dev/) | [Source and client examples](https://github.com/Exdenta/nomad-agent-job-scrapers)

# Actor input Schema

## `schemaVersion` (type: `string`):

Version of the shared normalized job-search Actor input contract.

## `keyword` (type: `string`):

Search job titles, research fields and descriptions. Leave blank to browse recent vacancies.

## `location` (type: `string`):

City, region, postal code, facility, address, or country text matched case-insensitively against source-published locations. A missing or ambiguous location does not count as a match.

## `euraxessSearch` (type: `object`):

Optionally add faithful translations of the exact keyword across major EURAXESS languages. The original term is retained and related titles, roles, and disciplines are never added.

## `postedWithin` (type: `string`):

Return jobs within the selected publication-date window. EURAXESS publishes calendar dates, so 24h includes the current and previous UTC date; exact hour-level filtering is unavailable.

## `workArrangements` (type: `array`):

Optional union of remote, hybrid, and on-site arrangements. EURAXESS rows match only when the source explicitly establishes an arrangement; a city, country, office address, or missing workplace label is never interpreted as on-site evidence.

## `maxItems` (type: `integer`):

Maximum number of job postings to return. Set 0 to request the Actor's complete bounded delivery window of 200 items; it never means unlimited.

## `dedupe` (type: `object`):

For scheduled alerts, enable this to skip jobs already delivered for the same search. Leave off to repeat a search and see the results again.

## `filters` (type: `object`):

Use a nomad-agent-job-filter-v1 expression for country or location requirements, title or organisation exclusions, work arrangements, and other supported normalized fields. Unknown facts do not become guessed matches.

## `aiEnrichment` (type: `object`):

Use the job description to fill missing fields. Published facts stay unchanged. Successful enrichment costs extra; no AI key is needed.

## `translateToEnglish` (type: `boolean`):

Translate selected normalized display fields to English: title, domains, applicant requirement prose, benefits, eligibility and selection text, work authorization, security clearance, and location preference. Descriptions, organisation names, locations, identifiers, URLs, source-raw labels, skills, qualifications, certifications, programme names, and provenance remain unchanged. No customer translation key is required.

## `includeRaw` (type: `boolean`):

When enabled, each result includes the complete EURAXESS plain-text detail description and source HTML in raw. Disable it to return raw: null; requested position enrichment still runs before raw output is removed.

## `analyticsEnabled` (type: `boolean`):

Share one privacy-preserving aggregate operational event. It can include version, outcome category, coarse duration, result count, enabled features, and aggregate health counters, but never caller IDs, searches, records, URLs, source text, translations, extracted values, errors, or secrets.

## Actor input object example

```json
{
  "schemaVersion": "nomad-agent-job-search-input-v1",
  "keyword": "postdoctoral machine learning",
  "location": "Germany",
  "euraxessSearch": {
    "schemaVersion": "nomad-agent-euraxess-search-v1",
    "translateKeywords": true
  },
  "postedWithin": "30d",
  "maxItems": 5,
  "dedupe": {
    "enabled": false,
    "key": ""
  },
  "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"
        }
      ]
    }
  },
  "aiEnrichment": {
    "enabled": true,
    "accuracy": "silver"
  },
  "translateToEnglish": false,
  "includeRaw": true,
  "analyticsEnabled": false
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

## `runSummary` (type: `string`):

nomad-agent-run-summary-v4 outcome with the delivered count, results-limited status, and one optional bounded retry recommendation.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "keyword": "research",
    "postedWithin": "30d",
    "maxItems": 5,
    "dedupe": {
        "enabled": false,
        "key": ""
    },
    "includeRaw": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("job-atlas/euraxess-enrich-translate-normalize-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "keyword": "research",
    "postedWithin": "30d",
    "maxItems": 5,
    "dedupe": {
        "enabled": False,
        "key": "",
    },
    "includeRaw": False,
}

# Run the Actor and wait for it to finish
run = client.actor("job-atlas/euraxess-enrich-translate-normalize-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "keyword": "research",
  "postedWithin": "30d",
  "maxItems": 5,
  "dedupe": {
    "enabled": false,
    "key": ""
  },
  "includeRaw": false
}' |
apify call job-atlas/euraxess-enrich-translate-normalize-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,job-atlas/euraxess-enrich-translate-normalize-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/Slu3SAWULLRYnCN9Y/builds/CDHpCrlQzdeptlAia/openapi.json
