# Commissaires de Justice France · Official Directory Emails (`corent1robert/commissaires-justice-france-annuaire`) Actor

Export French commissaires de justice (former huissiers and commissaires-priseurs) from the official CNCJ register: office email, phone, website, address, GPS, team names, property management, syndic and auction services. Filter by department. One row per office or per professional. No login.

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

## Pricing

from $2.10 / 1,000 office with contacts

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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

## Commissaires de Justice France · Official Directory Emails

Turn the **official directory of the Chambre nationale des commissaires de justice (CNCJ)** into a **clean contact list**: every French commissaire de justice office (the former *huissiers de justice* and *commissaires-priseurs judiciaires*) with its **email, phone, website, address, GPS, team names and services** such as property management, syndic and judicial auctions.

**Official register. No login. No API key.**

**Free Apify plan:** 20 rows per run. Paid plans export the whole directory (about 2,200 offices, 3,700 professionals).

***

### Who is this for?

| You are… | Typical goal | Suggested setup |
|----------|--------------|-----------------|
| Legal tech / debt-collection software vendor | Prospect every office that serves documents and recovers debts | All of France, **Contacts (CRM)** view |
| Debt collection agency, credit manager, lender | Find a local commissaire de justice in each department | Your departments, one row per office |
| Property manager, landlord platform, proptech | Partner with offices that also do **gestion locative** or **syndic** | **Services offered** = Property management / Condominium management |
| Auction house, liquidation or asset buyer | Reach offices that run **judicial auctions and inventories** | **Services offered** = Judicial auctions |
| Recruiter / training organisation for the profession | Named professionals, not just offices | **One row per** = Commissaire de justice (person) |
| Lawyer, notary, insurer | Build a referral map by city | **Cities** = your cities |

**What you get by default:** one row per office with the email and phone published in the official directory, website when the office has one, street address, GPS, team list, opening hours, languages and services.

**Honest fill rates** (October 2026, 150 random offices from the directory + 20-row test run):

| Field | Fill rate |
|-------|-----------|
| Email | **~97%** (95% on a 20-office Paris sample) |
| Phone | **100%** |
| Street, postal code, city, department | 100% |
| GPS (latitude / longitude) | 99% |
| Team names (commissaires de justice of the office) | ~95% (sole practitioners without a team block get their own name) |
| Website | 54% |
| Opening hours | 51% |
| Additional activities (property management, syndic, mediation) | ~22% of offices |
| Declared specialties (digital evidence, construction defects, evictions, judicial sales...) | ~4% of offices |
| Online payment link | ~20% |

***

### Quick start

1. Pick one or more **departments** (or leave empty for all of France).
2. Click **Start**.
3. Open the **Contacts (CRM)** view and export to CSV, Excel or JSON.

That is it: about 30 seconds for a department, under 2 minutes for the whole of France.

***

### Ready-made examples

Example tasks are prepared in `published-tasks/` and will be linked here once live:

| Example | What it does |
|---------|--------------|
| Paris commissaires de justice with emails and phones | Every office in Paris (75) with email, phone and website |
| Lyon and Rhone commissaires de justice directory | Every office in Rhone (69) with address and GPS |
| French commissaires de justice: one row per professional | People output: first name, last name, titles, office email and phone |
| Bailiffs offering property management (gestion locative) | Offices doing *gestion locative* or *syndic* in Paris and inner suburbs |
| Nord commissaires de justice (huissiers) with emails | Every office in Nord (59) with email, phone, website and team |

***

### What it extracts

- **Office:** name, legal form (SELARL, SCP, SELAS, individual...), directory link, appointment form link.
- **Contact:** email, phone (international +33 format and as published), website, online payment link.
- **Location:** street, postal code, city, department code and name, latitude, longitude.
- **Team:** names of the commissaires de justice of the office and their count; flag when a commissaire-priseur judiciaire works there.
- **Services:** main activities, additional activities (property management, condominium management, mediation), declared specialties, booleans for each service.
- **People output:** first name, last name and titles (Commissaire de justice, Huissier de justice, Commissaire-priseur judiciaire, salaried) for each professional, with the office details repeated on every row.

***

### How much does it cost to scrape the commissaires de justice directory?

Pay per event: a small start fee per run, then a price per row. Rows with an email or phone (almost all of them) use the "with contact" price.

| Event | Free | Bronze | Silver | Gold | Platinum | Diamond |
|-------|------|--------|--------|------|----------|---------|
| Run started (once per run) | $0.05 | $0.05 | $0.05 | $0.05 | $0.05 | $0.05 |
| Row with email or phone | $0.0030 | $0.0027 | $0.0024 | $0.0021 | $0.0020 | $0.0020 |
| Row without contact (rare) | $0.0015 | $0.0013 | $0.0012 | $0.0010 | $0.0010 | $0.0010 |

| Scenario | Rows | Free plan | Bronze | Gold | Diamond |
|----------|------|-----------|--------|------|---------|
| One department (e.g. Paris) | ~150 | $0.05 + 20 rows max = $0.11 | $0.46 | $0.37 | $0.35 |
| Property management offices, all France | ~480 | $0.11 (20 rows) | $1.35 | $1.06 | $1.01 |
| Whole directory, one row per office | ~2,200 | $0.11 (20 rows) | $5.99 | $4.67 | $4.45 |
| Whole directory, one row per professional | ~3,700 | $0.11 (20 rows) | $10.04 | $7.82 | $7.45 |

Platform usage is included in the price.

***

### Is it legal to scrape the commissaires de justice directory?

This Actor reads the public pages of the official directory published by the Chambre nationale des commissaires de justice, the same pages anyone can open in a browser, without logging in. Commissaires de justice are public and ministerial officers whose professional contact details are published so that the public can reach them. The data is professional (office emails, office phones, office addresses), not private.

