OSHA Inspections, Violations & Fatal Accident Scraper avatar

OSHA Inspections, Violations & Fatal Accident Scraper

Pricing

from $10.20 / 1,000 results

Go to Apify Store
OSHA Inspections, Violations & Fatal Accident Scraper

OSHA Inspections, Violations & Fatal Accident Scraper

Scrape US OSHA workplace safety enforcement: inspections with employer site and mailing address, NAICS, citations by standard with penalties, abatement and contest status, plus fatal and catastrophic accident investigations with narrative and victim details. JSON, CSV or Excel.

Pricing

from $10.20 / 1,000 results

Rating

0.0

(0)

Developer

Scrapers Lat

Scrapers Lat

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

OSHA Inspections, Violations & Fatal Accident Scraper

OSHA Inspections, Violations & Fatal Accident Scraper

Here is one real result, with every field the actor returns (an accident-investigation search). The violations array is trimmed to 2 of its 5 real entries and the accident keywords list is trimmed, with a [trimmed] marker; the one source em dash in topStandardCited is rendered as a hyphen; every value shown is otherwise real:

{
"inspectionNumber": "1804435.015",
"reportId": "0418800",
"establishmentName": "Construction Services International Corp.",
"oshaOffice": "Fort Lauderdale Area Office",
"caseStatus": "CLOSED",
"isOpenCase": false,
"dateOpened": "2025-02-13",
"closeConferenceDate": "2025-02-13",
"caseClosedDate": "2026-06-18",
"siteAddress": "6450 Nw 25th Street Bldg 704, Miami, FL 33122",
"siteStreet": "6450 Nw 25th Street Bldg 704",
"siteCity": "Miami",
"siteState": "FL",
"sitePostalCode": "33122",
"mailingAddress": "7500 Nw 69th Ave., Medley, FL 33166",
"mailingStreet": "7500 Nw 69th Ave.",
"mailingCity": "Medley",
"mailingState": "FL",
"mailingPostalCode": "33166",
"naicsCode": "238160",
"naicsDescription": "Roofing Contractors",
"sicCode": null,
"sicDescription": null,
"unionStatus": "NonUnion",
"isUnion": false,
"ownership": "Private",
"inspectionType": "Fat/Cat",
"scope": "Partial",
"advancedNotice": false,
"safetyOrHealth": "Safety",
"emphasisPrograms": ["N:Fall"],
"initialViolationsSerious": 4,
"initialViolationsWillful": null,
"initialViolationsRepeat": null,
"initialViolationsOther": 1,
"initialViolationsUnclassified": null,
"initialViolationsTotal": 5,
"currentViolationsSerious": 4,
"currentViolationsWillful": null,
"currentViolationsRepeat": null,
"currentViolationsOther": 1,
"currentViolationsUnclassified": null,
"currentViolationsTotal": 5,
"initialPenaltyUsd": 45098,
"currentPenaltyUsd": 31572,
"ftaPenaltyUsd": 0,
"currentPenaltySeriousUsd": 31051,
"currentPenaltyWillfulUsd": 0,
"currentPenaltyRepeatUsd": 0,
"currentPenaltyOtherUsd": 521,
"penaltyReductionUsd": 13526,
"penaltyReductionPct": 30,
"hasViolations": true,
"hasSeriousViolations": true,
"hasWillfulViolations": false,
"hasRepeatViolations": false,
"violationItemsCount": 5,
"citationIds": ["01001", "01002", "01003", "01004", "02001"],
"standardsCited": ["19260501 B04 I", "19260501 B10", "19260503 A02", "19260503 C03", "19260503 B01"],
"citationTypes": ["Serious", "Other"],
"violations": [
{
"citationId": "01001",
"citationType": "Serious",
"standardCited": "19260501 B04 I",
"standardTitle": "Duty to have fall protection.",
"issuanceDate": "2025-08-07",
"abatementDueDate": "2025-09-03",
"currentPenaltyUsd": 11587,
"initialPenaltyUsd": 16550,
"ftaPenaltyUsd": 0,
"contestDate": null,
"latestEvent": "I - Informal Settlement",
"note": null,
"violationUrl": "https://www.osha.gov/ords/imis/establishment.violation_detail?id=1804435.015&citation_id=01001",
"abatementStatus": "Abatement Completed",
"nrInstances": 1,
"nrExposed": 7,
"gravity": 10,
"abatementDate": "2025-09-03",
"finalOrderDate": "2025-08-29",
"relatedEventCode": "A"
},
{
"citationId": "02001",
"citationType": "Other",
"standardCited": "19260503 B01",
"standardTitle": "Training requirements.",
"issuanceDate": "2025-08-07",
"abatementDueDate": "2025-09-24",
"currentPenaltyUsd": 521,
"initialPenaltyUsd": 744,
"ftaPenaltyUsd": 0,
"contestDate": null,
"latestEvent": "I - Informal Settlement",
"note": null,
"violationUrl": "https://www.osha.gov/ords/imis/establishment.violation_detail?id=1804435.015&citation_id=02001",
"abatementStatus": "Abatement Completed",
"nrInstances": 1,
"nrExposed": 7,
"gravity": null,
"abatementDate": "2025-09-24",
"finalOrderDate": "2025-08-29",
"relatedEventCode": null
}
],
"topStandardCited": "19260501 B04 I - Duty to have fall protection.",
"topCitationPenaltyUsd": 11587,
"maxWorkersExposed": 7,
"relatedActivities": [{"type": "Accident", "activityNumber": "2262492", "safety": false, "health": false}],
"relatedActivityTypes": ["Accident"],
"relatedComplaintsCount": 0,
"hasRelatedComplaint": false,
"accidentsCount": 1,
"isFatalityOrCatastrophe": true,
"fatalitiesCount": 1,
"accidentSummaryNumbers": ["174289.015"],
"accidentDescriptions": ["Employee is fatally injured in fall while pressure washing r"],
"accidentAbstracts": ["At 10:00 a.m. on February 13, 2025, Employee #1 was pressure washing a roof when he fell through a skylight, sustaining fatal injuries."],
"victimOccupations": ["Roofers"],
"degreesOfInjury": ["Fatality"],
"accidents": [
{
"summaryNumber": "174289.015",
"title": "Employee is fatally injured in fall while pressure washing r",
"eventDate": "2025-02-13",
"reportId": "0418800",
"inspectionNumber": "1804435.015",
"establishmentName": "Construction Services International Corp.",
"sic": null,
"naics": "238160",
"abstract": "At 10:00 a.m. on February 13, 2025, Employee #1 was pressure washing a roof when he fell through a skylight, sustaining fatal injuries.",
"keywords": ["Blunt force", "Commercial Building", "Construction", "Fall", "Fall From Elevation", "Fall Protection", "Roof", "Skylight", "[trimmed]"],
"endUse": "Commercial building",
"projectType": "Maintenance or repair",
"projectCostUsd": null,
"stories": null,
"nonBuildingHeightFeet": 25,
"isFatality": true,
"employees": [
{
"employeeNumber": "1",
"inspectionNumber": "1804435.015",
"age": 42,
"sex": "M",
"degreeOfInjury": "Fatality",
"natureOfInjury": null,
"occupation": "Roofers",
"distanceOfFallFeet": 25,
"cause": "Waterproofing",
"fatalityCause": null
}
],
"url": "https://www.osha.gov/ords/imis/accidentsearch.accident_detail?id=174289.015"
}
],
"inspectionUrl": "https://www.osha.gov/ords/imis/establishment.inspection_detail?id=1804435.015",
"source": "OSHA Enforcement (DOL IMIS)",
"observedAt": "2026-08-12T21:49:34.244Z",
"inputQuery": "accidents / NAICS 238160"
}

