# Cadremploi Fr Jobs Extractor (`kawsar/cadremploi-fr-jobs-extractor`) Actor

Cadremploi France jobs scraper that collects active job postings, salaries, contract types, and locations from Cadremploi.fr, so recruitment teams can track hiring trends and automate candidate sourcing with ease.

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

## Pricing

from $2.99 / 1,000 results

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/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

## Cadremploi Fr Jobs Extractor: High-Performance Job Listing Scraper for Cadremploi.fr

Cadremploi France jobs scraper is a high-performance, professional scraping tool designed to extract comprehensive job postings, executive roles, and career opportunities from Cadremploi.fr. Instead of manually copying details, this tool allows you to gather targeted job listings at scale by keywords and locations, and export the results directly into formats such as JSON, CSV, or Excel.

### Key Features

- **Multi-Keyword & Multi-Location Targeting**: Supports separate list inputs for keywords and locations with smart automated matching.
- **Smart Target Matching**: Automatically pairs keywords and locations 1-to-1 if the input lists are of equal length, or executes a complete cross-combination (Cartesian product) if they differ.
- **Optimized Pagination Routing**: Built-in intelligent page routing ensures that pagination stops as soon as your requested item limit is met, saving time and resources.
- **Advanced Request Distribution**: Employs premium, browser-like header footprints and cloud-based routing networks to navigate anti-scraping systems and rate-limiting structures seamlessly out of the box.
- **No Complex Setup**: Designed to work instantly without requiring you to configure custom proxies or manage browser sessions.

### Use Cases

- **Talent Sourcing & Recruitment**: Build comprehensive candidate pipelines for executive search and niche professional recruiting.
- **Labor Market Intelligence**: Track hiring trends, salary distributions, and active employment contracts (CDI, CDD, etc.) across French departments.
- **Business Development & B2B Lead Gen**: Identify rapidly expanding organizations and companies actively recruiting in specific sectors.
- **Job Board Aggregation**: Populate local, custom, or niche job boards automatically with fresh, high-quality career listings.

### Input Parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `keywords` | array | `["design", "développeur java"]` | List of job titles, keywords, or skills to search for (one per line). Leave empty to search by location only. |
| `locations` | array | `["nice-06", "paris"]` | List of French cities, departments, or postal codes (one per line). Leave empty to search by keywords globally. |
| `rayon` | integer | `100` | Search radius around the specified location(s) in kilometers (e.g. 10, 50, 100). Applies only when locations are specified. |
| `startUrls` | array | `[]` | List of direct Cadremploi search listing URLs to scrape instead of using keywords and locations. |
| `maxItemsPerQuery` | integer | `50` | Maximum number of job listings to extract for each search combination or direct URL individually. |
| `requestTimeoutSecs` | integer | `30` | Per-request timeout limit in seconds for scraping operations. |

#### How Target Matching Works

If both keywords and locations are supplied, the scraper uses smart logic to construct search paths:
1. **1-to-1 Matching**: If you supply 2 keywords (`["design", "developer"]`) and 2 locations (`["nice-06", "paris"]`), the scraper pairs them index-by-index. It will search for *design* in *nice-06*, and *developer* in *paris*.
2. **Cross-Combination (Cartesian Product)**: If the input lists have different lengths (e.g. 2 keywords and 1 location), it will search for every keyword across every location.

#### Example Input

