US Restaurant Inspections Scraper: Food Establishments avatar

US Restaurant Inspections Scraper: Food Establishments

Pricing

from $10.20 / 1,000 results

Go to Apify Store
US Restaurant Inspections Scraper: Food Establishments

US Restaurant Inspections Scraper: Food Establishments

Scrape US restaurant and food establishment health inspections: business name, license id, facility type, risk level, full address, inspection date and type, pass-fail result, violations summary and geo coordinates. Filter by name, city, result and date range. Export to JSON, CSV or Excel.

Pricing

from $10.20 / 1,000 results

Rating

5.0

(1)

Developer

Scrapers Lat

Scrapers Lat

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

7 days ago

Last modified

Share

US Restaurant Inspections Scraper: Food Establishments

US Restaurant Inspections Scraper: Food Establishments

Here is one real result, with every field the actor returns:

{
"inspectionId": "2640608",
"dbaName": "TACOS Y TAMALES EL POLLO.",
"akaName": "TACOS Y TAMALES EL POLLO",
"licenseNumber": "2663700",
"facilityType": "Restaurant",
"risk": "Risk 1 (High)",
"result": "Fail",
"inspectionType": "Complaint Re-Inspection",
"inspectionDate": "2026-08-04T00:00:00.000Z",
"address": "4014 W 26TH ST",
"city": "CHICAGO",
"state": "IL",
"zip": "60623",
"latitude": 41.84435644599689,
"longitude": -87.72520458577316,
"violationCount": 12,
"violationsSummary": "28. TOXIC SUBSTANCES PROPERLY IDENTIFIED, STORED, & USED - Comments: 7-202.129C) OBSERVED BORIC ACID ON FLOOR ALONG WALLS AND CORNERS IN PREP AREA AND OPEN BAIT ON FLOOR IN PREP AND BASEMENT AREAS. INSTRUCTED MANAGER TO REMOVE. [...] | 59. PREVIOUS PRIORITY FOUNDATION VIOLATION CORRECTED - Comments: PREVIOUS PRIORITY FOUNDATION VIOLATION NOT CORRECTED FROM REPORT #2639883 ON 7-20-26 [...] CITATION ISSUED",
"matchedQuery": "Taco",
"source": "US Food Establishment Inspections",
"observedAt": "2026-08-10T14:30:57.744Z"
}

(The violationsSummary above is trimmed with [...] markers for readability; the actor returns the full multi-violation text. All values shown are real and unaltered.)

The most complete US food establishment inspection scraper available. It returns every field the City of Chicago food inspections dataset exposes for each inspection, including the establishment name and license, facility type, risk level, result, geocoded address, and a full violations summary, and gives you ten filters to target exactly the inspections you need.

📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples

Apify Coverage Output Billing

Table of contents

What it does

The actor calls the public City of Chicago food establishment inspections dataset, applies the filters you pass as input, paginates through the matching inspections, and writes one normalized record per inspection to the run's dataset. Each establishment name in searchQueries runs its own search, and additional filters (cities, results, risk levels, facility types, ZIP codes, inspection types, minimum violation count, date range) are applied on top. Addresses come geocoded with latitude and longitude, the violation count is returned as a number, and the full violations narrative is preserved in violationsSummary.

Coverage is the City of Chicago food establishment inspections dataset (restaurants, grocery stores, schools, bakeries and other regulated food facilities). Leave searchQueries empty to return the most recent inspections with no name filter.

Quickstart

Open the actor, paste this into the input, and press Run. It returns the 10 most recent inspections for establishments whose name contains "Taco".

{
"searchQueries": ["Taco"],
"maxInspections": 10
}

Every input field is optional. With an empty input the actor returns the most recent inspections. Combine filters to narrow the set, for example only failed high-risk restaurants in a ZIP code.

Input reference

FieldTypeRequiredDefaultDescription
searchQueriesstring[]no(empty)One or more establishment names or partial names, for example Taco, Starbucks. Each term runs its own search. Empty returns the most recent inspections.
citiesstring[]no(empty)Limit results to these cities (case-insensitive).
resultsstring[]no(empty)Keep only these inspection results, for example Fail, Pass, Pass w/ Conditions, Out of Business, No Entry, Not Ready.
risksstring[]no(empty)Keep only these risk levels (case-insensitive), for example Risk 1 (High), High, Risk 2 (Medium).
facilityTypesstring[]no(empty)Keep only these facility types (case-insensitive), for example Restaurant, Grocery Store, School, Bakery.
zipCodesstring[]no(empty)Limit results to these ZIP codes.
inspectionTypesstring[]no(empty)Keep only these inspection types (case-insensitive), for example Canvass, Complaint, License.
minViolationsintegerno(none)Keep only inspections with at least this many violations noted.
fromDatestringno(empty)Only inspections on or after this date (YYYY-MM-DD).
toDatestringno(empty)Only inspections on or before this date (YYYY-MM-DD).
maxInspectionsintegerno10Maximum number of inspection records to collect across all searches. Range 1 to 1000000. Free Apify plans are capped at 10 per run.

