# France Lobbying & Officials Scraper - HATVP (`dltik/hatvp-fr-scraper`) Actor

Search the official HATVP transparency open data: the AGORA lobbying registry (representatives, SIREN, budget band, targeted decisions, domains) plus public-officials declarations (interests, mandate, function). Filter by name or organisation. For compliance, public affairs, journalism. $3/1K.

- **URL**: https://apify.com/dltik/hatvp-fr-scraper.md
- **Developed by:** [Walid](https://apify.com/dltik) (community)
- **Categories:** Business, Lead generation, News
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$3.00 / 1,000 record scrapeds

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## France Lobbying & Public Officials Scraper — HATVP Transparency API

> Query the **official HATVP open data** (Haute Autorité pour la Transparence de la Vie Publique). Two datasets in one actor: the **AGORA lobbying registry** (interest representatives, SIREN, declared activities, budget band, targeted public decisions and domains) and the **declarations of public officials** (interests/assets, mandate, function, deposit date). Filter by person or organisation name and get a clean, exportable dataset. **HTTP-only, $0.003 per record**.

⭐ **Bookmark this HATVP Transparency Scraper** — Apify ranks actors by bookmarks, so it directly helps the visibility of this scraper on the Apify Store.

### What is the HATVP Transparency Scraper?

The **France Lobbying & Public Officials Scraper** turns the [official HATVP open data](https://www.hatvp.fr/open-data/) into a filterable, exportable dataset. The HATVP is the independent French authority that publishes, as open data, both the **register of interest representatives (lobbyists)** and the **declarations of interests and assets** filed by public officials. This is already-public legal transparency data; the actor simply surfaces it as published.

The source files are large bulk dumps (a multi-megabyte XML for declarations, a 100MB+ JSON for the lobbying registry). This actor **streams and parses them**, applies your filter, and returns one clean row per record — so you never have to download or parse the raw files yourself.

### Why it matters: compliance, public affairs and journalism

Anyone doing lobbying intelligence, public-affairs mapping, compliance due diligence or investigative journalism needs structured access to the HATVP. Who is registered to lobby which ministry? How much do they spend? Which public decisions are they targeting? Which officials have declared which interests? The answers are public but locked in bulk files — this scraper makes them queryable.

### Use cases

- **Public affairs / lobbying intelligence** — map who lobbies on a topic, their budget band and targeted decisions.
- **Compliance & due diligence** — check whether a counterparty is a registered interest representative.
- **Investigative journalism** — cross-reference officials' declared interests and lobbying activity.
- **Competitive intelligence** — see competitors' declared lobbying domains and spend bands.
- **Research** — analyse the French lobbying landscape by sector, level and budget.

### Input

```json
{
  "dataset": "lobbying",
  "query": "sanofi",
  "maxResults": 100
}
````

- `dataset` — `lobbying` (AGORA registry) or `declarations` (public officials).
- `query` — person/organisation keyword. Lobbying matches name or SIREN; declarations match declarant name, function or organe.
- `maxResults` — cap on rows (aliases `limit`, `max`).

### Output

**Lobbying** (one row per interest representative, latest filed exercise):

```json
{
  "type": "lobbying_representative",
  "denomination": "SANOFI-AVENTIS GROUPE",
  "siren": "403335938",
  "category": "Société commerciale et civile",
  "exercise_year": "2022",
  "budget_band": "> = 1 250 000 euros et < 1 500 000 euros",
  "activities_count": 15,
  "domains": ["Médicaments", "Recherche et innovation"],
  "targeted_decisions": ["Lois, y compris constitutionnelles", "Actes réglementaires"],
  "sectors": ["Santé", "Commerce extérieur"],
  "city": "PARIS"
}
```

**Declarations** (one row per declaration):

```json
{
  "type": "declaration",
  "declarant_name": "Joelle ABADIE",
  "declaration_type": "Déclaration d'intérêts",
  "mandate_type": "Elu départemental",
  "function": "vice-Président titulaire d'une délégation",
  "organe": "Hautes-Pyrénées (65)",
  "deposit_date": "20/09/2021 13:41:36",
  "uuid": "8e8182a2-...",
  "document_url": "https://www.hatvp.fr/fiche-nominative/?declaration=8e8182a2-..."
}
```

### Pricing

**PAY\_PER\_EVENT — $0.003 per record** (= $3 per 1,000). Free actor starts. No charge when nothing matches.

### FAQ — HATVP open data

**Where does the data come from?** The official HATVP open data (hatvp.fr/open-data): the AGORA lobbying registry JSON and the declarations XML. Public legal-transparency data, no key required.

**Is this legal / GDPR-safe?** Yes — these are already-public legal declarations published by the HATVP itself. The actor surfaces only the published fields; personal data the HATVP withholds ("Données non publiées") is returned as null.

**Which lobbying year is returned?** The most recent filed exercise that has activity or a budget band, so empty latest-year filings don't hide a representative's real record.

**Can I export everything?** Yes — leave `query` empty and set `maxResults` high. Streaming keeps memory flat even on the large source files.

***

⭐ **Found this useful? Bookmark this HATVP Transparency Scraper** — it's the strongest signal for Apify Store ranking.

#### Related actors

- [RNE Elected Officials Scraper](https://apify.com/dltik/rne-elus-fr-scraper) — French mayors, councillors, MPs and senators
- [France Public Administration Directory Scraper](https://apify.com/dltik/annuaire-administration-fr-scraper) — 94K+ public bodies with contacts
- [Pappers Sirène Scraper](https://apify.com/dltik/pappers-sirene-scraper) — 26M French companies (SIREN/SIRET)

License: MIT · Author: [dltik](https://apify.com/dltik)

# Actor input Schema

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

Which HATVP open dataset to scrape. 'lobbying' = the AGORA registry of interest representatives (lobbyists). 'declarations' = interest/asset declarations of public officials.

## `query` (type: `string`):

Filter by a person or organisation name (case/accent-insensitive). For lobbying it matches the representative name or SIREN; for declarations it matches the declarant name, function or organe. Leave empty to browse from the top.

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

Max records to return. Aliases accepted: 'limit', 'max'. Each record is charged at the per-event price - start small. The source files are large and streamed, so the first rows take a few seconds.

## `proxyConfig` (type: `object`):

Optional. The HATVP open-data files have no anti-bot, so proxy is rarely needed.

## Actor input object example

```json
{
  "dataset": "lobbying",
  "maxResults": 50,
  "proxyConfig": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

HATVP records.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("dltik/hatvp-fr-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("dltik/hatvp-fr-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call dltik/hatvp-fr-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=dltik/hatvp-fr-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "France Lobbying & Officials Scraper - HATVP",
        "description": "Search the official HATVP transparency open data: the AGORA lobbying registry (representatives, SIREN, budget band, targeted decisions, domains) plus public-officials declarations (interests, mandate, function). Filter by name or organisation. For compliance, public affairs, journalism. $3/1K.",
        "version": "1.0",
        "x-build-id": "eA8oTtCN1GMzeGBCK"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/dltik~hatvp-fr-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-dltik-hatvp-fr-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/dltik~hatvp-fr-scraper/runs": {
            "post": {
                "operationId": "runs-sync-dltik-hatvp-fr-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/dltik~hatvp-fr-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-dltik-hatvp-fr-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "dataset": {
                        "title": "Dataset",
                        "enum": [
                            "lobbying",
                            "declarations"
                        ],
                        "type": "string",
                        "description": "Which HATVP open dataset to scrape. 'lobbying' = the AGORA registry of interest representatives (lobbyists). 'declarations' = interest/asset declarations of public officials.",
                        "default": "lobbying"
                    },
                    "query": {
                        "title": "Name / organisation keyword",
                        "type": "string",
                        "description": "Filter by a person or organisation name (case/accent-insensitive). For lobbying it matches the representative name or SIREN; for declarations it matches the declarant name, function or organe. Leave empty to browse from the top."
                    },
                    "maxResults": {
                        "title": "Max records",
                        "minimum": 1,
                        "maximum": 20000,
                        "type": "integer",
                        "description": "Max records to return. Aliases accepted: 'limit', 'max'. Each record is charged at the per-event price - start small. The source files are large and streamed, so the first rows take a few seconds.",
                        "default": 50
                    },
                    "proxyConfig": {
                        "title": "Proxy (rarely needed)",
                        "type": "object",
                        "description": "Optional. The HATVP open-data files have no anti-bot, so proxy is rarely needed.",
                        "default": {
                            "useApifyProxy": false
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
