The Polls Said Flávio. Our Synthetic Brazil Said Lula. Lula Won.

Five days out, Brazil's pollsters had Flávio Bolsonaro winning the runoff. 600 synthetic Brazilians disagreed: Lula by 4.3. He won by 3.5. The same Sunday, our synthetic Bulgaria called the runoff and both names in it.

Brazil went to the polls on Sunday expecting Flávio Bolsonaro to win.

He had won round one three weeks earlier. In the final week of the runoff, seven of the eight polls we tracked had him ahead and the eighth had it level. The poll average said Flávio by 2.2.

On 20 October, five days before the vote, our Decision Desk recorded a different answer. Our 600 synthetic Brazilians said Lula by 4.3.

Then Brazil counted.

The polls · final weekFlávio +2.2Poll average. Seven of eight polls had Flávio ahead, one had it level.
Our call · 20 OctoberLula +4.3Lula 52.1, Flávio 47.9. 600 synthetic voters.
The result · 25 OctoberLula +3.5Lula 51.76, Flávio 48.24. Official count.

Lula won. Our call was within 0.3 points of each candidate’s share and 0.8 points of the margin. The poll average was 5.7 points off the margin and named the wrong winner. It is the first time since direct elections returned in 1989 that the candidate who came second in round one has won Brazil’s presidency.

Fig. 1

Every poll on one side. Our call on the other.

PollOur callOfficial count
← FLÁVIO AHEADLULA AHEAD →642246TIEDRESULT LULA +3.5Round one count4 OctRound one count, 4 Oct: Flávio +2.0Flávio +2.0AtlasIntel18 OctAtlasIntel, 18 Oct: Flávio +2.2Flávio +2.2Gerp16 OctGerp, 16 Oct: Flávio +4.0Flávio +4.0Datafolha15 OctDatafolha, 15 Oct: Flávio +2.0Flávio +2.0PoderData15 OctPoderData, 15 Oct: TiedTiedCNT/MDA15 OctCNT/MDA, 15 Oct: Flávio +1.0Flávio +1.0Quaest13 OctQuaest, 13 Oct: Flávio +2.0Flávio +2.0PoderData12 OctPoderData, 12 Oct: Flávio +2.0Flávio +2.0BTG/Nexus12 OctBTG/Nexus, 12 Oct: Flávio +4.0Flávio +4.0Poll average10 pollsPoll average, 10 polls: Flávio +2.2Flávio +2.2Our call20 Oct · 600 synthetic votersOur call: Lula +4.3Lula +4.3
← FLÁVIO AHEADLULA AHEAD →642246TIEDRESULT L+3.5Round one4 OctRound one count, 4 Oct: Flávio +2.0F+2.0AtlasIntel18 OctAtlasIntel, 18 Oct: Flávio +2.2F+2.2Gerp16 OctGerp, 16 Oct: Flávio +4.0F+4.0Datafolha15 OctDatafolha, 15 Oct: Flávio +2.0F+2.0PoderData15 OctPoderData, 15 Oct: TiedTiedCNT/MDA15 OctCNT/MDA, 15 Oct: Flávio +1.0F+1.0Quaest13 OctQuaest, 13 Oct: Flávio +2.0F+2.0PoderData12 OctPoderData, 12 Oct: Flávio +2.0F+2.0BTG/Nexus12 OctBTG/Nexus, 12 Oct: Flávio +4.0F+4.0Poll avg.10 pollsPoll average, 10 polls: Flávio +2.2F+2.2Our call20 OctOur call: Lula +4.3L+4.3
Brazil's runoff margin, Lula minus Flávio, two-party, in points. Rings are the eight runoff polls of the final week and their average (valid votes); the square is the round-one count. Our call was made on 20 October. The line is the official count: Lula 51.76, Flávio 48.24.

Why it matters

The polls weren’t careless. Datafolha, Quaest, AtlasIntel and the rest are serious operations, and they agreed with each other. Agreeing with each other is exactly the problem: when every instrument leans the same way, nobody in the room is placed to say otherwise.