```json
{
    "keywords": [
        "design",
        "développeur java"
    ],
    "locations": [
        "nice-06",
        "paris"
    ],
    "rayon": 100,
    "maxItemsPerQuery": 50,
    "requestTimeoutSecs": 30
}
````

### Extracted Data Schema

Each extracted job posting is saved with the following structured attributes:

| Field | Type | Description |
|-------|------|-------------|
| `jobId` | string | Unique identifier of the job posting on Cadremploi. |
| `jobTitle` | string | Full title of the job posting. |
| `url` | string | Direct link to the detailed job description page. |
| `companyName` | string | Name of the recruiting organization. |
| `companyLogo` | string | URL link to the company logo image. |
| `badges` | array | Badges associated with the post (e.g., Nouveau, Populaire). |
| `location` | string | Official location of the job. |
| `contractType` | string | Type of employment contract (CDI, CDD, Freelance, etc.). |
| `salary` | string | Offered salary package details (if specified). |
| `jobSnippet` | string | A short preview or snippet description of the role. |
| `publicationDateText` | string | Human-readable posting age (e.g., Publiée il y a 10 jours). |
| `searchQuery` | string | The keyword and location combination that generated the result. |
| `scrapedAt` | string | ISO 8601 timestamp of when the extraction was performed. |

#### Sample Output Record

```json
{
  "jobId": "156537911140995108",
  "jobTitle": "Développeur Java H/F",
  "url": "https://www.cadremploi.fr/emploi/detail_offre?offreId=156537911140995108",
  "companyName": "GROUPAGORA RÉGIONS",
  "companyLogo": "https://imagedelivery.net/BN-U87wrUjbdYBHZwNH6NA/03d36f4f-a233-4d3d-615a-aa00df796b00/logo100",
  "badges": [
    "Populaire"
  ],
  "location": "Nice",
  "contractType": "CDI",
  "salary": "45K€ - 50K€",
  "jobSnippet": "Dans le cadre du renforcement des équipes techniques de l'un de nos clients, nous recherchons un Développeur Java (H/F)...",
  "publicationDateText": "Publiée il y a 19 jours",
  "searchQuery": "design, nice-06",
  "scrapedAt": "2026-06-08T12:00:00.000Z"
}
```

### How It Works

1. **Target Generation**: The extractor compiles your keywords and locations lists into optimized URLs. If direct start URLs are supplied, they are prioritized first.
2. **Advanced Request Routing**: The actor distributes requests through secure, anti-blocking cloud routes using optimized header profiles to guarantee reliable access.
3. **BeautifulSoup Extraction**: A high-efficiency HTML parser slices through the pages to retrieve raw text, contract types, company branding, and salary info.
4. **Limit-Wise Pagination**: The actor moves page by page for each target combination. It calculates remaining item quotas on the fly and immediately terminates pagination for that target when the user-defined limit is achieved.
5. **Real-Time Storage**: Successfully parsed postings are pushed directly to your Apify dataset in real-time.

# Actor input Schema

## `keywords` (type: `array`):

List of job titles, keywords, or skills to search for (e.g. 'design', 'développeur java'). Leave empty to search by location only.

## `locations` (type: `array`):

List of cities, departments, or region codes (e.g. 'nice-06', 'paris'). Leave empty to search by keywords globally.

## `rayon` (type: `integer`):

Search radius around the specified location in kilometers (e.g., 10, 50, 100). Applies only when a location is specified in a query.

## `startUrls` (type: `array`):

List of direct Cadremploi job search result URLs to scrape instead of using combined search queries.

## `maxItemsPerQuery` (type: `integer`):

Maximum number of job listings to extract for each search query or direct start URL individually.

## `requestTimeoutSecs` (type: `integer`):

Per-request timeout in seconds for scraping requests.

## Actor input object example

```json
{
  "keywords": [
    "design",
    "développeur java"
  ],
  "locations": [
    "nice-06",
    "paris"
  ],
  "rayon": 100,
  "startUrls": [],
  "maxItemsPerQuery": 50,
  "requestTimeoutSecs": 30
}
```

# 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 = {
    "keywords": [
        "design",
        "développeur java"
    ],
    "locations": [
        "nice-06",
        "paris"
    ],
    "startUrls": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("kawsar/cadremploi-fr-jobs-extractor").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 = {
    "keywords": [
        "design",
        "développeur java",
    ],
    "locations": [
        "nice-06",
        "paris",
    ],
    "startUrls": [],
}

# Run the Actor and wait for it to finish
run = client.actor("kawsar/cadremploi-fr-jobs-extractor").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 '{
  "keywords": [
    "design",
    "développeur java"
  ],
  "locations": [
    "nice-06",
    "paris"
  ],
  "startUrls": []
}' |
apify call kawsar/cadremploi-fr-jobs-extractor --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Cadremploi Fr Jobs Extractor",
        "description": "Cadremploi France jobs scraper that collects active job postings, salaries, contract types, and locations from Cadremploi.fr, so recruitment teams can track hiring trends and automate candidate sourcing with ease.",
        "version": "0.0",
        "x-build-id": "at6ajXZWOKJs97IEp"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/kawsar~cadremploi-fr-jobs-extractor/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-kawsar-cadremploi-fr-jobs-extractor",
                "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/kawsar~cadremploi-fr-jobs-extractor/runs": {
            "post": {
                "operationId": "runs-sync-kawsar-cadremploi-fr-jobs-extractor",
                "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/kawsar~cadremploi-fr-jobs-extractor/run-sync": {
            "post": {
                "operationId": "run-sync-kawsar-cadremploi-fr-jobs-extractor",
                "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": {
                    "keywords": {
                        "title": "Search Keywords",
                        "type": "array",
                        "description": "List of job titles, keywords, or skills to search for (e.g. 'design', 'développeur java'). Leave empty to search by location only.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "locations": {
                        "title": "Locations",
                        "type": "array",
                        "description": "List of cities, departments, or region codes (e.g. 'nice-06', 'paris'). Leave empty to search by keywords globally.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "rayon": {
                        "title": "Radius (km)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Search radius around the specified location in kilometers (e.g., 10, 50, 100). Applies only when a location is specified in a query.",
                        "default": 100
                    },
                    "startUrls": {
                        "title": "Direct Listing URLs",
                        "type": "array",
                        "description": "List of direct Cadremploi job search result URLs to scrape instead of using combined search queries.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxItemsPerQuery": {
                        "title": "Max Items Per Query or URL",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Maximum number of job listings to extract for each search query or direct start URL individually.",
                        "default": 50
                    },
                    "requestTimeoutSecs": {
                        "title": "Request Timeout (seconds)",
                        "minimum": 5,
                        "maximum": 120,
                        "type": "integer",
                        "description": "Per-request timeout in seconds for scraping requests.",
                        "default": 30
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
