Skip to content

ELECTION CASE · BR-PRES-2022 · DERIVED FROM TSE OPEN DATA

Brazil's 2022 presidential election: what the TSE files support.

Results, turnout, margin, swing and counting, read from the official files of Brazil's Superior Electoral Court (TSE). Every number states whether it is observed, derived or still unknown, and which file it came from.

Most voted, Round 2, as % of valid votes
50.90%
LULA (PT) · 60,345,999 votes
Derived Source dadosabertos-2022-agregado-e000545 · file time
Margin over second place, Round 2
1.80 pp
2,139,645 votes · percentage points of valid votes
Derived formula in section 3
Turnout, Round 2
79.42%
of registered voters · abstention 20.58%
Derived formula in section 2
National swing between rounds
-1.95 pp
share of LULA between the two finalists, round 1 to round 2
Derived formula in section 4
Case
BR-PRES-2022
Authority
TSE
Rounds
·
Linked sources
2
Files collected

Table CSVs: results · turnout · swing by state

How to read this page

observed, derived and unknown

This case uses no synthetic data and no opinion polls. The chain is always the same: official file, observation, calculation, claim. Never file straight to "truth".

The results of this cycle are no longer in the TSE results app. The numbers come from TSE Open Data: from each ZIP only the federal entry (nominal votes and counting detail by municipality and zone) is read, with CRC-32 checked and SHA-256 recorded, and summed by state, abroad and Brazil. That is why results show as derived, never as observed.

Observed
A number read from an official TSE file, with its URL, download date and SHA-256 recorded in the manifest and checked again every time this page is generated.
Derived
A calculation on official files, such as sums by state, percentages, margin, swing and the cumulative counting share. The formula is shown right below each table.
Unknown
What no collected file supports yet. Each item states the reason in section 10.

No number on this page was typed by hand: the page is generated at publication from the TSE files versioned in the Evidence repository. The text gives no opinion on candidates, parties or institutions, makes no forecast and assigns no aggregate confidence score.

To check, download the manifest and compare the SHA-256 of each file with what the TSE publishes at the same URL. The dossier carries the same chain in Markdown, in Portuguese. The comparison with other cycles is in the elections index.

The case in two figures

The national result by round and the change between rounds in each state. The tables with the same numbers come next; the maps page has four more figures. See the case maps

