Open data · CC BY 4.0

Download data

All 650 roll-call final votes of the 10th term (since July 2024) with 465,349 individual votes — as CSV and JSON, prepared directly from the official EP Open Data Portal. Including vote corrections. Freely reusable with attribution, no share-alike obligation.

Complete package
All tables (ZIP)1,8 MB
CSV + JSON of all tables, README, datapackage.json and licence in one archive.
Status & updates2026-06-24 12:06 CEST
The dataset is updated automatically together with the website. During plenary weeks, only the current session week will be refreshed on weekdays (faster build); older weeks keep their respective state. Each session week therefore carries its own "as of" date (see the per-week download). Source: EP Open Data Portal.
Individual tables
votes650 rows · 282 KB
Votes (primary final vote per file)
member_votes465,349 rows · 14,8 MB
Individual member votes (incl. corrections)
members718 rows · 54 KB
Members (current roster)
groups9 rows · 388 B
Political groups
countries27 rows · 367 B
Member states
Fields & structure
votesVotes (primary final vote per file) · 650 rows
ColumnMeaning
vote_idUnique identifier: date_VOT-ITM-number (e.g. 2026-06-17_992855). The date prefix ensures global uniqueness, since procedural agenda votes are numbered only per day.
dateVote date (ISO 8601)
titleTitle of the file
referenceReference number (e.g. A10-0048/2026)
committeeLead committee (abbreviation)
committee_fullLead committee (full name)
rapporteurRapporteur (A-reports only)
resultResult (ADOPTED / REJECTED / …)
count_forOfficial number of votes in favour
count_againstOfficial number of votes against
count_abstentionOfficial number of abstentions
topicsEuroVoc topics, separated by “; ”
rollcall_countNumber of roll-call votes on the file
sessionPlenary session (label)
urlLink to the detail page on openrcv.eu
member_votesIndividual member votes (incl. corrections) · 465,349 rows
ColumnMeaning
vote_idReference to votes.vote_id
member_idReference to members.member_id (EP MEP ID)
positionPosition: FOR / AGAINST / ABSTENTION / EXCUSED (officially excused) / DID_NOT_VOTE (in mandate but did not vote)
position_correctedIntended vote per official correction (empty = no correction). The official result is unaffected.
membersMembers (current roster) · 718 rows
ColumnMeaning
member_idEP MEP ID
first_nameFirst name
last_nameLast name
country_codeMember state (ISO-2)
countryMember state (German name)
group_codeGroup code
group_labelGroup (short label)
partyNational party (abbreviation)
party_fullNational party (full name)
groupsPolitical groups · 9 rows
ColumnMeaning
codeGroup code
labelShort label
label_fullFull name
countriesMember states · 27 rows
ColumnMeaning
codeISO-2 code
nameGerman name

Licence & attribution

The underlying data come from the European Parliament (Open Data Portal) and are available under CC BY 4.0. When reusing, please cite the source:

Data source: European Parliament (Open Data Portal), prepared by OpenRCV (openrcv.eu), CC BY 4.0.

There is no share-alike obligation — the data are freely reusable.

Quick start

Example with Python/pandas — analyse how a Member voted:

import pandas as pd votes = pd.read_csv("votes.csv") mv = pd.read_csv("member_votes.csv") members = pd.read_csv("members.csv") # How did MEP 124834 vote? df = mv[mv.member_id == 124834].merge(votes, on="vote_id") print(df[["date", "title", "position", "position_corrected"]])