Filters combine with logical AND. Each value in searchQueries runs its own search, and the results are merged.

Output reference

One dataset item per inspection. Types: string, integer, number, or null when the source value is absent.

FieldTypeDescription
inspectionIdstringInspection ID (unique per inspection).
dbaNamestringEstablishment (doing-business-as) name.
akaNamestringAlso-known-as name, or null.
licenseNumberstringLicense or facility number.
facilityTypestringFacility type, for example Restaurant, Grocery Store.
riskstringRisk level, for example Risk 1 (High).
resultstringInspection result, for example Pass, Fail, Pass w/ Conditions.
inspectionTypestringInspection type, for example Canvass, Complaint Re-Inspection.
inspectionDatestringInspection date (ISO 8601).
addressstringStreet address.
citystringCity.
statestringState code.
zipstringZIP code.
latitudenumberLatitude, or null.
longitudenumberLongitude, or null.
violationCountintegerNumber of violations noted in this inspection.
violationsSummarystringFull violations narrative for the inspection, or null when none.
matchedQuerystringSearch term that produced this row, or null.
sourcestringData source label. Always US Food Establishment Inspections.
observedAtstringISO 8601 timestamp of when the record was collected.

On a failed request the actor writes a single item with a populated error field instead of an inspection, and does not charge for it.

Example output record

Real record from a live run (input {"searchQueries": ["Taco"], "maxInspections": 10}). The same record shown at the top of this page, with the long violationsSummary omitted here:

{
"inspectionId": "2640608",
"dbaName": "TACOS Y TAMALES EL POLLO.",
"akaName": "TACOS Y TAMALES EL POLLO",
"licenseNumber": "2663700",
"facilityType": "Restaurant",
"risk": "Risk 1 (High)",
"result": "Fail",
"inspectionType": "Complaint Re-Inspection",
"inspectionDate": "2026-08-04T00:00:00.000Z",
"address": "4014 W 26TH ST",
"city": "CHICAGO",
"state": "IL",
"zip": "60623",
"latitude": 41.84435644599689,
"longitude": -87.72520458577316,
"violationCount": 12,
"matchedQuery": "Taco",
"source": "US Food Establishment Inspections",
"observedAt": "2026-08-10T14:30:57.744Z"
}

Run via API and CLI

Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.

Run synchronously and get dataset items in one call:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~usa-restaurant-inspections-scraper/run-sync-get-dataset-items?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"searchQueries":["Taco"],"results":["Fail"],"maxInspections":25}'

Start a run asynchronously:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~usa-restaurant-inspections-scraper/runs?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"risks":["Risk 1 (High)"],"facilityTypes":["Restaurant"],"maxInspections":100}'

Apify CLI:

apify call scrapers_lat/usa-restaurant-inspections-scraper \
--input '{"zipCodes":["60623"],"minViolations":5}'

Fetch results

Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:

# JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"
# CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"
# Paginate large datasets
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"

<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.

Billing and limits

  • Pay per result. You are charged per inspection returned (result event). See the pricing tab for the current per-result price.
  • No charge on failure. If a request errors, the actor writes a single item with a populated error field and does not charge for it. Empty runs cost nothing.
  • Spend cap respected. Set maxTotalChargeUsd on the run; once reached, the actor stops emitting and charging further billable results.
  • Free Apify plans are capped at 10 inspections per run. Upgrade for higher maxInspections.

FAQ and troubleshooting

A run returned 0 records. Why? The filter combination matched nothing in the source. Loosen filters (for example remove zipCodes or widen the date range), or try a broader establishment name. Zero-result runs are not charged.

Which area does this cover? The source is the City of Chicago food establishment inspections dataset. Records are Chicago food facilities: restaurants, grocery stores, schools, bakeries and similar.

How do I get only failed inspections? Set results to ["Fail"]. Combine with risks such as ["Risk 1 (High)"] and a minViolations threshold to focus on the most serious cases.

Does it include the specific violations? Yes. violationCount gives the number of violations and violationsSummary preserves the full inspector narrative for each cited code.

How fresh is the data? Inspections are read live at run time, so each record reflects the latest published values. See observedAt.

Is this an official government tool? No. This actor is independent and has no affiliation with the City of Chicago. It reads only data that is publicly available through the city's open data portal. Use the results in accordance with the source's terms.

More scrapers at scrapers.lat

Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.


Independent tool, not affiliated with the City of Chicago. Accesses only publicly available food inspection data. Use in accordance with the source's terms.