Toronto DineSafe Scraper
Pricing
from $3.00 / 1,000 results
Toronto DineSafe Scraper
Scrape City of Toronto DineSafe food premises inspection records - restaurant/food vendor inspection status, infractions, severity, fines, and location, sourced from Toronto Public Health's official open data.
Pricing
from $3.00 / 1,000 results
Rating
0.0
(0)
Developer
Crawler Bros
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
14 days ago
Last modified
Categories
Share
Scrape DineSafe — the City of Toronto's official food premises inspection disclosure system, run by Toronto Public Health. Search inspection records by restaurant name or address, or pull the complete inspection history for a specific establishment: pass/fail status, infractions found, severity level, court outcomes, and fines. Sourced directly from Toronto's official open data portal (open.toronto.ca). No login, no API key, no cookies.
What this actor does
- Two modes:
search(by name/address/infraction keyword + filters) andbyEstablishmentIds(full inspection history for known establishments) - Filters: inspection status, infraction severity, inspection date range, fine amount range, infraction keyword (e.g. "pest", "temperature", "sanitized")
- Sorting: newest/oldest inspection date, establishment name, fine amount
- Clean data: upstream address/text formatting artifacts are cleaned up (see FAQ), phone numbers formatted, and every record includes a ready-to-use Google Maps link
- Empty fields are omitted — only populated data appears in the output
Output per inspection record
inspectionId— unique ID for this inspection rowestablishmentId,establishmentIdLegacy— current + legacy establishment IDsestablishmentName,address,phoneinspectionDate,inspectionStatus(Pass/Conditional Pass/Closed)observation— inspector's summary statementseverity—NA/M - Minor/S - Significant/C - Crucial(only present when an infraction was recorded)infractionType,infractionDetails— only present when an infraction was recordedoutcomeDate,outcomeDescription— only present when the case went to prosecutionamountFinedCad— only present when a court fine was recordedlatitude,longitude,mapUrlsourceUrl— link to the official DineSafe open-data pagerecordType: "inspection",scrapedAt
Input
| Field | Type | Default | Description |
|---|---|---|---|
mode | select | search | search / byEstablishmentIds |
establishmentName | string | pizza | Name contains (mode=search) |
streetOrPostalCode | string | – | Address/postal code contains (mode=search) |
infractionKeyword | string | – | Infraction/violation description contains (mode=search), e.g. pest, temperature |
establishmentIds | array | – | Establishment IDs (mode=byEstablishmentIds) |
inspectionStatus | select | any | Pass / Conditional Pass / Closed |
severity | select | any | NA / M - Minor / S - Significant / C - Crucial |
dateFrom | date | – | Inspections on/after this date (YYYY-MM-DD) |
dateTo | date | – | Inspections on/before this date (YYYY-MM-DD) |
minAmountFined | int | – | Minimum court fine (CAD) |
maxAmountFined | int | – | Maximum court fine (CAD) |
sortBy | select | inspectionDateDesc | Result ordering |
maxItems | int | 50 | Hard cap (1–5000) |
Example: recent closures
{"mode": "search","inspectionStatus": "Closed","dateFrom": "2026-01-01","sortBy": "inspectionDateDesc","maxItems": 100}
Example: inspection history for a specific restaurant
{"mode": "byEstablishmentIds","establishmentIds": ["001Vo000013QjdPIAS"]}
Example: crucial infractions on a street
{"mode": "search","streetOrPostalCode": "Queen St","severity": "C - Crucial","maxItems": 50}
Example: pest-control infractions city-wide
{"mode": "search","infractionKeyword": "pest","maxItems": 100}
Use cases
- Consumer safety apps — surface pass/fail status and recent infractions for restaurants near you
- Real-estate & retail-siting research — check the inspection history of a commercial address before leasing
- Journalism & data analysis — track closures, repeat offenders, and fine outcomes across Toronto
- Compliance monitoring — franchise or restaurant-group owners tracking inspection results across multiple locations
- Academic research — bulk export food-safety enforcement data for public-health studies
FAQ
What's DineSafe? Toronto Public Health's food safety disclosure program.
Every food premises in Toronto (restaurants, cafés, food trucks, grocers,
etc.) is inspected regularly; each inspection results in a Pass,
Conditional Pass, or Closed notice. See the official DineSafe
page.
How far back does the data go? The live dataset covers roughly the last 3 years and is refreshed daily by the City of Toronto. Older records are retired from the live feed by the source.
Why do some records have no severity/infractionType/infractionDetails
fields? Those fields only apply when an infraction was actually found
during the inspection. A clean Pass inspection has no infraction — since
no output field is null, these fields are simply omitted rather than
sent as empty placeholders. (Internally, the source publishes the literal
text "None" for these sub-fields on clean passes; the actor treats that as
"no infraction" and drops the field.)
Why do some addresses look different from the source's raw address
string? The upstream feed inserts a placeholder token where an establishment
has no unit number (e.g. the raw string is 1871 O'Connor Dr None M4A 1X1
when there's no unit). The actor removes that empty-unit placeholder so
address reads as a normal street address (1871 O'Connor Dr M4A 1X1).
Is a fine amount recorded for most inspections? No — amountFinedCad
only appears for the small number of cases that went to prosecution and
resulted in a conviction. Setting minAmountFined/maxAmountFined only
returns rows with a confirmed fine in that range (rows with no recorded
fine are excluded, not passed through) — so most searches will correctly
return very few (or zero) results; this reflects the real data, not a bug.
Can I look up an establishment by its legacy numeric ID instead of the
new ID format? Yes — establishmentIds accepts both the current ID format
(e.g. 001Vo000013QjdPIAS) and the legacy numeric ID (e.g. 10752656)
interchangeably.
Does this actor cover ward/neighbourhood filters? The source dataset
does not publish a ward or neighbourhood field, only address,
latitude/longitude. Use streetOrPostalCode to narrow by area, or filter
the output by coordinates downstream.
How fresh is the data? Daily — Toronto Public Health refreshes the DineSafe dataset every day with newly completed inspections.