# Cadremploi Jobs Search Scraper (`alexist/cadremploi-jobs-search-scraper`) Actor

Scrape executive job listings from Cadremploi.fr instantly. Extract titles, salaries, locations, company details, and application links from search results — perfect for recruiters, talent analysts, and job aggregators tracking the French professional market.

- **URL**: https://apify.com/alexist/cadremploi-jobs-search-scraper.md
- **Developed by:** [Alex](https://apify.com/alexist) (community)
- **Categories:** Automation, Developer tools, Jobs
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## 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/docs.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.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/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

## Cadremploi Jobs Search Scraper: Automate Executive Job Data Collection

---

### What Is Cadremploi.fr?

Cadremploi.fr is France's leading job board specializing in executive and professional positions ("cadre"). With thousands of listings across industries, sectors, and experience levels, it attracts both high-caliber candidates and major employers. However, manually collecting job data from search results pages is tedious and error-prone — the **Cadremploi Jobs Search Scraper** automates this, extracting structured job records in seconds.

---

### Overview

The **Cadremploi Jobs Search Scraper** targets Cadremploi.fr search result pages and harvests job listing data in bulk. It is ideal for:

- **Recruitment agencies** tracking available talent and market opportunities
- **HR professionals** benchmarking roles, locations, and compensation trends
- **Job aggregator platforms** syndicating Cadremploi listings
- **Career researchers** analyzing the French executive labor market
- **Sales teams** identifying company hiring activity for outreach

The scraper handles pagination, filters by keyword or location, and outputs clean, structured records ready for spreadsheets, databases, or APIs. It includes built-in error recovery to ensure reliable, uninterrupted data collection across multiple URLs.

---

### Input Format

Configure the scraper using a JSON object with the following parameters:

```json
{
  "urls": [
    "https://www.cadremploi.fr/emploi/liste_offres?query=senior&page=2"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}
````

#### Input Parameters Explained

| Parameter | Type | Description |
|---|---|---|
| `urls` | Array of strings | Cadremploi.fr search result page URLs. Paste one or multiple URLs (e.g., search results for "senior", "Paris", "Marketing"). Each URL can contain filters like `query=`, `location=`, or `page=`. |
| `ignore_url_failures` | Boolean | If `true`, the scraper continues if a URL fails to load. If `false`, the entire run stops on the first error. Recommended: `true` for bulk jobs. |
| `max_items_per_url` | Integer | Maximum number of job listings to extract per URL (e.g., `20` extracts up to 20 listings per page). Default: `20`. |

**Example URLs:**

- `https://www.cadremploi.fr/emploi/liste_offres?query=marketing`
- `https://www.cadremploi.fr/emploi/liste_offres?query=finance&location=paris`
- `https://www.cadremploi.fr/emploi/liste_offres?page=3`

> **Tip:** Chain multiple keyword searches into one run by adding separate URLs — the scraper collects from each independently.

***

### Output Format

**Example Output Record:**

```json
{
  "id": "156542585763930196",
  "title": "OPC Senior  H/F",
  "url": "/emploi/detail_offre?offreId=156542585763930196",
  "snippet": "Rattaché à la direction de projet et intégré à une équipe dédiée, vous intervenez sur une phase EXE déjà engagée, avec une forte présence terrain et une coordination multi-intervenants.  Vos responsabilités :  Structuration & planification : - Mettre en place et piloter la str...",
  "contract": "CDI",
  "location": "Paris",
  "salary": "50K€ - 60K€",
  "date": "Publiée il y a 14 jours",
  "company": {
    "type": "ENTREPRISE",
    "name": "WINSEARCH - MONTPELLIER INDUSTRIE",
    "logo": "https://imagedelivery.net/BN-U87wrUjbdYBHZwNH6NA/20834271-2bad-4355-abd5-f2c2a888f200/logo100",
    "video": "",
    "badges": []
  },
  "apply": {
    "type": "formulaire",
    "has_already_applied_to_current_offer": false
  },
  "offer_badges": [
    {
      "label": "Populaire",
      "color": "blue-500",
      "tooltip": "Cette offre suscite un fort intérêt auprès des candidats"
    }
  ],
  "recruiter_badge": [],
  "from_url": "https://www.cadremploi.fr/emploi/liste_offres?query=senior"
}
```

Each scraped job listing returns a structured record with 12 essential fields:

#### Core Job Information

| Field | Meaning |
|---|---|
| `ID` | Unique identifier assigned by Cadremploi to this job posting |
| `Title` | Official job title (e.g., "Senior Marketing Manager") |
| `URL` | Direct link to the full job posting on Cadremploi.fr |
| `Snippet` | Brief excerpt or summary of the job description (50-150 characters) |
| `Company` | Employer name and company identifier |

#### Job Details & Specifications

| Field | Meaning |
|---|---|
| `Contract` | Employment contract type (e.g., CDI, CDD, Freelance, Stage) |
| `Location` | Job location (city, region, or "Remote" if applicable) |
| `Salary` | Salary range or annual figure when published (e.g., "35k-50k€" or blank if not disclosed) |
| `Date` | Publication or posting date of the listing |

#### Application & Recruiter Information

| Field | Meaning |
|---|---|
| `Apply` | Application URL or link to submit your candidacy |
| `Offer Badges` | Special offer tags or highlights (e.g., "Urgent Hiring", "Remote Available", "New") |
| `Recruiter Badge` | Indicates if the posting is from a direct employer or recruitment agency; may include recruiter name or badge status |

***

### How to Use

1. **Find search URLs** — Go to Cadremploi.fr, use filters (keyword, location, contract type), and copy the URL from your search results page.

2. **Prepare input** — Paste one or more search result URLs into the `urls` array. You can add URLs for different keywords or locations in a single run.

3. **Set limits** — Adjust `max_items_per_url` (default: `20`). Set higher for comprehensive collection or lower for quick samples.

4. **Enable resilience** — Keep `ignore_url_failures: true` to skip broken links and continue scraping.

5. **Run the scraper** — Start the job and monitor progress via the run log.

6. **Export data** — Download results as JSON, CSV, or Excel, then import into your database or CRM.

**Best practices:**

- Use specific search filters in your URLs to focus on target roles (e.g., `query=digital marketing&page=1`).
- For large-scale collection, add multiple page URLs (page 1, 2, 3, etc.) to the array.
- If salary data is critical, verify coverage — not all Cadremploi listings include salary ranges.

***

### Business Benefits & Use Cases

- **Recruitment intelligence:** Monitor hiring trends across industries and regions in France
- **Talent sourcing:** Build candidate pipelines by identifying active roles at target companies
- **Competitive analysis:** Track how competitors position roles and compensation
- **Job board syndication:** Feed fresh Cadremploi data into multi-job aggregator platforms
- **Compensation benchmarking:** Analyze salary ranges and benefits across professional segments

The scraper transforms hours of manual search-and-copy work into automated data pipelines, empowering teams to make faster, data-driven hiring and staffing decisions.

***

### Conclusion

The **Cadremploi Jobs Search Scraper** is a fast, reliable solution for capturing French executive job market data. With clean, structured output and flexible URL configuration, it simplifies talent research and competitive analysis. Start scraping today to unlock actionable insights into France's professional hiring landscape.

# Actor input Schema

## `urls` (type: `array`):

Add the URLs of the Jobs list urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.

## `ignore_url_failures` (type: `boolean`):

If true, the scraper will continue running even if some URLs fail to be scraped.

## `max_items_per_url` (type: `integer`):

The maximum number of items to scrape per URL.

## Actor input object example

```json
{
  "urls": [
    "https://www.cadremploi.fr/emploi/liste_offres?query=senior&page=2"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}
```

# 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 = {
    "urls": [
        "https://www.cadremploi.fr/emploi/liste_offres?query=senior&page=2"
    ],
    "ignore_url_failures": true,
    "max_items_per_url": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("alexist/cadremploi-jobs-search-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 = {
    "urls": ["https://www.cadremploi.fr/emploi/liste_offres?query=senior&page=2"],
    "ignore_url_failures": True,
    "max_items_per_url": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("alexist/cadremploi-jobs-search-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 '{
  "urls": [
    "https://www.cadremploi.fr/emploi/liste_offres?query=senior&page=2"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}' |
apify call alexist/cadremploi-jobs-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=alexist/cadremploi-jobs-search-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Cadremploi Jobs Search Scraper",
        "description": "Scrape executive job listings from Cadremploi.fr instantly. Extract titles, salaries, locations, company details, and application links from search results — perfect for recruiters, talent analysts, and job aggregators tracking the French professional market.",
        "version": "0.0",
        "x-build-id": "8IVhFsoYKPFANrogm"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/alexist~cadremploi-jobs-search-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-alexist-cadremploi-jobs-search-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/alexist~cadremploi-jobs-search-scraper/runs": {
            "post": {
                "operationId": "runs-sync-alexist-cadremploi-jobs-search-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/alexist~cadremploi-jobs-search-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-alexist-cadremploi-jobs-search-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": {
                    "urls": {
                        "title": "URLs of the Jobs list urls to scrape",
                        "type": "array",
                        "description": "Add the URLs of the Jobs list urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "ignore_url_failures": {
                        "title": "Continue running even if some URLs fail to be scraped",
                        "type": "boolean",
                        "description": "If true, the scraper will continue running even if some URLs fail to be scraped."
                    },
                    "max_items_per_url": {
                        "title": "Max items per URL",
                        "type": "integer",
                        "description": "The maximum number of items to scrape per URL."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
