Every number on this site is computed from official open data with the formulas below โ no editorial weighting, no hidden adjustments. If a figure looks surprising, this page should explain how it was reached. For when each source was last refreshed, see the data status page.
The share of recorded votes a member actually cast a position on: voted รท total recorded, where voted means a recorded for, against or abstention, and total recorded includes votes the member was marked absent / no-vote for. It is computed only over the votes we hold for that member, so a newly elected member is measured from their first recorded vote โ not penalised for sittings before they took their seat.
For each vote we take the member's own group's for/against majority โ the side most of the group voted. A rebellion is a vote where the member voted against that majority. Rebellion rate = rebellions รท comparable, and loyalty = 1 โ rebellion rate. A vote is comparable only when the group had a clear for/against majority on it (ties and votes where the whole group abstained carry no โparty lineโ, so they are excluded). Members in no political group have no line to break with and are not ranked, and we require a minimum number of comparable votes before ranking anyone so a single vote can't produce a 100% rebel.
How close a vote was โ the news-worthy signal until we track readership. We score by margin closeness: |for โ against| รท (for + against), so 0 is a perfect split (most contested) and 1 is unanimous. A 326โ325 vote ranks far above a 600โ10 one. The Pulse view ranks the most contested recent votes across the EU Parliament and every national chamber we track.
Some parliaments publish only a party's recorded vote, not each member's. Where that is the only data available we derive per-member positions by expanding the party's recorded vote down to its members, and flag the vote as derived. Derived positions let us still show how a bloc voted, but because every member is assigned the party line by construction they carry no rebellion signal โ so derived votes are excluded from loyalty / rebellion. They are still counted in the raw โpositionsโ totals on the data status page, and contested/Pulse uses the official party-line totals.
Found a discrepancy? Open-data feeds are occasionally revised at source; we re-sync on a schedule, so a figure may briefly trail the official record before the next sync.