OSHA Inspection & Violation Crawler
OSHA Inspection & Violation Crawler
Scrape workplace safety inspection records from the OSHA IMIS database, the U.S. Department of Labor's official enforcement data system. Returns 23 structured fields per inspection — establishment details, site addresses, SIC/NAICS codes, inspection type and scope, violation classifications, penalty amounts, abatement dates, and cited standards across 4M+ records nationwide.
OSHA Inspection Crawler Features
- Extract inspection records from all 50 U.S. states plus D.C.
- Filter by state, date range, SIC industry code, and inspection type (Planned, Complaint, Referral, Accident, Follow-Up) — or combine them however you want
- Returns 23 fields per record including penalty amounts, violation types, and cited OSHA standards
- Covers 4M+ inspection records going back decades, which is more workplace safety data than most people know exists
- No proxies needed. Government site, no anti-bot measures, generous rate limits.
- Pay-per-event pricing at $0.001 per record
Who Uses OSHA Inspection Data?
- Safety compliance officers — audit inspection history for facilities by state and industry before site visits
- Insurance underwriters — pull violation and penalty data for risk models, because spreadsheets from 2019 are not a risk model
- Legal teams — research establishment inspection history, penalty trends, and cited standards for litigation or regulatory defense
- Investigative journalists — identify patterns in workplace safety enforcement across industries and geographies
- B2B sales teams — build prospecting lists of establishments with specific inspection profiles and industry codes
- ESG researchers — quantify workplace safety records for corporate sustainability reporting
How OSHA Inspection Crawler Works
- Pick one or more U.S. states and optionally narrow by date range, SIC code, or inspection type.
- The crawler searches the OSHA IMIS system and pages through listing results for each selected state, extracting inspection IDs.
- Each inspection detail page is fetched and parsed — establishment info, addresses, violation summaries, penalty amounts, and cited standards are assembled into a clean record.
- Records are delivered as structured JSON. The crawler handles pagination and retries, so you configure it and walk away.
Input
Basic: Crawl inspections for a single state
{
"states": ["AZ"],
"maxItems": 500
}
Narrow by date range and inspection type
{
"states": ["CA", "TX"],
"inspectionType": "Complaint",
"dateFrom": "2024-01-01",
"dateTo": "2025-01-01",
"maxItems": 1000
}
Filter by industry (SIC code)
{
"states": ["NY"],
"sicCode": "3599",
"maxItems": 200
}
Input Parameters
| Field | Type | Default | Description |
|---|---|---|---|
| states | string[] | — | One or more U.S. state abbreviations (e.g. AZ, CA, TX). At least one is required. |
| inspectionType | string | "" |
Filter by type: Planned, Complaint, Referral, Accident, or FollowUp. Leave empty for all. |
| dateFrom | string | "" |
Inspection date range start (YYYY-MM-DD). |
| dateTo | string | "" |
Inspection date range end (YYYY-MM-DD). |
| sicCode | string | "" |
Standard Industrial Classification code (e.g. 3599 for industrial machinery). |
| maxItems | integer | 500 |
Maximum records to return. Set to 0 for unlimited. |
| proxyConfiguration | object | {useApifyProxy: false} |
Proxy settings. Government sites do not require proxies. |
OSHA Inspection Crawler Output Fields
{
"activity_nr": "Cpx2025xtn976x0044",
"estab_name": "Sf Markets, Llc (Fn) Dba Sprouts Farmers Market",
"site_address": "7750 N 16th St",
"site_city": "Phoenix",
"site_state": "AZ",
"site_zip": "85020",
"sic_code": "5411",
"naics_code": "445110",
"insp_type": "Complaint",
"insp_scope": "Partial",
"open_date": "2025-01-08",
"close_date": "2025-03-15",
"case_status": "Closed",
"viol_type": "Serious",
"gravity": null,
"initial_penalty": 16131,
"current_penalty": 12524,
"nr_exposed": null,
"abate_date": "2025-02-28",
"owner_type": "Private",
"safety_hlth": "Safety",
"union_status": "NonUnion",
"nr_instances": 3,
"standard": "1910.303(b)(1)"
}
| Field | Type | Description |
|---|---|---|
| activity_nr | string | OSHA inspection activity number (unique ID) |
| estab_name | string | Establishment or company name |
| site_address | string | Inspection site street address |
| site_city | string | Inspection site city |
| site_state | string | Inspection site state abbreviation |
| site_zip | string | Inspection site ZIP code |
| sic_code | string | Standard Industrial Classification code |
| naics_code | string | North American Industry Classification System code |
| insp_type | string | Inspection type (Planned, Complaint, Referral, Accident, FollowUp) |
| insp_scope | string | Inspection scope (Complete, Partial, Records) |
| open_date | string | Inspection opening date (YYYY-MM-DD) |
| close_date | string | Inspection case close date (YYYY-MM-DD) |
| case_status | string | Case status (Open, Closed) |
| viol_type | string | Violation type (Serious, Willful, Repeat, Other-than-Serious) |
| gravity | string | Violation gravity assessment |
| initial_penalty | number | Initial assessed penalty amount in USD |
| current_penalty | number | Current penalty amount after adjustments in USD |
| nr_exposed | number | Number of employees exposed to the hazard |
| abate_date | string | Abatement completion date (YYYY-MM-DD) |
| owner_type | string | Establishment owner type (Private, Federal, State, Local) |
| safety_hlth | string | Whether the violation is Safety or Health related |
| union_status | string | Union status of the establishment |
| nr_instances | number | Number of violation instances |
| standard | string | OSHA standard cited in the violation (e.g. 1910.303(b)(1)) |
FAQ
How do I scrape OSHA inspection data?
OSHA Inspection Crawler handles it. Select one or more states, optionally filter by date range, industry code, or inspection type, and run the actor. Records arrive as structured JSON — no manual searching through the IMIS interface required.
How much does OSHA Inspection Crawler cost to run?
Roughly $0.001 per record. A typical run pulling 1,000 inspections for a single state costs about $1.10 (including the $0.10 actor start fee). That is considerably less than assembling the same data by hand.
Does OSHA Inspection Crawler need proxies?
No. OSHA's IMIS system is a public government database with no anti-bot protections. The crawler ships with proxies disabled by default because it does not need them — just polite rate limiting, which is handled for you.
Can I filter by industry?
Yes. Pass a Standard Industrial Classification (SIC) code in the sicCode field. SIC 3599 gets you industrial machinery, 5411 gets you grocery stores, 1542 gets you commercial construction. The Department of Labor has been classifying industries since before most of us were born.
What inspection types are available?
Five types: Planned (routine scheduled inspections), Complaint (employee or public complaints), Referral (referred by another agency), Accident (workplace injury or fatality), and Follow-Up (revisit of a previous inspection). Filter by any single type or leave blank for all of them.
Need More Features?
Need custom fields, filters, or a different target site? File an issue or get in touch.
Why Use OSHA Inspection Crawler?
- 23 fields per record — Penalty amounts, violation types, cited standards, SIC/NAICS codes, and full site addresses. Most alternatives return a fraction of that, or nothing structured at all.
- Priced at $0.001/record — Three times cheaper than the nearest competitor charging per-record, and free alternatives have no schemas or output structure to speak of.
- No proxies, no browser — Hits the OSHA IMIS system directly with lightweight HTTP requests. Runs fast, costs less in compute, and does not break when a CSS class changes.