Open data & the edit log
The dataset
91,711 distinct declared meetings across the 2019-2026 record for 719 current MEPs, updated daily and frozen weekly - free to reuse under CC BY 4.0 with attribution to “MEP of the week”. (As of 14 September 2026.)
Downloads
- insights.json - the full site dataset: per-MEP profiles, organisations, parties, sectors, trends and weekly leaders (~1 MB JSON, regenerated daily).
- Full row-level CSV exports contain 114,963 counterpart entries: one counterpart entry per row, so a meeting with multiple declared counterparts appears on multiple rows. The weekly snapshot diffs are also produced by the pipeline - email us and we will send the latest cut, or any per-country / per-group / per-organisation slice.
Licence & citation
Underlying records: © European Union (EP declarations, Transparency Register), reusable under the EU institutions' reuse policies. LobbyFacts-derived fields: © Corporate Europe Observatory / LobbyControl. Our processing and derived dataset: CC BY 4.0.
Cite as: MEP of the week, “[page title]”, mepoftheweek.com, accessed [date] - and link the page you used.
Method
Sources, matching and counting rules are documented in the methodology; the audit that each daily build must pass is described there too.
Exact input fingerprint
Each build records the byte size and SHA-256 digest of every primary input. The LobbyFacts enrichment cache is represented by one deterministic digest over its sorted files. This identifies the exact source cut behind the published totals even when an upstream file later changes.
| Input | Bytes | SHA-256 |
|---|---|---|
data/raw/mepmeetings.json | 31,282,235 | 7c46bcc4ab230e5a886029f8a8e6644a02c175c15e380d1e326fc5415be3341c |
data/raw/meps.json | 916,010 | def64f4a5bb8092d59ab9cd7ddb526e09f9473eb50f45ec377098899ccbe6dc2 |
data/raw/tr_match.json | 1,578,035 | 3e3a6c53aff97bb45d894bb9c7e987c5abd296bb0c538f17e3cbd7a8f30b584f |
data/raw/ep_official_meetings.json.gz | 2,323,610 | 024b9110c5be2913071a40c32d64f9b4186cbb61b2b74cca11c52147689b3e01 |
data/raw/tr_index.json | 2,614,350 | 128764fe9475c832f131fb029940f90ca21fb5c76fbe87fbe910bb1bc2d4d400 |
data/raw/tr_full.xml | 115,886,401 | 298c4d32eac1a07443656e7a618077580def8693d8b0d1c6ae8a826f70dff39d |
data/enrichment/*.csv (3,660 files) | 163,723,487 | 255c1b724140c4eabe91b48b562d3c29ed637d075fd29515c88ab64da1d6fe0a |
Roll-call vote coverage
Which roll-call counts as the final vote on a text is our own classification, derived from the Parliament's published label for each vote. It is an explicit list of label endings rather than a guess, so the share it cannot place is knowable - and it is published here rather than assumed away. How we count votes.
| Measure | Count | Detail |
|---|---|---|
| Roll-call votes held and archived | 5,568 | 103 sitting days, 17 July 2024 to 9 July 2026 |
| Identified as the final vote on a text | 537 | 9.6% of all roll-calls, across 421 documents |
| Vote labels our classifier does not recognise | 37 | 0.7% - counted as not-a-final-vote rather than guessed at |
| Members with a membership record | 743 | the term roster including members who have since left |
Checks & balances
Automated integrity checks run on every build (8 of 8 passing), plus a classifier regression gate on a manually reviewed reference set: it is re-tested on every build and below 97% the build refuses to ship. This build reproduced 263 of 263 reference labels; this is not a population-wide accuracy estimate. Data spans 02-07-2019 to 11-09-2026.
| Check | Result |
|---|---|
| ✓ group seats sum to member total | 719 of 719 |
| ✓ group engagements sum to all rows | 116773 of 116773 |
| ✓ register-linked share within 0-100% | 48.6% |
| ✓ no future-dated meetings | 0 rows |
| ✓ rows attributed to a current member | 98.4% (1810 former-term) |
| ✓ no duplicate meeting IDs | 0 dupes |
| ✓ every counterpart categorised | 0 unmapped |
| ✓ machine matches never contradict declared links | 0 contradictions |
Which entries carry a Register link?
Share of eligible declared counterpart entries that carry a Transparency Register link in the MEP declaration. Diplomatic and institutional counterpart entries, which need no register entry, are excluded.
Separately, we resolved 27.0% of unlinked entries to a Register identity from the name. Those inferred identities do not change the declared-link rate above.
How we identify who is in the room
65,066 counterpart entries carry no declared Register link - the counterpart is free text, typed by hand. We match those names against the full Transparency Register, deterministically and only when exactly one registrant fits; ambiguity means no match. What members declared is never altered - our matches are a separate layer, and every row in the CSV export carries its match method. So far this identifies 17,565 of the unlinked entries (27.0%), lifting the share of counterpart entries with an identified counterpart to 58.7%.
| Method | What it means | Rows |
|---|---|---|
| register-acronym | A registrant's acronym, unique in the register | 5,271 |
| declared-elsewhere | Same name already linked in another declaration | 5,251 |
| register-name | Exact match on a registrant's name | 2,919 |
| register-contain | The text contains exactly one registrant's name | 1,601 |
| register-brackets | “Long name (acronym)” - either side matches uniquely | 1,389 |
| embedded-id | A register ID typed into the free text | 1,003 |
| curated-alias | Hand-curated alias (documented in the repo file) | 131 |
Names neither linked nor matched are categorised by conservative name rules, and the remaining tail by a reviewed, versioned curation file. Every label is marked with its source in the export.
The edit log - weekly snapshots
The Parliament keeps no history: a declaration can be edited or deleted at any time, silently. So each Monday we freeze the full declaration record and compare it with the previous freeze - that is how a retroactive change becomes visible.
| Frozen on | Snapshot | Declaration records | Change vs previous |
|---|---|---|---|
| 2026-07-11 | partial baseline | 73,400* | first freeze |
| 2026-07-20 | weekly | 114,481 | - backfill to full coverage |
| 2026-07-27 | weekly | 115,159 | +678 new |
| 2026-08-03 | weekly | 115,161 | +2 new |
| 2026-08-10 | weekly | 115,161 | no change |
| 2026-08-17 | weekly | 115,161 | no change |
| 2026-08-24 | weekly | 115,161 | no change |
| 2026-08-31 | weekly | 115,161 | no change |
| 2026-09-07 | weekly | 116,338 | +1,177 new |
| 2026-09-14 | current | 116,773 | +435 new |
Nothing in this site's collected record has changed between complete weekly snapshots. New declarations arrive in bursts that follow the Parliament's calendar and this site's own collection. One honest limit: our record of official declarations is append-only, so a declaration deleted upstream after we collected it would not show here as a removal.
A declaration record is one line - one MEP, one counterpart entry and one declared meeting - so these totals track counterpart-entry rows and run higher than the site's count of distinct meetings. Rows marked * were frozen before the dataset was fully ingested. The weekly diff files ship with the dataset - ask for the archive.
Get the weekly email if you want the edit log and the week's pick in your inbox.