NYC + Chicago Restaurant Inspections Scraper avatar

NYC + Chicago Restaurant Inspections Scraper

Pricing

from $2.15 / 1,000 inspections

Go to Apify Store
NYC + Chicago Restaurant Inspections Scraper

NYC + Chicago Restaurant Inspections Scraper

Search NYC and Chicago restaurant inspections in one normalized format. Filter by establishment, outcome, date, or recent records, then review source-published grades, scores, violations, source details, and missing fields.

Pricing

from $2.15 / 1,000 inspections

Rating

0.0

(0)

Developer

Maxime Dupré

Maxime Dupré

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

🧾 Restaurant inspections for public-health research

Restaurant operators, food-safety researchers, journalists, and data teams can use this Actor to search New York City and Chicago restaurant inspections. It returns one normalized row per inspection with source-published outcomes, dates, grades or scores, violations, locations, and source details, so you can review public records in one shape. Coverage is limited to the selected jurisdictions and what their sources publish.

🧭 See normalized inspection records

Each dataset row represents one inspection record found in a selected public source. The row keeps the source-published wording and puts common details into the same shape: establishment identity and location, inspection facts, jurisdiction context, source details, and data quality.

Grades, scores, risk levels, identifiers, coordinates, and violation details appear when a source publishes them. Missing source values stay unavailable. dataQuality.status shows complete or partial, and dataQuality.missingFields names fields the source did not publish. Use jurisdiction.comparabilityNote when you need context about local grade or score scales.

Run flow

  1. Choose New York City, Chicago, or both in jurisdictions.
  2. Add the same filter set for every selected jurisdiction.
  3. Set maxItems, or leave it empty to return all available results until each selected source is exhausted.
  4. Open the default dataset to review structured rows and source details.

Source limits

This Actor covers the two jurisdictions named in the input schema. Results are bounded by the records each source publishes. A source can use different outcome, grade, score, or violation fields, so keep the source and jurisdiction context with each row.

⚙️ Input

The required field is jurisdictions. All other fields are optional. The same filters apply to every selected jurisdiction.

FieldTypeWhat it does
jurisdictionsarray of stringsRequired. Choose New York City, Chicago, or both.
maxItemsintegerStops after this many inspection records. Leave it empty to return all available results until each selected source is exhausted.
establishmentNamesarray of stringsKeeps records whose establishment name contains at least one value in this list.
outcomesarray of stringsKeeps records with one of these source-published outcomes or statuses. An empty list keeps all outcomes.
startDatedate stringKeeps inspections on or after this date. Use YYYY-MM-DD.
endDatedate stringKeeps inspections on or before this date. Use YYYY-MM-DD.
recentOnlybooleanKeeps recent or newly observed inspections when turned on.

Default input example

This example uses the default input from a successful run.

{
"jurisdictions": [
"New York City"
],
"maxItems": 5
}

Filter notes

Use establishmentNames for one or more partial-name filters. Use outcomes with the wording used by the selected source. Leave optional filters empty or unset when you want the full available date range and all source-published outcomes.

🧾 Output

The default dataset contains one normalized inspection-record shape. Optional values may be absent when a selected source does not publish them.

Each run also returns a dataset URL for the default dataset.

Run output

FieldTypeWhat it does
datasetURL stringLinks to the normalized inspection records in the default dataset.

Inspection record fields

FieldTypeWhat it does
establishmentobjectRestaurant or food-establishment details.
establishment.namestringEstablishment name.
establishment.typestringSource-published facility type.
establishment.licenseIdstringSource-published license or permit identifier.
establishment.facilityIdstringSource-published facility identifier.
establishment.addressobjectEstablishment address when published.
establishment.address.streetstringStreet address.
establishment.address.citystringCity in the address.
establishment.address.statestringState in the address.
establishment.address.postalCodestringPostal code in the address.
establishment.coordinatesobjectEstablishment coordinates when published.
establishment.coordinates.latitudenumberLatitude.
establishment.coordinates.longitudenumberLongitude.
inspectionobjectSource-published inspection details.
inspection.idstringSource identifier for the inspection record.
inspection.datedate stringDate when the inspection took place.
inspection.typestringSource-published inspection type.
inspection.outcomestringSource-published inspection outcome or status.
inspection.gradestringSource-published letter grade when available.
inspection.scorenumberSource-published numeric health score when available.
inspection.riskLevelstringSource-published facility or inspection risk level.
inspection.violationCountintegerNumber of violations published for the inspection.
inspection.summarystringSource-published violation summary text.
inspection.violationsarray of objectsIndividual violations published for the inspection.
inspection.violations[].codestringSource-published violation code.
inspection.violations[].descriptionstringSource-published violation description.
inspection.violations[].isCriticalbooleanWhether the source marks the violation as critical.
jurisdictionobjectCity or county public-health jurisdiction context.
jurisdiction.namestringJurisdiction name.
jurisdiction.typestringSource-published jurisdiction type.
jurisdiction.statestringUS state for the jurisdiction when published.
jurisdiction.comparabilityNotestringNote about comparing this jurisdiction's grades or scores with another scale.
sourceobjectPublic inspection source details.
source.namestringName of the public inspection source.
source.sourceUrlURLSource URL when published.
source.recordUrlURLURL for this inspection record when published.
source.observedAtdate-time stringTime when the source record was observed.
dataQualityobjectShort status for the values in this record.
dataQuality.statusstringcomplete when useful fields are present, or partial when the source left fields out.
dataQuality.missingFieldsarray of stringsNormalized field paths the source did not publish.

