← Parliament Trends

Methodology

How Parliament Trends calculates every number on this page.

Data Sources

All data comes from the European Parliament's Open Data infrastructure, aggregated via HowTheyVote.eu. No proprietary data is used.

  • meps.json718 MEPs with group, country, and attendance data
  • votes.json1,873 plenary vote records with aggregate totals (For / Against / Abstain)
  • notable-votes.json146,018 per-MEP vote position records, covering the most recent plenary sessions

Last updated: 27 March 2026

Group Cohesion Score

Measures how often a political group votes as a bloc. A group is considered to have voted cohesively on a given vote if at least 80% of its voting members chose the same option.

Cohesion score = (votes where ≥80% of group voted same way) ÷ (total votes analysed) × 100

What counts as "voting": Only For, Against, and Abstain positions are counted. "Not voting" (absence from the chamber) is excluded from the denominator — this avoids penalising groups for member absences, and focuses on active voting discipline.

Interpretation: A score of 100% means the group voted as a bloc on every analysed vote. A score of 50% means the group only voted cohesively on half of votes. No group is expected to score 100% — internal dissent is normal and healthy.

Cross-Group Alliance Score

Measures how frequently two groups vote on the same side. For each vote, the plurality position of each group (the option that received the most For/Against/Abstain votes) is identified, and the groups are considered to have "voted together" if their plurality positions match.

Alliance score = (votes where both groups' majorities matched) ÷ (votes where both groups had data) × 100

Non-attached MEPs (NI) are excluded from alliance calculations — they do not form a coordinated group and their "plurality position" is not politically meaningful.

Interpretation: A score of 100% would mean two groups always voted the same way. 50% is random chance. Scores above 65% indicate a meaningful voting alliance.

Most Contested / Unanimous Votes

Contested votes are ranked by the absolute difference between For and Against totals:

Contestedness = |total_for − total_against|

Unanimous votes are ranked by the percentage of MEPs voting the same way:

Consensus % = max(total_for, total_against, total_abstain) ÷ (total_for + total_against + total_abstain) × 100

Votes with fewer than 50 total votes cast are excluded from the unanimous ranking to filter out procedural micro-votes with low participation.

National Cohesion

Measures how often MEPs from the same country vote together. The threshold is lower than for political groups (60% vs 80%) to account for the fact that national delegations span multiple political groups.

National cohesion = (votes where ≥60% of country's MEPs voted same way) ÷ (total votes with ≥3 country MEPs present)

Countries with fewer than 5 MEPs are excluded to ensure statistical reliability. The "Votes with" column shows which political group the country's MEPs most often aligned with on contested votes.

Left-Right Proxy Score

This is a proxy score based solely on voting alignment — it does not represent editorial or political judgment about any MEP or party. The score measures how often an MEP votes with left-leaning groups vs right-leaning groups on votes where those blocs disagree.

Left-right score = (votes aligned with right bloc) ÷ (votes aligned with left OR right bloc) × 100 0 = always voted with left bloc 100 = always voted with right bloc 50 = equal alignment (centrist/swing)

Left-leaning groups: S&D, Greens/EFA, The Left
Right-leaning groups: ECR, Patriots for Europe (PfE), ESN

A "contested" vote is one where the left and right blocs had different majority positions. Votes where both blocs voted the same way are excluded — they tell us nothing about left-right alignment.

MEPs from left-leaning groups are excluded from the "most right-aligned" list (and vice versa) to show cross-group voting patterns — MEPs who vote differently from their group's expected alignment. MEPs with fewer than 3 contested votes are excluded.

Important limitation: The current dataset covers a limited number of recent plenary sessions. The "trajectory" comparison (early term vs late term) will become available as more per-MEP vote history is added to the dataset.

What This Is Not

  • Not editorial: All rankings and scores are calculated mechanically from vote data. No human judgment is applied in scoring.
  • Not comprehensive: Roll-call votes are only a subset of EP activity. Committee votes, written questions, amendments, and speeches are not captured here.
  • Not individual assessments: These are statistical patterns — not character assessments of individual MEPs or their suitability for office.

Questions and Corrections

If you believe a calculation is incorrect, or if you're a journalist or researcher who needs clarification, contact us at alex@wheresmymep.eu.