OSHA Inspections, Violations & Fatal Accident Scraper
Pricing
from $10.20 / 1,000 results
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
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
Table of contents
- What it does
- Quickstart
- Input reference
- Output reference
- Example output record
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
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
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
searchType | enum | no | inspections | inspections searches the establishment record by employer, ZIP or state. accidents searches OSHA fatality/catastrophe reports by industry and keyword. |
establishmentNames | string[] | no | ["roofing"] | Employer or site names to search, one search per item. OSHA matches whole words. |
states | string[] | no | (none) | Two-letter state codes. On their own they sweep a whole state's enforcement history. |
siteZipCodes | string[] | no | (none) | Five-digit worksite ZIP codes. Returns every inspection at that location. |
inspectionNumbers | string[] | no | (none) | Exact OSHA inspection numbers, for example 1794125.015. When given, these are fetched instead of running searches. |
dateFrom | string | no | (empty) | Only inspections opened on or after this date (YYYY-MM-DD). |
dateTo | string | no | (empty) | Only inspections opened on or before this date (YYYY-MM-DD). |
withViolations | enum | no | all | all, yes (only inspections with citations), or no (only inspections without). |
caseStatus | enum | no | all | all, open, or closed. |
officeType | enum | no | all | all, fed (Federal OSHA), or state (state-plan programs). |
naicsCodes | string[] | no | (none) | Accident search only. Industry codes to search nationwide, for example 238160. |
sicCodes | string[] | no | (none) | Accident search only. Four-digit SIC codes, used when no NAICS is given. |
accidentKeyword | string | no | (empty) | Accident search only. OSHA hazard keyword, for example Fall Protection, Trench, Amputation. |
accidentDescription | string | no | (empty) | Accident search only. Words from the one-line event description. |
accidentAbstract | string | no | (empty) | Accident search only. Words from the full investigator narrative. |
fatalAccidentsOnly | boolean | no | false | Accident search only. Return only investigations where a worker was killed. |
minCurrentPenaltyUsd | integer | no | (none) | Keep only inspections whose current penalty is at least this amount. |
minViolations | integer | no | (none) | Keep only inspections with at least this many current violations. |
citationTypes | string[] | no | (any) | Keep only inspections with a citation of these types: serious, willful, repeat, other. |
inspectionTypes | string[] | no | (any) | Keep only these inspection kinds, for example Complaint, Accident, Referral, Planned, Fat/Cat, FollowUp. |
naicsPrefixes | string[] | no | (any) | Keep only inspections whose establishment NAICS starts with one of these, for example 23, 311, 62. |
onlyFatalities | boolean | no | false | Keep only inspections tied to a worker death or catastrophe. |
requireSiteAddress | boolean | no | false | Keep only inspections with a full worksite street address. |
fetchCitationDetails | boolean | no | true | Also fetch each citation's standard title, workers exposed, instances, gravity, abatement status and final order date. |
includeAccidentInvestigations | boolean | no | false | Attach the accident investigation summaries (narrative, keywords, victim details). Always on in accident mode. |
maxRecords | integer | no | 30 | Maximum inspection records to return across all searches. |
proxyConfiguration | object | no | (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:
| Field | Type | Description |
|---|---|---|
inspectionNumber | string | OSHA inspection number (unique). |
reportId | string | OSHA report ID. |
establishmentName | string | Employer / establishment name. |
oshaOffice | string | OSHA area or state-plan office. |
caseStatus | string | OPEN or CLOSED. |
isOpenCase | boolean | true if the case is still open. |
dateOpened | string | Inspection open date (YYYY-MM-DD). |
closeConferenceDate | string | Closing conference date, or null. |
caseClosedDate | string | Case closed date, or null. |
siteAddress | string | Full worksite address (single line). |
siteStreet / siteCity / siteState / sitePostalCode | string | Worksite address parts. |
mailingAddress | string | Employer mailing address (single line). |
mailingStreet / mailingCity / mailingState / mailingPostalCode | string | Mailing address parts. |
naicsCode / naicsDescription | string | Establishment NAICS code and description. |
sicCode / sicDescription | string | SIC code and description, or null. |
unionStatus / isUnion | string / boolean | Union status of the site. |
ownership | string | Ownership, for example Private, Local Government. |
inspectionType | string | Inspection type, for example Fat/Cat, Complaint, Planned. |
scope | string | Inspection scope, for example Partial, Complete. |
advancedNotice | boolean | Whether advance notice was given. |
safetyOrHealth | string | Safety or Health. |
emphasisPrograms | string[] | National / local emphasis program codes. |
initialViolations* / currentViolations* | integer | Violation counts by type (serious, willful, repeat, other, unclassified, total), initial and current. |
initialPenaltyUsd / currentPenaltyUsd / ftaPenaltyUsd | integer | Penalty totals in USD. |
currentPenalty{Serious,Willful,Repeat,Other}Usd | integer | Current penalty by citation type. |
penaltyReductionUsd / penaltyReductionPct | integer | Penalty reduction after settlement. |
hasViolations / hasSeriousViolations / hasWillfulViolations / hasRepeatViolations | boolean | Quick risk flags. |
violationItemsCount | integer | Number of citation items. |
citationIds | string[] | Citation IDs. |
standardsCited | string[] | Cited standard codes. |
citationTypes | string[] | Distinct citation types on this inspection. |
violations | object[] | One object per citation (see sub-fields below). |
topStandardCited | string | The highest-penalty standard cited, with its title. |
topCitationPenaltyUsd | integer | Penalty of the top citation. |
maxWorkersExposed | integer | Highest workers-exposed count across citations. |
relatedActivities | object[] | Related OSHA activities (type, activityNumber, safety, health). |
relatedActivityTypes | string[] | Distinct related activity types. |
relatedComplaintsCount / hasRelatedComplaint | integer / boolean | Related complaint info. |
accidentsCount | integer | Number of attached accident investigations. |
isFatalityOrCatastrophe | boolean | true if tied to a death or catastrophe. |
fatalitiesCount | integer | Number of fatalities. |
accidentSummaryNumbers | string[] | OSHA accident summary numbers. |
accidentDescriptions | string[] | One-line event descriptions. |
accidentAbstracts | string[] | Full investigator narratives. |
victimOccupations | string[] | Victim occupations. |
degreesOfInjury | string[] | Degrees of injury, for example Fatality. |
accidents | object[] | Full accident investigation objects (see sub-fields below). |
inspectionUrl | string | OSHA inspection detail URL. |
source | string | Always OSHA Enforcement (DOL IMIS). |
observedAt | string | ISO 8601 timestamp of when the record was collected. |
inputQuery | string | The 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:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "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 (
resultevent). 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
errorfield and does not charge for it. Empty runs cost nothing. - Spend cap respected. Set
maxTotalChargeUsdon 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.
Related scrapers
- EPA ECHO Scraper: EPA facility compliance and enforcement.
- FMCSA Carriers Scraper: US trucking carrier safety records.
- CFPB Complaints Scraper: consumer financial complaints.
- FDA Warning Letters Scraper: FDA warning letters to firms.
- USAspending Federal Award Scraper: US federal prime awards.
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.