National result by round, 2022Percentage of valid votes by candidacy. Round 1: nº 13 (LULA) 48.43%, nº 22 (JAIR BOLSONARO) 43.20%; Round 2: nº 13 (LULA) 50.90%, nº 22 (JAIR BOLSONARO) 49.10%. Equivalent table on the page.National result by round, 2022Percentage of valid votes by candidacy, from most to least voted.Evidence state: DERIVED. Votes summed from TSE Open Data;percentages of valid votes.Round 113 LULA (PT): 48.43%, 57,259,504 votes13 LULA48.43%22 JAIR BOLSONARO (PL): 43.20%, 51,072,345 votes22 JAIR BOLSONARO43.20%15 SIMONE TEBET (MDB): 4.16%, 4,915,423 votes15 SIMONE TEBET4.16%12 CIRO GOMES (PDT): 3.04%, 3,599,287 votes12 CIRO GOMES3.04%44 SORAYA THRONICKE (UNIÃO): 0.51%, 600,955 votes44 SORAYA THRONICKE0.51%30 FELIPE D AVILA (NOVO): 0.47%, 559,708 votes30 FELIPE D AVILA0.47%14 PADRE KELMON (PTB): 0.07%, 81,129 votes14 PADRE KELMON0.07%80 LÉO PÉRICLES (UP): 0.05%, 53,519 votes80 LÉO PÉRICLES0.05%21 SOFIA MANZANO (PCB): 0.04%, 45,620 votes21 SOFIA MANZANO0.04%16 VERA (PSTU): 0.02%, 25,625 votes16 VERA0.02%27 CONSTITUINTE EYMAEL (DC): 0.01%, 16,604 votes27 CONSTITUINTE EYMAEL0.01%Round 213 LULA (PT): 50.90%, 60,345,999 votes13 LULA50.90%22 JAIR BOLSONARO (PL): 49.10%, 58,206,354 votes22 JAIR BOLSONARO49.10%50% of valid votesSource: TSE, BR-PRES-2022, manifesto SHA-256 9bf8dbdc34a8.Reveno Evidence · evidence.reveno.com.br
Swing between round 1 and round 2 by state, 2022Grid cartogram. Swing of no. 13 (LULA) from round 1 to round 2 in 28 scopes, in percentage points. Brazil: -1.95 pp. Largest: DF -0.45 pp. Smallest: RS -2.73 pp. Equivalent table on the page.Swing between round 1 andround 2 by state, 2022Percentage points of the share of no.13 between the two finalists. Positive:toward no. 13 (LULA). Negative: towardno. 22 (JAIR BOLSONARO).Evidence state: DERIVED. Votes summedfrom TSE Open Data; swing computed fromthem.RR: -0.96 ppRR-0.96AP: -2.63 ppAP-2.63AM: -2.57 ppAM-2.57PA: -1.71 ppPA-1.71MA: -1.44 ppMA-1.44CE: -2.23 ppCE-2.23RN: -1.90 ppRN-1.90AC: -2.19 ppAC-2.19RO: -1.71 ppRO-1.71TO: -2.03 ppTO-2.03PI: -2.00 ppPI-2.00PE: -1.64 ppPE-1.64PB: -1.80 ppPB-1.80MT: -1.58 ppMT-1.58GO: -1.82 ppGO-1.82BA: -2.03 ppBA-2.03SE: -1.43 ppSE-1.43AL: -2.37 ppAL-2.37MS: -2.05 ppMS-2.05DF: -0.45 ppDF-0.45MG: -2.35 ppMG-2.35ES: -1.66 ppES-1.66PR: -1.84 ppPR-1.84SP: -1.39 ppSP-1.39RJ: -0.86 ppRJ-0.86SC: -1.46 ppSC-1.46RS: -2.73 ppRS-2.73Abroad (ZZ): -1.85 ppZZ-1.85Abroad← toward no. 22toward no. 13 →3.520.50.523.5pp · under 0.5 pp: graySource: TSE, BR-PRES-2022, manifestoSHA-256 9bf8dbdc34a8.Grid: Reveno positions, one cell perstateReveno Evidence ·evidence.reveno.com.br

1. Results by round

Round 1 ·

Derived Source dadosabertos-2022-agregado-e000544 · observed at · sections totalized n/a · valid votes 118,229,719

Table 1Round 1 results in Brazil, by candidate. Derived
No.CandidatePartyVotes% of valid votesStatus (TSE)
13LULAPT57,259,504Runoff
22JAIR BOLSONAROPL51,072,345Runoff
15SIMONE TEBETMDB4,915,423Not elected
12CIRO GOMESPDT3,599,287Not elected
44SORAYA THRONICKEUNIÃO600,955Not elected
30FELIPE D AVILANOVO559,708Not elected
14PADRE KELMONPTB81,129Not elected
80LÉO PÉRICLESUP53,519Not elected
21SOFIA MANZANOPCB45,620Not elected
16VERAPSTU25,625Not elected
27CONSTITUINTE EYMAELDC16,604Not elected

Round 2 ·

Derived Source dadosabertos-2022-agregado-e000545 · observed at · sections totalized n/a · valid votes 118,552,353

Table 2Round 2 results in Brazil, by candidate. Derived
No.CandidatePartyVotes% of valid votesStatus (TSE)
13LULAPT60,345,999Elected
22JAIR BOLSONAROPL58,206,354Not elected

Derived Source: TSE, dadosabertos-2022-agregado-e000544, dadosabertos-2022-agregado-e000545 · collected on · manifest SHA-256 9bf8dbdc34a8 · Download CSV · See the files

2. Turnout

Table 3Turnout in Brazil, by round.
MeasureRound 1Round 2State
Registered voters156,454,011156,454,011Derived
Turnout123,682,372124,252,796Derived
Abstention32,770,98232,200,558Derived
Valid votes118,229,719118,552,353Derived
Blank votes1,964,7791,769,678Derived
Null votes3,487,8743,930,765Derived
Turnout (% of registered voters)79.05%79.42%Derived
Abstention (% of registered voters)20.95%20.58%Derived

