Boulder CO Restaurant Inspections Scraper: 2013 to Present
Pricing
from $2.10 / 1,000 inspections
Boulder CO Restaurant Inspections Scraper: 2013 to Present
Scrape Boulder County, CO restaurant health inspections, 2013 to present (16,000+), from data.colorado.gov: scores, results, violations, inspector comments, address, coordinates. Boulder, Longmont, Lafayette, Louisville. Filter by city, name, date. Live data each run.
Pricing
from $2.10 / 1,000 inspections
Rating
0.0
(0)
Developer
Groundplane Labs
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
10 days ago
Last modified
Categories
Features
Share
The Boulder County restaurant inspections scraper gives you one row per restaurant inspection (inspector comments grouped) for Boulder County, Colorado, straight from Boulder County via the official State of Colorado open-data portal (data.colorado.gov). No login or coding needed: run it in your browser, on a schedule, or through the Apify API, and export results as JSON, CSV or Excel.
Get restaurant and food facility inspections for Boulder County, Colorado (Boulder, Longmont, Lafayette, Louisville, Niwot, Lyons and more) as clean JSON, CSV or Excel. The data comes from Boulder County through the official State of Colorado open-data portal (data.colorado.gov dataset 6ytb-f2cq, Aug 2025 – present, and historical dataset tuvj-xz3m, Jan 2013 – Aug 2025).
Each run reads data.colorado.gov live, so you get whatever the state has published at that moment. The current file (6ytb-f2cq) covers Aug 2025 to present; as of Oct 23, 2026 its newest inspection is 2026-09-08 (the state refreshed it on Oct 22, 2026, although the portal still lists its update frequency as "Static"). The historical file (tuvj-xz3m) covers Jan 2013 to Aug 2025 (~15,700 inspections). Together: 16,000+ Boulder County restaurant inspections from 2013 to present.
Heads up: by default the actor returns only the current file (Aug 2025 to present), which is fast and light. Full history (includeHistory) is optional and heavy: the source has hundreds of thousands of checklist rows, so enable it only with 1024 MB+ memory and a longer timeout, or the run may time out.
What you get
The source publishes one row per inspector comment. This actor groups them so that each row is one inspection: one facility + inspection type + final inspection date + score + result, with all inspector comments (violations and notes) in a comments list. Rows are sorted newest final inspection first (stable tiebreak on facility ID and :id).
The historical file (2013 – Aug 2025) is published as one row per checklist item; the actor groups those into one row per inspection (facility + date + type) too. Historical rows have a violations list (items marked Out / Out-High / Out-Medium / Out-Low / Full / Half) instead of free-text comments, result is null (not published), plus facilityType and facilityCategory. The dataset field tells you which file each row came from. facilityType and facilityCategory are always present (null for Aug 2025+ rows, which don't publish them).
Linking a facility across both files: the two files use different businessId schemes, so the same facility has two IDs (e.g. PHO KITCHEN BAR & GRILL is FA0003878 in the historical file and FA0001508 in the current one). Use facilityKey instead: the normalized facility name + street address (uppercase, punctuation removed, street suffixes abbreviated such as ROAD → RD, unit/suite words and a trailing unit number dropped, e.g. 1219 ROCK CREEK CIR 1 → 1219 ROCK CREEK CIR; N/S/E/W directionals ignored). Chains keep one key per address, so different locations never merge, e.g. PHO KITCHEN BAR GRILL|2900 BASELINE RD. It's a best-effort match: renamed facilities, or ones whose address is spelled differently, won't link.
Sample output (real run)
{"businessId": "FA0002280","facilityName": "Ladies and Lyons LLC","address": "431 MAIN STREET, BLDG A","city": "LYONS","state": "CO","zip": "80540","inspectionType": "Routine","firstInspectionDate": null,"finalInspectionDate": "2026-09-08","score": 5,"result": "Pass","commentCount": 2,"comments": ["6-301.14 Handwashing Signage (C). Missing hand sink signage at sinks. A sign or poster that notifies FOOD EMPLOYEES to wash their hands shall be provided at all HANDW ASHING SINKS used by FOOD EMPLOYEES and shall be clearly visible to FOOD EMPLOYEES. Stickers provided during inspection.","7-102.11 Separation-Storage (P). Observed unlabeled chemical spray bottles in the facility. Working containers used for storing poisonous or toxic materials such as cleaners and SANITIZERS taken from bulk supplies shall be clearly and individually identified with the common name of the material. Cor..."],"latitude": 40.22469,"longitude": -105.27066,"dataset": "6ytb-f2cq (Aug 2025 - present)","source": "Boulder County Public Health via data.colorado.gov"}
Output
One row per inspection, with these fields:
| Field | Meaning |
|---|---|
| businessId | Facility ID in the file the row came from (the two files use different ID schemes) |
| facilityKey | Normalized facility name + street address; use it to link one facility across both files |
| facilityName | Facility name as published |
| address | Street address as published |
| city | City as published (mixed case) |
| state | State as published |
| zip | ZIP code (first 5 digits) |
| inspectionType | Inspection type as published (Routine, Re-Inspection, historical types in the 2013-2025 file) |
| firstInspectionDate | First inspection date; null since the state stopped publishing a separate first-visit date in Oct 2026 |
| finalInspectionDate | Final inspection date (YYYY-MM-DD) |
| score | Inspection score as published (points; higher means more issues) |
| result | Published result (Pass / Reinspection Required / Closure); null for historical rows, which do not publish one |
| commentCount | Number of inspector comments grouped into this row (2025-present file) |
| comments | Inspector comments / violations as free text (2025-present file) |
| violationCount | Number of violation items (historical file); null for 2025-present rows |
| violations | Structured violation items with code, violation, type, status and points (historical file) |
| facilityType | Facility type as published (historical file); null for 2025-present rows |
| facilityCategory | Facility category as published (historical file); null for 2025-present rows |
| latitude | Latitude from the source geopoint, when published |
| longitude | Longitude from the source geopoint, when published |
| dataset | Which source file the row came from (6ytb-f2cq or tuvj-xz3m) |
| source | Data source label |
Labeled canary input (a five-row smoke test of the newest inspections):
{"maxItems": 5}
Use cases
- Food-safety consultants, pest control and cleaning services:
resultContains: "Reinspection"lists facilities that failed and must be re-inspected. - Restaurant suppliers and equipment repair: comments mention broken coolers, thermometers, hand sinks.
- Journalists and researchers: compare scores across Boulder County towns.
How to scrape Boulder County restaurant inspections
- Click Try for free (or Start) on this page. A free Apify account is enough.
- Leave the prefilled input to get a quick sample, or set the filters described below.
- Set maxItems to cap how many rows (and how much) a run returns.
- Click Start and wait a few seconds to a minute.
- Download the results as JSON, CSV or Excel, or connect them to Google Sheets, Zapier, Make or a webhook.
Input
| Field | Description |
|---|---|
| inspectedSince | Optional real date, YYYY-MM-DD, applied to the final inspection date. Invalid dates fail fast with a clear message. |
| cities | e.g. BOULDER, LONGMONT (case-insensitive) |
| nameContains | Facility name text |
| resultContains | Reinspection or Pass (only Aug 2025 – present rows have a result, so this skips history) |
| includeHistory | Default off. Turn on to add the ~15,700 inspections from 2013 to Aug 2025. This is optional and heavy: use 1024 MB+ memory and a 30 min+ timeout, or small-memory runs may time out. |
| maxItems | Default 200 |
Pricing (pay per event)
$3 per 1,000 inspections ($0.003 each) plus Apify's minimal $0.00005 start fee. Example: 200 inspections = 200 × $0.003 + $0.00005 ≈ $0.60.
Data caveats
Data is provided as published by Boulder County. The actor reads the source live on every run (newest inspection 2026-09-08 as of Oct 23, 2026). The two files use different formats and scoring checklists, so scores are not directly comparable across them; 2020 has few inspections (COVID). A full 16k+ inspection pull reads ~657k source rows and may take several minutes (default timeout is 1800 s). score is points as published (higher means more issues). finalInspectionDate is the inspection date as published. firstInspectionDate is null because the state stopped publishing a separate first-visit date in Oct 2026. City names are passed through as published (mixed case). Every run ends with a status you can trust: Complete: when all matched inspections were emitted, or PARTIAL: with the concrete reason (for example skipped invalid source rows, or a stale source). The status always names the newest inspection date in the source; when that date is more than 60 days old the run reports PARTIAL for staleness. If a run hits your maxItems or charge cap, the status says so and states how many inspections matched in total where the scan completed.
License and disclaimer
The source dataset is Public Domain (data.colorado.gov). This actor uses only the official public open-data API and is not affiliated with or endorsed by Boulder County, Boulder County Public Health or the State of Colorado.
Changelog
- 0.2 (2026-11-01): audit hardening, no output changes on healthy data. Core-column checks on both source files fail the run loudly if the source changes shape; rows with unparseable dates or scores are skipped and counted (a run with more than 20 percent invalid rows fails as a source problem, smaller shares end PARTIAL with the count stated); every run ends
Complete:orPARTIAL:and names the newest source inspection date, with a staleness PARTIAL past 60 days; fetch retries follow the fleet standard (6 tries, honored Retry-After); dataset schema now declares every output field. - 0.1: first release.
FAQ
How much does it cost to scrape Boulder County restaurant inspections?
You pay $0.003 per result ($3 per 1,000) plus a $0.00005 start fee, and nothing else. That is the free-plan price: on paid Apify plans you pay less per result (Bronze 10%, Silver 20%, Gold and above 30% off). Apify's free plan includes $5 of monthly credit, which covers about 1,600 results. See Pricing above for a worked example.
Is it legal to scrape Boulder County restaurant inspections?
This Actor reads public records from Boulder County via the official State of Colorado open-data portal (data.colorado.gov), using only public endpoints (no login, no CAPTCHA bypass, no private accounts). See the source/license section above for the dataset's terms. You are responsible for how you use the data; this is not legal advice.
How fresh is the data?
Each run reads the source live, so you get whatever the agency has published at that moment. How often the agency updates, and any known lag, is described in the data caveats/notes section above.
Can I use it via API, on a schedule, or with Google Sheets?
Yes. Every Apify Actor has a REST API and client libraries for Python and JavaScript. You can schedule daily or weekly runs, and send results to Google Sheets, Slack, Zapier, Make, n8n, webhooks, or an AI agent via the Apify MCP server.
I need another city, county or field. Can you add it?
Open an issue on the Issues tab with the city or data source you need. We build new public-records scrapers regularly.
More public-records scrapers by Groundplanes
Same clean output, pay-per-result pricing and official public data sources:
Restaurant & food inspections
- Maricopa County (Phoenix) Restaurant Inspections Scraper
- Las Vegas Restaurant Inspections & Grades Scraper (SNHD)
- Pittsburgh Restaurant Inspections Scraper (Allegheny County)
- Delaware Restaurant Inspections Scraper — Statewide Violations
- Montgomery County MD Restaurant & Food Inspections Scraper
- NY State Restaurant Inspections Scraper — NYSDOH, Non-NYC
- Boston Restaurant Inspections Scraper — Health Violations
- Santa Clara County Restaurant Inspections Scraper — San Jose
Code violations & distressed property leads
- Pittsburgh Code Violations Scraper — Distressed Property Leads
- Orlando FL Code Enforcement Scraper — Code Violation Leads
- New Orleans Code Violations Scraper — Code Enforcement Leads