← Use cases

Use case

Screen a Supplier for OSHA Repeat Violations

Vet a vendor before contracting: pull its OSHA inspection history and see repeat violations, total penalties, and a 0-100 safety-risk score.

You run vendor diligence for a manufacturer, and procurement has sent you thirty candidate suppliers with a contract award due at the end of the month. Your safety questionnaire asks each of them to self-report OSHA enforcement history, and you’d like to check the answers against the record before anyone signs anything. The specific thing you’re looking for is not a bad quarter — it’s a pattern: citations OSHA itself classified as Repeat, which is its way of saying the employer was cited for substantially the same violation before and it happened again.

The manual way, and what it costs

OSHA's public IMIS Establishment Search form
OSHA's IMIS Establishment Search — free, public, and one establishment at a time.

OSHA’s IMIS establishment search is public and free, and for one supplier it is the right tool — search the name, open the inspections, read the citations. But “Repeat” isn’t a filter. It’s a value in the Citaton Type column on each inspection’s detail page, so finding it means opening every inspection for every supplier and reading down the column. Thirty suppliers with, say, a dozen inspections apiece is several hundred page loads and no export at the end of it. Nothing about that is hard. It’s just a whole day, and it’s a whole day again the next time procurement sends a list.

If your list is one supplier long, close this page and go use the free search. If it’s thirty, and you want the same screen repeatable next quarter, keep reading.

The faster way

OSHA Violation Risk & Time-Series does the same search once and hands back every row at once.

{
  "employers": [
    "Amazon"
  ],
  "maxInspectionsPerEmployer": 50
}

Put every supplier name in the employers array — one name, thirty names, the cost and the run scale the same way — and you get one row back per name. The cap is raised to 50 here because a repeat-offender screen is a question about history, and the cap takes the most recent inspections first: at 25 you may only be looking at the last couple of years of a busy employer. Leave state empty; a supplier’s Repeat citation is worth knowing about wherever it was issued. Names that OSHA has nothing on come back with inspection_count: 0, which is itself a result — and it isn’t charged.

What comes back

{
  "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"
}
FieldExample valueMeaning
queryDollar GeneralThe employer name you searched
risk_score21Deterministic 0-100 severity-weighted, recency-decayed risk score
risk_bandmediumlow / medium / high
repeat_offenderFalseTrue if any Repeat-gravity violations
trendfallingrising / flat / falling (recent vs prior 2-year windows)
by_gravity{"serious": 2}Violation counts by OSHA gravity (willful/repeat/serious/other)

That’s the shape of one row (the values are illustrative, not a tally for any named company — your run reads the live record). For this job the column that closes the loop is repeat_offender: it is true when at least one citation on the employer’s record carries OSHA’s Repeat gravity, and false otherwise. It is a fact copied off the record, not a judgement — no weighting, no interpretation. by_gravity gives you the count behind it, and each entry in inspections[] carries the citation, the standard, the date and a source_url back to the OSHA page it came from, so a supplier who disputes the flag can be shown the inspection.

risk_score sits alongside it as a sortable summary — gravity-weighted, recency-decayed, 0 to 100 — but be clear with yourself and with procurement about what it is: our arithmetic over OSHA’s public data, not an OSHA rating and not a prediction. The formula is printed in the how-to; use it to rank a shortlist, not to justify a decision on its own.

What you’d do with it

Export the dataset to CSV and it drops straight into the diligence sheet next to the questionnaire answers: one line per supplier, repeat_offender and by_gravity beside what they told you. The mismatches are the follow-up list, and the inspections[] detail gives you the specific inspection IDs to ask about. Keep compareToPrevious on and schedule the same run monthly for suppliers you’ve already onboarded — from the second run onward you get new_inspections, new_violations and risk_score_delta, so a vendor picking up citations mid-contract shows up without anyone rerunning the screen by hand.

Worth knowing

This is the OSHA record, and that’s all it is. It covers federal and state-plan inspection data as exposed in the public IMIS establishment search — data that can lag, and that only reflects workplaces that were actually inspected. An inspection is not a finding of guilt, and citations can be contested and reduced after they’re issued; a Repeat flag is a reason to ask a question, not an answer. Establishment names in OSHA’s data are per-inspection and inconsistent, so a report aggregates everything matching the name you searched — a generic supplier name can pull in unrelated worksites, and a subsidiary trading under a different name won’t appear at all. Check establishments before you act on a row. And a supplier with no OSHA history is not thereby safe: inspections aren’t evenly distributed, a small employer may simply never have been visited, and the score reflects recorded violations only, not unreported hazards. It’s a relative signal, not a regulatory determination.


Run it yourself: How to run OSHA Violation Risk & Time-Series walks the whole thing step by step.

If the shortlist is down to two or three and you want them ranked rather than flagged, Compare Employers’ OSHA Safety Risk is the same report read side by side. And when the supplier is a licensed trade, Florida Contractor License Lookup answers the other half of the diligence question — whether the licence is active, bonded and insured today.

Last updated 2026-07-13