Toronto DineSafe Scraper avatar

Toronto DineSafe Scraper

Pricing

from $3.00 / 1,000 results

Go to Apify Store
Toronto DineSafe Scraper

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

Crawler Bros

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

14 days ago

Last modified

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) and byEstablishmentIds (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 row
  • establishmentId, establishmentIdLegacy — current + legacy establishment IDs
  • establishmentName, address, phone
  • inspectionDate, inspectionStatus (Pass / Conditional Pass / Closed)
  • observation — inspector's summary statement
  • severityNA / M - Minor / S - Significant / C - Crucial (only present when an infraction was recorded)
  • infractionType, infractionDetails — only present when an infraction was recorded
  • outcomeDate, outcomeDescription — only present when the case went to prosecution
  • amountFinedCad — only present when a court fine was recorded
  • latitude, longitude, mapUrl
  • sourceUrl — link to the official DineSafe open-data page
  • recordType: "inspection", scrapedAt

Input

FieldTypeDefaultDescription
modeselectsearchsearch / byEstablishmentIds
establishmentNamestringpizzaName contains (mode=search)
streetOrPostalCodestringAddress/postal code contains (mode=search)
infractionKeywordstringInfraction/violation description contains (mode=search), e.g. pest, temperature
establishmentIdsarrayEstablishment IDs (mode=byEstablishmentIds)
inspectionStatusselectanyPass / Conditional Pass / Closed
severityselectanyNA / M - Minor / S - Significant / C - Crucial
dateFromdateInspections on/after this date (YYYY-MM-DD)
dateTodateInspections on/before this date (YYYY-MM-DD)
minAmountFinedintMinimum court fine (CAD)
maxAmountFinedintMaximum court fine (CAD)
sortByselectinspectionDateDescResult ordering
maxItemsint50Hard 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.