Open data & the edit log
The dataset
102,583 distinct declared meetings across the 2016-2026 record for 720 current MEPs, updated daily and frozen weekly - free to reuse under CC BY 4.0 with attribution to “MEP of the week”. (As of 8 November 2026.)
Downloads
- insights.json - the full site dataset: per-MEP profiles, organisations, parties, sectors, trends and the recent publication weeks behind the weekly editions (1.5 MB of JSON, regenerated daily; the link saves the file rather than opening it as text). Its
weekly_leadersfield is not the MEP of the week: it holds the picks of the retired meeting-week formula, kept for reference, and for weeks since the site launched (2026-W30) it can name a different member from the edition, or a member for a week that has no edition. The recent editions are thepub_weeksrecords that name a winner. - Full row-level CSV exports contain 127,688 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.
Counterpart types in the files
The files name each kind of counterpart - company, business group, NGO, trade union and so on - by a fixed key: the category column of the row-level CSV, the categories counts and each name's bkt in insights.json. The keys stay as they are so that scripts written for earlier files keep working. The pages show the same types under these names:
| Key in the files | Shown on the pages as | For one organisation |
|---|---|---|
Companies (private) | Companies | Company |
Business groups | Business groups | Business group |
NGOs & non-profits | NGOs & non-profits | NGO or non-profit |
Trade unions | Trade unions | Trade union |
Think tanks & academia | Think tanks & academia | Think tank or academic body |
Public authorities | Public authorities | Public authority |
Religious | Religious bodies | Religious body |
Political parties | Political parties | Political party |
Individuals & personal capacity | People in a personal capacity | Person in a personal capacity |
Diplomatic & government | Diplomatic & government | Diplomatic & government |
Other / unclassified | Unclassified | Unclassified |
An organisation's own category field (in top_orgs, for example) holds the name for one organisation, or "Other" for a body the Register files under its own catch-all, "Other organisations, public or mixed entities". Entries under Other / unclassified are left out of every share of counterpart types.
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/ | 31,282,235 | 7c46bcc4ab230e5a886029f8a8e6644a02c175c15e380d1e326fc5415be3341c |
data/ | 951,048 | f687657ccdbca86a6aa626b4bc5c84c7e29621a561e21caa1fa8e7e588938e47 |
data/ | 1,578,035 | 3e3a6c53aff97bb45d894bb9c7e987c5abd296bb0c538f17e3cbd7a8f30b584f |
data/ | 2,603,173 | 8c6d195ac2f5a726921426833f44f6decc4b87fe48432ab7ce20b8bd92c45187 |
data/ | 88,399 | 48f74f0183b08966b149c275d1adea8d6c8325e9a018da9897ff0a75228d5527 |
data/ | 2,643,065 | cbf37745d88c092e1dead0c873b9a60228ff63bebf8e681d0533fcd49dbd82f2 |
data/ | 117,739,699 | 73c96b023b5d586d186126dada2dd39fb3a84418591d67603ce17110d26b97b6 |
data/ (4,337 files) | 180,349,202 | 5bd52c3a8f37fbf9b78c532ecb1e579f81710d75469ff3a41ba45f5b0f2f3de5 |
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 | 6,412 | 115 sitting days, 17 July 2024 to 22 October 2026 |
| Identified as the final vote on a text | 606 | 9.5% of all roll-calls, across 497 documents |
| Vote labels our classifier does not recognise | 46 | 0.7% - counted as not-a-final-vote rather than guessed at |
| Members with a membership record | 747 | 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 17 June 2016 to 6 November 2026.
| Check | Result |
|---|---|
| ✓ group seats sum to member total | 720 of 720 |
| ✓ group engagements sum to all rows | 129924 of 129924 |
| ✓ register-linked share within 0-100% | 49.8% |
| ✓ no future-dated meetings | 0 rows |
| ✓ rows attributed to a current member | 98.3% (2236 former-term) |
| ✓ no duplicate meeting IDs | 0 dupes |
| ✓ every counterpart entry has a type | 0 without one; 7,588 of the current members' entries typed unclassified |
| ✓ 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 26.1% 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
70,810 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 18,483 of the unlinked entries (26.1%), lifting the share of counterpart entries with an identified counterpart to 59.0%.
| Method | What it means | Rows |
|---|---|---|
| declared-elsewhere | Same name already linked in another declaration | 6,845 |
| register-acronym | A registrant's acronym, unique in the register | 4,201 |
| register-name | Exact match on a registrant's name | 2,786 |
| register-contain | The text contains exactly one registrant's name | 1,560 |
| register-brackets | “Long name (acronym)” - either side matches uniquely | 1,238 |
| embedded-id | A register ID typed into the free text | 1,001 |
| curated-alias | Matched by hand, for a name the automatic rules must refuse | 840 |
| register-pair | “Acronym, full name” - both halves name the same registrant | 12 |
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 this site's record of declarations and compare it with the previous freeze - the table says what joined it and what left it, and why.
| 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 (collection paused) |
| 2026-08-03 | weekly | 115,161 | +2 already held (collection paused) |
| 2026-08-10 | weekly | 115,161 | collection paused |
| 2026-08-17 | weekly | 115,161 | collection paused |
| 2026-08-24 | weekly | 115,161 | collection paused |
| 2026-08-31 | weekly | 115,161 | collection paused |
| 2026-09-07 | weekly | 116,338 | +1,177 new |
| 2026-09-14 | weekly | 116,773 | +435 new |
| 2026-09-28 | weekly | 117,823 | +1,050 new |
| 2026-10-05 | weekly | 118,433 | +610 new |
| 2026-10-12 | weekly | 126,400 | +524 new · +3,307 found late · +4,385 collected earlier · +2 edited versions · −251 replaced versions |
| 2026-10-19 | weekly | 127,348 | +861 new · +85 found late · +2 collected before the last freeze |
| 2026-10-26 | weekly | 128,189 | +776 new · +65 found late |
| 2026-11-02 | latest | 129,124 | +770 new · +165 found late · +1 edited version · −1 replaced version |
The 6 freezes from 27 July to 31 August 2026 fell while this site's collection was stopped (no declarations were collected from 24 July to 5 September 2026: the European Parliament's website was answering automated requests with an empty page, and this site was slow to notice and work round it) and are marked “collection paused”: the record they froze was not being updated, so they cannot show whether anything changed at the Parliament in that time. The 2 records added on 3 August 2026 were not newly collected. They were already held, but each had shared a record key with another declaration by the same member, on the same day, to the same counterpart, with a title beginning with the same 40 characters, so earlier freezes counted each pair once. A fix on 27 July 2026 gave every declaration its own key, and this was the first freeze to count both halves of each pair. The 8,218 records added on 12 October 2026 include 4,385 that this site had collected earlier but did not show until 7 October 2026 - 1,597 of meetings in April 2025, 1,125 in March, 611 in February and 377 in January, and 675 of earlier meetings, back to March 2023. Until then, for meetings on or before 29 April 2025 this site showed only the record of an older bulk feed, which lacks them (see the corrections log). “Found late” means declarations this site collected at an unknown time after they were published: found further down a member's list than its newest meetings, or for a member whose list it had never read in full (see the methodology). “Replaced versions” are declarations as this site first read them that the Parliament has since edited - a counterpart renamed, a title reworded. Since 8 October 2026 this site leaves out the version replaced, which until then counted beside the edited one, so that each declaration counts once (see the corrections log); “edited versions” are the versions the Parliament lists now that the previous freeze did not hold. Until 7 October 2026 this site read such an edit as a new declaration, so the records counted as new in the freezes before then include edited versions. “Collected before the last freeze” means declarations this site had collected before the previous freeze that joined the record since. The freeze of 21 September 2026 was taken but never saved (while this site's collection was stopped, 20-23 September 2026: this site's own daily update failed before saving what it read). The next freeze is compared with the last one saved, so a change made in between is still caught.
No declaration has disappeared from this site's record between complete weekly snapshots. What left it were 252 declaration records of replaced versions: the Parliament renamed a counterpart or reworded a title after publishing, and since 8 October 2026 this site counts each such declaration once, as listed now (see the corrections log). One honest limit: a declaration the Parliament deletes after this site collected it stays in this site's record and is still counted, so 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.