OTHERAI

OSHA Inspection & Citation Search

## What does OSHA Inspection & Citation Search do?

Try on Apify Store
$0.03per event
0
Users (30d)
0
Runs (30d)
90
Actively maintained
Maintenance Pulse
$0.03
Per event

Maintenance Pulse

90/100
Last Build
Today
Last Version
1d ago
Builds (30d)
8
Issue Response
N/A

Cost Estimate

How many results do you need?

result-returneds
Estimated cost:$3.00

Pricing

Pay Per Event model. You only pay for what you use.

EventDescriptionPrice
result-returnedCharged per result returned. Includes data transformation and structured output.$0.03

Example: 100 events = $3.00 · 1,000 events = $30.00

Documentation

What does OSHA Inspection & Citation Search do?

OSHA Inspection & Citation Search is an Apify actor that searches and retrieves workplace inspection records and violation citations from the U.S. Occupational Safety and Health Administration (OSHA) database. The data comes from the official DOL Open Data Portal API, which is updated daily by OSHA and covers every federal OSHA inspection conducted at workplaces across the United States.

This actor automates the process of querying OSHA inspection data, joining violation records to their parent inspections, and producing clean, structured output ready for compliance monitoring, risk assessment, or investigative research. Each result includes the inspection details (site, dates, type, scope, industry codes) along with an optional array of violation citations showing the exact OSHA standards violated, penalty amounts, violation severity, and abatement status.

Whether you are a safety consultant auditing a contractor's history, an insurance underwriter assessing workplace risk, a journalist investigating employer safety records, or an ESG analyst building corporate responsibility profiles, this actor delivers normalized, machine-readable OSHA data without the complexity of managing the DOL API's filter syntax, pagination, or multi-dataset joins.

Why use OSHA Inspection & Citation Search on Apify?

Searching OSHA inspection data through the DOL website is tedious. The public search tools have limited filtering, no bulk export, and no way to programmatically access results. The DOL Open Data API, while powerful, requires understanding a non-standard JSON filter syntax, managing pagination with offset parameters, and joining two separate datasets (inspections and violations) by activity number.

This actor handles all of that complexity for you:

  • Automatic violation joining -- Inspections and violations live in separate API datasets. This actor fetches both and joins them by activity_nr, giving you a complete picture in a single record.
  • Batch violation fetching -- Violations are retrieved in batches of 50 activity numbers using the DOL API's in operator, minimizing API calls while staying within request limits.
  • Smart filter construction -- The actor builds the DOL API's JSON filter_object syntax automatically from your plain-text inputs, including wildcard matching for company names and cities.
  • Scheduled monitoring -- Run daily or weekly on Apify's scheduler to track new inspections at a specific company, industry, or location. Pair with Slack or email integrations for alerts.
  • Clean, flat output -- Raw DOL API responses use inconsistent field names and require post-processing. This actor normalizes everything into a consistent schema with human-readable descriptions for codes.
  • No infrastructure needed -- Runs entirely in the Apify cloud. No servers, no Docker setup, no dependencies to manage.

Key features

  • Search by company name with automatic case-insensitive partial matching
  • Filter by state, city, NAICS industry code, inspection type, and safety/health classification
  • Date range filtering on inspection open dates
  • Optional violation/citation details joined to each inspection record
  • Human-readable descriptions for all coded fields (inspection type, scope, violation type)
  • Penalty totals calculated per inspection
  • Deleted violations automatically excluded
  • Paginated fetching with up to 5,000 inspections per run
  • Summary statistics logged after each run (type breakdown, state distribution, top companies, total penalties)
  • Results sorted by inspection date (newest first)

Use cases

Workplace safety compliance monitoring -- A safety director at a multi-site manufacturer runs weekly searches for their company name to catch new OSHA inspections before they escalate. They export results to Google Sheets and share with site managers.

Supplier and vendor due diligence -- A procurement team screens potential vendors by searching their company name and reviewing inspection history, violation types, and penalty amounts. They flag suppliers with willful or repeat violations for additional review.

Insurance underwriting risk assessment -- An insurance underwriter searches by NAICS code and state to benchmark workplace injury rates in a specific industry and geography. They use penalty data and violation severity to adjust risk premiums.

