Methodology
TorontoSpends lets you search and cross-reference the City of Toronto's operating budget, community grants, and Council/Committee decisions.
Data sources
| Dataset | Source |
|---|---|
| Operating budget | https://open.toronto.ca/dataset/budget-operating-budget-program-summary-by-expenditure-category/ |
| Community grants | https://open.toronto.ca/dataset/community-grants-allocations/ |
Exact row counts and pull dates for each dataset are on /status, kept separate from this page so it stays current without needing this page to be re-edited every refresh.
What time period this covers
Contract, grant, and budget history is bounded to November 2022 (the start of the current council term) to the present, not the full history the City makes available. This is a deliberate editorial choice, not a data limitation: this is a voter-facing site during an active municipal election, and the question it answers is "how has this council spent," not "how has Toronto spent over the last decade." Data from before Nov 2022 is out of scope by design.
How entities are matched
The same organization or person often appears differently across datasets — as a grant recipient and a budget line's program area. TorontoSpends resolves these to a single Entity record using a deterministic match key: organizations are matched by a normalized form of their legal name (stripped of suffixes like "Inc.", "Ltd.", punctuation, and casing differences), people by normalized full name. This is exact-match logic, not fuzzy matching or an AI judgment call — two names either produce the same key or they don't. That means real matches are sometimes missed (e.g. a meaningfully different name spelling), but it also means nothing is merged on a guess.
How the budget page groups programs and revenue
The budget page's "policy area" and "revenue source" groupings aren't the City's own categories — they're built by this site, so the exact rules are documented here rather than left implicit.
Policy areas group the City's ~60 individual divisions (e.g. "Toronto Fire Services", "Toronto Paramedic Services") into about 18 plain-English areas (e.g. "Fire, Paramedic and Emergency Management"). This is an editorial judgment call, not a City-defined grouping — a different reasonable person might group some programs differently. The full mapping is in apps/budget/taxonomy.py in the site's source code.
Program name matching across years only resolves purely cosmetic renames — word-order changes, pluralization, "Office of X" ↔ "X" phrasing (e.g. "Fire Services" → "Toronto Fire Services", the 2024 renaming of Yonge-Dundas Square to Sankofa Square). Where a department's name changed by more than that — for example whether "Office of the Controller" (2022–2024) became "Financial Operations and Control" (2025), or is a genuine reorganization — this site does not guess. Both names appear separately in the appeared/disappeared lists so a reader can judge for themselves.
Revenue sources are built from the City's fine-grained revenue line items (its own revenue categories put almost everything, including the entire property tax levy, into one "Other Revenue" bucket, which isn't useful). Line items are matched into buckets like "Property Tax" or "Provincial Transfers" by keyword rules, because the underlying line-item labels themselves aren't spelled consistently year to year (e.g. "Municipal Land Transfer Tax" in one year's file, "Mun Land Transfer Ta" in another) — an exact-string match would silently undercount. Every year's bucket totals are checked to reconcile exactly to the City's true reported revenue total before publishing.
Property tax rate figures (the "+2.9%", "+9.5%" etc. shown on the budget page) are not from the operating budget dataset at all — they're Council-approved residential rate increases as reported by CBC News, cited separately because the budget file only reports total dollars collected, not the approved rate. Dollar growth in the property tax levy reflects both the rate and a growing tax base (new construction, rising assessments); this site does not claim the two are the same number.
How council/committee search works
The Council page searches City Council and Committee agenda items, sourced from each item's official "item history" page on the City's own TMMIS system (secure.toronto.ca/council) — the City Clerk's own record of an item's status, decision text, and full lifecycle across every body that considered it.
Coverage: City Council, its standing/special committees, and the 4 Community Councils, November 2022–present. This excludes agency boards (e.g. TTC, Toronto Police Services Board, Toronto Public Library Board) and advisory/nominating/quasi-judicial bodies, which aren't part of the core legislative decision chain this page answers "what's the status of X" against. Where an item was first decided by a committee and later ratified (or amended) by City Council, this site shows Council's final decision as the authoritative outcome, not the committee's original recommendation. A small number of very recent meetings for some bodies may not yet appear, simply because the City hasn't published that meeting's official decisions record yet as of this site's last data pull.
Results are extractive, not AI-generated. What's shown is the Clerk's own tracking-status and decision text, verbatim, not a summary this site wrote. No LLM is involved in producing these results.
A search for a public nickname may not find anything even if the topic is covered — official decision text uses formal language, not colloquial names. This site maintains a small, hand-verified list of known nickname-to-keyword mappings (apps/council/taxonomy.py's TOPIC_ALIASES — e.g. "rain tax" → "stormwater charge") rather than guessing at scale; a topic not on that list needs its own formal-language search terms.
"Reported by" citations are separate from the official record and hand-curated, not automatically scraped — the official Clerk's record states what was decided, not necessarily why (e.g. public reaction). Where narrative context like that is shown, it's attributed to a specific, cited news source, never blended into the official-record text as if the City itself said it.
Limitations — read this before citing a number from this site
- Revenue lines are stored as negative dollar amounts (the City's own accounting convention). Naively summing expense and revenue lines together does not produce Toronto's real net operating budget — the hero "total budget" figure on this site is expenses only, for that reason.
- The operating budget dataset is not current. The City's own file was last refreshed 2026-02-25, and no FY2026 file has been published yet as of this site's last data pull (see /status for the exact date). This site cannot be fresher than its source.
- The homepage's year-over-year "biggest movers" only compares programs with an unchanged name across 2022 and 2025 — about 36 of roughly 60 programs. Programs renamed or restructured in that window (e.g. "311 Toronto," which only appears under that name in 2022–2023 data) are excluded from the comparison entirely, not shown as a misleading swing. This means some real, large budget changes are not reflected in that feature simply because the program was renamed.
- Of roughly 105 distinct City grant program codes, only four — TAC, CSP, SNP, and YVP, the largest by dollar volume since 2022 — get featured placement and full review. The remaining ~100 programs are ingested and fully searchable, but have not been individually reviewed the way the featured four have.
- Entity resolution is exact-match, not fuzzy. See "How entities are matched" above — this means some real-world matches between datasets are missed.
- Datasets are refreshed manually, not on an automatic schedule. Check /status for the actual last-pull date of any figure before treating it as current.
What this site does and does not claim
Does: present City-published figures, sourced and dated, cross-referenced by entity. Every fact traces to a source URL and retrieval date.
Does not: claim that any individual or organization acted improperly, or that any pattern visible in this data implies wrongdoing. Grants and contracts are awarded through the City's own processes. This site shows what was disclosed — it does not interpret intent.
Corrections
Found an error? See the corrections policy and log.