The most complete OSHA enforcement scraper available. It returns every field OSHA's establishment and accident records expose for each inspection, including the full site and mailing address, NAICS/SIC industry, initial and current violation counts by type, initial and current penalties broken down by serious/willful/repeat/other, every citation with the plain-English standard title, gravity, workers exposed and abatement status, and the full accident investigation (investigator narrative, hazard keywords, project type and victim age, occupation and degree of injury). Search by employer, ZIP, state, inspection number, or by industry and keyword across fatal accident investigations.

📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples

Apify Coverage Output Billing

Table of contents

What it does

The actor reads OSHA's public enforcement data (the DOL IMIS system) and writes one normalized record per inspection to the run's dataset. In inspections mode it searches the establishment record by employer name, worksite ZIP code, state, or exact inspection number. In accidents mode it starts from OSHA's fatality and catastrophe reports (searchable by NAICS/SIC industry and hazard keyword nationwide) and returns the inspection behind each one with the narrative and victim details attached. Each inspection is enriched with its full citation list, penalty breakdown, related complaints and accident investigations. Search-side filters (date, violations, case status, office type) and result-side filters (minimum penalty, minimum violations, citation type, NAICS prefix, fatalities only) narrow the set before records are written, so you only pay for the inspections that match.

Quickstart