You remain responsible for how you use the data. Under the GDPR, B2B prospecting of professionals is generally allowed when the message is relevant to their profession and every message offers an easy opt-out. Do not use the data for spam, and respect the CNCJ terms of use. If in doubt, ask a lawyer.

***

### Limitations

- The directory is the source of truth: if an office has not published a website or opening hours, the field is empty.
- Emails are office mailboxes (often `@commissaire-justice.fr` or `@huissier-justice.fr`), not personal mailboxes of each professional.
- Department, city and service filters are applied while reading the directory, so a narrow filter still reads the whole directory (fast and included in the price).
- Activity and specialty labels stay in French, exactly as published (field names are in English).

***

### Input

| Field | Type | Description |
|-------|------|-------------|
| `departments` | array | Department codes (`75`, `13`, `2A`, `974`...). Empty = all of France. |
| `cities` | array | Optional city names; accents and case ignored. |
| `services` | array | `property_management`, `condominium_management`, `judicial_auctions`, `mediation`, `website`. An office matches if it offers at least one. |
| `outputMode` | string | `offices` (default) or `people`. |
| `officeUrls` | array | Refresh specific offices by pasting their directory links. Filters are ignored. |
| `maxItems` | integer | Stop after this many rows. `0` = no cap. Default 50. |

```json
{
  "departments": ["75", "92", "93", "94"],
  "services": ["property_management"],
  "outputMode": "offices",
  "maxItems": 0
}
```

API-only options: `verboseLogs` (boolean, extra debug lines).

***

### Output sample

Real row from the October 2026 test run:

```json
{
  "office_id": "4",
  "office_name": "Huis Ainter",
  "legal_form": "SELARL",
  "professionals": ["Angelina MICHEL-WAGNER"],
  "professionals_count": 1,
  "has_auctioneer": false,
  "email": "amw@huisainter.fr",
  "phone": "+33474380097",
  "phone_raw": "04.74.38.00.97",
  "website": "https://www.huisainter.fr",
  "street": "18 place du 8 mai 1945",
  "postal_code": "01500",
  "city": "AMBÉRIEU-EN-BUGEY",
  "department_code": "01",
  "department": "Ain",
  "latitude": 45.9631,
  "longitude": 5.35783,
  "languages": ["Français", "Italien"],
  "accessory_activities": ["Gestion locative"],
  "offers_property_management": true,
  "offers_judicial_auctions": false,
  "appointment_url": "https://annuaire.commissaire-justice.fr/contact-huis-ainter-4",
  "office_url": "https://annuaire.commissaire-justice.fr/huis-ainter-4",
  "scraped_at": "2026-10-10T07:31:16.204Z"
}
```

Dataset views: **Overview**, **Contacts (CRM)**, **People**, **Services & specialties**. A readable **Run log** is saved with every run.

***

### How it works

The Actor reads the list of offices published by the official directory, opens each office page over plain HTTP (no browser), reads the structured contact block and the team list, applies your filters and writes one row per office or per professional. Pages are read in small parallel batches with automatic retries.

***

### Local development

```bash
npm install
npm test                      # unit tests (node --test)
echo '{"departments":["75"],"maxItems":20}' > storage/key_value_stores/default/INPUT.json
node src/main.js              # or: apify run
```

***

### Also available

- [French Lawyers · CNB Directory Emails](https://apify.com/corent1robert/ordre-avocats-france-annuaire)
- [Notaires.fr · French Notary Offices](https://apify.com/corent1robert/notaires-fr-annuaire-scraper)
- [ORIAS · French Insurance Intermediaries](https://apify.com/corent1robert/orias-scraper)
- [French Accountants · Expert-Comptable Directory](https://apify.com/corent1robert/experts-comptables-annuaire-scraper)
- [French Companies · Search & SIREN Enrich](https://apify.com/corent1robert/recherche-entreprises-scraper)

***

### Support

Questions, a missing field or a custom export? Email **corentin@outreacher.fr** or open an issue on the Actor page.

# Changelog

This Actor's version history is a separate document: https://apify.com/corent1robert/commissaires-justice-france-annuaire/changelog.md

# Actor input Schema

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

Get offices located in these departments. Empty = all of France (about 2,200 offices).

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

Only keep offices whose city contains one of these names, e.g. Lyon, Marseille. Accents and case are ignored.

## `services` (type: `array`):

Keep offices offering at least one of these services. Empty = every office.

## `outputMode` (type: `string`):

Offices: one row per office with its team list. People: one row per commissaire de justice (first name, last name, titles) with the office contact details.

## `officeUrls` (type: `array`):

Paste office links from annuaire.commissaire-justice.fr to refresh only those offices. When filled, departments and filters are ignored.

## `maxItems` (type: `integer`):

Stop after this many rows. 0 = no cap (whole selection).

## Actor input object example

```json
{
  "departments": [
    "75"
  ],
  "outputMode": "offices",
  "maxItems": 50
}
```

# Actor output Schema

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

All exported rows (overview).

## `contacts` (type: `string`):

Email, phone, website and address per office.

## `people` (type: `string`):

One row per commissaire de justice (people output).

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

Every field for every row.

## `runLog` (type: `string`):

Readable summary of the run.

# 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": [
        "75"
    ],
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("corent1robert/commissaires-justice-france-annuaire").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": ["75"],
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("corent1robert/commissaires-justice-france-annuaire").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": [
    "75"
  ],
  "maxItems": 50
}' |
apify call corent1robert/commissaires-justice-france-annuaire --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,corent1robert/commissaires-justice-france-annuaire"
        }
    }
}
```

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/k2x3UcfRtkWWLGU4Q/builds/FfTs96j2WymM35Z22/openapi.json
