# France Training Organizations – Qualiopi, Specialties, Size (`bstandco/france-training-organizations`) Actor

French training organisations from the official Ministry of Labour list: Qualiopi certifications, training specialties, trainees and trainers per year, address and SIREN. Filter by area, specialty and size. Sole traders excluded. Updated daily.

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

## Pricing

from $2.80 / 1,000 training organizations

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?

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, Specialties, Size

Get **French training organisations** (organismes de formation) from the **official public list of the Ministry of Labour**, updated **every day**: more than **150,000 declared organisations**, with their **Qualiopi certifications**, **training specialties**, **number of trainees and trainers per year**, address, SIREN and activity declaration number.

Filter by **specialty** (IT, languages, health, sales…), **Qualiopi certification**, **area**, **name** and **size**. Results are sorted by number of trainees, largest first.

### Who is it for?

- **LMS, e-learning and HR-tech vendors**: build a list of training organisations to contact, by specialty and size.
- **Training organisations**: map competitors in your region and specialty.
- **Companies and HR teams**: find Qualiopi-certified providers (needed for CPF and public funding) near you.
- **Consultants and researchers**: measure the training market by specialty and area.

### What data do you get?

| Field | Example |
|---|---|
| `declarationNumber`, `name`, `siren`, `siret` | activity declaration number (NDA), DEVOTEAM G CLOUD, SIREN and SIRET |
| `address`, `postalCode`, `city`, `department`, `region` | location (when published) |
| `latitude`, `longitude` | GPS (when geocoded) |
| `qualiopi`, `certifications` | true, \["Actions de formations", "VAE"…] |
| `specialties` | \[{ code: "326", label: "Informatique, traitement de l'information…" }] |
| `trainees`, `traineesFromOtherOrganizations`, `trainers` | yearly figures from the last declaration |
| `fiscalYearStart`, `fiscalYearEnd`, `lastDeclarationDate` | declaration period |
| `companyPageUrl`, `sources` | official company page and data sources |

### How to use

Qualiopi-certified IT training organisations in Lyon:

```json
{
  "specialtyKeywords": ["informatique"],
  "cities": ["Lyon"],
  "onlyQualiopi": true,
  "maxResults": 200
}
```

Skills-assessment providers (bilans de compétences) in Corsica:

```json
{
  "certifications": ["skills_assessment"],
  "departments": ["2A", "2B"]
}
```

Large organisations (5,000+ trainees a year, 50+ trainers):

```json
{
  "onlyQualiopi": true,
  "minTrainees": 5000,
  "minTrainers": 50
}
```

**Tips**

- Specialty words are in French and match the official specialty labels (NSF nomenclature).
- Some large national organisations do not publish an address in the list: filter by name or specialty rather than by city to find them.

### Pricing

Pay per result: you are charged once per organisation returned. Skipped organisations (see below) are free.

### Privacy

Many trainers work as **sole traders**: they are people, so they are **never returned**. Each SIREN is checked against the official company register, and sole traders, as well as SIRENs that cannot be verified, are skipped. Companies are returned under their registered name, which, as in the official register, can include a founder's name.

### Sources

- **Liste publique des organismes de formation** (DGEFP, Ministry of Labour), under the **Licence Ouverte v2.0 (Etalab)**.
- **API Recherche d'entreprises** (DINUM), used to check the legal status.

*Not affiliated with the French government.*

# Actor input Schema

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

Words in the declared training specialties, in French, e.g. informatique, langues, santé, commerce, sécurité.

## `certifications` (type: `array`):

Keep organisations certified for all of these Qualiopi categories.

## `onlyQualiopi` (type: `boolean`):

Keep only organisations holding at least one Qualiopi certification (needed for public and CPF funding).

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

Department numbers, e.g. 15, 69, 2A, 974.

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

French postal codes, e.g. 75008.

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

City names, e.g. Lyon, Bordeaux. Paris, Lyon and Marseille include their arrondissements.

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

Words in the organisation name, e.g. academy, formation, CFA.

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

Keep organisations that trained at least this many people in their last declared year.

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

Keep organisations with at least this many trainers.

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

Maximum number of organisations returned. Results are sorted by number of trainees, largest first.

## Actor input object example

```json
{
  "specialtyKeywords": [
    "informatique"
  ],
  "onlyQualiopi": false,
  "departments": [
    "69"
  ],
  "maxResults": 50
}
```

# Actor output Schema

## `overview` (type: `string`):

Training organisations with city, Qualiopi status, size and SIREN.

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

Every field: address, GPS, specialties, certifications, yearly figures (JSON).

# 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 = {
    "specialtyKeywords": [
        "informatique"
    ],
    "departments": [
        "69"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("bstandco/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 = {
    "specialtyKeywords": ["informatique"],
    "departments": ["69"],
}

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,bstandco/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/qxXsnFjxBChT8Ogw0/builds/CeUEYS95bWFJMhchi/openapi.json
