OSHA Violation Risk & Time-Series
Pricing
$0.02 / employer risk report
OSHA Violation Risk & Time-Series
Turn any US employer's OSHA inspection history into a risk score, repeat-offender flag, and violation time-series Γ’β¬β severity-weighted, auditable, and tracked over time.
Pricing
$0.02 / employer risk report
Rating
0.0
(0)
Developer
ScrapeBench
Maintained by CommunityActor stats
0
Bookmarked
56
Total users
3
Monthly active users
2 days ago
Last modified
Categories
Share
Pain points
- OSHA's IMIS database has 5M+ inspections and 13M+ violations, but no risk score β you read raw citations by hand.
- Underwriters and due-diligence teams need a defensible safety-risk signal per employer, not a pile of citation rows.
- Spotting repeat offenders and whether violations are trending up requires manually stitching years of inspections together.
What we solve
- Pull an employer's OSHA inspections and the citations behind the most recent cited ones (gravity, penalties, standards, dates), with OSHA's own violation count on every inspection.
- Compute a deterministic, auditable 0-100 risk score weighted by violation severity and recency.
- Flag repeat offenders, chart violations over time, and label the trend (rising / flat / falling).
- Run on a schedule to catch new inspections, new violations, and risk-score changes.
Summary
Give it a US employer name and get back an OSHA safety-risk report: its inspections and the citations behind them (gravity, penalty, standard, dates) rolled up into a deterministic, auditable risk score (0-100, severity-weighted and recency-decayed), a repeat-offender flag, total penalties, and a violations-over-time series with a rising/flat/falling trend. Built on OSHA's public IMIS data, which has sat behind an AWS bot wall since October 2026 β the actor gets through it on its own, with no proxy to configure. Run it on a schedule and it also reports what changed since last time: new inspections, new violations, and risk-score movement. Built for safety consultants, insurance underwriters, and supply-chain due-diligence.
Who it's for
- Insurance underwriters pricing workers'-comp and liability risk
- Safety consultants and EHS teams benchmarking employers
- Supply-chain and vendor due-diligence teams
- Investors and M&A diligence screening for safety liabilities
How to use
Set the input, run the actor, and collect results from the run's dataset (export to JSON/CSV/Excel, or pull via the Apify API). Example input:
{"employers": ["Dollar General"],"maxInspectionsPerEmployer": 25,"compareToPrevious": true}
See Inputs below for every available field.
What you get
One row per record:
| Field | Description |
|---|---|
query | The employer name you searched |
risk_score | Deterministic 0-100 severity-weighted, recency-decayed risk score |
risk_band | low / medium / high |
repeat_offender | True if any Repeat-gravity violations |
trend | rising / flat / falling (recent vs prior 2-year windows) |
by_gravity | Violation counts by OSHA gravity (willful/repeat/serious/other) |
total_current_penalty | Sum of current penalties (USD) |
violation_time_series | Violations + penalty per year |
inspection_count / violation_count | Inspections found / citations read and scored |
violations_listed_total | OSHA's own violation count across every inspection, read or not |
inspections_not_detailed | Cited inspections whose citations were not read (beyond the 6 most recent) |
inspections | Per-inspection detail including each citation |
new_inspections / new_violations / risk_score_delta | What changed since the previous run (monitoring) |
source_url | The OSHA search this report came from |
Sample:
{"query": "Dollar General","state": null,"establishments": ["Dollar General Store 12345"],"inspection_count": 2,"violation_count": 2,"by_gravity": {"serious": 2},"total_current_penalty": 14000,"total_initial_penalty": 14000,"risk_score": 21,"risk_band": "medium","repeat_offender": false,"trend": "falling","violation_time_series": [{"year": 2024,"violations": 2,"penalty": 14000}],"first_seen": false,"new_inspections": 0,"new_violations": 0,"risk_score_delta": 0,"source_url": "https://www.osha.gov/ords/imis/establishment.search?establishment=Dollar+General&state=all"}
Inputs
| Field | Required | Type | Default | Description |
|---|---|---|---|---|
employers | yes | array | ["Dollar General"] | US employer / company names to analyze (e.g. 'Dollar General'). One risk report per name, aggregating all of that employer's OSHA inspections. |
state | no | string | β | Optional two-letter state code (e.g. 'TX') to limit inspections to that state. Leave empty for nationwide. |
maxInspectionsPerEmployer | no | integer | 25 | Cap on inspections pulled per employer (most-recent first). Citations are read for the inspections OSHA lists with violations β the most recent 6 per employer while OSHA's site sits behind its bot wall; any beyond that are counted in inspections_not_detailed. |
compareToPrevious | no | boolean | true | When on (default), diff each employer against the previous run and report what changed β new inspections, new violations, risk-score delta. Run on a schedule to track employers over time. |
proxyConfiguration | no | object | {"useApifyProxy": false} | Optional, and not needed: when OSHA's bot wall refuses a direct request the actor switches to an unblocker on its own, at no extra cost to you. |
Pricing (Pay Per Event)
You pay per result (dataset-item) β no charge for empty runs. Example: 100 employer risk reports at $0.05/result β $5.00.
One charge per employer risk report produced. Employers with no OSHA inspections found are returned empty and not charged. The $0.05 price takes effect on 2026-10-27; until then each report is charged $0.02. Getting through OSHA's bot wall costs you nothing extra.
Use cases
- Underwriting risk signal β get a defensible, auditable safety-risk score per employer.
- Vendor due diligence β screen suppliers for repeat OSHA violations before contracting.
- Safety benchmarking β compare employers' violation history and penalty totals.
- Monitoring β run weekly to catch new inspections and rising risk on watched employers.
Why this actor
- A risk score, not raw citations β severity-weighted, recency-decayed, and fully auditable (the formula is documented).
- Repeat-offender flag, penalty totals, and a violations-over-time trend in one report.
- Keeps answering behind OSHA's October 2026 bot wall β the unblocker is built in and paid by us β and tracks what changes over time.
Limitations & updates
Covers OSHA federal and state-plan inspection data exposed in the public IMIS establishment search. Establishment names in OSHA data are per-inspection and inconsistent, so reports aggregate at the employer-query level (use the state filter to narrow). While OSHA's site is behind its bot wall, citations are read for the 6 most recent inspections with violations per employer; older cited inspections are listed with OSHA's violation count and counted in inspections_not_detailed, but not scored. The risk score reflects recorded violations only β not unreported hazards β and is a relative signal, not a regulatory determination.
FAQ
Where does the data come from?
OSHA's public IMIS enforcement database (inspections + citations). Public data, no login required.
How is the risk score calculated?
A deterministic formula: violations weighted by OSHA gravity (Willful > Repeat > Serious > Other) and decayed by recency, scaled to 0-100. It's reproducible and auditable β the same history always yields the same score.
What counts as a repeat offender?
Any employer with one or more citations OSHA classified as 'Repeat' gravity.
Can I limit to one state?
Yes β pass a two-letter state code to restrict the inspections analyzed; leave it empty for nationwide.
How am I charged?
Per employer risk report produced. Employers with no inspections found are returned empty and not charged. If your run's maximum charge is reached, the actor stops before looking up the remaining employers and lists them in a free row.
Can it track changes over time?
Yes β run on a schedule and it reports new inspections, new violations, and risk-score movement since the previous run.
Guides & use cases
Written up on scrapebench.dev β the bench that runs and verifies this actor against the live source every night:
- How-to: How to run OSHA Violation Risk & Time-Series
- Use case: Compare Employers' OSHA Safety Risk
- Use case: Dollar General OSHA Violation History & Risk
- Use case: Screen a Supplier for OSHA Repeat Violations
More actors, coverage and nightly verification results: scrapebench.dev
Works with AI assistants (MCP)
Callable as an MCP tool, so Claude, Cursor, VS Code Copilot and other MCP clients can run it directly. Grab the config from the MCP tab on this page β Apify hosts the server and keeps that snippet current, and OAuth signs you in on first connect, so no API token goes in your config file.
Then just ask:
"Pull the OSHA inspection and violation history for Dollar General."
It can compare against the previous run, so putting it on a schedule turns a one-off check into ongoing monitoring. Runs started this way bill exactly like any other run.