Formula turnout_pct = 100 * turnout / electorate; abstention_pct = 100 * abstention / electorate

Derived Source: TSE, dadosabertos-2022-agregado-e000544, dadosabertos-2022-agregado-e000545 · collected on · manifest SHA-256 9bf8dbdc34a8 · Download CSV · See the files

3. Margin

Table 4Lead of the first over the second candidate, by round.
RoundAheadMargin (votes) DerivedMargin (percentage points of valid votes) Derived
Round 1LULA6,187,1595.23
Round 2LULA2,139,6451.80

Formula lead_votes = votes_A - votes_B; lead_pp = 100 * votes_A / valid_votes - 100 * votes_B / valid_votes

4. Change between rounds and national swing

Table 5Change in Brazil from round 1 to round 2.
MeasureChange Derived
Abstention (percentage points)-0.36
Turnout (votes)+570,424
Valid votes (votes)+322,634

Formula delta_abstention_pp = abstention_pct_t2 - abstention_pct_t1; delta_turnout = turnout_t2 - turnout_t1; delta_valid = valid_t2 - valid_t1

Table 6National swing of the two finalists.
CandidateRound 1 votes ObservedRound 2 votes ObservedRound 1 share, between the two DerivedRound 2 share DerivedSwing (pp) DerivedVote gain Derived
LULA57,259,50460,345,99952.86%50.90%-1.95+3,086,495
JAIR BOLSONARO51,072,34558,206,35447.14%49.10%+1.95+7,134,009

Formula first_round_two_candidate_normalized_share = v1_A / (v1_A + v1_B); second_round_share = v2_A / valid_t2; swing_pp = 100 * (second - first); absolute_vote_gain = v2_A - v1_A

5. Swing by state

Fig. 1Swing between the two finalists, round 1 to round 2, in 28 scopesPercentage points of the share between the two finalists, from largest to smallest. Bar to the right: the share of LULA between the two finalists grew; to the left: the share of JAIR BOLSONARO grew. Scale from 0 to 3 percentage points on each side. The written value is the swing of LULA.
  1. DF-0.45
  2. RJ-0.86
  3. RR-0.96
  4. SP-1.39
  5. SE-1.43
  6. MA-1.44
  7. SC-1.46
  8. MT-1.58
  9. PE-1.64
  10. ES-1.66
  11. PA-1.71
  12. RO-1.71
  13. PB-1.80
  14. GO-1.82
  15. PR-1.84
  16. Abroad (ZZ)-1.85
  17. RN-1.90
  18. PI-2.00
  19. BA-2.03
  20. TO-2.03
  21. MS-2.05
  22. AC-2.19
  23. CE-2.23
  24. MG-2.35
  25. AL-2.37
  26. AM-2.57
  27. AP-2.63
  28. RS-2.73

Derived Source: TSE, dadosabertos-2022-agregado-e000544, dadosabertos-2022-agregado-e000545 · collected on · manifest SHA-256 9bf8dbdc34a8 · Download CSV · See the files

Table 7Swing from round 1 to round 2 in 28 scopes (27 states and abroad).
ScopeRound 2 registered voters ObservedSwing LULA (pp) DerivedGain LULA DerivedSwing JAIR BOLSONARO (pp) DerivedGain JAIR BOLSONARO Derived
AC587,765-2.19-7,456+2.19+12,168
AL2,325,814-2.37+2,675+2.37+66,312
AM2,647,123-2.57-14,693+2.57+81,543
AP550,131-2.63-7,464+2.63+12,926
BA11,282,999-2.03+224,734+2.03+309,429
CE6,818,192-2.23+229,536+2.23+256,650
DF2,207,628-0.45+79,761+0.45+130,934
ES2,922,264-1.66+29,419+1.66+122,115
GO4,870,621-1.82+87,392+1.82+272,838
MA5,039,307-1.44+64,971+1.44+98,888
MG16,284,615-2.35+388,389+2.35+902,046
MS1,996,066-2.05+11,224+2.05+86,400
MT2,469,797-1.58+19,038+1.58+113,864
PA6,078,857-1.71+65,354+1.71+189,222
PB3,091,719-1.80+47,085+1.80+85,086
PE7,015,086-1.64+82,611+1.64+167,894
PI2,570,253-2.00+33,375+2.00+60,168
PR8,480,626-1.84+143,113+1.84+530,731
RJ12,827,044-0.86+309,074+0.86+572,648
RN2,554,326-1.90+62,606+1.90+88,650
RO1,230,172-1.71+1,155+1.71+51,930
RR366,641-0.96-1,632+0.96+5,931
RS8,589,684-2.73+85,179+2.73+488,162
SC5,501,284-1.46+72,702+1.46+353,224
SE1,671,241-1.43+34,235+1.43+42,476
SP34,684,876-1.39+1,029,850+1.39+1,976,598
TO1,094,302-2.03+290+2.03+32,460
Abroad (ZZ)695,578-1.85+13,972+1.85+22,716