Investigative journalism -- A reporter searches for fatality/catastrophe inspections (type A) in a specific state to investigate workplace deaths. They cross-reference violation details with penalty amounts to identify cases where penalties seem disproportionately low.

ESG and corporate social responsibility reporting -- An ESG analyst builds a dataset of OSHA inspections and violations for publicly traded companies, using it alongside SEC filings and environmental data to score corporate safety performance.

Real estate environmental due diligence -- A commercial real estate firm searches construction-related NAICS codes (23xxxx) in a target city to assess the safety track record of general contractors before awarding site work.

Union organizing research -- A labor researcher searches for inspections at specific employers to document safety conditions. They use violation types and penalty data to support worker safety advocacy.

How to use OSHA Inspection & Citation Search

  1. Get a free DOL API key -- Visit dataportal.dol.gov/registration and register for a free account. Your API key will be provided immediately after registration.

  2. Configure your search -- Enter your API key, then set your filters. At minimum, provide a company name, state, or NAICS code to focus your search. You can combine multiple filters for precise targeting.

  3. Run the actor -- Click "Start" to execute your search. The actor will query the DOL API, paginate through all matching inspections, optionally fetch violations, and push clean data to the output dataset.

  4. Schedule recurring runs -- Use Apify's scheduler to run the actor daily or weekly. Combine with integrations to receive alerts when new inspections or violations are found.

  5. Export or integrate -- Download results as JSON, CSV, or Excel from the Dataset tab. Or use the Apify API, webhooks, Google Sheets, Slack, or Zapier integrations for automated workflows.

Input parameters

ParameterTypeRequiredDefaultDescription
apiKeyStringYes--DOL Open Data Portal API key. Free from dataportal.dol.gov/registration.
companyNameStringNo"WALMART" (prefill)Establishment name to search. Partial match with automatic uppercasing (e.g., "walmart" matches "WALMART STORES INC").
stateStringNo--Two-letter US state code (e.g., "TX", "CA", "OH").
cityStringNo--City name filter (partial match).
naicsCodeStringNo--NAICS industry code (2-6 digits). Partial matching: "23" matches all construction codes (23xxxx).
inspectionTypeSelectNo--Inspection type code: A=Fatality/Catastrophe, B=Complaint, C=Referral, F=Follow-up, G=Unprogrammed Related, H=Planned, J=Unprogrammed Other, K=Programmed Other, L=Other.
safetyHealthSelectNo--S=Safety inspections only, H=Health inspections only. Leave blank for both.
dateFromStringNo--Start date in YYYY-MM-DD format.
dateToStringNo--End date in YYYY-MM-DD format.
includeViolationsBooleanNotrueFetch violation/citation details for each inspection. Set to false for faster runs when you only need inspection metadata.
maxResultsIntegerNo100Maximum number of inspections to return (1-5,000).

Input examples

Search a specific company's inspection history:

{
    "apiKey": "YOUR_DOL_API_KEY",
    "companyName": "WALMART",
    "includeViolations": true,
    "maxResults": 200
}

Fatality inspections in Texas construction:

{
    "apiKey": "YOUR_DOL_API_KEY",
    "state": "TX",
    "naicsCode": "23",
    "inspectionType": "A",
    "dateFrom": "2024-01-01",
    "includeViolations": true,
    "maxResults": 500
}

Health inspections in California restaurants:

{
    "apiKey": "YOUR_DOL_API_KEY",
    "state": "CA",
    "naicsCode": "722511",
    "safetyHealth": "H",
    "dateFrom": "2024-01-01",
    "dateTo": "2024-12-31",
    "maxResults": 300
}

Quick scan -- inspections only, no violations:

{
    "apiKey": "YOUR_DOL_API_KEY",
    "companyName": "AMAZON",
    "state": "OH",
    "includeViolations": false,
    "maxResults": 100
}

Input tips

  • Combine company name with state for targeted employer searches. Using company name alone may return thousands of results for large employers.
  • Use NAICS code "23" for all construction -- This matches all 23xxxx codes including residential (2361), commercial (2362), highway (2373), and specialty trades (238x).
  • Set includeViolations: false for faster runs when you only need inspection counts, dates, and locations without citation details.
  • Start with a broader date range on your first run to understand the data volume before narrowing.
  • Inspection type "A" (Fatality/Catastrophe) is triggered by a workplace death or hospitalization of 3 or more employees -- these are the most serious inspections.
  • NAICS partial matching works at any length: "33" matches all manufacturing, "3361" matches motor vehicle manufacturing specifically.

