FIELD NOTE
Was There Voter Fraud in Brazilian Runoff Elections? What the Data Tells Us
Disclaimer: This is not a political post. I don’t have a preferred candidate. This is purely a data exercise to understand the elections and the impact of the orders.
I woke up Monday morning to news flooding everywhere about the Brazilian elections. The information was flooding like the Iguaçu Falls. Most of them calling the elections fraudelent.
The candidates, Flavio Bolsonaro (PL) and Lula (PT), the incumbent president, faced each other to determine who would be the next president.
Flavio Bolsonaro closed ahead in the general elections by a little less than 3 million votes, falling short of 50% of the votes, a runoff was triggered. Sunday evening, Lula was declared the winner with about 4.4 million more votes. In less than a month, the incumbent president received about 11 million more votes than in the general election. That raised eyebrows from Bolsonaro loyalists screaming fraud.
Flavio Bolsonaro said he couldn’t recognize the results and would ask for annulment because of an unfair extension because the order came after the polls had already closed in many locations.
If the extension reach some voters and not others in certain political lines, this raises a fair question. Could a fair extension have changed the outcome?
This is a question that is fairly simple to answer. We can look at the data.
What Happened on Sunday Afternoon
Unlike American elections, Brazilians only have one day to vote. The polls open at 8:00am local time, and close promptly at 5:00pm.
Under certain circunstances, the law allows for the candidates to request more time, extending those hours. On Sunday, both candidates requested more time for certain regions.
Lula’s coalition pointed to reduced bus services and long queues in at least nine states, including São Paulo and Salvador, cities that tend to favor him.
Likewise, Flavio’s campaign cited rain, flooding, roads closure and power cuts in 17 municipalities of São Paulo, Parana, and Santa Catarina, where he is favored.
The transport complaints were abstract. The Ministry of Justice identified problems in at least seven states, and in Salvador a half of the usual bus fleet was circulating. That led to the regional electoral court to order the arrest of the city’s mobility secretary. The electoral prosecutor’s office opposed extension, arguing for keeping the legal 5:00pm time and investigating the failures afterwards.
This where things started to get a little complicated.
Lula’s coalition took the complaint to the Supreme Court. Justice Cristiano Zanin, drawn by lot to handle it, ruled to extend voting times. The Associated Press logs the time of decision at 4:57pm, three minutes before closing. Poder360 logged the decision at 5:03, three minutes after closing.
Definitely a discrepancy there.
The voting was extended till 7:00pm local time.
By the time the order reached polling places, most had already closed and the machines were already shipped out. Zanin clarified taht it was covered only in sections that was still open. The electoral court relayed the guidance to the regional courts at 5:49pm. Some regional courts did not extend because all their sections had already closed.
All of this information is important and will play a role on why there is a call for annulment. Back to this issue in a minute.
Is This Normal?
Social media is screaming that the order was unprecedented. So, I had to look it up and find out more details on the situation.
Let’s break this down.
Voters who are in line at 5:00pm are always allowed to vote; they receive numbered tickets and the section stays open until it clears.
I’m not arguing whether people arrived a little before 5pm and was turned down. I’ve heard those claims, but with the data I have, I cannot verify them.
According to CNN Brasil, in the first round, about 3.7 million people voted after 5pm.
A nationwide extension of voting hours is, in fact, the first time this has happened. Another unprecedented issue was that the order came from the Supreme Court (STF) rather than the electoral court. However, observers argue that the rule “was not an irregularity.”.
Who Made the Call and the Questions it Raises
I wanted to do this separate because of the polemical nature of the decision and the person who made it. It deserves its own space because this is where the criticism lies.
The first issue is the jurisdiction.
Elections in Brazil are run by electoral courts, and both campaigns had addressed their requests for more time to the electoral court.
Lula’s coalition, however, took the issue up with the STF through a contitutional complaint. In 2023, the STF had ruled that in elections days, free public transportation should be available and in the same frequency as weekdays. And this is why Lula’s coalition took it up to the STF to enforce its own ruling.
The claim was that at least three cities in Bahia had violated the 2023 ruling and did not provide free public transport in the same frequency as weekdays. The remedy went well beyond the request and extended the voting in those municipalities.
This is where things got really messy. The electoral prosecutor of the region opposed any extension. Technically, the electoral prosecutor is the final authority. An opposition legislator said Zanin had overridden the electoral court and acted without authority, and some annouced impeachment requests. Legal commentators were divided on the issue. Some argue that Zanin acted within his powers, while others say he didn’t have the power.
Whether Zanin had the power or not is debatable. The one thing is not debatable is the apperance of partiality. Before joining the STF, Zanin was Lula’s personal lawyer and led the defense that oversaw Lula’s Car Wash scandal conviction overturned.
In turn, Lula nominated him in 2023, and at his confirmation hearing, Zanin promised not to rule on cases he worked on as a laywer. Some might argue that this was not one of his cases and it was a random assignment.
Regardless, Zanin’s ruling granted a request from his former client’s campaign, on the day of the client’s election, and critics such as Marcel van Hattem cited the relationship as grounds for suspicion.
None of this changes what the logs show about the extension actually reached. It does explain why many Brazilians distrust the decision.
I want to delve into the numbers and analyze the impact of the voting extension.
How I got the Data
Every machine in Brazil keeps a log, and the electoral court publish those logs. Each log records, to the second, when the machine opened, when each vote was confirmed and when the session was closed. This was the first source of my analysis.
Simultaneously, two other volunteers had already done that, each publishing the summary of every machine in GitHub (urnas-tardias and logsdasurnas).
I checked these two independent sources against the other. They agreed on the number of late votes for 99.9% of machines, and both reproduce the figure of about 34,000 votes after 5:00pm. That is the same number that CNN Brasil and the BBC reported from the same logs.
The logs confirm the time that each machine closed, but not how that section leans politically. For that I used the electoral’s court first round results for every section. These numbers were recorded on October 5th, three weeks before anything happened on the 25th. Every one of those 497,882 domestic machines matched its first-round section exactly. I measure a section’s lean as Flavio’s share of the Lula and Flavio votes there.
I counted a machine as having stayed open into the extension if it closed after 5:45pm the count is 7,606 machines and at 5:15 it is 9,079, against 7,342 at 5:45pm.
Methodology
The logs recorded local time, and Brazil spans several time zones, so each machine’s times were converted to Brasilia time using the hour at which machine was open locally. Every polling section opens at 8:00am Brasilia time. The earliest a machine closed was 17:00:09. And 88.5% closed within five minutes of 5pm.
To find which way the area leans, I compared each section with its neighbors. Statiscally speaking, this is a linear probability model with fixed effects. I ran it in four ways: with no controls, and then comparing sections only within the same state, within the same municipality and within the same electoral zone.
Each estimate answers one simple question. Take rwo section in the same place, one of which gave Flavio ten points more of its first-round vote than the other: how much more likely was the pro-Flavio section to stay open? The answer is in percentage points, so an estimate of -0.2 would mean that the pro-Flavio section’s chance of staying open was about 1.3% instead of the national average of 1.5%.
Comparison |
Effect of 10 points more Flávio support |
95% interval |
|---|---|---|
Nationwide, no controls |
−0.15 pp |
−0.43 to +0.14 |
Within the same state |
−0.23 pp |
−0.71 to +0.25 |
Within the same municipality |
+0.29 pp |
−0.55 to +1.12 |
Within the same electoral zone |
0.00 pp |
−0.08 to +0.08 |
Against a baseline of 1.48% of machines opened late, none of these affects can be distinguished from zero, adnt he comparison within electoral zones, the tightest of the four, pins at almost exactly zero.
Finally, to bound how much the uneven extension could have mattered, I built a deliberately generous scenario, described below, in which every machine that closed on time had stayed open instead.
What the Data Shows
The entire project can be found in my portfolio.
Only 7,352 of the 497,882 machines, or 1.48%, stayed open past 17h45. Together they recorded 5,052 votes after 17h, which is about a tenth of one percent of Lula’s 4,430,191-vote margin.
In Rio de Janeiro, 8.8% of the machines stayed open, and Pernambuco, Bahia, Paraiba, and the city of São Paulo account for most of the remaining. Santa Catarina, Mato Grosso do Sul, Roraima, Tocantis, and Amapa had none. Parana had one. Much of the South and Center-West the extension effectively never happened.
Here is what I was looking for. Where Flavio led, 1.23% stayed opened, against 1.78% where Lula led.
The real question that I still wanted to answer is where the gap was about politics or about geography.
The reality is that the data doesn’t indicate it was about politics. When comparing each section from the first round, and the machines that stayed late, it doesn’t appear to have any statistical effect. The estimate within the electoral zones is essentially zero, with a tight margin of error.
Could it Have Changed the Result?
One caviat to this section. My analysis is limited to the data I have access to from the TSE and other open sources data. What I cannot account for is the number of people who could have, or tried to vote after 5pm.
But suppose every machine that closed on time had stayed open and drawn late voters at the same rate as the ones that did, which was about 0.7 votes per machine. The total would be about 337,000 extra votes, or 7.6% of the margin. Even if every single vote went to Flavio, he would still fall short. Using the 90th percentile rate instead gives about 981,000, still about one fifth of the margin.
If those hypothetical voters are split according to each section’s actual first round, which is more relaistic, Flavio’s ne gain falls between 5,600 and 16,300 votes.
How Sure Am I?
Some of these conclusions relay heavily on the hard data. Others rely on assumptions. Let me separate them.
Claim |
Confidence |
Data or Assumption |
|---|---|---|
Machines open after 5pm, and when they closed |
High |
Data: these numbers were published by the electoral court parsed by two idenpent crawlers and agreed on 99.9% |
How many voters cast after 5pm |
High |
Data: the same logs matching the counts CNN Brasil and BBC |
The extension largely missed the South and Center-West |
High |
Data: direct counts by state from those logs |
Withing the same city or zone, a section’s lean did not decide weather it stayed open |
High |
Data: all 497,882 machines matched to first round results |
Why some sections were still opne when the order arrived |
Medium |
Assumption: Consistent with lines at closing time each regional court acted |
How many people reached closed sections? |
Unknown |
Not recorded anywhere |
How many more people would have voted had every section stayed open |
Unknown |
Counterfactual. The ceiling bounds it but cannot measure it |
You might noticed that I don’t have a margin of error on the number of lost voters. That’s because I’m not able to measure the number of voters who didn’t show up or didn’t make it to the polls.
However, for Flavio to close a 4.4 million-vote gap would require nine extra voters, voting for him, at every machine (480,000) that closed on time. Machines that stayed open late drew fewer than one late voter each.
Stolen Elections
Within hours of the results, prominent figure in the US went further than Flavio’s legal challenge. President Trump told reporters that he had not taken sides, but “it looked like another rigged election,” adding that the extension was very strange.
Steve Bannon called the results illegitimate on his podcast and urged the adminitration to cut diplomatic ties with Brazil. Elon Musk suggested the numbers didn’t add up. The State Department held back the congrulatory statement it usually issues to winners of foreign elections.
“Stolen” is a specific claim. It means that votes were added, removed, or miscounted, or enough voters were kept from voting. On the extension, which is one valid grivance, the data answers it directly. Again, reversing the results would require roughly an additional nine voters per machine.
Another claim going around in social media is that it would be impossible for Lula to gain 10.4 million votes and Flavio 3.7 million indicating that the combination exceeded the total number of voters. Those claims are incorrect as they failed to account for blank and null votes in the first round. Additionally, there was a greater than expected turn out.
Conclusion
The data supports part of the complaint. The extension was applied very unevenly across the country, and the states where Flávio is strongest largely did not get it, including two of the three states his own campaign asked to extend. That unequal treatment is real, and so are the questions about a Supreme Court justice, and a former lawyer of the winning candidate, making the call over the prosecutor’s objection. Those questions belong to the courts, and nothing here answers them.
What the data does not support is the idea that the extension was steered toward Lula’s voters, or that it was large enough to matter. Inside the same cities and zones, Bolsonaro-leaning sections were just as likely to stay open as Lula-leaning ones. Even the most generous assumptions about voters who were turned away leave the result where it was. The code, the data sources and every step of the analysis are public, so anyone who doubts these numbers can rerun them.