OSHA Enforcement Monitor — New Inspections, No Login, $20/1k avatar

OSHA Enforcement Monitor — New Inspections, No Login, $20/1k

Pricing

from $20.00 / 1,000 inspection alerts

Go to Apify Store
OSHA Enforcement Monitor — New Inspections, No Login, $20/1k

OSHA Enforcement Monitor — New Inspections, No Login, $20/1k

Watch companies, states or NAICS codes on osha.gov and get only NEW or UPDATED inspections since the last run, with citations, violation counts by type and initial/current penalties. Weekly schedule. No login or API key. MCP-ready. $20 per 1,000 alerts.

Pricing

from $20.00 / 1,000 inspection alerts

Rating

0.0

(0)

Developer

Peter Skotte

Peter Skotte

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

OSHA Enforcement Monitor

Watch companies, states or industries for new OSHA inspections and for citation and penalty changes on inspections you already know about. Schedule it weekly and every run returns only what changed since the last one, straight from osha.gov's public enforcement records. No login, no API key.

Each alert carries the inspection id, establishment, site address, NAICS, open/close dates, inspection type and scope, case status, violations by type (serious / willful / repeat / other), initial and current penalties and the individual citation items.

Who uses this

  • Safety and EHS consultants — get notified when a client, prospect or competitor site is inspected and when citations are issued.
  • Insurers and underwriters — track enforcement activity on insured accounts and in high-risk NAICS codes.
  • Corporate EHS teams — monitor your own establishments across states, including state-plan states.
  • Law firms and labor organizations — follow willful/repeat citations and penalty settlements.
  • Analysts and journalists — watch a whole industry (NAICS) or state for enforcement trends.

Input

FieldDefaultMeaning
companyNames["Amazon", "Tesla"]Establishment names (substring match on osha.gov). Clear to watch states or industries only.
states[]Two-letter state codes. Narrows companies/NAICS to those states; alone, watches every inspection in each state.
naicsCodes[]2–6 digit NAICS codes, e.g. 493110 (warehousing) or 23 (all construction).
lookbackDays30Inspections opened within this window are scanned. Keep it longer than your schedule interval.
includeCitationstrueFetch each emitted inspection's detail page (violations, penalties, citations, address). Also enables penalty-change detection.
maxNewPerQuery5Alerts per company/state/NAICS query per run; the rest arrive on later runs.
maxItems10Total alerts per run.
firstRunModeemitAllemitAll emits everything in the window on the first run; baseline records it silently so only future inspections are emitted.
webhookUrl""POST a run summary plus up to 50 alerts here after each run.
monitorIddefaultName of the watch list. Each id has its own memory.
dolApiKey""Optional DOL Open Data API key (see below).

Query semantics

  • companyNames and naicsCodes are the things you watch; states restricts them. ["Amazon"] + ["TX","CA"] = Amazon inspections in Texas and California.
  • With no companies and no NAICS codes, each state in states is watched on its own (every inspection opened there).
  • Every alert says which query matched it in matchedQuery (company:Amazon state:TX, naics:493110, state:DE).

Output

One record per new or updated inspection:

{
"activityNr": "1915031.015",
"establishmentName": "Mtn1 Amazon Fulfillment Center",
"siteAddress": "1025 Boxwood Rd",
"city": "Wilmington",
"state": "DE",
"zip": "19804",
"naics": "454110",
"openDate": "2026-09-03",
"closeDate": null,
"inspectionType": "Complaint",
"scope": "Partial",
"caseStatus": "OPEN",
"office": "Wilmington Area Office",
"violations": { "serious": 0, "willful": 0, "repeat": 0, "other": 0, "unclassified": 0, "total": 0 },
"totalInitialPenalty": 0,
"totalCurrentPenalty": 0,
"citations": [],
"oshaUrl": "https://www.osha.gov/ords/imis/establishment.inspection_detail?id=1915031.015",
"matchedQuery": "company:Amazon",
"changeType": "new",
"firstSeenAt": "2026-09-28T14:02:11.000Z",
"monitorId": "default"
}

citations lists each citation item with citationId, citationType, standardCited, issuanceDate, abatementDueDate, initialPenalty, currentPenalty, ftaPenalty, contest and latestEvent (e.g. I - Informal Settlement).

changeType is new for an inspection the monitor has not seen, or updated when its violation count, case status, close date or penalties changed since the last run. Penalty changes are detected by re-reading cited inspections inside the lookback window on every run (up to 300 per run), which is how settlements and contests show up.

The run's key-value store also gets a SUMMARY record: { newCount, updatedCount, scanned, seenTotal, baseline }.

Scheduling

Create an Apify schedule (weekly is a good default; OSHA posts inspections with a lag of a few days) with your watch list as input. Keep lookbackDays at least twice the schedule interval so nothing falls between runs. The monitor stores seen inspection ids and their citation fingerprint in a named key-value store osha-monitor-<hash of monitorId>; up to 50,000 ids are kept, oldest dropped first.

  • First run: with firstRunMode: "emitAll" you get everything currently in the window (capped by maxItems), which doubles as a sample. With "baseline" the first run emits nothing and only future activity is reported.
  • Several watch lists: give each its own monitorId (e.g. clients, competitors, tx-construction).
  • Reset: delete the osha-monitor-… key-value store, or pick a new monitorId.

Webhook

Set webhookUrl to receive a POST after every run:

{ "monitorId": "default", "runAt": "…", "newCount": 3, "updatedCount": 1, "scanned": 61, "seenTotal": 120, "baseline": false, "inspections": [ …up to 50 records… ] }

Nothing is posted when there is no run (the actor did not start); a run with zero changes still posts a summary with an empty inspections array, so your receiver can tell "checked, nothing new" from "did not check".

Data source: keyless vs. API-key mode

Default (keyless): inspections are listed from OSHA's public Establishment Search (establishment.search, for company names) and Inspections within Industry search (industry.search, for states and NAICS codes), and each emitted inspection's detail page supplies citations and penalties. These are the same pages a human uses on osha.gov; no key or login is needed.

Optional API-key mode: the U.S. Department of Labor also exposes the OSHA inspection table through its Open Data API v4 (free key from dataportal.dol.gov). If you supply dolApiKey, the monitor lists inspections through that API (filtered by open date, establishment name, state and NAICS) and still reads citation details from osha.gov. Any API error or unexpected response falls back to the keyless listing for that run, with a warning in the log. The API mode is offered as a convenience for users who already hold a key; the keyless path is the one this actor is tested against.

Limits and notes

  • Up to 1,000 inspections are scanned per query per run (10 pages of 100).
  • Establishment name matching is OSHA's own substring match, so "Amazon" also returns "Amazon Corporate Llc" and "Mtn1 Amazon Fulfillment Center".
  • OSHA typically publishes an inspection within days of opening; citations appear weeks to months later, which is exactly what changeType: "updated" catches.
  • Data covers federal OSHA and state-plan states (the office field tells you which).

Pricing

$0.005 per run plus $0.02 per emitted inspection alert. A weekly monitor of a handful of companies typically costs well under $1 per month.