# Cadremploi.fr Jobs Scraper (`parsebird/cadremploi-fr-jobs-scraper`) Actor

Scrape executive and manager jobs from Cadremploi.fr: title, company, location, contract, salary range, description, coordinates, functions, and industries. Export JSON, CSV, Excel.

- **URL**: https://apify.com/parsebird/cadremploi-fr-jobs-scraper.md
- **Developed by:** [ParseBird](https://apify.com/parsebird) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.79 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

### Cadremploi.fr Jobs Scraper

Scrape **executive, manager, and cadre job offers** from [Cadremploi.fr](https://www.cadremploi.fr), one of France's largest job boards for qualified professionals. **Cadremploi.fr Jobs Scraper** returns clean, structured JSON for every offer — title, company, location, contract type, **salary range**, full job description, GPS coordinates, job functions, industries, and experience level.

<table><tr>
<td style="border-left:4px solid #E2001A;padding:12px 16px;font-weight:600">
Search Cadremploi by keyword and city, or paste a listing URL — every offer is enriched from its detail page with the full description, parsed salary min/max, contract type, department and region, company profile, apply channel, and 50+ structured fields ready for analysis or a job feed.
</td>
</tr></table>

##### Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

```
Cadremploi.fr Jobs Scraper (parsebird/cadremploi-fr-jobs-scraper) scrapes job offers from cadremploi.fr, the French executive job board. Inputs: keyword (string — job title/keyword), location (string — French city or department code; a city name is auto-resolved), url (string — a cadremploi listing URL like https://www.cadremploi.fr/emploi/liste_offres?dep=75, overrides keyword/location), results_wanted (integer, default 20, 0 = no limit), max_pages (integer, default 10 — 30 offers per page), proxyConfiguration (object — French residential proxies required, set by default). Every listed offer is fetched from its detail page and returned with: id, title, url, snippet, description_text, description_html, contract, contract_code, location, city, postal_code, department_code, department_label, region, country, latitude, longitude, salary, salary_min, salary_max, salary_currency, salary_hidden, published_date, company_name, company_id, company_type, company_description, company_logo, company_website, apply_type, apply_url, offer_badges[], recruiter_badges[], job_functions[], job_function_codes[], industries[], industry_codes[], experience_level, accepts_junior, occupation_classification_slug, occupation_classification_label, status_by_date, is_external_offer, source, search_type, search_id, total_results, source_page. Pricing: pay-per-event, $0.00099 per job on Free down to $0.00079 on Gold. API: https://apify.com/parsebird/cadremploi-fr-jobs-scraper/api - Token: https://console.apify.com/account/integrations
```

### What is Cadremploi.fr Jobs Scraper?

**Cadremploi.fr Jobs Scraper** is an Apify Actor that extracts job listings from [Cadremploi.fr](https://www.cadremploi.fr) without the site's API. Give it a keyword such as `developpeur`, `chef de projet`, or `directeur financier`, optionally a city, and it returns every matching offer with the full detail-page data — not just the summary card.

Cadremploi is behind Cloudflare and blocks datacenter traffic, so this Actor runs through **French residential proxies** by default. You just provide a search; the Actor handles location resolution, pagination, and detail extraction.

### What can Cadremploi.fr Jobs Scraper do?

- 🔍 **Keyword search** — find offers by job title or free-text keyword across all of France.
- 📍 **Location targeting** — add a city (`Paris`, `Lyon`, `Bordeaux`) or a department code (`75`); city names are resolved automatically to Cadremploi's location filter.
- 🔗 **URL mode** — paste any Cadremploi listing URL (with your own filters) and scrape it directly, with pagination.
- 💶 **Parsed salary** — `salary_min` / `salary_max` as numbers, plus the original label and a hidden-salary flag.
- 📄 **Full descriptions** — the complete job and candidate-profile text, in both plain text and HTML.
- 🏢 **Company data** — name, type (direct employer vs recruitment agency), description, logo, and website.
- 🗂️ **Structured taxonomy** — job functions, industries, occupation classification, experience level, and junior-friendly flag, each with codes.
- 📌 **Search context** — `search_id`, `search_type`, `total_results`, and `source_page` on every record.
- ⚡ Runs on Apify with scheduling, API access, integrations, and export to JSON, CSV, Excel, HTML, or XML.

### What data can you extract from Cadremploi.fr?

| Field | Description |
|-------|-------------|
| `id` | Cadremploi offer ID |
| `title` | Job title |
| `url` | Offer detail URL |
| `snippet` | Short teaser from the results list |
| `description_text` / `description_html` | Full job + profile description |
| `contract` / `contract_code` | Contract type (CDI, CDD, Intérim, …) |
| `location` / `city` / `postal_code` | Place of work |
| `department_code` / `department_label` / `region` | French administrative geography |
| `latitude` / `longitude` | Coordinates |
| `salary` / `salary_min` / `salary_max` / `salary_currency` / `salary_hidden` | Compensation |
| `published_date` | ISO-8601 publication timestamp |
| `company_name` / `company_type` / `company_description` / `company_logo` / `company_website` | Hiring company |
| `apply_type` / `apply_url` | How to apply |
| `job_functions` / `job_function_codes` | Function taxonomy |
| `industries` / `industry_codes` | Sector taxonomy |
| `experience_level` / `accepts_junior` | Seniority |
| `offer_badges` / `recruiter_badges` | Cadremploi badges (Nouveau, Recruteur actif, …) |
| `total_results` / `search_id` / `search_type` / `source_page` | Search context |

### How to scrape Cadremploi.fr

1. Open [Cadremploi.fr Jobs Scraper](https://apify.com/parsebird/cadremploi-fr-jobs-scraper) on Apify Store and click **Try for free**.
2. Enter a **Keyword** (job title or keyword).
3. (Optional) Add a **Location** — a French city or department code.
4. Set **Results wanted** and **Max pages**.
5. (Alternative) Paste a Cadremploi listing **URL** with your own filters instead.
6. Click **Start**, then open the **Dataset** tab. Export as JSON, CSV, Excel, HTML, or XML.

#### Input example — basic search

```json
{
    "keyword": "developer",
    "results_wanted": 20
}
```

#### Input example — targeted search

```json
{
    "keyword": "manager",
    "location": "Paris",
    "results_wanted": 50
}
```

#### Input example — URL extraction

```json
{
    "url": "https://www.cadremploi.fr/emploi/liste_offres?dep=75"
}
```

### Output example

```json
{
    "id": "156535427459969552",
    "title": "Chef de Projets industriels H/F",
    "url": "https://www.cadremploi.fr/emploi/detail_offre?offreId=156535427459969552",
    "snippet": "En relation avec les équipes commerciales et techniques...",
    "description_text": "En relation avec les équipes commerciales et techniques, le Chef de Projets...",
    "contract": "CDI",
    "contract_code": 1,
    "location": "Roissy-en-France",
    "city": "Roissy-en-France",
    "postal_code": "95700",
    "department_code": "95",
    "department_label": "Val-d'Oise",
    "region": "Île-de-France",
    "country": "France",
    "latitude": 49.0097,
    "longitude": 2.5156,
    "salary": "45 - 52 k€",
    "salary_min": 45000,
    "salary_max": 52000,
    "salary_currency": "EUR",
    "salary_hidden": false,
    "published_date": "2026-04-26T10:14:00+02:00",
    "company_name": "PLEIADE CONSULTING",
    "company_type": "Cabinet de recrutement",
    "apply_type": "formulaire",
    "job_functions": ["Qualité", "Opérations"],
    "industries": ["Conseil"],
    "experience_level": "Confirmé",
    "accepts_junior": false,
    "occupation_classification_label": "Référent Qualité",
    "status_by_date": "active",
    "source": "cadremploi",
    "search_type": "keyword",
    "total_results": 142,
    "source_page": 1
}
```

Download the dataset in JSON, CSV, Excel, HTML, or XML from the [Dataset tab](https://docs.apify.com/platform/storage/dataset).

### Use cases

- 🧲 **Recruitment sourcing** — track executive and cadre openings by function, sector, and region.
- 📊 **Labour-market research** — analyse salary ranges, contract types, and hiring volume across French departments.
- 📰 **Job aggregators** — feed Cadremploi offers into your own job board with clean, structured fields.
- 🔔 **Hiring monitoring** — schedule a daily run for a keyword + city and diff the results.
- 🤖 **AI & data pipelines** — pass structured job data to LLM agents through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp).

### How it works

1. The Actor builds a Cadremploi listing URL from your keyword and location (resolving a city name to Cadremploi's `ville` filter), or uses the URL you provide.
2. It loads listing pages through a French residential proxy and collects offer IDs, following pagination up to `max_pages` / `results_wanted`.
3. Each offer's detail page is fetched and its embedded data parsed into a full record.
4. Search context (`search_id`, `total_results`, `source_page`) is attached to every record.
5. Each offer is billed as one pay-per-event result.

### How much does it cost to scrape Cadremploi.fr?

Cadremploi.fr Jobs Scraper uses **pay-per-event** pricing — you are charged **once per job offer**.

| Plan | Price per job | Price per 1,000 jobs |
|------|---------------|-----------------------|
| Free | $0.00099 | **$0.99** |
| Bronze | $0.00089 | **$0.89** |
| Silver | $0.00089 | **$0.89** |
| Gold | $0.00079 | **$0.79** |

Scraping 100 offers costs about **$0.10** on the Free plan. Apify platform usage (compute and the residential proxy) is billed separately but is modest — a few small requests per offer. See the [Apify pricing page](https://apify.com/pricing).

### API usage examples

Run Cadremploi.fr Jobs Scraper with the [Apify API](https://docs.apify.com/api/v2).

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")

run_input = {"keyword": "chef de projet", "location": "Lyon", "results_wanted": 50}
run = client.actor("parsebird/cadremploi-fr-jobs-scraper").call(run_input=run_input)

for job in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(job["title"], "-", job["company_name"], "-", job.get("salary"))
```

#### JavaScript

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

const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });

const run = await client.actor('parsebird/cadremploi-fr-jobs-scraper').call({
    keyword: 'developer',
    results_wanted: 20,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.map((j) => `${j.title} @ ${j.company_name}`));
```

Connect finished datasets to [Google Sheets](https://docs.apify.com/platform/integrations/google-sheets), [Slack](https://docs.apify.com/platform/integrations/slack), [Make](https://docs.apify.com/platform/integrations/make), webhooks, or your own pipeline.

### Is it legal to scrape Cadremploi.fr?

Cadremploi.fr Jobs Scraper reads only publicly visible job listings — the same offers any visitor sees on [cadremploi.fr](https://www.cadremploi.fr). It does not log in or access private data. Job postings may contain personal data (recruiter names, contact details) subject to the GDPR; you are responsible for having a lawful basis to process it and for complying with Cadremploi's Terms of Service. For background, read Apify's guide: [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/).

### Related Actors

- [Indeed Jobs Scraper](https://apify.com/parsebird/indeed-jobs-scraper) — Jobs from Indeed in 60+ countries.
- [HelloWork Jobs Scraper](https://apify.com/parsebird/hellowork-jobs-scraper) — French job listings from HelloWork.
- [Welcome to the Jungle Jobs Scraper](https://apify.com/parsebird/jobteaser-jobs-scraper) — Early-career and graduate jobs.
- [Workday Jobs Scraper](https://apify.com/parsebird/workday-jobs-scraper) — Jobs from any Workday-powered careers site.

### FAQ

**Do I need a Cadremploi account?**
No. The Actor uses only public listing and detail pages.

**Why does it use residential proxies?**
Cadremploi is protected by Cloudflare and blocks datacenter IPs. French residential proxies (the default) pass reliably.

**How do I filter by city?**
Put the city name in **Location** — it is resolved automatically (e.g. `Lyon` → the Lyon area filter). You can also pass a department code like `75`, or use URL mode with your own filters.

**Why did I get fewer results than `total_results`?**
`total_results` is Cadremploi's own count for the search. The Actor stops at `results_wanted` or `max_pages`, whichever comes first. Raise both for more.

**Can I schedule recurring runs?**
Yes. Use Apify [schedules](https://docs.apify.com/platform/schedules) to run a keyword + city search daily and build a job feed.

**Can I use this as a Cadremploi API?**
Yes. Call the Actor through the [Apify API](https://docs.apify.com/api/v2), use webhooks, or connect it to AI assistants with the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp).

**Something looks wrong or missing.**
Report it on the [Issues tab](https://apify.com/parsebird/cadremploi-fr-jobs-scraper/issues) and it will be looked at quickly.

# Actor input Schema

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

Job title or keyword to search for (e.g. "developpeur", "chef de projet", "manager").

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

Target city or French department (e.g. "Paris", "Lyon", "75"). A city name is resolved automatically.

## `url` (type: `string`):

A Cadremploi listing URL to scrape directly, e.g. https://www.cadremploi.fr/emploi/liste\_offres?dep=75 . Overrides keyword and location.

## `results_wanted` (type: `integer`):

Maximum number of job records to save. 0 = no limit.

## `max_pages` (type: `integer`):

Safety limit on the number of listing pages to process (30 offers per page).

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

Proxy for the Cadremploi requests. French residential proxies are required — Cadremploi blocks datacenter IPs.

## Actor input object example

```json
{
  "keyword": "developpeur",
  "location": "",
  "url": "",
  "results_wanted": 10,
  "max_pages": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "FR"
  }
}
```

# Actor output Schema

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

No description

# 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": "developpeur",
    "results_wanted": 10,
    "max_pages": 10,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "FR"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("parsebird/cadremploi-fr-jobs-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": "developpeur",
    "results_wanted": 10,
    "max_pages": 10,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "FR",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("parsebird/cadremploi-fr-jobs-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": "developpeur",
  "results_wanted": 10,
  "max_pages": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "FR"
  }
}' |
apify call parsebird/cadremploi-fr-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parsebird/cadremploi-fr-jobs-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/aGMCZfh2vlfS5f3RY/builds/eGvbrtEhuxT2O3xUP/openapi.json
