# Lobby Register Germany + EU – Lobbyists, Spend & Interests (`dach-open-data/lobby-register-de-eu`) Actor

Search the official German Bundestag lobby register and the EU Transparency Register in one call: organisations, lobbying spend, policy interests, legislative files, contacts. Official open data, unified JSON.

- **URL**: https://apify.com/dach-open-data/lobby-register-de-eu.md
- **Developed by:** [DACH Open Data](https://apify.com/dach-open-data) (community)
- **Categories:** Lead generation, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.50 / 1,000 results

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

## Lobby Register Germany + EU: lobbyists, lobbying spend and policy interests

**Find out who lobbies on a topic, a law or a company, and how much they spend.** This Actor searches both official registers in one run: the **German Bundestag lobby register** (Lobbyregister, about 7,000 entries) and the **EU Transparency Register** (about 17,900 organisations). It returns one clean JSON row per organisation with:

- declared annual lobbying spend in EUR
- policy fields and the legislative files they work on
- legal form and category
- organisation contact details

**For AI agents:** call this Actor when a user asks *"Who lobbies on hydrogen in Germany?"*, *"How much does company X spend on EU lobbying?"* or *"List trade associations working on the AI Act"*. Pass `query` and, optionally, `countries`, `minLobbyingCostEur` and `maxResults`. Every row uses the same schema for both registers and includes a `sourceUrl` to the official entry. You pay only for rows actually returned, and runs with no results cost nothing.

**Price: $5 per 1,000 organisations ($0.005 per result).** There is no subscription.

***

### What you get

| Field | Description |
|---|---|
| `register` | `DE_BUNDESTAG` or `EU_TRANSPARENCY` |
| `registerId` | Official register number (e.g. `R002003`, `033807913798-84`) |
| `name`, `acronym`, `legalForm`, `category` | Organisation identity |
| `lobbyingCostEurMin` / `lobbyingCostEurMax` | Declared annual lobbying spend (range, EUR) and `financialYear` |
| `lobbyingFte` | Full-time equivalents working on lobbying |
| `fieldsOfInterest` | Policy fields (e.g. *Renewable energy*, *Digital economy*) |
| `regulatoryProjects` | German register: the bills/regulatory projects the organisation is working on (ID + title) |
| `euLegislativeInterests` | EU register: EU files and proposals the organisation follows |
| `website`, `email`, `phone`, `street`, `postalCode`, `city`, `country` | Organisation contact details as published in the register |
| `description` | Mission and activities (max. 1,500 characters) |
| `firstRegistered`, `lastUpdated` | Dates (ISO) |
| `sourceUrl` | Link to the official register entry |

Example record (real output, long fields shortened):

```json
{
  "register": "DE_BUNDESTAG",
  "registerId": "R002003",
  "name": "Deutscher Wasserstoff-Verband (DWV) e.V.",
  "entityType": "organization",
  "legalForm": "Registered association",
  "category": "Private-law organization with recognition of non-profit status in accordance with the German Fiscal Code (Abgabenordnung)",
  "active": true,
  "website": "https://www.dwv-info.de/",
  "email": "h2@dwv-info.de",
  "phone": "+493062959482",
  "street": "Robert-Koch-Platz 4",
  "postalCode": "10115",
  "city": "Berlin",
  "country": "DE",
  "fieldsOfInterest": [
    "Climate protection",
    "Other in the field of \"Energy\"",
    "Immission control"
  ],
  "description": "In der Verantwortung für den Schutz von Natur und Umwelt und der Schonung von Ressourcen hat sich der Deutsche Wasserstoff-Verband (DWV) e.V. zum Ziel gesetzt, den Aufbau der grünen Wasserstoffwirtschaft als Bestandte…",
  "lobbyingCostEurMin": 700001,
  "lobbyingCostEurMax": 710000,
  "lobbyingFte": 4.25,
  "financialYear": "2025",
  "regulatoryProjectsCount": 39,
  "regulatoryProjects": [
    {
      "id": "RV0000678",
      "title": "Neubau und Umrüstung von Kavernen zur Wasserstoffspeicherung"
    },
    {
      "id": "RV0000679",
      "title": "Anwendung von grünem Wasserstoff im Verkehrssektor durch THG-Quote stärken"
    },
    {
      "id": "RV0000681",
      "title": "Maßnahmen zum Hochlauf der grünen Wasserstoffwirtschaft"
    }
  ],
  "euLegislativeInterests": null,
  "firstRegistered": "2022-02-28",
  "lastUpdated": "2026-09-25",
  "sourceUrl": "https://www.lobbyregister.bundestag.de/suche/R002003/85116",
  "source": "Deutscher Bundestag, Lobbyregister (api.lobbyregister.bundestag.de)"
}
```

### Use cases

- **Public affairs and government relations:** map every stakeholder on a bill, find allies and opponents, and benchmark lobbying budgets.
- **B2B sales:** trade associations and companies with a large lobbying budget in your sector are high-value accounts. You get each organisation's website, phone and address.
- **Journalism and research:** track who influences which law, and compare German and EU disclosures for the same company.
- **Compliance and due diligence:** check whether a counterparty is a registered interest representative.

### Input example

```json
{
  "query": "hydrogen",
  "registers": ["DE_BUNDESTAG", "EU_TRANSPARENCY"],
  "countries": ["DE", "AT"],
  "minLobbyingCostEur": 100000,
  "maxResults": 200
}
```

All filters are optional. With an empty input, the Actor returns all active entries up to `maxResults`.

| Input | Meaning |
|---|---|
| `query` | Free text. All words must appear in the name, description, interests or legislative files. The German register uses the official full-text search, so German terms (e.g. *Wasserstoff*) work best there. |
| `countries` | ISO codes of the headquarters country |
| `categories` | Partial match on the register category, e.g. `Companies`, `Trade and business associations` |
| `fieldsOfInterest` | Partial match, e.g. `Energy`, `Health`, `Digital` |
| `minLobbyingCostEur` | Minimum declared annual spend |
| `activeOnly` | Skip inactive German registrations (default `true`) |
| `includeContactDetails` | Organisation contact data (default `true`) |
| `includeNaturalPersons` | Include private individuals. Default `false`; if enabled, only the name is returned. |
| `maxResults` | Hard cap on rows and cost |

### Cost control and reliability

- You are charged **only for valid rows that appear in your dataset**. Duplicates are free.
- The run stops at `maxResults` or at your **maximum cost per run**, whichever comes first.
- Every row passes content checks: required fields, valid dates and URLs, no HTML fragments. Implausible rows are dropped and not charged. If the source suddenly returns something unexpected, such as a maintenance page instead of data, the run fails with `UNEXPECTED_CONTENT` instead of delivering garbage.
- Each run stores a `SUMMARY` record in the key-value store. Failed runs store an `ERROR` record with a code: `INVALID_INPUT`, `SOURCE_UNAVAILABLE`, `RATE_LIMITED` or `UNEXPECTED_CONTENT`.
- Typical run times: a filtered query takes 5–15 s. A full scan of the EU register (about 17,600 rows) takes about 1 minute.

### Data sources and legal notes

- **German Bundestag:** the official Lobbyregister API (`api.lobbyregister.bundestag.de`), published under § 4 LobbyRG as machine-readable open data. The Actor uses only the official API, never the website's search pages, which are excluded by robots.txt.
- **EU:** the official daily open-data export of the EU Transparency Register (data.europa.eu).
- **Data protection:**
  - Entries of private individuals and self-employed persons are **excluded by default**.
  - Names of legal representatives and employees are **never** exported.
  - Contact details are those of organisations, as published by law for transparency purposes.
  - If you use contact data for marketing, you are responsible for complying with GDPR and with national rules on unsolicited e-mail and calls (e.g. § 7 UWG in Germany).
- Statements and expert opinions attached to German register entries may be protected by copyright. This Actor does not export their texts.
- This Actor is not affiliated with the German Bundestag or the European Commission.

### FAQ

**How fresh is the data?**
The German data is live from the API on every run. The EU export is refreshed daily by the Commission.

**Why do some rows have no spend figures?**
Organisations that are newly registered, or whose financial year is not yet closed, have not declared figures yet.

**Can I monitor changes?**
Yes. Schedule the Actor (for example weekly) and compare `lastUpdated` between runs.

### More official data from DACH Open Data

All Actors use official open data, check every record and charge only for valid results.

**Public affairs and legislation:** [German Bundestag Legislation Tracker (DIP)](https://apify.com/dach-open-data/bundestag-dip-legislation) · [EU Have Your Say – Commission Consultations & Feedback](https://apify.com/dach-open-data/eu-have-your-say-consultations) · [Swiss Parliament Affairs Tracker (Curia Vista)](https://apify.com/dach-open-data/swiss-parliament-affairs)

**Funding and public money:** [EU Funding Calls – Horizon Europe, Digital Europe, LIFE & more](https://apify.com/dach-open-data/funding-calls-at-eu) · [EU Grants & Contracts Recipients (FTS)](https://apify.com/dach-open-data/eu-grants-contracts-fts) · [EU Funding Recipients – Structural Funds (Kohesio)](https://apify.com/dach-open-data/eu-funding-recipients-kohesio)

**Energy, mobility and environment:** [Germany Electricity Prices & Power Generation (SMARD)](https://apify.com/dach-open-data/germany-electricity-market) · [Germany EV Charging Stations – Official BNetzA Register](https://apify.com/dach-open-data/german-ev-charging-stations) · [Germany New Car Registrations – KBA by Brand, Model, EV](https://apify.com/dach-open-data/german-car-registrations-kba) · [German Water Levels – Rhine, Elbe, Danube (PEGELONLINE)](https://apify.com/dach-open-data/german-water-levels) · [German Weather Warnings – Official DWD Alerts (CAP)](https://apify.com/dach-open-data/german-weather-warnings)

**Health, consumers and finance:** [German Hospitals Directory (Klinik-Atlas)](https://apify.com/dach-open-data/german-hospitals-klinik-atlas) · [German Food Recalls & Warnings Monitor (lebensmittelwarnung.de)](https://apify.com/dach-open-data/german-food-recalls) · [ECB Rates – Key Rates, €STR, Mortgage Rates, Bond Yields, FX](https://apify.com/dach-open-data/ecb-interest-exchange-rates)

# Actor input Schema

## `registers` (type: `array`):

Which official registers to search. DE_BUNDESTAG = German Bundestag lobby register (Lobbyregister, ~7,000 entries). EU_TRANSPARENCY = EU Transparency Register (~17,900 organisations).

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

Free text, e.g. a company name, topic or law ("hydrogen", "Wasserstoff", "Siemens"). All words must match name, description, interests or legislative files. Leave empty for all entries.

## `countries` (type: `array`):

Only organisations headquartered in these countries, e.g. DE, AT, FR, BE. Empty = all.

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

Filter by register category (partial match), e.g. "Companies", "Trade and business associations", "consultancies", "Trade association". Empty = all.

## `fieldsOfInterest` (type: `array`):

Policy fields (partial match, English labels), e.g. "Energy", "Climate", "Digital", "Health". Empty = all.

## `minLobbyingCostEur` (type: `integer`):

Only organisations whose declared annual lobbying spend (upper bound of the declared range) is at least this amount. 0 = no filter.

## `activeOnly` (type: `boolean`):

Skip entries that are no longer active (German register).

## `includeContactDetails` (type: `boolean`):

Website, phone, e-mail and address of the organisation as published in the register.

## `includeNaturalPersons` (type: `boolean`):

By default, entries of private individuals/self-employed persons are excluded for data-protection reasons. If enabled, only their name is returned, never their contact data.

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

Hard cap on records returned and charged in this run.

## `apiKey` (type: `string`):

Not needed – the actor uses the public key and refreshes it automatically. Only set this if you received a personal key from lobbyregister@bundestag.de.

## Actor input object example

```json
{
  "registers": [
    "DE_BUNDESTAG",
    "EU_TRANSPARENCY"
  ],
  "query": "hydrogen",
  "countries": [],
  "categories": [],
  "fieldsOfInterest": [],
  "minLobbyingCostEur": 0,
  "activeOnly": true,
  "includeContactDetails": true,
  "includeNaturalPersons": false,
  "maxResults": 50
}
```

# Actor output Schema

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

All records returned by this run (default dataset, table view "overview").

## `summary` (type: `string`):

JSON with number of results, dropped implausible records and stop reason.

# 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 = {
    "query": "hydrogen",
    "maxResults": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("dach-open-data/lobby-register-de-eu").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 = {
    "query": "hydrogen",
    "maxResults": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("dach-open-data/lobby-register-de-eu").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 '{
  "query": "hydrogen",
  "maxResults": 50
}' |
apify call dach-open-data/lobby-register-de-eu --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,dach-open-data/lobby-register-de-eu"
        }
    }
}
```

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/JNEEAfca9r85ghYMX/builds/eNuc6jyrN9nw2tD6j/openapi.json