Open the actor, paste this into the input, and press Run. It returns up to 30 roofing inspections in ZIP 89109, with citation details and accident investigations attached.

{
"searchType": "inspections",
"siteZipCodes": ["89109"],
"naicsPrefixes": ["23"],
"fetchCitationDetails": true,
"includeAccidentInvestigations": true,
"maxRecords": 30
}

To pull every fatal accident in an industry, switch to accident mode:

{
"searchType": "accidents",
"naicsCodes": ["238160"],
"fatalAccidentsOnly": true,
"dateFrom": "2025-01-01",
"dateTo": "2025-06-30"
}

Input reference

FieldTypeRequiredDefaultDescription
searchTypeenumnoinspectionsinspections searches the establishment record by employer, ZIP or state. accidents searches OSHA fatality/catastrophe reports by industry and keyword.
establishmentNamesstring[]no["roofing"]Employer or site names to search, one search per item. OSHA matches whole words.
statesstring[]no(none)Two-letter state codes. On their own they sweep a whole state's enforcement history.
siteZipCodesstring[]no(none)Five-digit worksite ZIP codes. Returns every inspection at that location.
inspectionNumbersstring[]no(none)Exact OSHA inspection numbers, for example 1794125.015. When given, these are fetched instead of running searches.
dateFromstringno(empty)Only inspections opened on or after this date (YYYY-MM-DD).
dateTostringno(empty)Only inspections opened on or before this date (YYYY-MM-DD).
withViolationsenumnoallall, yes (only inspections with citations), or no (only inspections without).
caseStatusenumnoallall, open, or closed.
officeTypeenumnoallall, fed (Federal OSHA), or state (state-plan programs).
naicsCodesstring[]no(none)Accident search only. Industry codes to search nationwide, for example 238160.
sicCodesstring[]no(none)Accident search only. Four-digit SIC codes, used when no NAICS is given.
accidentKeywordstringno(empty)Accident search only. OSHA hazard keyword, for example Fall Protection, Trench, Amputation.
accidentDescriptionstringno(empty)Accident search only. Words from the one-line event description.
accidentAbstractstringno(empty)Accident search only. Words from the full investigator narrative.
fatalAccidentsOnlybooleannofalseAccident search only. Return only investigations where a worker was killed.
minCurrentPenaltyUsdintegerno(none)Keep only inspections whose current penalty is at least this amount.
minViolationsintegerno(none)Keep only inspections with at least this many current violations.
citationTypesstring[]no(any)Keep only inspections with a citation of these types: serious, willful, repeat, other.
inspectionTypesstring[]no(any)Keep only these inspection kinds, for example Complaint, Accident, Referral, Planned, Fat/Cat, FollowUp.
naicsPrefixesstring[]no(any)Keep only inspections whose establishment NAICS starts with one of these, for example 23, 311, 62.
onlyFatalitiesbooleannofalseKeep only inspections tied to a worker death or catastrophe.
requireSiteAddressbooleannofalseKeep only inspections with a full worksite street address.
fetchCitationDetailsbooleannotrueAlso fetch each citation's standard title, workers exposed, instances, gravity, abatement status and final order date.
includeAccidentInvestigationsbooleannofalseAttach the accident investigation summaries (narrative, keywords, victim details). Always on in accident mode.
maxRecordsintegerno30Maximum inspection records to return across all searches.
proxyConfigurationobjectno(none)Standard Apify proxy configuration. Not required; OSHA is reachable without a proxy.

