# REGAFI · French Banks, PSPs & Insurers (`corent1robert/regafi-scraper`) Actor

Export licensed banks, payment-service agents and insurers from the official ACPR REGAFI register. SIREN, LEI, CIB, authorisations and mandates — one row per entity. Public register. No API key.

- **URL**: https://apify.com/corent1robert/regafi-scraper.md
- **Developed by:** [Corentin Robert](https://apify.com/corent1robert) (community)
- **Categories:** Business, 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 register rows

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#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

## REGAFI Scraper · French Banks, PSPs & Insurers

**Export licensed banks, payment-service agents, e-money firms and insurance undertakings from the official [ACPR REGAFI register](https://www.regafi.fr) — SIREN, LEI, CIB, authorisations and mandates in a KYC-ready dataset.**

Paste SIRENs you already have, or export an entire category (payment-service agents, credit institutions, and more). One row per entity — JSON, CSV, or Excel from Apify Console.

**No login. No API key. No Banque de France developer account.**

**REGAFI does not publish emails or phones.** This Actor never invents them. For insurance and banking *intermediaries* (brokers, CIF), use [ORIAS Scraper](https://apify.com/corent1robert/orias-scraper).

**Free plan: 20 rows / run.** Paid plans follow your PPE budget.

***

### Who is this for?

| You are… | Typical goal | Suggested setup |
|----------|--------------|-----------------|
| **Payment / PSP vendor** | Prospect list of Agent PSP in France | Catalog · Payment service agents · **Register** |
| **Compliance / KYC team** | Confirm a bank or PSP is on the ACPR register | **Lookup** · paste SIRENs |
| **Banking partnership team** | Licensed payment institutions with address and licences | Catalog · Payment institutions · **Profile** |
| **Insurance analyst** | Undertakings (not brokers) with Solvency context | Catalog · Non-life / Life · Profile |
| **Data / ops** | Full sector snapshot without mandate payload | Catalog · **All banking** · Register |
| **Risk / monitoring** | New and removed Agent PSP week over week | **Monitor** · Payment service agents |

**What you get by default (Register):** registered name, trading names, SIREN when published, LEI, CIB, category, city, country, active/retiring flag, and a link back to the public register.

**Profile rows** add street address, legal form, compact authorisations, Agent PSP principals/agents, and passport countries — still **no email or phone** (the register does not store them).

**Typical fill rates (live public register, August 2026):**

| Field | Payment service agents (sample) | Credit institutions |
|-------|---------------------------------|---------------------|
| Name | 100% | 100% |
| City / country | ~100% | ~100% |
| SIREN | Mixed — many agents are natural persons | ~100% of French legal entities |
| LEI / CIB | Rare on agents | High on credit institutions |
| Email / phone | **0%** (not published) | **0%** (not published) |

***

### Quick start

**Three minutes to your first results:**

1. Open the Actor and click **Try** (preset: 20 payment-service agents).
2. Leave **Catalog** and **Register**.
3. Click **Start** — rows appear in the dataset as they are exported.

**Look up a known bank (KYC):**

```json
{
  "mode": "lookup",
  "identifiers": ["662042449", "R0MUWSFPU8MPRO8K5P83"],
  "exportLevel": "profile"
}
```

**Full payment-institution list with licences:**

```json
{
  "mode": "catalog",
  "categories": ["payment-institution"],
  "exportLevel": "profile",
  "maxItems": 0
}
```

***

### Ready-made examples (published tasks)

| Example | Best for |
|---------|----------|
| [Export French payment-service agents from REGAFI](https://apify.com/corent1robert/regafi-scraper/examples/psp-agents-france-sample) | First catalog run |
| [Export French credit institutions from REGAFI](https://apify.com/corent1robert/regafi-scraper/examples/credit-institutions-france) | Banking KYC list |
| [Validate SIREN registration on the REGAFI register](https://apify.com/corent1robert/regafi-scraper/examples/validate-siren-regafi-kyc) | Compliance lookup |
| [Payment institutions with ACPR licences and mandates](https://apify.com/corent1robert/regafi-scraper/examples/payment-institutions-licences) | Profile / mandate file |
| [Monitor weekly Agent PSP changes on REGAFI](https://apify.com/corent1robert/regafi-scraper/examples/monitor-psp-agents-weekly) | Scheduled watch |

***

### What does it extract?

| Category | Fields |
|----------|--------|
| **Identity** | Name, trading names, acronym, REGAFI id, legal type, legal form |
| **Identifiers** | SIREN, LEI, CIB (and all published CIB codes) |
| **Classification** | Sector (Banque / Assurance), categories, authorization nature |
| **Location** | Street (Profile), zip, city, country, full address line |
| **Status** | Active / being retired, `isRegistered`, `registrationStatus` |
| **Licences (Profile)** | Compact authorisations, counts |
| **Mandates (Profile)** | Agents and principals (name, SIREN, mandate label, dates) |
| **Passports (Profile)** | Inbound / outbound passport countries |
| **Monitor** | `changeType` (`added` / `removed` / `baseline_seeded`) |

**Dataset views:** **Overview**, **KYC / compliance**, **Licences & mandates**.

This Actor never fills `email` or `phone`. If you need broker contacts, use ORIAS.

***

### Modes

| Mode | You provide | You get |
|------|-------------|---------|
| **catalog** | Category codes (Agent PSP, credit institutions, …) | Every matching entity, up to **Max rows** |
| **lookup** | SIRENs, CIB, LEI, or names | Registration status (+ optional profile) |
| **monitor** | Categories | New and removed entities vs the previous run |

Legacy input still works: `categories` / `full` → catalog, `validate` / `enrich` → lookup, old `34-TBR07` codes → the new category keys, `enrich: false` → Register.

***

### Export levels

| Level | Extra register calls | Best for |
|-------|----------------------|----------|
| **register** | Search index only | Fast lists, ~22k Agent PSP |
| **profile** | Full entity file | Address, licences, mandates |

***

### Sample output

**Catalog / Lookup (Register) — BNP Paribas:**

```json
{
  "referenceId": "20556",
  "name": "BNP Paribas",
  "siren": "662042449",
  "lei": "R0MUWSFPU8MPRO8K5P83",
  "cib": "30004",
  "entityType": "Banque",
  "category": "Établissement de Crédit",
  "activities": ["Établissement de Crédit"],
  "city": "PARIS",
  "country": "FRANCE",
  "status": "Active",
  "isRegistered": true,
  "registrationStatus": "Registered",
  "url": "https://www.regafi.fr/pages/resultats/?q=662042449"
}
```

**Profile (street + mandates) — payment-service agent:**

```json
{
  "referenceId": "50751",
  "name": "CHANGE MEDITERRANEE",
  "siren": "378484877",
  "category": "Changeur manuel",
  "activities": ["Changeur manuel", "Agent PSP"],
  "address": "17 avenue Jean Médecin",
  "postalCode": "06000",
  "city": "NICE",
  "country": "FRANCE",
  "addressFull": "17 avenue Jean Médecin, 06000 NICE, FRANCE",
  "principalCount": 1,
  "url": "https://www.regafi.fr/pages/resultats/?q=378484877"
}
```

**Lookup miss:**

```json
{
  "siren": "123456789",
  "isRegistered": false,
  "registrationStatus": "Not registered",
  "query": "123456789",
  "queryKind": "siren"
}
```

***

### How much does it cost to scrape REGAFI?

HTTP-only reads of the public register keep compute low. **Pay-per-event** — platform usage is billed to the user.

| Event | Price |
|-------|-------|
| Run start (`apify-actor-start`) | $0.00005 |
| Register row | $0.001 (~$1 / 1,000) |
| Profile row (licences + mandates) | $0.0015 (~$1.50 / 1,000) |
| Lookup row (KYC) | $0.002 (~$2 / 1,000) |
| Monitor delta row | $0.0015 (~$1.50 / 1,000) |

| Scenario | Approx. cost |
|----------|----------------|
| **20 register rows (first test)** | **~$0.02** |
| **1,000 register rows** | **~$1.00** |
| **1,000 profile rows** | **~$1.50** |
| **~22,000 Agent PSP (register)** | **~$22** |

Totals include the one-time start charge. Free Apify accounts are capped at **20 rows per run** even if **Max rows** is `0`.

***

### Input

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `mode` | string | `catalog` | `catalog`, `lookup`, or `monitor` |
| `categories` | string\[] | `["psp-agent"]` | Catalog / Monitor categories |
| `identifiers` | string\[] | `[]` | Lookup: SIREN, CIB, LEI, or name |
| `exportLevel` | string | `register` | `register` or `profile` |
| `maxItems` | integer | `0` (`20` in Console) | **0** = no cap. Free plan: 20 / run |
| `filterDepartment` | string | — | Zip prefix, e.g. `69` |
| `filterZipPrefix` | string | — | Longer zip prefix |
| `filterNameContains` | string | — | Name contains |

***

### How it works

1. Read the official public REGAFI datasets (unified ACPR bank + insurance portal, live since July 2026).
2. Filter by category, zip, or pasted identifiers.
3. Optionally load the full entity file for address, licences and mandates.
4. Push one dataset row per entity. Missing register fields stay `null` — they are never invented.

You do **not** need a key from [developer.regafi.banque-france.fr](https://developer.regafi.banque-france.fr). That API is a separate ACPR product.

***

### Also available

| Actor | What it covers |
|-------|----------------|
| [ORIAS Scraper](https://apify.com/corent1robert/orias-scraper) | Insurance and finance **intermediaries** (COA, CIF, COBSP) with **emails and phones** |

REGAFI = licensed **institutions and agents** (ACPR). ORIAS = **intermediaries**. Most KYC stacks need both.

***

### Limitations

- **No emails, no phones** on REGAFI. Do not expect CRM inboxes from this Actor.
- Many **Agent PSP** rows are natural persons without a SIREN.
- The July 2026 portal replaced the old SPIP search URLs (`spip.php?page=results`). This Actor targets the current register.
- **Monitor** stores a baseline in a named key-value store (`regafi-monitor`) on Apify Cloud so weekly runs can diff.

***

### Legality

This Actor reads **public** pages and datasets of the ACPR REGAFI / REFASSU portal. Use the data for legitimate compliance, research, and B2B purposes. You are responsible for how you store and process personal data (many Agent PSP records are named individuals).

***

### Local development

```bash
cd regafi-scraper
npm install
npm test
apify run --purge --input-file=./.actor/INPUT.json
```

Always pass **`--input-file=./.actor/INPUT.json`**. A leftover root `input.json` or `storage/key_value_stores/default/INPUT.json` can override the Try preset.

***

### Changelog

See [CHANGELOG.md](CHANGELOG.md).

***

### Support

Questions or a custom pipeline (ORIAS + REGAFI merge, scheduled KYC, CRM mapping): <corentin@outreacher.fr>.

# Actor input Schema

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

**Catalog** — export everyone in a REGAFI category (best first run).

**Lookup** — check whether SIRENs, CIB codes or LEIs are on the register (KYC).

**Monitor** — compare today's register to your last run and list additions and removals.

## `categories` (type: `array`):

Select one or more categories to export or monitor. **Payment service agents** is the largest list (~22k). **All banking** covers every bank and payment entity.

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

One identifier per line — a 9-digit SIREN (e.g. `662042449`), a 5-digit CIB, a 20-character LEI, or a registered name.

## `exportLevel` (type: `string`):

**Register** — identity, SIREN, LEI, CIB, city and category. Fastest for large exports.

**Profile** — adds street address, legal form, authorisations, mandates and passports.

## `filterDepartment` (type: `string`):

Keep rows in this French department — matches the start of the zip code (e.g. `69` for Rhône).

## `filterZipPrefix` (type: `string`):

Keep rows whose zip code starts with this prefix (e.g. `6900` for Lyon).

## `filterNameContains` (type: `string`):

Keep rows whose registered or trading name includes this text (case-insensitive).

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

Caps how many entities are exported per run. **20** is a safe first test. Set **0** for no limit (full category). Free plan: 20 / run.

## `monitorSeedBaseline` (type: `boolean`):

Monitor: persist today's register without listing every entity as new.

## `maxConcurrency` (type: `integer`):

Parallel register requests (1–20). API only.

## `verboseLogs` (type: `boolean`):

Enable technical debug lines in RUN\_LOG. API only.

## `filterCountry` (type: `string`):

Keep rows whose country matches this register label (e.g. FRANCE). API only.

## Actor input object example

```json
{
  "mode": "catalog",
  "categories": [
    "psp-agent"
  ],
  "exportLevel": "register",
  "maxItems": 20,
  "monitorSeedBaseline": false,
  "maxConcurrency": 8,
  "verboseLogs": false
}
```

# Actor output Schema

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

No description

## `kyc` (type: `string`):

No description

## `licences` (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 = {
    "mode": "catalog",
    "categories": [
        "psp-agent"
    ],
    "exportLevel": "register",
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("corent1robert/regafi-scraper").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": "catalog",
    "categories": ["psp-agent"],
    "exportLevel": "register",
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("corent1robert/regafi-scraper").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": "catalog",
  "categories": [
    "psp-agent"
  ],
  "exportLevel": "register",
  "maxItems": 20
}' |
apify call corent1robert/regafi-scraper --silent --output-dataset

```

## MCP server setup

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

```

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/wunLIec2ufN8MCO7h/builds/w9ScDiE2xahpldVbh/openapi.json
