# France Training Organizations & Qualiopi Database (`jet_mythology/france-training-organizations`) Actor

Every training organisation registered in France from the official daily list: NDA, SIREN/SIRET, address, Qualiopi certification by action type, specialties, trainees and trainers. Monitor new organisations and Qualiopi gains or losses.

- **URL**: https://apify.com/jet_mythology/france-training-organizations.md
- **Developed by:** [jet_mythology](https://apify.com/jet_mythology) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 organization returneds

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

## France Training Organizations & Qualiopi Database

**Every training organisation in France with its Qualiopi status — and an alert the day one gains or loses Qualiopi.** Build prospect lists by area and specialty, or check a partner's certification.

**No code needed:** click *Start*, then download the results as **Excel, CSV or JSON**, or send them to Google Sheets, Make, Zapier or n8n. Developers can call it as an **API** or schedule it daily.

### Sample output

```json
{
  "nda": "75331187133",
  "name": "GRADES ESEA NOUVELLE-AQUITAINE",
  "siret": "13002347600018",
  "address": {
    "postalCode": "33000",
    "city": "BORDEAUX",
    "department": "33"
  },
  "qualiopi": {
    "training": true,
    "skillsAssessment": false,
    "vae": false,
    "apprenticeship": false,
    "certified": true
  },
  "specialties": [
    {
      "code": "331",
      "label": "Santé"
    }
  ],
  "trainees": 44751,
  "trainers": 31
}
```

*Real result from 12 October 2026 (abridged).*

### Details

Get **every training organisation registered in France** from the official public list (updated daily by the Ministry of Labour): declaration number (NDA), SIREN/SIRET, address, **Qualiopi certification by action type**, training specialties, number of trainees and trainers.

Turn on **monitor mode** and schedule it: each run returns only what changed — new organisations, organisations removed from the list, and **Qualiopi gained or lost**.

### Who uses it

- **Software vendors** (LMS, training management, e-signature, CPF tools): build targeted lists of training providers by size, region and specialty.
- **Qualiopi consultants and auditors**: find organisations that are not certified, or that just lost their certification.
- **Funders, OPCOs, HR and procurement**: verify a provider's declaration and Qualiopi status before buying.
- **Researchers and journalists**: map the French training market.

### What you get

| Field | Description |
|---|---|
| `nda`, `previousNdas` | Official declaration number(s) |
| `name`, `siren`, `siret` | Legal identity |
| `address` | Street, postal code, city, département, region code |
| `qualiopi` | `certified`, plus `training`, `skillsAssessment` (bilan de compétences), `vae`, `apprenticeship` |
| `specialties` | Declared training specialties (NSF code and label) |
| `trainees`, `traineesSubcontracted`, `trainers` | From the last annual declaration |
| `lastDeclarationDate`, `fiscalYearStart`, `fiscalYearEnd` | Declaration dates |
| `otherFields` | Every other source column, unchanged |
| `changeType` | Monitor mode: `new`, `removed`, `qualiopi-gained`, `qualiopi-lost`, `qualiopi-changed` |

Results are sorted biggest first (by number of trainees). A summary is saved under `OUTPUT`.

### Examples

**Qualiopi-certified providers in Gironde with at least 50 trainees a year**

```json
{ "qualiopiOnly": true, "departments": ["33"], "minTrainees": 50 }
```

**Language schools in Île-de-France**

```json
{ "regionCodes": ["11"], "specialtyKeywords": ["langues"] }
```

**Prospects for a Qualiopi consultant**

```json
{ "notCertifiedOnly": true, "minTrainees": 20, "departments": ["75", "92", "93", "94"] }
```

**Weekly alert on Qualiopi losses in your region**

```json
{ "regionCodes": ["75"], "monitorChanges": true, "monitorKey": "na-weekly", "monitorFirstRun": "baselineOnly" }
```

### Pricing

Pay per result: you pay for each organisation returned, nothing for those filtered out. In monitor mode you only pay for changes. Use `maxResults` and the maximum cost per run to cap spending.

### Good to know

- The list contains organisations whose declaration is active and whose annual report (bilan pédagogique et financier) is up to date. Organisations leave it when they cease activity, when their declaration is cancelled or when it lapses.
- Trainee and trainer counts are self-declared in the annual report.
- Contact details (e-mail, phone) are not part of the official list.
- If you use the data for B2B prospecting, follow the GDPR rules that apply to your outreach.

### Source and licence

Liste publique des organismes de formation (article L.6351-7-1 du Code du travail), Ministère du Travail, published on data.gouv.fr under Licence Ouverte. This Actor is independent and not affiliated with the French administration.

# Actor input Schema

## `qualiopiOnly` (type: `boolean`):

Keep only organisations holding a valid Qualiopi certification.

## `qualiopiActions` (type: `array`):

Keep organisations certified for at least one of these action types.

## `notCertifiedOnly` (type: `boolean`):

Keep only organisations WITHOUT Qualiopi (e.g. prospects for Qualiopi consultants and auditors).

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

Département codes from the postal code, e.g. '33', '75', '2A', '974'.

## `regionCodes` (type: `array`):

INSEE region codes, e.g. '75' (Nouvelle-Aquitaine), '11' (Île-de-France).

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

Exact city names (case- and accent-insensitive).

## `nameKeywords` (type: `array`):

Keep organisations whose name contains one of these words.

## `specialtyKeywords` (type: `array`):

Matches the declared specialty codes (NSF) or labels, e.g. 'langues', 'informatique', 'santé', '330'.

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

Based on the last annual declaration (bilan pédagogique et financier).

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

Based on the last annual declaration.

## `sirens` (type: `array`):

Check specific companies by SIREN (9 digits) or SIRET (14 digits).

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

Upper limit of organisations output (and charged) per run. Biggest first (by number of trainees).

## `includeOtherFields` (type: `boolean`):

Adds every source column not mapped to a named field under 'otherFields'.

## `monitorChanges` (type: `boolean`):

Remembers the previous run and outputs only new organisations, removed ones and Qualiopi gains or losses (field 'changeType'). Schedule it daily or weekly.

## `monitorKey` (type: `string`):

Use one name per saved search you monitor.

## `monitorFirstRun` (type: `string`):

What to do the first time a monitor runs.

## `reportRemoved` (type: `boolean`):

In monitor mode, also output organisations that left the list (ceased, cancelled or lapsed declaration).

## `csvUrl` (type: `string`):

Leave empty: the current file is found automatically on data.gouv.fr.

## Actor input object example

```json
{
  "qualiopiOnly": false,
  "notCertifiedOnly": false,
  "departments": [
    "33"
  ],
  "maxResults": 1000,
  "includeOtherFields": true,
  "monitorChanges": false,
  "monitorKey": "default",
  "monitorFirstRun": "outputAll",
  "reportRemoved": true
}
```

# Actor output Schema

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

No description

## `summary` (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 = {
    "departments": [
        "33"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("jet_mythology/france-training-organizations").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 = { "departments": ["33"] }

# Run the Actor and wait for it to finish
run = client.actor("jet_mythology/france-training-organizations").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 '{
  "departments": [
    "33"
  ]
}' |
apify call jet_mythology/france-training-organizations --silent --output-dataset

```

## MCP server setup

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

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/OpXDdOPPdXupjdgj8/builds/quOjrvo6UOj5l2WKL/openapi.json
