# French Lawyers · CNB Directory Emails (`corent1robert/ordre-avocats-france-annuaire`) Actor

Export French lawyers from the official CNB national register. Filter by barreau, city, specialty. Get email, phone, firm, SIREN — ~99% emails. Open data, no login. Lawyers or unique cabinets.

- **URL**: https://apify.com/corent1robert/ordre-avocats-france-annuaire.md
- **Developed by:** [Corentin Robert](https://apify.com/corent1robert) (community)
- **Categories:** Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.40 / 1,000 lawyer or cabinet contacts

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 web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## French Lawyers · CNB Directory Contacts

Build a **clean outbound / CRM list of French avocats** from the **official Conseil national des barreaux (CNB) national register** — not PagesJaunes noise, not scraped LinkedIn guesses.

**~81,000 lawyers · ~99.7% emails · ~93% phones · ~88% SIREN · 164 barreaux.** Updated monthly. Open licence (Etalab 2.0).

**No login. No API key. No browser. No residential proxy bill.**

> Compared to marketplace “seller Impressum” scrapers: those fight WAF with Chrome + residential and often miss emails. This Actor reads the **same official file legaltech ops already trust** — structured, cheap, and nearly complete on email.

### Who is this for?

| You are… | Typical goal | Suggested setup |
|---|---|---|
| Legaltech / cabinet software | Prospect list of decision-makers by barreau | Barreau = PARIS or LYON · **Outreach** view |
| RC pro insurer / broker | Firms to underwrite or renew | Mode **Unique cabinets** · dept 75 / 69 |
| Training / CLE / éditeur | Attorneys in a practice area | Specialty = `Droit du travail` · **Require specialty** |
| SDR / agency selling to cabinets | Fresh email + phone file | Barreau + **Require email** |
| Data / ops | Monthly refresh of a territory | Max items = 0 · schedule |

**What you get by default:** name, official email, phone, firm, address, barreau, city, department, SIREN/SIRET when present, languages, specialties when published.

**When to switch to Unique cabinets:** firm-level CRM (one row per SIREN with `lawyer_count`) instead of one row per avocat.

### How to use

1. Open the Actor in Apify Console.
2. Keep **Barreau = PARIS** and **Max items = 50** for a first run — or set your market.
3. Optional: department (`75`), city, specialty keyword (`Droit fiscal`), **Require email**.
4. Click **Start**. Export JSON / CSV / Excel.

**Max items = 0** → all matches (Free plan still capped at **100** rows / run).

### Ready-made examples (published tasks)

| Example | Best for |
|---------|----------|
| [Paris lawyers · emails](https://apify.com/corent1robert/ordre-avocats-france-annuaire/examples/paris-lawyers-emails-crm) | Flagship Paris outbound |
| [Lyon cabinets](https://apify.com/corent1robert/ordre-avocats-france-annuaire/examples/lyon-cabinets-unique-firms) | Firm-level CRM · Lyon |
| [Labour-law specialists](https://apify.com/corent1robert/ordre-avocats-france-annuaire/examples/labour-law-specialists-fr) | Niche specialty (Droit du travail) |
| [Hauts-de-Seine · phone](https://apify.com/corent1robert/ordre-avocats-france-annuaire/examples/hauts-de-seine-lawyers-phone) | Dept 92 · phone-ready |

### What it extracts

| Category | Fields |
|----------|--------|
| Identity | `full_name`, `first_name`, `last_name`, `civility`, `lawyer_id` |
| Contacts | `email`, `phone`, `fax` |
| Firm | `firm_name`, `legal_form`, `siren`, `siret`, `lawyer_count` (cabinets mode) |
| Location | `address_line1`, `postal_code`, `city`, `department`, `barreau` |
| Practice | `specialties`, `specialty_primary`, `languages`, oath / practice dates |

### How much does it cost to scrape the CNB lawyer directory?

**HTTP-only open data** — compute stays low (default **1024 MB**, no residential proxy).

| | Free | Bronze | Silver | Gold | Platinum | Diamond |
|---|---|---|---|---|---|---|
| Per lawyer (PPE) | $0.002 | $0.0018 | $0.0016 | $0.0014 | $0.0012 | $0.001 |
| 50 lawyers (PPE) | **$0.10** | $0.09 | $0.08 | $0.07 | $0.06 | $0.05 |
| 1,000 lawyers (PPE) | **$2.00** | $1.80 | $1.60 | $1.40 | $1.20 | $1.00 |
| Unique cabinet row | $0.002 | $0.0018 | $0.0016 | $0.0014 | $0.0012 | $0.001 |

Free plan: **100 rows / run** to test. Full France (~81k) is a paid / uncapped run.

### Is it legal to scrape / reuse the CNB annuaire?

This Actor downloads the **official open dataset** published by the CNB on [data.gouv.fr](https://www.data.gouv.fr/datasets/annuaire-des-avocats-de-france) under **Licence Ouverte Etalab 2.0**. As with any file containing personal data, ensure your use complies with GDPR (legitimate interest / B2B outreach rules, opt-out, etc.).

### Input

| Field | Default | Notes |
|---|---|---|
| `mode` | `lawyers` | or `cabinets` |
| `barreaux` | `PARIS` | multi-select (164 CNB barreaux) |
| `departments` | — | multi-select (postal dept codes) |
| `cities` | — | free-text contains match (too many cities for a dropdown) |
| `specialties` | — | contains match on official labels |
| `keywords` | — | name / firm / email |
| `requireEmail` / `requirePhone` / `requireSpecialty` | no | quality gates |
| `excludeSalaried` | no | skip salariés |
| `maxItems` | 50 | **0** = no ceiling |

```json
{
  "mode": "lawyers",
  "barreaux": ["PARIS"],
  "maxItems": 50,
  "requireEmail": "no"
}
```

### Output

```json
{
  "lawyer_id": "095048",
  "full_name": "Hervé DUVAL",
  "email": "h.duval@duval-legal.com",
  "phone": "01 47 64 45 41",
  "firm_name": "DUVAL LEGAL",
  "siren": "531581502",
  "barreau": "PARIS",
  "city": "PARIS",
  "postal_code": "75008",
  "department": "75",
  "specialty_primary": "Droit de la sécurité sociale et de la protection sociale",
  "specialties": ["Droit de la sécurité sociale et de la protection sociale"],
  "languages": ["Français"],
  "is_salaried": false,
  "source": "cnb-open-data"
}
```

### How it works

1. Resolve the **latest** CNB CSV on data.gouv.fr.
2. Download + parse (~18 MB, UTF-8).
3. Apply your barreau / geo / specialty / quality filters.
4. Optionally aggregate unique cabinets by SIREN.
5. Export rows progressively to the dataset.

### Tips

- Start with **one barreau** — Paris alone is ~35k lawyers.
- Use **Require specialty** only when you need a niche; most lawyers leave specialty blank.
- Prefer **Unique cabinets** when selling firm licences (legaltech, RC pro).
- Schedule a monthly run after CNB’s monthly refresh.

### Limitations

- Data is only as fresh as the CNB monthly export.
- Specialty coverage is sparse (~6%).
- Address / phone quality depends on what each ordre transmitted.
- Not a substitute for RPVA / e-barreau software APIs (those need CNB référencement).

### Also available

| Actor | Best for |
|-------|----------|
| **[ORIAS Scraper](https://apify.com/corent1robert/orias-scraper)** | French insurance / finance intermediaries — emails, phones, ORIAS numbers |
| **[Notaires.fr Scraper](https://apify.com/corent1robert/notaires-fr-annuaire-scraper)** | Official notary directory — offices, phones, emails |
| **[French Accountants Scraper](https://apify.com/corent1robert/experts-comptables-annuaire-scraper)** | Expert-comptable firms by city or France-wide |
| **[RGE France Scraper](https://apify.com/corent1robert/rge-siren-enrich)** | Certified RGE artisans + named directors |

### Local development

```bash
cd ordre-avocats-france-annuaire
npm install
npm test
apify run --input-file=./input.smoke.json
```

### Support

Contact <corentin@outreacher.fr> for custom filters or CRM integrations.

# Actor input Schema

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

**Lawyers (default):** one row per avocat. **Unique cabinets:** one row per firm (SIREN) with lawyer count — better for firm-level CRM.

## `barreaux` (type: `array`):

Select one or more CNB bar associations (exact names from the official register). Leave empty for all France (use Max items carefully).

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

Optional postal department codes from the register (mainland + overseas).

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

Optional city name contains-match (free text). Too many cities for a dropdown — e.g. Lyon, Bordeaux.

## `specialties` (type: `array`):

Match official specialty labels (contains), e.g. `Droit du travail`, `Droit fiscal`, `Droit pénal`. Only ~6% of lawyers publish a specialty — high-intent niche.

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

Match name, firm, email, city or barreau (contains).

## `requireEmail` (type: `string`):

**No (default):** keep rows without email (~0.3%). **Yes:** email-only CRM lists.

## `requirePhone` (type: `string`):

**No (default).** **Yes:** only rows with a published phone.

## `requireSpecialty` (type: `string`):

**No (default).** **Yes:** only lawyers with at least one official specialty.

## `excludeSalaried` (type: `string`):

**No (default).** **Yes:** keep independent / firm partners only (skip salariés).

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

Row ceiling. Default **50**. **0** = no ceiling (all matches). Free plans capped at 100 / run.

## Actor input object example

```json
{
  "mode": "lawyers",
  "barreaux": [
    "PARIS"
  ],
  "requireEmail": "no",
  "requirePhone": "no",
  "requireSpecialty": "no",
  "excludeSalaried": "no",
  "maxItems": 50
}
```

# Actor output Schema

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

Name, email, phone, firm, barreau

## `outreachCrm` (type: `string`):

Email-first CRM view

## `cabinets` (type: `string`):

Firm-level rows

## `dataset` (type: `string`):

All rows

## `output` (type: `string`):

No description

## `runLog` (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 = {
    "barreaux": [
        "PARIS"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("corent1robert/ordre-avocats-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 = { "barreaux": ["PARIS"] }

# Run the Actor and wait for it to finish
run = client.actor("corent1robert/ordre-avocats-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 '{
  "barreaux": [
    "PARIS"
  ]
}' |
apify call corent1robert/ordre-avocats-france-annuaire --silent --output-dataset

```

## MCP server setup

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