# European Parliament MEP Disclosures Scraper (`parseforge/european-mep-disclosures-scraper`) Actor

Scrapes MEP financial disclosures from the European Parliament's public register. Returns each declaration as a flat row with the member's name, country, declaration type, dates, and the full declared activity or interest.

- **URL**: https://apify.com/parseforge/european-mep-disclosures-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Other, Lead generation
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $19.00 / 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?

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

[![ParseForge](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner.jpg)](https://apify.com/parseforge?fpr=vmoqkp)

### European Parliament MEP Disclosures Scraper

**Scrape MEP financial disclosures from the European Parliament's public register, up to a million per run.** Each record captures the member's name, country, declaration type, dates, and the full declared activity or interest. No login or API key. Export to CSV, JSON, Excel, or XML.

The European Parliament publishes every MEP's financial declarations on its website, but browsing them one by one through the web interface is slow and you cannot export the data in bulk. This Actor reads the public disclosure feeds directly, collects each declaration into a flat row, and lets you download the complete dataset in one go. It is built for transparency researchers, journalists, and compliance teams who need the full picture of MEPs' outside interests.

| Who uses it | What they scrape European Parliament for |
|---|---|
| Transparency researchers | Mapping which industries and organizations are declaring financial ties to sitting MEPs. |
| Investigative journalists | Finding potential conflicts of interest ahead of a key committee vote or report. |
| NGO compliance analysts | Monitoring whether MEPs are meeting their declaration obligations on time. |
| Political data platforms | Enriching a member profile database with up-to-date outside activity records. |

### What it does

This Actor collects MEP financial disclosures from the European Parliament's public register and returns each declaration as a flat row.

- 🇪🇺 **Full register coverage:** collects every disclosure type, including gifts, paid activities, and support staff declarations.
- 📅 **Declaration dates:** captures the date each declaration was made and the period it covers.
- 🔢 **Bulk collection:** set a maximum from 1 to 1,000,000 disclosures and let the Actor run until it hits the limit.
- 📄 **Flat row output:** every declaration lands in your dataset as one row, ready for pivot tables and joins.

Results export to CSV, JSON, Excel, or XML, or straight from the API.

### What you can do with European Parliament data

**📋 Build a conflict-of-interest watchlist.**

A transparency NGO collects all current MEP disclosures, filters for paid board memberships, and cross-references the list against upcoming legislative votes.

**🗞️ Investigate lobbying patterns before a vote.**

A journalist scrapes the full register a week before a major committee decision, looking for gifts or travel funded by companies in the affected sector.

**📊 Feed a public integrity dashboard.**

A civic-tech platform runs the Actor monthly, loads the rows into a database, and displays each MEP's outside interests on a public-facing profile page.

**⏱️ Monitor late declarations.**

A compliance researcher compares the declaration dates against the official deadlines and flags members who filed more than 30 days late.

### Why choose this scraper

| | What you get |
|---|---|
| **One fixed schema** | Every disclosure arrives with the same columns, no matter the type or country. |
| **No API registration** | Reads the public register directly so you skip OAuth, keys, and rate-limit paperwork. |
| **Runs on Apify** | Schedule it daily or weekly and get fresh declarations pushed to your storage or pipeline. |

### Configure the run

Set the maximum number of disclosures to collect per run, from a single test record up to a million. The Input tab lists every parameter.

A first run with the defaults:

```json
{
 "maxItems": 10
}
```

A larger pull:

```json
{
 "maxItems": 200
}
```

### Pricing

Pay-per-result: **$0.021 per result** collected. You pay only for the results written to your dataset.

| Results collected | Approximate cost |
|---|---|
| 100 results | $2.10 |
| 1,000 results | $21.00 |
| 10,000 results | $210.00 |

New Apify accounts start with $5 in free credit.

### Free users

Free-plan runs return up to 10 results as a preview. [Upgrade your Apify plan](https://console.apify.com/sign-up?fpr=vmoqkp) to collect up to 1,000,000 results per run.

### Run it

1. [Create a free Apify account with $5 in credit](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open the [European Parliament MEP Disclosures Scraper](https://apify.com/parseforge/european-mep-disclosures-scraper?fpr=vmoqkp).
3. Set your inputs and any filters, then click **Start**.
4. Export the results as CSV, Excel, JSON, or XML from the **Dataset** tab.

Run it programmatically through the [Apify API](https://docs.apify.com/api/v2) (`run-sync-get-dataset-items`) or the [ApifyClient](https://docs.apify.com/api/client/js) for JavaScript and Python.

### Use with AI agents (MCP)

Give an AI agent live access to European Parliament through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:

```bash
claude mcp add --transport http apify "https://mcp.apify.com/?tools=parseforge/european-mep-disclosures-scraper"
```

Then prompt it in plain language to run the scraper and read back the results.

### Troubleshooting

**Why am I getting zero results?**

Check that the European Parliament disclosure register is reachable from your browser. If the site is down or has changed its layout, the Actor may return an empty dataset until the selectors are updated.

**The run stopped before reaching my maxItems limit.**

The Actor stops when it has collected the number you set or when it runs out of available disclosures on the register. If you set a very high number, it may finish early because there are no more records to read.

**Some fields are empty in my dataset.**

Not every disclosure includes every field. Some MEPs may leave certain sections blank, and older declarations sometimes have less detail than newer ones. Empty cells reflect what the register itself shows.

**The run is taking a long time.**

Collecting tens of thousands of disclosures takes time because the Actor respects the Parliament's servers. Lower the maxItems value for a faster test, or let the full run complete on a schedule.

**I see a different number of results than I expected.**

The Actor counts each individual disclosure as one row. One MEP can have multiple declarations, so the row count will be higher than the number of members if you collect the full register.

### FAQ

| Question | Answer |
|---|---|
| What exactly is a MEP disclosure? | It is a public declaration that every Member of the European Parliament must file, listing outside paid activities, gifts, travel paid by third parties, and support staff. The European Parliament publishes them in a searchable online register. |
| Do I need an API key or login to scrape the register? | No. The Actor reads the same public feeds that the European Parliament website uses, so you do not need to register an app or manage OAuth tokens. |
| How many disclosures can I collect in one run? | You set the maximum with the input field. The default is 10 for a quick test, and you can raise it up to 1,000,000 per run. |
| Which fields does each row contain? | Each row includes the MEP's name, country, the type of declaration, the date it was filed, the period it covers, and the full text of the declared activity or interest. |
| Can I filter by country or declaration type before scraping? | The Actor collects the full register and returns every matching row. You can filter the output in your spreadsheet or database after the run finishes. |
| How often is the data updated? | The Actor reads the live register on each run, so you get whatever declarations are publicly available at that moment. Schedule it daily to catch new filings. |
| Can I export the results to Excel? | Yes. Apify supports CSV, JSON, Excel, and XML exports from the dataset tab, and you can push the data to a webhook or cloud storage. |
| Does this cover all EU member states? | Yes. The register includes MEPs from every member state, and the country field tells you which one each member represents. |
| Is this legal to scrape? | The European Parliament publishes these disclosures as public information. The Actor reads only the publicly accessible feeds without logging in. You should still review the Parliament's terms of use for your specific use case. |
| What happens if the Parliament changes its website? | The Actor is maintained to track changes in the register's structure. If a change breaks the scraper, report it and the maintainer will update the selectors. |

### Related actors

Browse the full [ParseForge collection](https://apify.com/parseforge?fpr=vmoqkp) for more scrapers.

🆘 **Need help?** Email parseforge@protonmail.com with your run ID, your input, and what you expected.

⚠️ **Disclaimer.** This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by European Parliament. It collects only publicly available data. You are responsible for using the collected data in compliance with the source's terms of service and applicable data-protection laws, including GDPR, CCPA, and PIPL. Do not use it to collect personal data unlawfully.

# Actor input Schema

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

How many disclosures to collect per run.

## Actor input object example

```json
{
  "maxItems": 10
}
```

# 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 = {
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/european-mep-disclosures-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 = { "maxItems": 10 }

# Run the Actor and wait for it to finish
run = client.actor("parseforge/european-mep-disclosures-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 '{
  "maxItems": 10
}' |
apify call parseforge/european-mep-disclosures-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parseforge/european-mep-disclosures-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/gvWa4udCarX1JBjTp/builds/cVJqZ6gV24ZEbG7Ep/openapi.json