Output example

Each inspection in the output dataset contains the following fields:

{
    "activityNumber": 1685394,
    "establishmentName": "WALMART STORES INC",
    "siteAddress": "1234 MAIN STREET",
    "siteCity": "HOUSTON",
    "siteState": "TX",
    "siteZip": "77001",
    "safetyOrHealth": "Safety",
    "naicsCode": "452210",
    "sicCode": "5311",
    "inspectionType": "B",
    "inspectionTypeDescription": "Complaint",
    "inspectionScope": "A",
    "inspectionScopeDescription": "Comprehensive",
    "unionStatus": "N",
    "employeesAtSite": 245,
    "openDate": "2024-09-15",
    "closeConferenceDate": "2024-10-01",
    "closeCaseDate": "2024-12-10",
    "violations": [
        {
            "citationId": "0101001",
            "standard": "19101037 A01",
            "violationType": "S",
            "violationTypeDescription": "Serious",
            "issuanceDate": "2024-11-20",
            "abateDate": "2025-01-15",
            "abateComplete": "X",
            "currentPenalty": 16131,
            "initialPenalty": 16131,
            "contested": false,
            "finalOrderDate": "2024-12-15",
            "instances": 1,
            "workersExposed": 12,
            "gravity": 10
        },
        {
            "citationId": "0101002",
            "standard": "19100303 B01",
            "violationType": "O",
            "violationTypeDescription": "Other-than-Serious",
            "issuanceDate": "2024-11-20",
            "abateDate": "2025-01-15",
            "abateComplete": null,
            "currentPenalty": 1036,
            "initialPenalty": 1036,
            "contested": false,
            "finalOrderDate": null,
            "instances": 1,
            "workersExposed": 5,
            "gravity": 5
        }
    ],
    "violationCount": 2,
    "totalPenalties": 17167,
    "extractedAt": "2025-06-10T14:30:00.000Z"
}

Output fields -- Inspection

FieldTypeDescription
activityNumberNumberUnique OSHA inspection identifier (links inspections to violations)
establishmentNameStringName of the inspected workplace
siteAddressStringStreet address of the inspection site
siteCityStringCity of the inspection site
siteStateStringTwo-letter state code
siteZipStringZIP code of the inspection site
safetyOrHealthString"Safety" or "Health" classification
naicsCodeStringNAICS industry classification code
sicCodeStringSIC industry classification code (legacy)
inspectionTypeStringSingle-letter inspection type code
inspectionTypeDescriptionStringHuman-readable inspection type (Fatality/Catastrophe, Complaint, Referral, etc.)
inspectionScopeStringSingle-letter scope code
inspectionScopeDescriptionStringHuman-readable scope (Comprehensive, Partial, Records Only, No Inspection)
unionStatusStringWhether employees at the site are unionized (Y/N)
employeesAtSiteNumberNumber of employees at the inspected site
openDateStringDate the inspection was opened (YYYY-MM-DD)
closeConferenceDateString/nullDate of the closing conference
closeCaseDateString/nullDate the case was closed
violationsArray/nullArray of ViolationRecord objects, or null if includeViolations is false
violationCountNumberCount of violations found during the inspection
totalPenaltiesNumberSum of all current penalty amounts in dollars
extractedAtStringISO 8601 timestamp of when the data was extracted

Output fields -- ViolationRecord

FieldTypeDescription
citationIdStringCitation identifier within the inspection
standardStringOSHA standard violated (e.g., "19260501 A" for fall protection)
violationTypeStringSingle-letter code: S, W, R, O, or U
violationTypeDescriptionStringHuman-readable type: Serious, Willful, Repeat, Other-than-Serious, or Unclassified
issuanceDateStringDate the citation was issued
abateDateString/nullDeadline for correcting the violation
abateCompleteString/nullWhether abatement is complete
currentPenaltyNumberCurrent penalty amount in dollars (may be adjusted from initial)
initialPenaltyNumberOriginally proposed penalty amount in dollars
contestedBooleanWhether the employer contested the citation
finalOrderDateString/nullDate the citation became a final order
instancesNumberNumber of instances of the violation
workersExposedNumberNumber of workers exposed to the hazard
gravityNumberGravity rating assigned by the inspector