Output reference

One dataset item per inspection. Types: string, integer, boolean, string[], object, object array, or null when the source value is absent. Key fields:

FieldTypeDescription
inspectionNumberstringOSHA inspection number (unique).
reportIdstringOSHA report ID.
establishmentNamestringEmployer / establishment name.
oshaOfficestringOSHA area or state-plan office.
caseStatusstringOPEN or CLOSED.
isOpenCasebooleantrue if the case is still open.
dateOpenedstringInspection open date (YYYY-MM-DD).
closeConferenceDatestringClosing conference date, or null.
caseClosedDatestringCase closed date, or null.
siteAddressstringFull worksite address (single line).
siteStreet / siteCity / siteState / sitePostalCodestringWorksite address parts.
mailingAddressstringEmployer mailing address (single line).
mailingStreet / mailingCity / mailingState / mailingPostalCodestringMailing address parts.
naicsCode / naicsDescriptionstringEstablishment NAICS code and description.
sicCode / sicDescriptionstringSIC code and description, or null.
unionStatus / isUnionstring / booleanUnion status of the site.
ownershipstringOwnership, for example Private, Local Government.
inspectionTypestringInspection type, for example Fat/Cat, Complaint, Planned.
scopestringInspection scope, for example Partial, Complete.
advancedNoticebooleanWhether advance notice was given.
safetyOrHealthstringSafety or Health.
emphasisProgramsstring[]National / local emphasis program codes.
initialViolations* / currentViolations*integerViolation counts by type (serious, willful, repeat, other, unclassified, total), initial and current.
initialPenaltyUsd / currentPenaltyUsd / ftaPenaltyUsdintegerPenalty totals in USD.
currentPenalty{Serious,Willful,Repeat,Other}UsdintegerCurrent penalty by citation type.
penaltyReductionUsd / penaltyReductionPctintegerPenalty reduction after settlement.
hasViolations / hasSeriousViolations / hasWillfulViolations / hasRepeatViolationsbooleanQuick risk flags.
violationItemsCountintegerNumber of citation items.
citationIdsstring[]Citation IDs.
standardsCitedstring[]Cited standard codes.
citationTypesstring[]Distinct citation types on this inspection.
violationsobject[]One object per citation (see sub-fields below).
topStandardCitedstringThe highest-penalty standard cited, with its title.
topCitationPenaltyUsdintegerPenalty of the top citation.
maxWorkersExposedintegerHighest workers-exposed count across citations.
relatedActivitiesobject[]Related OSHA activities (type, activityNumber, safety, health).
relatedActivityTypesstring[]Distinct related activity types.
relatedComplaintsCount / hasRelatedComplaintinteger / booleanRelated complaint info.
accidentsCountintegerNumber of attached accident investigations.
isFatalityOrCatastrophebooleantrue if tied to a death or catastrophe.
fatalitiesCountintegerNumber of fatalities.
accidentSummaryNumbersstring[]OSHA accident summary numbers.
accidentDescriptionsstring[]One-line event descriptions.
accidentAbstractsstring[]Full investigator narratives.
victimOccupationsstring[]Victim occupations.
degreesOfInjurystring[]Degrees of injury, for example Fatality.
accidentsobject[]Full accident investigation objects (see sub-fields below).
inspectionUrlstringOSHA inspection detail URL.
sourcestringAlways OSHA Enforcement (DOL IMIS).
observedAtstringISO 8601 timestamp of when the record was collected.
inputQuerystringThe search that produced this record.

