# French Training Organisations – Qualiopi Check & CPF Prices (`yck69/french-training-organisations`) Actor

Official list of French training organisations (NDA) with Qualiopi certification, specialities and trainee numbers, plus the CPF (Mon Compte Formation) catalogue: verify suppliers, find leads, benchmark training prices and get alerts on new organisations.

- **URL**: https://apify.com/yck69/french-training-organisations.md
- **Developed by:** [yck](https://apify.com/yck69) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 organisations

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

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

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

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

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

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

# README

## French Training Organisations – Qualiopi Check & CPF Prices

The **official list of French training organisations** (about 153,000 declared providers, 46,000 of them **Qualiopi certified**) joined with the **CPF catalogue** (Mon Compte Formation, about 205,000 offers with prices). Both are refreshed every day.

- **Training organisations**: search by name, region, department, city, address, speciality, Qualiopi scope and size. Each one comes with its CPF offer: number of trainings, certifications sold, price range.
- **Verify organisations**: paste SIREN, SIRET or declaration numbers (NDA). Get back whether each one is a declared training organisation, whether it is **Qualiopi certified**, and for which scopes.
- **CPF trainings**: every training on Mon Compte Formation, with price, hours, sessions, remote sessions and certification (RS/RNCP).
- **CPF price benchmark**: what does a certification cost? Prices at 25%, median and 75%, number of providers and remote share, by certification, domain, region, department or provider.
- **Alerts**: new organisations in your area, Qualiopi gained or lost, organisations removed. Schedule it weekly.
- **Statistics**: organisations, Qualiopi share, active organisations and trainees by region, department or speciality.

**$1 per 1,000 organisations or trainings.**

### What data can you get?

<table>
<tr><td>🏢 Organisation, SIREN, SIRET</td><td>🔢 Declaration number (NDA)</td><td>✅ Qualiopi certified and scopes</td></tr>
<tr><td>📍 Address, department, region</td><td>🎯 Specialities</td><td>👥 Trainees and trainers</td></tr>
<tr><td>🎓 CPF trainings</td><td>💶 Price, hours, sessions</td><td>🖥️ Remote sessions</td></tr>
<tr><td>📜 Certification (RS/RNCP)</td><td>📊 Price benchmarks</td><td>🔔 Qualiopi gained or lost</td></tr>
</table>

### How to use it

1. Click **Try for free** at the top of this page.
2. Choose **organisations**, **verify**, **trainings**, **prices** or **stats**.
3. Enter a name, keywords, an area, or paste SIREN/SIRET/NDA numbers.
4. Click **Start**, or schedule it weekly for alerts.
5. Download as JSON, CSV or Excel.

### Use cases

- **HR, OPCOs and buyers**: check that training suppliers are declared and Qualiopi certified before funding them. Qualiopi is mandatory for public and mutualised funding.
- **Sales teams selling to training organisations** (LMS, Qualiopi auditors and consultants, software, insurance): build lead lists by region, speciality and size, and get alerted when new organisations appear.
- **Training organisations**: benchmark your CPF prices against competitors for the same certification, and watch who enters your market.
- **Analysts**: the training market by region and speciality.

### Input examples

**Qualiopi-certified organisations in the Rhône, largest first**

```json
{ "mode": "organisations", "departments": ["69"], "qualiopi": "certified" }
```

**Verify suppliers**

```json
{ "mode": "verify", "identifiers": ["335060307", "53282174100024", "11756782875"] }
```

**Excel trainings on CPF in Lyon, cheapest first**

```json
{ "mode": "trainings", "query": "excel", "departments": ["69"], "trainingSort": "cheapest" }
```

**What does the TOEIC cost, region by region?**

```json
{ "mode": "prices", "certificationCodes": ["RS7229"], "priceGroupBy": "region" }
```

**Weekly alert: new apprenticeship centres (CFA) in Brittany**

```json
{ "mode": "organisations", "regions": ["53"], "qualiopiScopes": ["apprenticeship"], "onlyNew": true, "alertName": "cfa-bretagne" }
```

### Output

**Organisation**

```json
{
    "declarationNumber": "82690247769",
    "name": "INSTITUT DE FORMATION AUVERGNE RHONE-ALPES",
    "siren": "347919151",
    "siret": "34791915100030",
    "qualiopi": true,
    "qualiopiScopes": ["training-actions"],
    "address": "51 RUE MONTGOLFIER",
    "postalCode": "69451",
    "city": "LYON 06",
    "departmentCode": "69",
    "region": "Auvergne-Rhône-Alpes",
    "specialities": [{ "code": "314", "label": "Comptabilité, gestion" }],
    "trainees": 24166,
    "trainers": 165,
    "lastDeclarationDate": "2026-05-18",
    "fiscalYearEnd": "2025-12-31",
    "onCpf": true,
    "cpfOffer": {
        "trainings": 12,
        "certifications": 7,
        "priceMin": 630,
        "priceMax": 9960,
        "priceAverage": 2567,
        "remoteSessions": 0,
        "topCertifications": [{ "title": "Grade_Master Diplôme supérieur de comptabilité et de gestion (DSCG)", "trainings": 3 }]
    },
    "companyUrl": "https://annuaire-entreprises.data.gouv.fr/entreprise/347919151"
}
```

- **Verification rows** add `input`, `declared` and `matchedBy`.
- **Alert rows** add `alertType` and `previousQualiopiScopes`. `alertType` is `new`, `qualiopi-change`, or `removed`. Removed means the organisation no longer matches your filters: its declaration lapsed, or it lost the certification you filtered on.

**CPF training**: `title`, `organisation`, `siret`, `department`, `certificationCode` (e.g. RS6963), `certificationTitle`, `certificationUrl` (France Compétences), `level`, `formacodes`, `romeCodes`, `priceMin`, `priceMax`, `priceAverage`, `hoursAverage`, `pricePerHour`, `activeSessions`, `remoteSessions`, `objective`, `content`.

**Price benchmark row**

```json
{ "group": "Certification TOEIC 4 compétences (écouter, parler, lire et écrire)", "code": "RS7229", "offers": 5955, "providers": 696, "priceMin": 270, "priceP25": 1494.73, "priceMedian": 1803.79, "priceP75": 2742.38, "priceMax": 15000, "remoteSharePct": 36.3 }
```

### Pricing

| Event | Price |
|---|---|
| Organisation (search, verification or alert) | $0.001 |
| CPF training | $0.001 |
| Statistics or price benchmark row | $0.003 |

The CPF offer of each organisation is included at no extra cost.

### Good to know

- **Sources**:
  - [Liste publique des organismes de formation](https://www.data.gouv.fr/fr/datasets/liste-publique-des-organismes-de-formation-l-6351-7-1-du-code-du-travail/) (Ministry of Labour, DGEFP).
  - [Mon Compte Formation catalogue](https://opendata.caissedesdepots.fr/explore/dataset/moncompteformation_catalogueformation/) (Caisse des Dépôts).
  - Both are under *Licence Ouverte / Etalab 2.0* and refreshed daily.
- **Qualiopi** here is the certification recorded in the official list, by scope: training actions, apprenticeship, skills assessment, VAE. The list doesn't give certificate dates or the certifying body.
- **Addresses**: about half of the organisations have no public address, mostly sole traders. They can be found by name, region or identifier, but not by department, city or radius.
- **Trainees and trainers** come from each organisation's last annual report (bilan pédagogique et financier). Many declared organisations report no trainee.
- **CPF prices** are the public prices of each offer, including VAT. A training sold in several departments has one offer per department.
- No email or phone number is published in these sources. For company details and directors, chain with a French company data Actor using the SIREN.

### More Actors from this developer

### FAQ

##### Can I use it through the API, Make, Zapier or Google Sheets?

Yes. Every run can be started and read through the [Apify API](https://docs.apify.com/api/v2) (JavaScript and Python clients, CLI, MCP), and Apify integrations connect it to Make, Zapier, n8n, Google Sheets, Slack, webhooks and more.

##### Is it legal to use this data?

The Actor only reads public or official open data and doesn't log in anywhere. Check the source's licence and your local rules (for example GDPR when data concerns people) for your use case; if in doubt, ask a lawyer.

##### Something isn't working, or you need another field?

Open an issue on the **Issues** tab: feedback is read and answered.

# Actor input Schema

## `mode` (type: `string`):

<b>Training organisations</b>: the official list of declared training providers (~150,000) with Qualiopi certification, specialities, trainee numbers and their CPF offer. Turn on alerts to follow new organisations and Qualiopi changes.<br><b>Verify organisations</b>: check SIREN, SIRET or declaration numbers: declared? Qualiopi certified, for what?<br><b>CPF trainings</b>: the Mon Compte Formation catalogue (~200,000 offers) with prices, hours and certifications.<br><b>CPF price benchmark</b>: price ranges (median, quartiles) by certification, area or provider.<br><b>Organisation statistics</b>: organisations, Qualiopi share and trainees by region, department or speciality.

## `name` (type: `string`):

Words in the name.

## `qualiopi` (type: `string`):

Certified, not certified, or both.

## `qualiopiScopes` (type: `array`):

Qualiopi scopes the organisation must all have.

## `specialities` (type: `array`):

NSF codes (e.g. <code>326</code> IT) or words (e.g. <code>sécurité</code>, <code>langues</code>). Any of them.

## `minTrainees` (type: `integer`):

From the organisation's last annual report.

## `maxTrainees` (type: `integer`):

e.g. small organisations only.

## `minTrainers` (type: `integer`):

Number of trainers declared.

## `onlyOnCpf` (type: `boolean`):

With at least one training on the Mon Compte Formation catalogue.

## `addCpfOffer` (type: `boolean`):

Number of CPF trainings, certifications, price range and top certifications of each organisation.

## `sortBy` (type: `string`):

Largest first by default (nearest first with an address).

## `identifiers` (type: `array`):

One per line. A SIRET also matches the organisation declared by another establishment of the same company.

## `address` (type: `string`):

Organisations around an address, e.g. <code>Place Bellecour, Lyon</code>. Only organisations with a public address.

## `radiusKm` (type: `number`):

Up to 100 km.

## `cities` (type: `array`):

City names (organisations).

## `postalCodes` (type: `array`):

e.g. <code>69002</code> (organisations).

## `departments` (type: `array`):

e.g. <code>69</code>, <code>2A</code>, <code>974</code>.

## `regions` (type: `array`):

Whole regions. Organisations without a public address can only be found by region.

## `query` (type: `string`):

Words in the training or certification title, e.g. <code>excel</code>, <code>anglais</code>, <code>CACES</code>.

## `certificationCodes` (type: `array`):

RS or RNCP codes, e.g. <code>RS6963</code>, <code>RNCP37682</code>.

## `formacodes` (type: `array`):

Training domain codes, e.g. <code>31054</code>.

## `certificationType` (type: `string`):

RS (specific skills) or RNCP (diplomas and titles).

## `levels` (type: `array`):

RNCP level after the training.

## `maxPrice` (type: `number`):

Cheapest session at or below this price.

## `minHours` (type: `number`):

Average duration.

## `maxHours` (type: `number`):

Average duration.

## `remoteOnly` (type: `boolean`):

At least one remote session.

## `organisationIds` (type: `array`):

Trainings of these organisations only.

## `trainingSort` (type: `string`):

Most active sessions first by default.

## `priceGroupBy` (type: `string`):

For CPF price benchmark.

## `groupBy` (type: `string`):

For organisation statistics.

## `onlyNew` (type: `boolean`):

Training organisations mode: new organisations, Qualiopi gained or lost, removed organisations. Schedule it (e.g. weekly) with an email, Slack or webhook integration. The first run saves the current list.

## `alertName` (type: `string`):

Separate memory per alert. Defaults to one per set of filters.

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

Organisations, trainings or statistics rows (Verify returns one row per identifier).

## Actor input object example

```json
{
  "mode": "organisations",
  "qualiopi": "certified",
  "onlyOnCpf": false,
  "addCpfOffer": true,
  "radiusKm": 10,
  "departments": [
    "69"
  ],
  "certificationType": "any",
  "remoteOnly": false,
  "trainingSort": "sessions",
  "priceGroupBy": "certification",
  "groupBy": "region",
  "onlyNew": false,
  "maxResults": 20
}
```

# Actor output Schema

## `organisations` (type: `string`):

Training organisations.

## `verify` (type: `string`):

Verified organisations.

## `trainings` (type: `string`):

CPF catalogue trainings.

## `prices` (type: `string`):

CPF prices by group.

## `stats` (type: `string`):

Organisations by group.

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

Every field.

# 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 = {
    "mode": "organisations",
    "qualiopi": "certified",
    "departments": [
        "69"
    ],
    "maxResults": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("yck69/french-training-organisations").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 = {
    "mode": "organisations",
    "qualiopi": "certified",
    "departments": ["69"],
    "maxResults": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("yck69/french-training-organisations").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 '{
  "mode": "organisations",
  "qualiopi": "certified",
  "departments": [
    "69"
  ],
  "maxResults": 20
}' |
apify call yck69/french-training-organisations --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,yck69/french-training-organisations"
        }
    }
}
```

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/wcLvviMcgMcEA26BK/builds/VFKYECEfU1ISWF2gQ/openapi.json