How it works

  1. Filter construction -- The actor reads your inputs and builds a DOL API filter_object JSON expression. Company names and cities use like with % wildcards for partial matching. States and inspection types use eq for exact matching. Dates use gt/lt operators. Multiple conditions are combined with {"and":[...]}.

  2. Inspection fetching -- The actor queries the DOL OSHA inspection endpoint with pagination (limit=1000, incrementing offset). Results are sorted by open_date descending (newest first). Fetching continues until maxResults is reached or no more records are returned.

  3. Violation fetching -- If includeViolations is true, the actor collects all activity_nr values from the fetched inspections, batches them into groups of 50, and queries the DOL OSHA violation endpoint using the in operator. Deleted violations (delete_flag='X') are filtered out.

  4. Join and transform -- Violations are mapped to their parent inspections by activity_nr. Code values are translated to human-readable descriptions (e.g., "A" to "Fatality/Catastrophe", "S" to "Serious"). violationCount and totalPenalties are calculated per inspection.

  5. Output and summary -- Clean records are pushed to the Apify dataset. The actor logs a summary showing inspection type breakdown, state distribution, top companies, violation type counts, and total penalty amounts.

Technical details

DOL API filter construction

The DOL Open Data Portal API (v4) uses a filter_object query parameter containing JSON filter expressions. The actor constructs these automatically from your inputs:

InputFilter operatorExample filter
companyNamelike with % wildcards{"field":"estab_name","operator":"like","value":"%WALMART%"}
stateeq (exact match){"field":"site_state","operator":"eq","value":"TX"}
citylike with % wildcards{"field":"site_city","operator":"like","value":"%HOUSTON%"}
naicsCodelike with trailing %{"field":"naics_code","operator":"like","value":"23%"}
inspectionTypeeq (exact match){"field":"insp_type","operator":"eq","value":"A"}
safetyHealtheq (exact match){"field":"safety_hlth","operator":"eq","value":"S"}
dateFromgt (greater than){"field":"open_date","operator":"gt","value":"2024-01-01"}
dateTolt (less than){"field":"open_date","operator":"lt","value":"2024-12-31"}

Multiple conditions are combined with {"and":[...conditions...]}.

Pagination

The DOL API supports limit (max 10,000) and offset parameters. The actor uses limit=1000 per page and increments the offset until either the requested maxResults are collected or the API returns fewer results than the limit.

Violation joining

Violations are stored in a separate DOL dataset from inspections. Both share the activity_nr field as a foreign key. The actor:

  1. Collects all activity_nr values from fetched inspections
  2. Batches them into groups of 50
  3. Queries the violation dataset using the in operator for each batch
  4. Filters out deleted violations (delete_flag = 'X')
  5. Maps violations back to their parent inspections

How much does it cost to use?

OSHA Inspection & Citation Search is lightweight. It runs with 256 MB of memory and makes REST API calls rather than scraping web pages.

ScenarioInspectionsAPI CallsRun TimeEstimated Cost
Quick company search1001-2~10 sec~$0.002
Company history + violations5005-15~30 sec~$0.008
State-level analysis1,000 + violations15-25~1 min~$0.01
Maximum run5,000 + violations50-100+~3 min~$0.03

Apify Free Tier: New Apify accounts receive $5 of free platform credits each month. This is enough to run the OSHA actor hundreds of times per month at no cost.

DOL API: The DOL Open Data Portal API key is completely free. There are no charges from the government side.

Limitations

  • DOL API key required -- A free API key is required from dataportal.dol.gov/registration. Registration takes under a minute.
  • 5,000 inspection cap per run -- The actor limits output to 5,000 inspections per execution. For larger datasets, run multiple times with different date ranges or state filters.
  • 10,000 record limit per API request -- The DOL API enforces a maximum of 10,000 records per request. The actor handles this with pagination, but extremely broad queries may hit the ceiling.
  • Company name is case-insensitive -- The actor auto-uppercases company names before searching. "walmart", "Walmart", and "WALMART" all produce the same results.
  • NAICS partial matching -- Searching with "23" matches all 23xxxx codes. This is by design but may return more results than expected for short codes.
  • Violation data may lag -- Violation records may be published days or weeks after the parent inspection record. Recent inspections may show zero violations even if citations are forthcoming.
  • API key sharing prohibited -- Per DOL Terms of Service, API keys must not be shared publicly or embedded in client-side code.
  • Federal OSHA only -- This dataset covers federal OSHA inspections. States that operate their own OSHA-approved plans (e.g., California, Michigan, Oregon) may have separate data for state-plan inspections.

