US Restaurant Inspections Scraper: Food Establishments
Pricing
from $10.20 / 1,000 results
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
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
7 days ago
Last modified
Categories
Share
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
Table of contents
- What it does
- Quickstart
- Input reference
- Output reference
- Example output record
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
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
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
searchQueries | string[] | 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. |
cities | string[] | no | (empty) | Limit results to these cities (case-insensitive). |
results | string[] | no | (empty) | Keep only these inspection results, for example Fail, Pass, Pass w/ Conditions, Out of Business, No Entry, Not Ready. |
risks | string[] | no | (empty) | Keep only these risk levels (case-insensitive), for example Risk 1 (High), High, Risk 2 (Medium). |
facilityTypes | string[] | no | (empty) | Keep only these facility types (case-insensitive), for example Restaurant, Grocery Store, School, Bakery. |
zipCodes | string[] | no | (empty) | Limit results to these ZIP codes. |
inspectionTypes | string[] | no | (empty) | Keep only these inspection types (case-insensitive), for example Canvass, Complaint, License. |
minViolations | integer | no | (none) | Keep only inspections with at least this many violations noted. |
fromDate | string | no | (empty) | Only inspections on or after this date (YYYY-MM-DD). |
toDate | string | no | (empty) | Only inspections on or before this date (YYYY-MM-DD). |
maxInspections | integer | no | 10 | Maximum 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.
| Field | Type | Description |
|---|---|---|
inspectionId | string | Inspection ID (unique per inspection). |
dbaName | string | Establishment (doing-business-as) name. |
akaName | string | Also-known-as name, or null. |
licenseNumber | string | License or facility number. |
facilityType | string | Facility type, for example Restaurant, Grocery Store. |
risk | string | Risk level, for example Risk 1 (High). |
result | string | Inspection result, for example Pass, Fail, Pass w/ Conditions. |
inspectionType | string | Inspection type, for example Canvass, Complaint Re-Inspection. |
inspectionDate | string | Inspection date (ISO 8601). |
address | string | Street address. |
city | string | City. |
state | string | State code. |
zip | string | ZIP code. |
latitude | number | Latitude, or null. |
longitude | number | Longitude, or null. |
violationCount | integer | Number of violations noted in this inspection. |
violationsSummary | string | Full violations narrative for the inspection, or null when none. |
matchedQuery | string | Search term that produced this row, or null. |
source | string | Data source label. Always US Food Establishment Inspections. |
observedAt | string | ISO 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:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "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 (
resultevent). 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
errorfield and does not charge for it. Empty runs cost nothing. - Spend cap respected. Set
maxTotalChargeUsdon 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.
Related scrapers
- openFDA Food Recall & Enforcement Scraper (USA): US food recalls and enforcement actions.
- FDA Warning Letters Scraper: FDA warning letters to firms.
- Chicago Building Permits Scraper: City of Chicago building permits.
- CMS Nursing Homes Scraper: US nursing home ratings and inspections.
- EPA ECHO Facilities Scraper: US EPA facility compliance records.
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.