A synthetic electorate is a different instrument. It is not a poll and it does not average polls. It is 600 synthetic Brazilians, built to match the real country, each given what a voter would have known in the last week of the campaign and asked how they would vote. Five days out it came down on the other side of the consensus, and the country came down there with it.

Three governors, called

Six states also elected their governors in Sunday’s runoffs. In three of them our call named the winner and came close on the margin:

Fig. 2

Three governors, called

Official countOur call
TIED+10+20+30+40WINNER AHEAD →AcreMailza wonAcre result: Mailza +32.4Our call: Mailza +28.0Mailza +32.4Mailza +28.0✓Distrito FederalCelina wonDistrito Federal result: Celina +14.4Our call: Celina +9.1Celina +14.4Celina +9.1✓AmazonasAziz wonAmazonas result: Aziz +22.8Our call: Aziz +40.1Aziz +22.8Aziz +40.1✓
TIED+10+20+30+40WINNER AHEAD →AcreMailza wonAcre result: Mailza +32.4Our call: Mailza +28.0+32.4+28.0✓Distrito Fed.Celina wonDistrito Federal result: Celina +14.4Our call: Celina +9.1+14.4+9.1✓AmazonasAziz wonAmazonas result: Aziz +22.8Our call: Aziz +40.1+22.8+40.1✓
The winner's margin in the count and in our call, two-party, in points. Official counts at 100% of ballot boxes, 25 October.
  • Acre: Mailza Assis won with 66.2%. We had her at 64.0, within 2.2 points.
  • Distrito Federal: Celina Leão won with 57.2%. We had her at 54.6. We were closer on the margin than the polls: we said 9 points, polls said 21, the count said 14.
  • Amazonas: Omar Aziz won, as we called.

Bulgaria: the runoff, and who is in it

The same Sunday, Bulgaria held round one of its presidential election, with twenty-seven tickets on the ballot. Our synthetic Bulgaria made three calls: no one wins outright, Iliana Iotova finishes first, and Andrey Gyurov finishes second. All three held. Iotova and Gyurov meet in the runoff on 1 November.

It also put the top four in the order the country did:

Our callThe count
1Iliana IotovaIliana Iotova · 34.8%✓
2Andrey GyurovAndrey Gyurov · 32.0%✓
3Kostadin KostadinovKostadin Kostadinov · 12.5%✓
4Radostin VasilevRadostin Vasilev · 4.6%✓

Further down the ballot the small parties landed close to their real shares: Vasilev within 0.7 points, Ivan Hristanov about half a point off, and Ivelin Mihaylov within 1.5. These are parties at 2 to 5 percent, where a few synthetic voters either way would show.

The scorecard

CallsRight
Brazil, president11
Brazil, governors63
Bulgaria, who reaches the runoff11
Total85

Both head-of-state races, the ones each country was watching, went the way we called them. In Brazil, it was the call nobody else made.

Where we fell short

A desk that only shows its wins is not keeping score.

Fig. 3

Three governors, missed

Official countOur call
−20−10TIED+10+20+30← LOSER AHEADWINNER AHEAD →Espírito SantoPazolini wonEspírito Santo result: Pazolini +4.3Our call: Ferraço +0.4Pazolini +4.3Ferraço +0.4✗Rio Grande do NorteCadu wonRio Grande do Norte result: Cadu +1.5Our call: Allyson +15.1Cadu +1.5Allyson +15.1✗TocantinsVicentinho wonTocantins result: Vicentinho +29.0Our call: Dorinha +20.8Vicentinho +29.0Dorinha +20.8✗
−20−10TIED+10+20+30← LOSER AHEADWINNER AHEAD →Espírito SantoPazolini wonEspírito Santo result: Pazolini +4.3Our call: Ferraço +0.4+4.3−0.4✗R. G. do NorteCadu wonRio Grande do Norte result: Cadu +1.5Our call: Allyson +15.1+1.5−15.1✗TocantinsVicentinho wonTocantins result: Vicentinho +29.0Our call: Dorinha +20.8+29.0−20.8✗
The same measure for the other three runoffs. Left of the line, our call had the loser ahead.
  • Tocantins was a clean miss. Round one there was nearly a tie, and every runoff poll had Vicentinho Júnior ahead by 8 to 13 points. We had Professora Dorinha winning by 21. She lost by 29. This is the race we are taking apart first.
  • Rio Grande do Norte went the other way. We had Allyson Bezerra by 15. The PT’s Cadu Xavier won by 1.5, the closest race of the night. The poll average had Allyson ahead too, but by 4, not 15.
  • Espírito Santo was a coin flip, and we called it wrong. Our electorate split 49.8 to 50.2, a 0.4-point edge to Ricardo Ferraço. Lorenzo Pazolini won by 4.3. We were closer to the final margin than the polls (which had Pazolini by 11), but on the wrong side of it.
  • Amazonas was right but too lopsided. We had Omar Aziz winning by 40; he won by 23.
