# France Travail Scraper: 700K+ FR Jobs (Pôle Emploi) (`dltik/francetravail-scraper`) Actor

Scrape 700K+ public job offers from France Travail (ex Pôle Emploi). Filter by keywords, location, contract (CDI/CDD/alternance), experience, salary. Get title, company, location, required skills, work hours, full description. For ATS, recruitment agencies, market intel. $1.50/1K jobs.

- **URL**: https://apify.com/dltik/francetravail-scraper.md
- **Developed by:** [Walid](https://apify.com/dltik) (community)
- **Categories:** Business, Lead generation, Marketing
- **Features:** Limited permissions
- **Stats:** 238 total users, 72 monthly users, 99.6% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 job scrapeds

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?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## France Travail Scraper — 700K+ FR Jobs API (Pôle Emploi)

![France Travail Scraper banner](https://api.apify.com/v2/key-value-stores/TQL3uGJaoCOdPe2XA/records/banner.png)

⭐ **Bookmark this actor → [apify.com/dltik/francetravail-scraper](https://apify.com/dltik/francetravail-scraper)** — Apify ranks by bookmarks, so it directly drives the visibility of this scraper. **One click. No signup beyond your existing Apify account.**

> Scrape **700K+ job offers from France Travail** (formerly Pôle Emploi) — the largest French public job board — via the **official France Travail API**. Get **real `competences`, ROME code + label, lat/lon geo coords, structured salary, experience, education, sector** in one call. Add optional **AI fit-scoring**, **SIREN company intelligence**, and **incremental diff mode**. **No OAuth to configure, no API key for you, no monthly subscription.**

### ✨ What makes this scraper different

| Feature | This scraper | Other FT scrapers |
|---|:---:|:---:|
| **Official France Travail API** (structured, not HTML-guessed) | ✅ | ❌ mostly HTML scraping |
| Real `competences` + **ROME code + label** per job | ✅ | ❌ |
| Structured salary (`min`, `max`, `period`, `annualized_*`) | ✅ | ❌ raw string only |
| **Geo coords** (lat/lon) native, for each job | ✅ | ❌ |
| Experience years + education level detection | ✅ | ❌ |
| **AI fit-scoring** (candidate profile → 0-100 + apply/maybe/skip) | ✅ | ❌ |
| **SIREN company intelligence** (size, sector, status) per employer | ✅ | ❌ |
| **Incremental diff mode** (only new/changed, -70/95% cost) | ✅ | rare |
| Partner offers (Indeed, Apec) inclusion toggle | ✅ | partial |
| Success rate (live 30d) | **100%** | varies |

### What can this scraper do?

- 🇫🇷 **700K+ live French job offers** indexed by France Travail (CDI, CDD, alternance, intérim, stage)
- 🎯 **11 search filters** — keywords, location, contract, experience, qualification, salary, radius, posted since, full-time
- 🏷️ **ROME code + label + real `competences`** — straight from the official API taxonomy (not keyword guessing)
- 💰 **Structured salary parsing** — `min`, `max`, currency, period (year/month/hour), auto-annualized
- 📍 **Native geo coordinates** — lat/lon in every record, no extra geocoding step
- 🎓 **Education level + experience years** — from `formations` / `experienceLibelle`
- 🤖 **AI fit-scoring (opt-in)** — give a candidate profile, get a `fit_score` 0-100 + `apply/maybe/skip` per job
- 🏢 **SIREN company intelligence (opt-in)** — resolve each employer to size, sector (NAF), category, active/ceased status
- 🧭 **ROME métier reference (opt-in, free)** — canonical definition, alternative job titles, and France Travail's **emerging skills** per occupation (official ROME 4.0 API)
- 📊 **Labour-market context (opt-in)** — hires + jobseekers + **recruitment-tension** per ROME × department (official Marché du travail data): is this role in demand here?
- ♻️ **Incremental diff mode (opt-in)** — recurring runs emit only NEW/UPDATED offers, 70-95% cheaper monitoring
- 🚀 **Zero setup for you** — we carry the API credentials; you just click Start

### What data can you extract per job?

| Field | Description |
|-------|-------------|
| `id` | France Travail offer ID |
| `title` | Job title |
| `company` | Employer name (or anonymized) |
| `location` / `postal_code` / `department` | City, postal code, département (75, 92, 13...) |
| `geo` | `{ lat, lon, label }` native from the API |
| `contract_type` / `contract_type_label` | CDI / CDD / MIS / SAI + human label |
| `contract_nature` / `alternance` | Contract nature + alternance flag |
| `rome_code` / `rome_label` / `appellation` | ROME job classification + label |
| `salary` | Raw salary text from France Travail |
| `salary_parsed` | `{ min, max, currency, period, annualized_min, annualized_max, is_range }` |
| `competences` | Structured skills from the API `{ code, libelle, exigence }` |
| `skills_detected` | Flat skill list (competences + regex backfill, ≤25) |
| `experience_years` / `experience_required` | Min years + raw requirement label |
| `education_level` / `formations` | Detected level + structured `formations` |
| `langues` / `permis` | Required languages + driving licences |
| `sector` / `naf_code` | Sector label + NAF code |
| `nombre_postes` / `accessible_th` | Number of openings + disability-friendly flag |
| `description` | Full job description |
| `apply_url` | Direct application URL |
| `posted_date` / `updated_date` | YYYY-MM-DD |
| `partner_source` | Partner site (Indeed, Apec...) if applicable |
| `rome` | **(opt-in)** ROME 4.0 métier ref: `{ definition, appellations, skills_core, skills_emerging, work_contexts, riasec, isco_code, is_cadre, green_transition, digital_transition }` |
| `market` | **(opt-in)** Labour-market context for the job's ROME × dept: `{ period, hires, hires_stable, jobseekers, tension_ratio, tension_label }` |
| `company_data` | **(opt-in)** SIREN, size, sector, category, status — see AI/company sections |
| `ai` | **(opt-in)** `{ summary, seniority, remote, must_have, red_flags, fit_score, recommended_action }` |
| `change_type` | **(incremental mode)** NEW / UPDATED / UNCHANGED / EXPIRED |

### How to scrape France Travail jobs in 5 steps

1. **[Create a free Apify account](https://apify.com/sign-up)** — no credit card required
2. **Open [France Travail Scraper](https://apify.com/dltik/francetravail-scraper)** on Apify Store
3. **Set your filters** — keyword (e.g. "développeur python"), location (`75D` for Paris dept), contract (`CDI`)
4. **Pick maxResults** (start with 20 to validate, scale to 5000 once happy)
5. **Click Start** — clean JSON in seconds, exportable to CSV / JSON / Excel from Apify dataset UI

### How much does it cost to scrape France Travail jobs?

**PAY_PER_EVENT — $0.0015 per job scraped** ($1.50 per 1,000 results). Failed/empty runs not charged. Full structured detail (competences, ROME, geo, salary) is **included in the base price** — no enrichment upsell needed.

| Run size | Jobs | Apify cost | Time |
|----------|------|------------|------|
| Quick test | 20 | $0.03 | ~3s |
| Standard | 200 | $0.30 | ~10s |
| Deep | 1,000 | $1.50 | ~40s |
| Massive | 5,000 | $7.50 | ~4min |

**Employer intelligence (SIREN) and labour-market context are included in the base price** — flip `enrichCompany` / `enrichMarket` on and they cost nothing extra. The only paid add-on is AI analysis:

| Add-on | Event | Price | What you get |
|--------|-------|-------|--------------|
| `analyzeJobs` | `job-analyzed` | +$0.01/job | AI summary, seniority, remote, red-flags + fit-score vs. candidate profile (paid Apify plan) |

**Incremental mode** (`incrementalMode=true`) charges only NEW + UPDATED offers on recurring runs — typically **70-95% cheaper** for daily monitoring.

### Input parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `keywords` | string | — | Free-text search (title + description) |
| `location` | string | — | `75D` = Paris dept, `13D` = Bouches-du-Rhône |
| `contractType` | string | — | `CDI`, `CDD`, `MIS`, `SAI`, multiple via comma |
| `contractNature` | string | — | `E1` alternance, `E2` apprentissage, `FS` formation |
| `experience` | enum | — | `1` débutant, `2` exigé, `3` expérimenté |
| `qualification` | string | — | `5` cadre, `3` technicien, etc. |
| `fullTimeOnly` | bool | `false` | Only full-time |
| `minSalary` | string | — | Annual minimum (`30000`) |
| `radiusKm` | string | — | Search radius from location |
| `postedSince` | enum | — | `1`, `3`, `7`, `14`, `31` days |
| `includePartners` | bool | `true` | Include Indeed/Apec partner offers |
| `enrichCompany` | bool | `false` | Resolve each employer → SIREN + company data — included in base price |
| `enrichRome` | bool | `false` | Attach ROME 4.0 métier reference (definition, appellations, emerging skills) — free |
| `enrichMarket` | bool | `false` | Attach labour-market tension per ROME × dept — included in base price |
| `analyzeJobs` | bool | `false` | AI analysis + fit-scoring (`job-analyzed` event, paid plan) |
| `candidateProfile` | string | — | Candidate/role description for AI `fit_score` |
| `incrementalMode` | bool | `false` | Emit only NEW/UPDATED offers vs. last run |
| `includeExpired` | bool | `false` | Also emit EXPIRED markers (not charged) |
| `stateKey` | string | `default` | Baseline name for incremental mode |
| `maxResults` | integer | `20` | 1–5000 (API caps a single query at ~1150) |
| `enrichDetails` | bool | `false` | HTML fallback only — API already returns full detail |
| `proxyConfig` | object | datacenter | HTML fallback only — France Travail rarely blocks |

### Output example

![Sample output — France Travail Scraper](https://api.apify.com/v2/key-value-stores/TQL3uGJaoCOdPe2XA/records/output.png)

```json
{
  "id": "ABCD123",
  "title": "Data Engineer Senior H/F",
  "company": "Acme Tech",
  "location": "Paris 9e (75009)",
  "geo": { "lat": 48.8775, "lon": 2.3380, "label": "Paris 9e Arrondissement" },
  "department": "75",
  "contract_type": "CDI",
  "salary": "De 55 000 € à 75 000 € sur 12 mois",
  "salary_parsed": {
    "raw": "De 55 000 € à 75 000 € sur 12 mois",
    "min": 55000, "max": 75000, "currency": "EUR",
    "period": "year", "is_range": true,
    "annualized_min": 55000, "annualized_max": 75000
  },
  "skills_detected": ["Python", "AWS", "Docker", "Kafka", "Snowflake", "SQL", "Airflow", "anglais"],
  "competences": [{ "code": "...", "libelle": "Python", "exigence": "E" }],
  "experience_years": 5,
  "education_level": "Bac+5 et plus ou équivalents",
  "rome_code": "M1805",
  "rome_label": "Études et développement informatique",
  "sector": "Programmation informatique",
  "apply_url": "https://acme.example/apply",
  "posted_date": "2026-06-19",
  "company_data": {
    "siren": "812345678", "legal_name": "ACME TECH SAS",
    "naf_code": "6201Z", "category": "PME", "employee_range": "100-199",
    "creation_date": "2015-03-01", "is_active": true, "risk_flag": null
  },
  "ai": {
    "summary": "Poste de data engineer senior pour bâtir la plateforme data.",
    "seniority": "senior", "remote": "hybrid",
    "must_have": ["Python", "AWS", "SQL"],
    "red_flags": [],
    "fit_score": 88, "fit_reason": "Stack Python/AWS alignée, séniorité correspondante.",
    "recommended_action": "apply"
  },
  "scraped_at": "2026-06-20T14:32:01Z"
}
```

> `company_data` appears with `enrichCompany=true`, `ai` with `analyzeJobs=true`.

### Use cases

- 🎯 **ATS auto-feed** — daily import of new CDI/alternance offers matching company hiring filters
- 💼 **Recruitment intelligence** — track who's hiring what in any ROME code / department
- 💰 **Salary benchmarking** — aggregate `salary_parsed` across thousands of jobs by role + region
- 🗺️ **Geo job-map dashboards** — leverage `geo.lat/lon` for interactive maps (Mapbox, Leaflet)
- 📊 **Labor-market analytics** — track open job count per ROME × department × month
- 🤖 **Career bots** — alert candidates daily when matching jobs are posted (combine with diff)
- 🎓 **Career coaching SaaS** — show students alternance/apprentissage matching their CAP/BTS

### Use the actor via API

**Python:**

```python
import requests

run = requests.post(
    "https://api.apify.com/v2/acts/dltik~francetravail-scraper/run-sync-get-dataset-items",
    headers={"Authorization": "Bearer YOUR_APIFY_TOKEN", "Content-Type": "application/json"},
    json={
        "keywords": "développeur python",
        "location": "75D",
        "contractType": "CDI",
        "experience": "2",
        "postedSince": "7",
        "enrichDetails": True,
        "maxResults": 50
    }
).json()
print(f"Scraped {len(run)} jobs")
```

**curl:**

```bash
curl -X POST "https://api.apify.com/v2/acts/dltik~francetravail-scraper/run-sync-get-dataset-items" \
  -H "Authorization: Bearer YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"keywords":"data engineer","location":"69D","contractType":"CDI","maxResults":100}'
```

### FAQ

**Does it use the official France Travail API?**
Yes. This scraper runs on the official France Travail API (api.francetravail.io Offres v2), so you get clean, fully-structured data — real `competences`, ROME code, native lat/lon, structured salary. **We carry the API credentials**, so there's nothing for you to register or rotate: you just click Start. If the API is ever unreachable, the actor automatically falls back to the public-HTML search so a run never fails.

**Can I use my own France Travail API credentials?**
Yes — set `FRANCETRAVAIL_CLIENT_ID` and `FRANCETRAVAIL_CLIENT_SECRET` (from [francetravail.io](https://francetravail.io)) as actor environment secrets and the actor will use them.

**Does it cover alternance and stage?**
Yes, via `contractNature` (E1 alternance, E2 apprentissage, FS formation). All major contract types supported.

**ROME code support?**
Every job comes back with its `rome_code` + `rome_label` from the official taxonomy, so you can group/aggregate by occupation. You can also search by ROME via the `keywords` filter.

**Can I enrich the employer with company data?**
Yes — set `enrichCompany=true` and each employer is resolved to its SIREN with size, sector (NAF), category (PME/ETI/GE) and active/ceased status. Pair it with our [Pappers Sirene Scraper](https://apify.com/dltik/pappers-sirene-scraper) or [BODACC Scraper](https://apify.com/dltik/bodacc-fr-scraper) for full company financials and court-procedure history.

**How fresh is the data?**
Pulled live at run time from the official France Travail API, so freshness matches France Travail itself. Use `incrementalMode=true` to poll daily and only pay for what changed.

**Will France Travail block my runs?**
We've never been blocked at moderate volume (< 5000 jobs/run). Datacenter proxy is the default — toggle to residential only if you scrape at high frequency.

**What's `salary_parsed` exactly?**
A structured breakdown of the raw `salary` string: detects ranges (`30k-45k`), single values (`30000`), periods (year/month/hour), and auto-annualizes to a comparable yearly figure. Unlike other scrapers, you can `filter` and `sort` numerically.

***

⭐ **Found this France Travail Scraper useful? [Bookmark it](https://apify.com/dltik/francetravail-scraper)** — Apify ranks actors by bookmarks, so it's the strongest single signal for Store visibility. One click.

### Other scrapers by dltik

| Actor | What it does | Price |
|-------|-------------|-------|
| [Pappers Sirene Scraper](https://apify.com/dltik/pappers-sirene-scraper) | 26M French companies (SIREN, SIRET, dirigeants, capital) | $0.001/result |
| [Pappers Enrichment Bundle](https://apify.com/dltik/pappers-enrichment-bundle) | Bulk enrichment of SIREN lists with full company data | $0.005/result |
| [Pappers MCP Server](https://apify.com/dltik/mcp-server-pappers) | French company data for AI agents (Claude / GPT) | $0.01/tool-call |
| [BODACC Scraper](https://apify.com/dltik/bodacc-fr-scraper) | French commercial court announcements (creations, faillites, M\&A) | $0.003/record |
| [BODACC MCP Server](https://apify.com/dltik/mcp-server-bodacc) | BODACC announcements for AI agents | $0.01/tool-call |
| [HelloWork Scraper](https://apify.com/dltik/hellowork-scraper) | France's #2 job board | $0.003/job |
| [Welcome to the Jungle Scraper](https://apify.com/dltik/welcome-to-the-jungle-scraper) | Tech-focused FR/EU jobs | $0.003/job |
| [JobTeaser Scraper](https://apify.com/dltik/jobteaser-scraper) | Student jobs, internships, alternance | $0.003/job |
| [Malt Scraper](https://apify.com/dltik/malt-scraper) | French freelancers (profiles, rates) | $0.005/profile |
| [Annuaire Administration Française](https://apify.com/dltik/annuaire-administration-fr-scraper) | French gov agencies & contacts | $0.003/org |
| [TED Europa Scraper](https://apify.com/dltik/ted-europa-scraper) | EU public procurement tenders | $0.005/tender |
| [Boamp Scraper](https://apify.com/dltik/boamp-fr-scraper) | French national public procurement | $0.005/tender |
| [ADEME DPE Scraper](https://apify.com/dltik/ademe-dpe-scraper) | Energy performance diagnostics for FR buildings | $0.002/DPE |
| [HATVP Scraper](https://apify.com/dltik/hatvp-fr-scraper) | French elected officials' financial declarations | varies |

License: MIT · Author: [dltik](https://apify.com/dltik)

# Actor input Schema

## `keywords` (type: `string`):

Search keywords (e.g. 'développeur python', 'commercial', 'plombier'). Searches title + description.

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

France Travail location code. Format: '75D' for département Paris, '75' for region. Example: '75D' (Paris dept), '69D' (Rhône), '13D' (Bouches-du-Rhône). Combine with rayon (radius).

## `contractType` (type: `string`):

CDI, CDD, MIS (intérim/mission), SAI (saisonnier). Multiple via comma: 'CDI,CDD'.

## `contractNature` (type: `string`):

E1 (alternance), E2 (apprentissage), FS (formation), FT (CIE), I1 (CUI-CIE).

## `experience` (type: `string`):

1 = débutant accepté, 2 = expérience exigée, 3 = expérimenté.

## `qualification` (type: `string`):

0=non précisée, 1=manoeuvre, 2=ouvrier, 3=technicien, 4=AM, 5=cadre, 6=cadre dir, 7=PDG, 8=ETAM, 9=cadre.

## `fullTimeOnly` (type: `boolean`):

Only full-time positions.

## `minSalary` (type: `string`):

Minimum annual salary in EUR, e.g. '30000'. Filters on the parsed salary: jobs whose salary is clearly below this floor are dropped and not billed. Jobs that do not state a salary are kept (they can't be excluded).

## `radiusKm` (type: `string`):

Radius from location in km. Default 10.

## `postedSince` (type: `string`):

Show jobs posted in last N days. Values: 1, 3, 7, 14, 31.

## `includePartners` (type: `boolean`):

Include offers from partner sites (Indeed, Apec, etc.) — recommended.

## `enrichDetails` (type: `boolean`):

Only used when running on the public-HTML fallback: fetches each job's detail page for full description + skills. Ignored when the official API is active (the API already returns full detail for the base price).

## `enrichCompany` (type: `boolean`):

For each job, resolve the employer name to its SIREN and attach company intelligence: legal name, size (headcount range), sector (NAF), category (PME/ETI/GE), age, and administrative status (active vs. ceased = red flag). Free official register, no key. Included in the base price — no extra event.

## `enrichRome` (type: `boolean`):

For each job's ROME code, attach the official ROME 4.0 métier reference: canonical definition, alternative job titles (appellations), mobilised skills, France Travail's flagged EMERGING skills for the occupation, work contexts, RIASEC profile, and green/digital-transition + cadre markers. Cached per ROME code, free (no extra event). Requires the official-API data path.

## `enrichMarket` (type: `boolean`):

For each job's ROME × department, attach the latest-quarter labour-market stats from France Travail's official Marché du travail data: number of hires (total + on stable contracts), registered jobseekers, and a derived recruitment-tension ratio + label (faible/modérée/élevée/très élevée). Answers 'is this role hard to recruit / in demand here?'. Cached per ROME×dept. Included in the base price — no extra event. Requires the official-API data path.

## `analyzeJobs` (type: `boolean`):

Enrich each job with an AI 'ai' object: plain-language summary, inferred seniority, remote (onsite/hybrid/remote), truly-required skills, and red flags. Add 'Candidate profile' below to also get a 0-100 fit_score + recommended action (apply/maybe/skip) per job — turns a long result list into a ranked shortlist. Requires a paid Apify plan; billed as a separate 'job-analyzed' event. If not on a paid plan the scrape still runs without analysis.

## `candidateProfile` (type: `string`):

One or two sentences describing the candidate (or the role you're sourcing for), e.g. 'Développeur Python/Django 4 ans, cherche CDI remote en data engineering, Lyon' or 'Recrute un commercial B2B junior, secteur SaaS, Paris'. When set (and AI analysis is on), each job gets a fit_score (0-100), a one-line reason, and an apply/maybe/skip action. Leave empty to get summaries only.

## `incrementalMode` (type: `boolean`):

On each run, compare against the previous run's baseline (stored per 'State key') and tag each job NEW / UPDATED / UNCHANGED. By default only NEW + UPDATED are emitted and charged — 70-95% cheaper on recurring monitoring. First run builds the baseline (everything is NEW).

## `includeUnchanged` (type: `boolean`):

In incremental mode, also emit (and charge) jobs whose content is unchanged since the last run. Off by default.

## `includeExpired` (type: `boolean`):

In incremental mode, append lightweight EXPIRED records for offers that were in the previous baseline but are gone this run. These markers are not charged.

## `stateKey` (type: `string`):

Name of the baseline for incremental mode, so different saved searches keep separate histories under one actor. Use a stable string per search (e.g. 'dev-python-paris'). Defaults to 'default'.

## `maxResults` (type: `integer`):

Maximum jobs to return. Aliases accepted: 'limit', 'max'. Each result is charged at the per-event price — lower this to validate output before scaling up. Note: France Travail caps a single query at ~1150 offers; narrow with filters (location, contract, postedSince) to go deeper.

## `proxyConfig` (type: `object`):

Optional Apify proxy. France Travail rarely blocks — proxy mostly unnecessary.

## Actor input object example

```json
{
  "fullTimeOnly": false,
  "includePartners": true,
  "enrichDetails": false,
  "enrichCompany": false,
  "enrichRome": false,
  "enrichMarket": false,
  "analyzeJobs": false,
  "incrementalMode": false,
  "includeUnchanged": false,
  "includeExpired": false,
  "maxResults": 150,
  "proxyConfig": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

Job listings.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("dltik/francetravail-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("dltik/francetravail-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 '{}' |
apify call dltik/francetravail-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,dltik/francetravail-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/ec4aBgLgvyLqb21H3/builds/nUQsqpJ8V57DlYKZV/openapi.json