Each row uses the round 1 and round 2 snapshots of the scope; each file is listed in the sources table.

Formula first_round_two_candidate_normalized_share = v1_A / (v1_A + v1_B); second_round_share = v2_A / valid_t2; swing_pp = 100 * (second - first); absolute_vote_gain = v2_A - v1_A

6. Counting timeline

Round 1

First closing · Last closing · Sources dadosabertos-2022-agregado-e000544

Table 8Round 1: closing time by scope, in time order.
OrderScopeClosed at DerivedRegistered voters DerivedCumulative share of registered voters Derived
1DF2,206,9961.41%
2ES2,922,3793.28%
3RR366,6323.51%
4TO1,094,3464.21%
5RS8,589,4329.70%
6MS1,995,93210.98%
7SC5,501,47814.49%
8GO4,870,29217.61%
9SE1,671,37618.68%
10SP34,684,92740.85%
11AL2,326,49142.33%
12PB3,092,05344.31%
13AP550,16544.66%
14AC587,73845.04%
15MT2,469,60446.61%
16RJ12,826,35654.81%
17MG16,283,82865.22%
18RO1,229,99866.01%
19RN2,554,71667.64%
20PE7,015,42172.12%
21CE6,818,73276.48%
22MA5,039,28779.70%
23PA6,079,28083.59%
24BA11,283,40590.80%
25PR8,480,43596.22%
26PI2,570,43397.86%
27Abroad (ZZ)695,35598.31%
28AM2,646,924100.00%

Formula cumulative_electorate_share = sum(electorate dos escopos fechados até t) / sum(electorate)

Derived Geographic completion bias (total variation between expected and observed weight of each state, at snapshot time): 0.00947

Formula expected_weight = electorate_i / sum(electorate); observed_weight = turnout_totalized_i / sum(turnout_totalized); bias = observed_weight - expected_weight

Finalization milestones

  • Mathematically decided Unknown no source collected for this milestone
  • Totalization complete Unknown no source collected for this milestone
  • Result announced Unknown no source collected for this milestone
  • Result proclaimed Unknown no source collected for this milestone
  • Certification (diplomação) Unknown no source collected for this milestone
  • Taking office Unknown no source collected for this milestone

Round 2

First closing · Last closing · Sources dadosabertos-2022-agregado-e000545

Table 9Round 2: closing time by scope, in time order.
OrderScopeClosed at DerivedRegistered voters DerivedCumulative share of registered voters Derived
1ES2,922,2641.87%
2MS1,996,0663.14%
3TO1,094,3023.84%
4PB3,091,7195.82%
5SE1,671,2416.89%
6DF2,207,6288.30%
7RO1,230,1729.09%
8RN2,554,32610.72%
9AL2,325,81412.20%
10RS8,589,68417.69%
11MT2,469,79719.27%
12RJ12,827,04427.47%
13CE6,818,19231.83%
14RR366,64132.06%
15PE7,015,08636.55%
16SC5,501,28440.06%
17GO4,870,62143.18%
18SP34,684,87665.35%
19MG16,284,61575.76%
20BA11,282,99982.97%
21PR8,480,62688.39%
22MA5,039,30791.61%
23PI2,570,25393.25%
24AC587,76593.63%
25Abroad (ZZ)695,57894.07%
26AP550,13194.42%
27PA6,078,85798.31%
28AM2,647,123100.00%

Formula cumulative_electorate_share = sum(electorate dos escopos fechados até t) / sum(electorate)

