Use case
Dollar General OSHA Violation History & Risk
Get Dollar General's OSHA inspection and violation history with a severity-weighted risk score, repeat-offender flag, and violations-over-time trend.
Say you’re on a workers’-comp underwriting desk, or writing the safety section of a retail-sector note, and Dollar General is on the list. You need the employer’s OSHA enforcement history — what inspections are on the record, what was cited, at what gravity, for how much, and whether the last few years look worse or better than the few before. It’s all public. The problem is that the public version arrives one inspection at a time, and a national retailer with thousands of stores has a long list.
The manual way, and what it costs
OSHA’s IMIS establishment search is free, needs no login, and will answer this. Type the establishment name, get a table of inspections — each with an ID, an open date, a state, a type. That table has no citations in it. The gravities, the standards cited and the penalty amounts live on each inspection’s own detail page, so every row in that list is another click, another page, another set of numbers to copy out. There’s no export button and no scoring: what you can take away is whatever you retyped into your own spreadsheet.
For one inspection, or a handful, that’s fine and you should just do it — it’s the primary source and it’s free. It stops being reasonable at exactly the point Dollar General puts you: a name with a long inspection list, where you want the citations rolled up rather than read, and where you’ll want the same answer again next quarter.
The faster way
OSHA Violation Risk & Time-Series does the same search once and hands back every row at once.
{
"employers": [
"Dollar General"
],
"maxInspectionsPerEmployer": 25
}
One employer name, nationwide, capped at the 25 most recent inspections. Dollar General is the
short, canonical spelling, which is what OSHA’s establishment field tends to carry variants of —
store numbers and all — and the actor folds every match into one company-level report. The cap
matters more than it looks: the score and the totals are computed over the inspections that were
pulled, so 25 gives you a recent-history picture. If you want more of the record, raise it (up to
200). If you only care about one state’s stores, add "state": "TX" and the report is built from
that state’s inspections alone.
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"
}
| Field | Example value | Meaning |
|---|---|---|
query | Dollar General | The employer name you searched |
risk_score | 21 | Deterministic 0-100 severity-weighted, recency-decayed risk score |
risk_band | medium | low / medium / high |
repeat_offender | False | True if any Repeat-gravity violations |
trend | falling | rising / flat / falling (recent vs prior 2-year windows) |
by_gravity | {"serious": 2} | Violation counts by OSHA gravity (willful/repeat/serious/other) |
Read the shape of that row, not the numbers in it. The counts, the score and the penalties above are an illustration of the report’s structure — the real ones are whatever OSHA’s live record holds on the day you run it, and we are not going to print a figure for a named company that we haven’t measured. Run it and OSHA fills them in.
What closes the loop is the cluster of risk_score, by_gravity, repeat_offender and trend.
by_gravity is the raw fact: how many citations OSHA classified Willful, Repeat, Serious or Other.
repeat_offender is true if any of them is a Repeat. trend compares the gravity-weighted
violations of the last two years to the two before. risk_score is our arithmetic on top of
those facts — gravity-weighted (Willful 10, Failure to Abate 8, Repeat 6, Serious 3, Other 1),
decayed by age, scaled onto 0–100. It is deterministic and reproducible, and it is not an OSHA
rating: OSHA does not score employers, and nothing here implies OSHA’s assessment of anyone. The
how-to prints the full formula so you can check the number
rather than trust it.
What you’d do with it
Drop the row into the file the decision actually lives in. For an underwriting or diligence memo,
the useful artefact is by_gravity and total_current_penalty as the evidence and risk_score
as the sortable summary, with inspections[] — every inspection ID, date, and citation — kept as
the audit trail, since each carries a source_url back to the OSHA page it came from. Anyone who
challenges a conclusion can be sent to the primary record in one click. Then leave
compareToPrevious on and put the run on a schedule: from the second run onward, new_inspections,
new_violations and risk_score_delta tell you what moved without re-reading anything.
Worth knowing
Be careful what you conclude. This covers OSHA federal and state-plan inspection data as exposed in
the public IMIS establishment search — a record that can lag, and that only contains workplaces that
were inspected. An inspection is not a finding of guilt, and citations can be contested and
reduced after issuance. Establishment names in OSHA’s data are recorded per inspection and are
inconsistent, so the report aggregates at the level of the name you searched: a common name can pull
in worksites you didn’t mean, and stores trading under another name won’t be pulled in at all —
check the establishments array, and use the state filter to narrow. Inspections are also not
evenly distributed: a chain with thousands of stores accumulates far more of them than a small
employer ever could, so raw counts across companies of different sizes mislead. And the score
reflects recorded violations only, not unreported hazards. It is a relative signal over a public
record, not a regulatory determination.
Run it yourself: How to run OSHA Violation Risk & Time-Series walks the whole thing step by step.
Doing this for more than one name at a time? Compare Employers’ OSHA Safety Risk runs the same report across a list and puts the rows side by side. If the company you’re checking is a building contractor, pair this with Multistate Contractor License Lookup — verify the licence is live first, then read the safety record.
Last updated 2026-07-13