Data & methodology

How CIVIC Street Report collects, categorizes, and publishes community road safety reports.

Where the data comes from

Every report is submitted by a resident through this site. There is no scraping, no police feed, no insurance data. Each row in the dataset represents one person's observation of something that happened (or nearly happened) on an Ontario street. This is a self-reported, community-witnessed dataset — it complements official crash statistics rather than replacing them.

How incidents are categorized

The reporter picks one category from a fixed list at the start of the form. We keep the list short on purpose so categories stay consistent and comparable over time.

  • Crash or near missA collision involving vehicles, pedestrians, or cyclists — or a close call that nearly was one.
  • Dangerous drivingSpeeding, stunt racing, or other reckless driving behavior.
  • Failure to stop or yieldRunning or rolling through a stop sign, or failing to yield to pedestrians at a crosswalk.
  • Car or truck in bike laneA vehicle parked, stopped, or driving in a marked bike lane.
  • Excessive vehicle noiseA loud exhaust, modified muffler, repeated revving, or stunt-level engine noise from a moving vehicle. Reports help target noise-camera enforcement.
  • Idling — noise & air pollutionA parked vehicle left running with no one driving — like a delivery truck humming outside your window, a school bus idling at pickup, or a car warming up in a driveway for 10+ minutes. Report the noise, exhaust, or fumes you're breathing.

Failure to stop or yield reports include a follow-up set of yes/no factors (driver ran the sign, didn't yield to pedestrians, missing signage, poor lighting, etc.) stored in the report's detailsfield. These are exposed as individual flags in CSV and GeoJSON exports so they can be analyzed separately.

Avoiding double-counting

When a new report is filed within roughly 100 m of an existing report of the same category from the last 48 hours, the reporter is shown the existing report and offered the option to corroborate it instead of filing a duplicate. Corroborations are stored alongside the original and surfaced as a corroborations count — so a crash witnessed by three people appears as one incident with two corroborations, not three separate crashes. Repeat-offender categories (idling, vehicles in bike lanes, excessive noise) are excluded from this check, because repeat reports at the same location are the whole point of the data.

How locations and coordinates are handled

  • Picked on a map. Reporters drop a pin on a map of Ontario. Coordinates are stored as latitude/longitude in WGS 84 (EPSG:4326), the same coordinate system used by Google Maps, GPS, and most GIS tools.
  • Address is reverse-geocoded. A human-readable address is looked up from the pin so the report is searchable by street name. The original coordinates remain the source of truth — the address is a convenience label.
  • Precision. Coordinates are stored at full precision (~1 m) but should be treated as approximate to the block. A reporter on a moving sidewalk or rushing to help cannot be expected to place a pin within a metre of the event.
  • Scope. Reports are collected from anywhere in Ontario. Reports outside the province are not collected.
  • No reporter location tracking. The pin is the location of the incident, never the location of the reporter's device. Browser geolocation is only used (with permission) as a starting hint for the map.

How time is recorded

  • occurred_at — the time of the incident, as best recalled by the reporter. Stored in UTC, displayed in the local time zone (America/Toronto).
  • created_at — when the report was submitted. Used for moderation and to detect delayed reporting, not for trend analysis.

What is public in /data

The Data & downloads page, the public map, and every CSV / GeoJSON / PDF export include the same fields:

idRandom UUID. Lets you reference a report without exposing the reporter.
occurred_atLocal time of the incident.
incident_typeOne of the categories above.
latitude, longitudeWGS 84 decimal degrees.
addressReverse-geocoded street address.
descriptionThe reporter's own words. May be empty.
detailsStructured follow-up answers (e.g. failure to stop or yield factors).
has_photo / has_videoBooleans only — the file URLs themselves are NOT in exports.
corroborationsNumber of additional witnesses who confirmed this same incident (see below).

Never public, never exported

reporter_nameStored only for the project team's follow-up.
reporter_emailStored only for the project team's follow-up.
IP addresses, device infoNot collected for analysis.

Reporter contact details are accessible only to the project team. They are stripped at the database query level before any data reaches the public site, the public map, or any download.

Known limitations

  • Selection bias. People who know about the site and choose to report are not a random sample of road users. Streets with active residents may appear more dangerous than streets with similar conditions but quieter neighbours.
  • One report per observation. A single crash may be reported by several witnesses, or by none at all. Counts should be read as "reports about incidents," not "incidents."
  • No verification. Reports are not individually verified against police or insurance records. Obvious abuse can be flagged from the public map and reviewed by the project team.
  • Recall. Times and exact locations depend on the reporter's memory at the moment of submission.

Citing this data

If you use this data in a report, presentation, or council packet, please cite it as:

CIVIC Street Report — community road safety reports, Ontario. Retrieved 6/6/2026.

Questions about methodology, or interested in the raw dataset? Email hello@civicstreetreport.ca.