Responsible use

  • Public data -- OSHA inspection and violation data is published by the U.S. Department of Labor as public information. All records returned by this actor are publicly available.
  • Inspections are not convictions -- An OSHA inspection does not necessarily mean violations were found. Many inspections close without citations. Present data in context.
  • Fair interpretation of penalties -- Penalty amounts reflect OSHA's assessment at the time and may be adjusted through settlement or contest. Do not present initial penalties as final unless finalOrderDate is populated.
  • No unsubstantiated claims -- Do not use OSHA inspection data to make unsupported safety claims about employers without understanding the full context of each inspection.
  • Follow DOL Terms of Service -- Use your API key in accordance with DOL terms. Avoid excessive request volumes and do not share your key publicly.
  • Attribution -- When publishing OSHA data, attribute it to the U.S. Department of Labor OSHA program.

Programmatic access

Python

from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_API_TOKEN")

run = client.actor("ryanclinton/osha-inspection-search").call(run_input={
    "apiKey": "YOUR_DOL_API_KEY",
    "companyName": "WALMART",
    "state": "TX",
    "includeViolations": True,
    "maxResults": 200,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    violations = item.get("violations") or []
    print(f"{item['establishmentName']} — {item['siteCity']}, {item['siteState']}")
    print(f"  Opened: {item['openDate']} | Type: {item['inspectionTypeDescription']}")
    print(f"  Violations: {item['violationCount']} | Penalties: ${item['totalPenalties']:,.0f}")
    for v in violations:
        print(f"    [{v['violationTypeDescription']}] {v['standard']} — ${v['currentPenalty']:,.0f}")

JavaScript

import { ApifyClient } from "apify-client";

const client = new ApifyClient({ token: "YOUR_APIFY_API_TOKEN" });

const run = await client.actor("ryanclinton/osha-inspection-search").call({
    apiKey: "YOUR_DOL_API_KEY",
    companyName: "WALMART",
    state: "TX",
    includeViolations: true,
    maxResults: 200,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.log(`${item.establishmentName} — ${item.siteCity}, ${item.siteState}`);
    console.log(`  Opened: ${item.openDate} | Type: ${item.inspectionTypeDescription}`);
    console.log(`  Violations: ${item.violationCount} | Penalties: $${item.totalPenalties}`);
    (item.violations || []).forEach((v) => {
        console.log(`    [${v.violationTypeDescription}] ${v.standard} — $${v.currentPenalty}`);
    });
});

cURL

# Start the actor
curl -X POST "https://api.apify.com/v2/acts/ryanclinton~osha-inspection-search/runs?token=YOUR_APIFY_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "apiKey": "YOUR_DOL_API_KEY",
    "companyName": "WALMART",
    "state": "TX",
    "includeViolations": true,
    "maxResults": 100
  }'

# Retrieve results (use the defaultDatasetId from the run response)
curl "https://api.apify.com/v2/datasets/DATASET_ID/items?token=YOUR_APIFY_API_TOKEN&format=json"

FAQ

Do I need an API key? Yes, but it is free. Register at dataportal.dol.gov/registration to get your key immediately. There are no usage charges.

How current is the data? OSHA updates the inspection and violation datasets daily. New inspections typically appear within a few days of the on-site activity. Violations may take additional time as citations are processed.

What is a Fatality/Catastrophe inspection (type A)? Type A inspections are triggered by a workplace death or an incident that hospitalizes three or more employees. These are OSHA's highest-priority inspections and often result in the most significant penalties.

What NAICS codes should I use? Common NAICS codes for OSHA searches: 23 = Construction, 31-33 = Manufacturing, 44-45 = Retail Trade, 48-49 = Transportation/Warehousing, 62 = Healthcare, 72 = Accommodation/Food Services. Use 2-digit codes for broad industry searches or 4-6 digit codes for specific sectors.

Can I search by OSHA standard number? Not directly as an input filter. The DOL API filters inspections, not violations. However, every violation in the output includes the standard field (e.g., "19260501 A" for fall protection), which you can filter in post-processing.

What do violation types mean? S = Serious (penalties $1,036-$16,131 per violation), W = Willful (up to $161,323 per violation), R = Repeat (up to $161,323), O = Other-than-Serious (up to $16,131), U = Unclassified. Willful and repeat violations carry the highest penalties.

Why do some inspections show zero violations? Not all inspections result in citations. Planned inspections may find no hazards. Complaint-driven inspections may be resolved informally. Also, violation records may lag behind inspection records by days or weeks.

What is the difference between Safety and Health inspections? Safety inspections focus on physical hazards (falls, electrical, machinery). Health inspections focus on exposure hazards (chemicals, noise, respiratory). You can filter by either using the safetyHealth parameter, or leave it blank for both.

Can I get results in CSV or Excel format? Yes. After the actor completes, click "Export" on the dataset page and choose CSV, Excel, JSON, or other formats. The Apify API also supports format=csv and format=xlsx query parameters.

Does this cover state OSHA plans? This dataset covers federal OSHA inspections. Some states operate their own OSHA-approved state plans (California Cal/OSHA, Michigan MIOSHA, Oregon OSHA, etc.). State-plan inspections may or may not be reflected in the federal dataset depending on data-sharing agreements.

How do I monitor a company over time? Schedule the actor to run daily or weekly with the company name filter. Use Apify integrations to send results to Slack, email, or Google Sheets. Compare openDate values across runs to identify new inspections.

Inspection type reference

CodeTypeDescription
AFatality/CatastropheWorkplace death or 3+ hospitalizations
BComplaintFiled by employee or representative
CReferralReferred by another agency or inspector
FFollow-upFollow-up to a previous inspection
GUnprogrammed RelatedRelated to another unprogrammed inspection
HPlannedScheduled programmed inspection
JUnprogrammed OtherOther unprogrammed inspection
KProgrammed OtherOther programmed inspection
LOtherDoes not fit other categories

Violation type reference

CodeTypeMaximum Penalty
SSerious$16,131 per violation
WWillful$161,323 per violation
RRepeat$161,323 per violation
OOther-than-Serious$16,131 per violation
UUnclassifiedVaries

NAICS code quick reference

CodeIndustry
23Construction (all)
236Construction of Buildings
237Heavy and Civil Engineering
238Specialty Trade Contractors
31-33Manufacturing
3361Motor Vehicle Manufacturing
44-45Retail Trade
48-49Transportation and Warehousing
62Healthcare and Social Assistance
72Accommodation and Food Services
722511Full-Service Restaurants

Integrations

OSHA Inspection & Citation Search works with Apify's built-in integrations:

  • Google Sheets -- Automatically export inspection data to a spreadsheet for team review and filtering.
  • Slack / Email -- Get instant notifications when new inspections match your criteria.
  • Webhooks -- Push results to your compliance system, risk management platform, or custom pipeline.
  • Zapier / Make -- Connect to thousands of apps for custom automation workflows.
  • API access -- Retrieve results programmatically via the Apify API for integration with your own applications.

Related actors

ActorDescriptionUse together
SAM.gov Contract MonitorFederal contract opportunitiesCross-reference contractor safety records with government procurement activity
CFPB Consumer ComplaintsConsumer financial complaintsBuild multi-agency enforcement profiles for regulated companies
FDA Medical Device Recall SearchMedical device recallsCombine workplace safety with product safety for healthcare facilities
CPSC Product Recall MonitorConsumer product recallsMulti-agency safety monitoring across workplace and consumer products
OpenCorporates SearchGlobal company lookupsIdentify parent companies and subsidiaries when researching employer inspection history
Job Market IntelligenceJob posting analysisCorrelate employer safety records with hiring patterns and workforce growth

How it works

01

Configure

Set your parameters in the Apify Console or pass them via API.

02

Run

Click Start, trigger via API, webhook, or set up a schedule.

03

Get results

Download as JSON, CSV, or Excel. Integrate with 1,000+ apps.

Use cases

Sales Teams

Build targeted lead lists with verified contact data.

Marketing

Research competitors and identify outreach opportunities.

Data Teams

Automate data collection pipelines with scheduled runs.

Developers

Integrate via REST API or use as an MCP tool in AI workflows.

Ready to try OSHA Inspection & Citation Search?

Start for free on Apify. No credit card required.

Open on Apify Store