OSHA Violation Risk & Time-Series avatar

OSHA Violation Risk & Time-Series

Pricing

$0.02 / employer risk report

Go to Apify Store
OSHA Violation Risk & Time-Series

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

ScrapeBench

Maintained by Community

Actor 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:

FieldDescription
queryThe employer name you searched
risk_scoreDeterministic 0-100 severity-weighted, recency-decayed risk score
risk_bandlow / medium / high
repeat_offenderTrue if any Repeat-gravity violations
trendrising / flat / falling (recent vs prior 2-year windows)
by_gravityViolation counts by OSHA gravity (willful/repeat/serious/other)
total_current_penaltySum of current penalties (USD)
violation_time_seriesViolations + penalty per year
inspection_count / violation_countInspections found / citations read and scored
violations_listed_totalOSHA's own violation count across every inspection, read or not
inspections_not_detailedCited inspections whose citations were not read (beyond the 6 most recent)
inspectionsPer-inspection detail including each citation
new_inspections / new_violations / risk_score_deltaWhat changed since the previous run (monitoring)
source_urlThe 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

FieldRequiredTypeDefaultDescription
employersyesarray["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.
statenostringβ€”Optional two-letter state code (e.g. 'TX') to limit inspections to that state. Leave empty for nationwide.
maxInspectionsPerEmployernointeger25Cap 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.
compareToPreviousnobooleantrueWhen 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.
proxyConfigurationnoobject{"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:

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.