Why a stench tracker? Because the city's not counting.
The Ashbridges Bay Wastewater Treatment Plant has served Toronto since 1910. It treats roughly half the city's sewage. For years, on the wrong wind, the east end has known about it before the wastewater even leaves the headworks.
"Like a clogged toilet that's been left there for a week."
How the data is collected
Reports are submitted by neighbours through this site. We don't run sensors. We're not a regulator. We're a public counter — when 40 people in M4M report rotten eggs in the same hour, that's a number the plant operators and the councillor's office can be asked about.
Privacy promise — what we do and don't do
This is a community project. We collect the absolute minimum needed to count odour reports and rate-limit spam. Everything below is enforced in code and you can verify it in our open-source repository.
What we never collect
- No name, no account, no login.
- No analytics or third-party trackers (no Google Analytics, no Meta pixel, no Mixpanel — none of it).
- No raw IP address. We compute a one-way HMAC hash with a server-side rotating secret and store only the hash, used solely for rate-limiting. The original IP can't be recovered from it.
- No precise location unless you explicitly opt in on the report form.
What we do collect, and for how long
- Each report stores: postal area (FSA), severity (0/1/3/5 — where 0 means "all clear, no smell here"), odour type, optional 280-char description, optional closest-intersection name (a public street like Queen & Carlaw — never your address; selected from a curated allow-list and stored verbatim, not converted to coordinates), optional jittered location (~100m offset, deterministic per-day so volume doesn't reveal an address), the IP hash (above), and a random ID kept in your browser's localStorage so we can count unique reporters. All-clear check-ins are stored exactly the same way as positive reports; same 30-day Firestore TTL applies. Auto-deleted from our database after 30 days via Firestore TTL.
- Aggregated daily counts per FSA are kept indefinitely as a public record. They contain no individual reporter info.
- If you subscribe to alerts, your email is stored so we can send you mail. One-click unsubscribe in every email; no login required.
Who sees the data
- Everyone. All counts and reports are visible on the public dashboard the moment they're submitted. There is no private dataset; we don't sell or share data; we don't auto-email the councillor's office or anyone else.
- Coun. Paula Fletcher's office (Ward 14, Toronto–Danforth) and any other interested party can read the live counts directly from this site at any time.
- Description text is scanned for personal info (email/phone/address patterns) before going public. If a description is flagged, the whole report is held in a moderation queue until manually cleared.
Anti-abuse
- 10 reports/hour/IP rate limit. Cloudflare Turnstile verifies you're human (no Google reCAPTCHA — Turnstile doesn't track users across the web).
- Public stats show both report count and unique reporter count — so a single person filing 50 reports doesn't distort the picture.
- Same browser submitting twice in 30 minutes is silently de-duplicated so spam loops don't inflate counts.
Who's behind this
A handful of east-end residents, no funding, no affiliation with the City of Toronto or Toronto Water. The site is open source and runs on Firebase + Vercel. The councillor's office hasn't asked us to do this — but they (and anyone else) can read live counts directly from this dashboard any time.
Also worth doing
This site is unofficial. Reports here are not automatically forwarded to the City. If you want a service request on file, please file with 311 as well.