Example inspection record

This genuine row comes from the current beta build's successful default-input run. It is shown as returned; optional fields that are absent from the source are listed in dataQuality.missingFields.

{
"establishment": {
"name": "PRET A MANGER",
"type": "Soups/Salads/Sandwiches",
"facilityId": "50146150",
"address": {
"street": "62 WEST 45 STREET",
"city": "Manhattan",
"state": "NY",
"postalCode": "10036"
},
"coordinates": {
"latitude": 40.756195280284,
"longitude": -73.981385740102
}
},
"inspection": {
"date": "2026-08-04",
"type": "Cycle Inspection / Initial Inspection",
"outcome": "Violations were cited in the following area(s).",
"grade": "A",
"score": 11,
"violationCount": 2,
"summary": "Cold TCS food item held above 41 °F; smoked or processed fish held above 38 °F; intact raw eggs held above 45 °F; or reduced oxygen packaged (ROP) TCS foods held above required temperatures except during active necessary preparation. | Anti-siphonage or back-flow prevention device not provided where required; equipment or floor not properly drained; sewage disposal system in disrepair or not functioning properly. Condensation or liquid waste improperly disposed of.",
"violations": [
{
"code": "02G",
"description": "Cold TCS food item held above 41 °F; smoked or processed fish held above 38 °F; intact raw eggs held above 45 °F; or reduced oxygen packaged (ROP) TCS foods held above required temperatures except during active necessary preparation.",
"isCritical": true
},
{
"code": "10B",
"description": "Anti-siphonage or back-flow prevention device not provided where required; equipment or floor not properly drained; sewage disposal system in disrepair or not functioning properly. Condensation or liquid waste improperly disposed of.",
"isCritical": false
}
]
},
"jurisdiction": {
"name": "New York City",
"type": "city",
"state": "NY",
"comparabilityNote": "New York City's DOHMH grades and scores use the NYC inspection scale; compare them directly only within this jurisdiction."
},
"source": {
"name": "NYC DOHMH Restaurant Inspection Results",
"sourceUrl": "https://data.cityofnewyork.us/resource/43nn-pn8j.json",
"observedAt": "2026-08-05T23:44:49.853Z"
},
"dataQuality": {
"status": "partial",
"missingFields": [
"establishment.licenseId",
"inspection.id",
"inspection.riskLevel",
"source.recordUrl"
]
}
}

💳 Pricing

Per-record pricing

You pay for each inspection record saved to the dataset. The current event price is shown on the Store page for your Apify pricing tier. A run that saves no inspection records does not trigger this per-record event, and filtered-out records are not saved.

🔌 Integrations

Dataset and API

Open the default dataset from the run page to inspect the normalized rows. The dataset and its API provide structured access to the fields in the Output section.

Video walkthrough

❓ FAQ

Which jurisdictions can I select?

The input supports New York City, Chicago, or both. The same filter set applies to every selected jurisdiction.

Does a row include health code violations?

When the source publishes them, a row includes a violation count, summary, and individual violation codes and descriptions. A source can also mark an individual violation as critical. These fields can be unavailable in a source row.

What if a source does not publish a field?

The value stays unavailable instead of being invented. dataQuality.status can be partial, and dataQuality.missingFields lists the missing normalized field paths.

Are NYC grades and Chicago outcomes directly comparable?

No single scale should be assumed. Keep each source's outcome, grade, or score with its jurisdiction, and read jurisdiction.comparabilityNote before making a comparison.

Can I use this for restaurant health scores near me?

Only within the supported jurisdictions. Choose New York City or Chicago, then filter by establishment name or another available input; the Actor does not infer your location.

What does an empty maxItems value do?

It returns all available results until each selected source is exhausted. Use a number when you want to stop after a set number of saved records.

Can I search Hartford or another city?

Not with this Actor. Its public input supports New York City and Chicago, so choose a source that covers the city you need.

Does this Actor make a safety or compliance decision?

No. It returns source-published inspection data and context. Review the source record and make your own research, safety, or business decision.

📝 Changelog

0.1: Richer inspection details and easier filtering

  • Added richer inspection details, source record links, and clearer ways to discover and filter NYC and Chicago records.

0.0: Initial release

  • Initial release.

🆘 Support

For issues, questions, or feature requests, file a ticket and I'll fix or implement it in less than 24h 🫡

Made with ❤️ by Maxime Dupré