Derived Geographic completion bias (total variation between expected and observed weight of each state, at snapshot time): 0.00965

Formula expected_weight = electorate_i / sum(electorate); observed_weight = turnout_totalized_i / sum(turnout_totalized); bias = observed_weight - expected_weight

Finalization milestones

  • Mathematically decided Unknown no source collected for this milestone
  • Totalization complete Unknown no source collected for this milestone
  • Result announced Unknown no source collected for this milestone
  • Result proclaimed Unknown no source collected for this milestone
  • Certification (diplomação) Unknown no source collected for this milestone
  • Taking office Unknown no source collected for this milestone

Marginal share between counting instants

Unknown só um instante por escopo foi coletado; o painel de evolução da totalização não foi localizado nos arquivos públicos

7. Events

No event recorded in this case: the events ledger depends on a collected official publication, and none was collected.

8. Assurances

Table 10Recorded assurances, with what each one does not support.
CategoryAssuranceMethodDateStateSourceLimits
Public verifiabilityResultado por município e zona publicado nos Dados Abertos do TSE
Os CSV de votação nominal e de detalhe da apuração por município e zona estão publicados sem autenticação; o agregado por UF e Brasil é a soma deles.
agregacao_dos_csv_dados_abertosDeriveddadosabertos-2022-agregado-e000544
  • Verificabilidade do resultado publicado; não verifica o conteúdo das urnas.
  • O agregado é DERIVED: soma das linhas dos CSV, conferível extraindo as mesmas entradas dos ZIPs.

An assurance supports what was verified, nothing more. There is no aggregate confidence score.

9. Claims

Table 11Claims ledger, with the state the loaded evidence supports.
ClaimStateEvidenceRationale
LULA venceu o 2º turno de 2022Confirmed
  • snapshot snap_BR-PRES-2022_2_br_202210310018040300 Derived
  • source dadosabertos-2022-agregado-e000545 Derived
Resultado consolidado do Brasil com 100% das seções e candidato marcado como eleito.
A abstenção do 2º turno foi menor que a do 1ºConfirmed
  • snapshot snap_BR-PRES-2022_1_br_202210041027340300 Derived
  • snapshot snap_BR-PRES-2022_2_br_202210310018040300 Derived
Derivado de dois snapshots observados: abstenção 20.9461% no 1º turno e 20.5815% no 2º. A variação é DERIVED; a causa não está estabelecida.

10. What is still unknown

Unknown does not mean false: it means no collected source supports the item. Each row states the reason.

  • Unknown Marginal share between counting instantssó um instante por escopo foi coletado; o painel de evolução da totalização não foi localizado nos arquivos públicos
  • Unknown Finalization milestones, Round 1Mathematically decided, Totalization complete, Result announced, Result proclaimed, Certification (diplomação), Taking office: no source collected for this milestone
  • Unknown Finalization milestones, Round 2Mathematically decided, Totalization complete, Result announced, Result proclaimed, Certification (diplomação), Taking office: no source collected for this milestone

11. Sources

Table 122 official files linked to the case, with download date and SHA-256.
IdTypeURLDownloaded atSHA-256BytesState
dadosabertos-2022-agregado-e000544Open Data aggregatehttps://cdn.tse.jus.br/estatistica/sead/odsele/votacao_candidato_munzona/votacao_candidato_munzona_2022.zip8df047e326cb03289d2f7d17daefc729892b519eb2c78aff33b9bc8c7816942681,404Derived
dadosabertos-2022-agregado-e000545Open Data aggregatehttps://cdn.tse.jus.br/estatistica/sead/odsele/votacao_candidato_munzona/votacao_candidato_munzona_2022.zipb10c3c8ce251a70b45732ef2c7da23642374a73bf4013edf6bbc5d8cc92b8cbe23,183Derived

SHA-256 of the collection manifest: 9bf8dbdc34a88f3d3678f433ca3ad4500c4e2a17a5203d6a49d628b0cb6910d4 · Collection finished at

