City Hall WatcherCampaign CashToronto municipal contributions, 2006–2025

Methodology

How this was built

97,180 contributions totalling $55,365,216.77, from 59,128 contributors to 1,765 campaigns across 13 elections. Here's where every number comes from, what's been corrected, and what the data might miss.

$55,365,217Total contributed
97,180Contributions
59,128Contributors
13Elections

Where the data comes from

All data is sourced from City of Toronto records. But here's the twist: The City's Elections Financial Disclosure system currently only goes back to 2018, and the most recent Open Data contribution is also from 2018. For older elections, we're relying on archived copies of previous data files that were removed from the Open Data Portal. We kept copies, of course.

ElectionSourceDatesContributionsTotal
2006 Municipal ElectionOpen Datanot published12,119$5,304,322.01
2010 Municipal ElectionOpen Datanot published21,651$11,862,184.28
2014 Municipal ElectionOpen Datanot published22,452$11,492,523.08
2018 Municipal Election (47 Wards)EFD filingsyes285$148,770.05
2018 Municipal Election (25 Wards)EFD filingsyes15,278$9,432,725.64
2021 Councillor Ward 22 By-ElectionEFD filingsyes924$473,485.25
2022 Municipal ElectionEFD filingsyes10,582$6,966,373.05
2023 French School Boards Trustee By-ElectionEFD filingsyes21$11,269.05
2023 By-Election for MayorEFD filingsyes11,858$8,533,948.14
2023 Councillor Ward 20 By-ElectionEFD filingsyes640$378,908.69
2024 Councillor Ward 15 By-ElectionEFD filingsyes564$291,912.36
2025 TDSB Ward 11 By-ElectionEFD filingsyes118$51,261.98
2025 Councillor Ward 25 By-ElectionEFD filingsyes688$417,533.19

Alas, the previous Open Data records for campaign contributions did not attach any dates to the contributions. As such, only elections from 2018 forward include dates in the data.

What the City does and does not verify

Nothing here has been audited. Candidates submit their own list of contributors who donated more than $100 to campaigns. Errors are common. We noticed several places where postal codes and names included obvious typos.

Corporate and union money

Corporations and unions were banned from directly contributing to council and mayoral campaigns starting with the 2010 election. That did not cover school board trustee campaigns — they were still able to accept these kinds of donations until a province-wide ban took effect in 2018. Registered third party advertisers can still accept corporate and union contributions.

General electionCorporateTrade union
20061,447339
201011988
201413587
201812
202210

Postal codes and privacy

For privacy reasons, we only publish the first three characters — also known as the Forward Sortation Area, or FSA — of postal codes from individual contributors. For corporate, union and third party registrants, we publish the full address.

While the City publishes full postal codes in its data release, it only keeps the information available for a limited time. Since this data is intended to be a permanent record of campaign contributions, redacting the full postal code seemed like a reasonable concession for privacy.

Full postal codes are used to match likely duplicates, but full postal codes are redacted as part of the build process. They do not exist anywhere on this server or in the online version of this database.

How contributors are identified

Initially, contributors were matched when the full name and postal code were the same across multiple contributions. A secondary process then suggested other likely duplicates, based on factors like nicknames (Mike vs. Michael) and postal codes that closely matched. There were many cases where postal codes were the result of obvious data entry errors. For example, a number of 3s were entered as 8s. This is probably because handwriting can be messy.

Election results and money per vote

A person may seek only one municipal office at a time. Anyone here with two campaigns in the same year registered for the first, left before the nomination deadline, and registered for the second. Those are separate campaigns with separate money — contributions cannot be moved between them — and they are never combined.

A candidate whose name doesn't appear in the final results is our cue to conclude that the candidate ended their campaign before the final nomination deadline. These campaigns show no votes and no money-per-vote figure, because they couldn't have received any votes. Note that in some other cases, candidates may have informally ended their campaign after the nomination deadline — often by pledging their support for another candidate — but their name still appeared on the ballot.

OutcomeCampaignsMeaning
Elected355Won the seat
Acclaimed0Unopposed; no votes cast
Defeated1,321On the ballot, lost
Dropped out49Raised money, left before the ballot was set
Election cancelled22The 2018 47-ward election, abandoned mid-campaign
Not applicable18Third party advertisers, never on a ballot

Money raised per vote received is not campaign spending. This is just a simple calculation that divides the amount raised from contributions — including self-funding — by the number of votes received. This archive holds no record of how much money was actually spent, so we can't account for rare cases where candidates raised a lot of money but — for whatever reason — didn't actually spend it.

Where mayoral donors also gave

Election pages with a contested mayoral race show a grid of how each mayoral campaign’s donors spread their support across the other major mayoral campaigns in the archive: those with 500 or more individual donors to that campaign itself.

Only individual donors count. A candidate’s gifts to their own campaign are left out: they are flagged as the candidate’s own from 2010 on, and for 2006, where there is no such flag, a gift filed under the candidate’s own name is treated the same way. Donors are the same people the search shows, matched on name and postal code plus the records combined by hand. A donor who moved, or filed under another name, and has not been combined is counted as two people, so overlaps can be slightly understated.

Each cell compares the rate at which any two candidates received contributions from the same person. 2.0 means these two candidates shared common contributors at twice the normal rate, while 0.1 means they had fewer common contributors than a typical pair of candidates. Hover over or tap a cell for the share and the number of donors the two campaigns have in common. Someone who ran for mayor more than once is pooled across all those runs. Contributions they received when they ran for council or trustee (if applicable) are not included.

What this cannot tell you

What the totals include

Corrections

Notice something wrong? We want to fix it. Get in touch with any errors or suggestions via email.

Special Thanks

The first version of Campaign Cash was developed in collaboration with Jeff McCartney. We thank him for all his work and for laying the foundation for this project.