Citation sub-object fields (inside violations[]): citationId, citationType, standardCited, standardTitle, issuanceDate, abatementDueDate, currentPenaltyUsd, initialPenaltyUsd, ftaPenaltyUsd, contestDate, latestEvent, note, violationUrl, abatementStatus, nrInstances, nrExposed, gravity, abatementDate, finalOrderDate, relatedEventCode.

Accident sub-object fields (inside accidents[]): summaryNumber, title, eventDate, reportId, inspectionNumber, establishmentName, sic, naics, abstract, keywords, endUse, projectType, projectCostUsd, stories, nonBuildingHeightFeet, isFatality, employees (each with employeeNumber, age, sex, degreeOfInjury, natureOfInjury, occupation, distanceOfFallFeet, cause, fatalityCause), and url.

Example output record

See the hero record at the top of this page. It is a real fatal-accident inspection (inspection 1804435.015, a roofer who fell through a skylight) pulled from a live accident-mode run (input {"searchType":"accidents","naicsCodes":["238160"],"fatalAccidentsOnly":true,"dateFrom":"2025-01-01","dateTo":"2025-06-30"}), with the violations and keyword arrays trimmed and one source em dash rendered as a hyphen; every value shown is otherwise real.

Run via API and CLI

Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.

Run synchronously and get dataset items in one call:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~osha-inspections-violations-scraper/run-sync-get-dataset-items?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"searchType":"inspections","establishmentNames":["Tyson Foods"],"withViolations":"yes","minCurrentPenaltyUsd":10000,"maxRecords":50}'

Pull fatal accidents in an industry:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~osha-inspections-violations-scraper/runs?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"searchType":"accidents","naicsCodes":["238160"],"fatalAccidentsOnly":true,"maxRecords":100}'

Apify CLI:

apify call scrapers_lat/osha-inspections-violations-scraper \
--input '{"inspectionNumbers":["1804435.015"]}'

Fetch results

Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:

# JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"
# CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"
# Paginate large datasets
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"

<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.

Billing and limits

  • Pay per result. You are charged per inspection returned (result event). See the pricing tab for the current per-result price.
  • No charge on failure. If a run errors, the actor writes a single item with a populated error field and does not charge for it. Empty runs cost nothing.
  • Spend cap respected. Set maxTotalChargeUsd on the run; once reached, the actor stops emitting and charging further billable results.
  • Free Apify plans are capped at 10 inspections per run. Upgrade for higher maxRecords.
  • Filters save money. Search-side and result-side filters narrow the work before records are written, so tighter filters mean fewer billable results.

FAQ and troubleshooting

A run returned 0 records. Why? The search matched no inspections, or the filters excluded everything. Loosen the filters, widen the date range, or check the employer name / ZIP / inspection number. Zero-result runs are not charged.

What is the difference between inspections and accidents mode? inspections searches the establishment record by employer, ZIP or state. accidents searches OSHA's fatality and catastrophe reports by industry and keyword, and returns the inspection behind each one with the narrative and victim details attached.

Do I get the citation details and penalties? Yes, with fetchCitationDetails on (the default). Each citation carries the plain-English standard title, workers exposed, instances, gravity, abatement status, penalties and final order date.

How do I find the most serious cases? Combine withViolations: "yes", citationTypes: ["willful","repeat"] and minCurrentPenaltyUsd, or set onlyFatalities to focus on worker deaths.

Is this an official OSHA tool? No. This actor is independent and has no affiliation with OSHA or the US Department of Labor. It reads only data that is publicly available in OSHA's enforcement records.

More scrapers at scrapers.lat

Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.


Independent tool, not affiliated with OSHA or the US Department of Labor. Accesses only publicly available OSHA enforcement data.