Table 132 TSE Open Data ZIP entries used in the aggregate, with the SHA-256 of the uncompressed entry.
IdURLZIP entryDownloaded atEntry SHA-256BytesBytes downloaded
dadosabertos-2022-votacao-candidato-munzona-brhttps://cdn.tse.jus.br/estatistica/sead/odsele/votacao_candidato_munzona/votacao_candidato_munzona_2022.zipvotacao_candidato_munzona_2022_BR.csv5931b526b48afe455b14b83647b050abbbd848df04110a68ece653bef459e9a838,081,8082,224,009
dadosabertos-2022-detalhe-votacao-munzona-brhttps://cdn.tse.jus.br/estatistica/sead/odsele/detalhe_votacao_munzona/detalhe_votacao_munzona_2022.zipdetalhe_votacao_munzona_2022_BR.csv9e3711999732656004bbdae2e33e5abaeff0019cfd2e1c7f2ca7d94774f7875e3,451,986772,625

The whole ZIP is not downloaded: only the central directory and the federal entry, by HTTP Range, with CRC-32 checked. To check, extract the same entry from the published ZIP and compare the SHA-256. The aggregate by state and Brazil is derived (a sum of rows).

12. About this data

What it measures
Votes by candidate in each round, turnout (registered voters, turnout, abstention, blank and null votes), margin between the two most voted and swing between rounds, in Brazil, by state and abroad.
Source
Brazil's Superior Electoral Court (TSE): 2 official files, listed in the sources table with URL and SHA-256.
Unit
Votes (count); share of valid votes or of registered voters; percentage points (pp) for margin and swing.
Period
(Round 1) and (Round 2)
Last collected
Next scheduled collection
Daily at 09:30 UTC (06:30 in Brasília), by the evidence-tse engine, which checks the SHA-256 of every file. This page changes on the next site publication.
Maintained by
Reveno Evidence · evidence-tse engine, owner Thiago Holtz
Evidence state
Derived
Version
Collection manifest, SHA-256 9bf8dbdc34a88f3d3678f433ca3ad4500c4e2a17a5203d6a49d628b0cb6910d4
License
Source data license: public data from the TSE, under the court's terms. License for the Reveno text and calculations: not declared yet; until then, cite this page.

13. Download the data

  1. What is on screen

    The tables on this page as CSV, with unformatted numbers and the evidence state of every row.

  2. The full set, with a manifest

    A ZIP with every file behind the page, a README with the citation and license, and a manifest with the SHA-256 of each file.

  3. For machines

    A JSON at a stable address, with metadata, citation, tables and sources. The address does not change between publications; the content changes when the collection changes.

14. How to cite

Short citation for a chart or table caption, or a note

TSE (2022), processed by Reveno Evidence

Full citation with URL and access date

Reveno Evidence (2026). Brazil 2022 presidential election: results and TSE evidence (BR-PRES-2022) [Data set]. Source data: Brazil's Superior Electoral Court (TSE), files collected on 2026-11-03 (UTC). Collection manifest, SHA-256 9bf8dbdc34a88f3d3678f433ca3ad4500c4e2a17a5203d6a49d628b0cb6910d4. Retrieved November 3, 2026, from https://evidence.reveno.com.br/en/elections/br-pres-2022/

BibTeX

@misc{reveno_evidence_br_pres_2022,
  author = {{Reveno Evidence}},
  title = {Brazil 2022 presidential election: results and TSE evidence (BR-PRES-2022)},
  year = {2026},
  publisher = {Reveno},
  url = {https://evidence.reveno.com.br/en/elections/br-pres-2022/},
  urldate = {2026-11-03},
  note = {Source data: Brazil's Superior Electoral Court (TSE), files collected on 2026-11-03 (UTC). Collection manifest, SHA-256 9bf8dbdc34a88f3d3678f433ca3ad4500c4e2a17a5203d6a49d628b0cb6910d4}
}

The access date is filled in with the date of this version of the page; replace it with the date you accessed it.

When you use a number, also cite the source file: id, URL and SHA-256 are in the sources table.

Source data license: public data from the TSE, under the court's terms. License for the Reveno text and calculations: not declared yet; until then, cite this page.

Ledger entries (events, assurances, claims and reasons) are recorded in Portuguese, as in the dossier.

Discover · open and freeAgents & SkillsSkills, agents and MCP servers with origin and triage.Operate · early accessHarnessThe cloud IDE where every agent runs with an owner and a receipt.Decide · early accessEvidenceSynthetic data to test the decision before you invest.