TorontoSpends

Methodology

TorontoSpends lets you search and cross-reference the City of Toronto's operating budget, community grants, and Council/Committee decisions.

Data sources

DatasetSource
Operating budgethttps://open.toronto.ca/dataset/budget-operating-budget-program-summary-by-expenditure-category/
Community grantshttps://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

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.