Fig. 4

Bulgaria, round one: the right order, the wrong distances

Official countOur call
Iliana IotovaIliana Iotova, result: 34.8%Iliana Iotova, our call: 44.0%34.8 result44.0 our callAndrey GyurovAndrey Gyurov, result: 32.0%Andrey Gyurov, our call: 18.8%32.0 result18.8 our callKostadin KostadinovKostadin Kostadinov, result: 12.5%Kostadin Kostadinov, our call: 6.1%12.5 result6.1 our callRadostin VasilevRadostin Vasilev, result: 4.6%Radostin Vasilev, our call: 3.9%4.6 result3.9 our callIvelin MihaylovIvelin Mihaylov, result: 3.8%Ivelin Mihaylov, our call: 2.3%3.8 result2.3 our callIvan HristanovIvan Hristanov, result: 2.4%Ivan Hristanov, our call: 2.9%2.4 result2.9 our callNone of the aboveNone of the above, result: 4.4%None of the above, our call: 20.1%4.4 result20.1 our call
IotovaIliana Iotova, result: 34.8%Iliana Iotova, our call: 44.0%34.844.0GyurovAndrey Gyurov, result: 32.0%Andrey Gyurov, our call: 18.8%32.018.8KostadinovKostadin Kostadinov, result: 12.5%Kostadin Kostadinov, our call: 6.1%12.56.1VasilevRadostin Vasilev, result: 4.6%Radostin Vasilev, our call: 3.9%4.63.9MihaylovIvelin Mihaylov, result: 3.8%Ivelin Mihaylov, our call: 2.3%3.82.3HristanovIvan Hristanov, result: 2.4%Ivan Hristanov, our call: 2.9%2.42.9None of aboveNone of the above, result: 4.4%None of the above, our call: 20.1%4.420.1
Share of all valid ballots. Central Election Commission, 99.95% of protocols processed. Our call: 20 October.
  • Bulgaria’s gap. We had Iotova 25 points clear; she led by under 3. The final polls, at 13 to 24 points, missed it too, but that is no defence: Gyurov’s late surge is the story of the night, and our electorate did not see it.
  • Protest in the wrong place. Our synthetic Bulgaria parked a fifth of its vote on “none of the above”. Real voters gave it 4.4%. Bulgarians who wanted to protest mostly stayed home instead, on a turnout of about 22%. We did not model turnout for this race, and in an election decided by who showed up, that matters.
  • Where GERB’s voters went. GERB and DPS fielded no candidate, and the polling before the vote had GERB’s voters leaning to Gyurov. Our own check against Alpha Research’s breakdown had flagged it: our electorate sent most of them to Iotova. We published the call anyway; a check that far off should have held it back.
  • Small samples are noisy. Each governor race and the Bulgarian call used 200 synthetic voters, which leaves several points of margin uncertainty either way. Even Brazil’s presidency, at 600, carries about four points of noise on the margin. The Lula call is the result we are proudest of, but one race is a data point, not a track record.

Our calls, as they stood on the desk before the vote: Brazil · Bulgaria.


Synthetic estimates describe a simulated population, not a poll of real voters. The calls shown are the ones recorded on our Decision Desk on 20 October 2026, before the vote. Bulgaria’s figures are the CEC’s count at 99.95% processed and may move slightly before certification.

  • elections
  • brazil
  • bulgaria
  • 2026
  • results