# France Travail Job Scraper - French Jobs (`santamaria-automations/france-travail-scraper`) Actor

Scrapes job listings from France Travail (formerly Pole Emploi), France's public employment service with 500,000+ active listings. Extract title, company, location, contract type, salary, and full description. Supports multi-query search with deduplication. HTTP-only, 128MB.

- **URL**: https://apify.com/santamaria-automations/france-travail-scraper.md
- **Developed by:** [Alessandro Santamaria](https://apify.com/santamaria-automations) (community)
- **Categories:** Jobs, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 search result 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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## France Travail Job Scraper

Scrape job listings from **France Travail** (formerly Pole Emploi), France's public employment service with 500,000+ active job listings. Extract title, company, location, contract type, salary, and full description.

HTTP-only scraper using Cheerio (no browser). Runs at 128MB memory.

---

### Scraper d'offres d'emploi France Travail

Scrapez les offres d'emploi de **France Travail** (anciennement Pole Emploi), le service public de l'emploi en France avec plus de 500 000 offres actives. Extrayez le titre, l'entreprise, la localisation, le type de contrat, le salaire et la description complete.


### Related Actors

Looking for more job data? Check out our other scrapers:

**Global**
- [LinkedIn Jobs Scraper](https://apify.com/santamaria-automations/linkedin-scraper)
- [Indeed Scraper](https://apify.com/santamaria-automations/indeed-scraper)

**DACH Region**
- [Jobs.ch Scraper](https://apify.com/santamaria-automations/jobs-ch-scraper)
- [StepStone.de Scraper](https://apify.com/santamaria-automations/stepstone-de-scraper)
- [Karriere.at Scraper](https://apify.com/santamaria-automations/karriere-at-scraper)

**Nordics**
- [Arbetsformedlingen.se Scraper](https://apify.com/santamaria-automations/arbetsformedlingen-se-scraper) -- Swedish jobs
- [Jobindex.dk Scraper](https://apify.com/santamaria-automations/jobindex-dk-scraper) -- Danish jobs

**UK**
- [Reed.co.uk Scraper](https://apify.com/santamaria-automations/reed-uk-scraper) -- UK jobs

**Enrich your job data**
- [Website Job Extractor](https://apify.com/santamaria-automations/website-job-extractor)
- [Website Contact Extractor](https://apify.com/santamaria-automations/website-contact-extractor)

---

### Features

- **500,000+ active listings** from France's largest public job board
- **Multi-query support** -- run multiple search keywords in one execution, deduplicated
- **SERP + Detail modes** -- fast SERP-only or full detail extraction with salary and remote info
- **French contract types** -- CDI, CDD, interim, alternance, stage
- **Remote detection** -- detects teletravail (remote work) mentions
- **Salary parsing** -- structured min/max from French salary formats (annuel, mensuel, horaire)
- **Location filtering** -- filter by department code (75 = Paris, 69 = Lyon, etc.)
- **Low cost** -- 128MB memory, HTTP-only

### Output Fields

| Field | Type | Description |
|---|---|---|
| `id` | string | France Travail offer ID |
| `title` | string | Job title |
| `company` | string/null | Hiring company name |
| `location` | string | Job location (city, department) |
| `country` | string | Always "FR" |
| `employment_type` | string/null | full-time, temporary, internship, etc. |
| `remote_option` | string/null | remote, hybrid, or null |
| `salary_min` | number/null | Minimum salary (EUR) |
| `salary_max` | number/null | Maximum salary (EUR) |
| `salary_text` | string/null | Salary as displayed |
| `description_snippet` | string/null | Short description (max 500 chars) |
| `description_full` | string/null | Full description (detail mode only) |
| `posted_at` | string/null | Publication date |
| `source_url` | string | France Travail listing URL |
| `source_platform` | string | Always "francetravail.fr" |
| `search_query` | string/null | The search keyword that found this job |
| `scraped_at` | string | Scrape timestamp (ISO 8601) |

### Input Examples

#### Basic search
```json
{
  "searchQuery": "developpeur",
  "maxResults": 50
}
````

#### Multi-query with location

```json
{
  "searchQueries": ["developpeur", "ingenieur", "data scientist"],
  "location": "75",
  "maxResults": 200,
  "maxResultsPerQuery": 100
}
```

#### With full details (salary + description)

```json
{
  "searchQueries": ["developpeur python"],
  "includeDetails": true,
  "maxResults": 50
}
```

### Pricing

| Event | Price (USD) | Description |
|---|---|---|
| `job-start` | $0.05 | Per actor run |
| `job-serp-result` | $0.003 | Per job listing from search results |
| `job-detail-result` | $0.008 | Per job detail page fetched |

### Technical Details

- **Site**: candidat.francetravail.fr
- **Method**: CheerioCrawler (HTTP + HTML parsing, no browser)
- **Memory**: 128MB
- **Proxy**: Datacenter proxy usually sufficient

# Actor input Schema

## `searchQueries` (type: `array`):

One or more search keywords. Each keyword runs as a separate search. Results are deduplicated across queries.

## `searchQuery` (type: `string`):

Single search keyword (backward compatible). Use 'searchQueries' for multiple keywords.

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

Filter by department code or region (e.g., '75' for Paris, '69' for Lyon, '13' for Marseille). Leave empty for all of France.

## `maxResultsPerQuery` (type: `integer`):

Maximum results per search keyword. Each query gets up to this many results (deduplicated).

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

Total cap across all queries. Set to 0 for unlimited (each query limited by maxResultsPerQuery).

## `includeDetails` (type: `boolean`):

Fetch detail pages for each job to get full description, salary information, and teletravail (remote work) status. Slower but much richer data.

## `proxyConfiguration` (type: `object`):

Apify proxy settings. Datacenter proxy usually works for France Travail.

## Actor input object example

```json
{
  "searchQueries": [
    "developpeur"
  ],
  "searchQuery": "",
  "location": "",
  "maxResultsPerQuery": 100,
  "maxResults": 100,
  "includeDetails": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `jobListings` (type: `string`):

Dataset containing scraped 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 = {
    "searchQueries": [
        "developpeur"
    ],
    "maxResultsPerQuery": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("santamaria-automations/france-travail-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 = {
    "searchQueries": ["developpeur"],
    "maxResultsPerQuery": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("santamaria-automations/france-travail-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "searchQueries": [
    "developpeur"
  ],
  "maxResultsPerQuery": 100
}' |
apify call santamaria-automations/france-travail-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=santamaria-automations/france-travail-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "France Travail Job Scraper - French Jobs",
        "description": "Scrapes job listings from France Travail (formerly Pole Emploi), France's public employment service with 500,000+ active listings. Extract title, company, location, contract type, salary, and full description. Supports multi-query search with deduplication. HTTP-only, 128MB.",
        "version": "1.0",
        "x-build-id": "HVmPfTLzVd3DCs3mY"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/santamaria-automations~france-travail-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-santamaria-automations-france-travail-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/santamaria-automations~france-travail-scraper/runs": {
            "post": {
                "operationId": "runs-sync-santamaria-automations-france-travail-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/santamaria-automations~france-travail-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-santamaria-automations-france-travail-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "searchQueries": {
                        "title": "Search Keywords",
                        "type": "array",
                        "description": "One or more search keywords. Each keyword runs as a separate search. Results are deduplicated across queries.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "searchQuery": {
                        "title": "Search Query (single, legacy)",
                        "type": "string",
                        "description": "Single search keyword (backward compatible). Use 'searchQueries' for multiple keywords.",
                        "default": ""
                    },
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "Filter by department code or region (e.g., '75' for Paris, '69' for Lyon, '13' for Marseille). Leave empty for all of France.",
                        "default": ""
                    },
                    "maxResultsPerQuery": {
                        "title": "Max Results per Query",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum results per search keyword. Each query gets up to this many results (deduplicated).",
                        "default": 100
                    },
                    "maxResults": {
                        "title": "Max Total Results",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Total cap across all queries. Set to 0 for unlimited (each query limited by maxResultsPerQuery).",
                        "default": 100
                    },
                    "includeDetails": {
                        "title": "Include Full Details",
                        "type": "boolean",
                        "description": "Fetch detail pages for each job to get full description, salary information, and teletravail (remote work) status. Slower but much richer data.",
                        "default": false
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Apify proxy settings. Datacenter proxy usually works for France Travail.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
