# DOL Wage & Hour Enforcement Search (`ryanclinton/dol-whd-enforcement`) Actor

Search the U.S. Department of Labor Wage and Hour Division (WHD) enforcement database for labor law violations, back wages, civil penalties, and employee impact data across 20+ federal statutes.

- **URL**: https://apify.com/ryanclinton/dol-whd-enforcement.md
- **Developed by:** [Ryan Clinton](https://apify.com/ryanclinton) (community)
- **Categories:** Other, AI
- **Stats:** 8 total users, 3 monthly users, 88.4% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$30.00 / 1,000 result returneds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## DOL Wage & Hour Enforcement Search

![Screen employers for labor-law risk — DOL Wage & Hour enforcement scored, rated A–F, and benchmarked](https://apifyforge.com/readme-assets/ryanclinton-dol-whd-enforcement/hero.png)

Screen suppliers, contractors, franchisees, and employers for labor-compliance risk using official U.S. Department of Labor Wage and Hour Division (WHD) enforcement data. Turn hundreds of thousands of raw DOL investigation records into entity-level risk intelligence — who the repeat offenders are, who's getting worse, and which vendors to pass, review, or reject.

- ✓ **Supplier & contractor screening** — one pass/review/fail verdict per vendor
- ✓ **Repeat-offender & recidivism detection** — risk score, band, and behaviour over time
- ✓ **Child-labor monitoring** — a dedicated risk rollup procurement and ESG teams gate on
- ✓ **Wage-theft & prevailing-wage intelligence** — categories, patterns, and federal-contractor exposure
- ✓ **Portfolio & watchlist monitoring** — entity risk-change alerts across scheduled runs
- ✓ **Investigative research** — rank the worst offenders across an industry or state

Every case is scored, categorised, and ranked; every employer is resolved to a canonical entity and profiled with a deterministic risk model — across 20+ federal statutes covering FLSA minimum wage and overtime, child labor, FMLA, H-1B/H-2A/H-2B visa programs, and Davis-Bacon prevailing wages.

### What does DOL Wage & Hour Enforcement Search do?

This actor queries the official DOL API (v4) to retrieve enforcement action records from the Wage and Hour Division, the federal agency responsible for enforcing compliance with major U.S. labor laws. The WHD database contains hundreds of thousands of investigation records spanning decades, covering every U.S. state and territory.

Each enforcement record contains the full details of a DOL investigation: the company investigated, location, industry classification, the specific statutes violated, number of violations found, total back wages owed to employees, civil monetary penalties assessed, and how many workers were affected. On top of the raw data, every case is given a deterministic **severity** band and score, a headline **enforcement category** (Wage Theft, Child Labor, Visa Program Abuse, Prevailing Wage…), rule-based **violation pattern** tags, and a plain-English summary — so you can sort straight to the cases that matter instead of reading rows.

The actor supports filtering by company name (single or several at once), geographic location, industry (NAICS code), specific statute, date range, minimum back wage or penalty thresholds, repeat-FLSA-violator status, and a minimum severity floor. Results are ranked severity-first so the most serious cases lead the dataset. Turn on **employer summaries** to aggregate every returned case for a company into a repeat-offender score, timeline, enforcement-velocity trend, and violation concentration — and set a **watchlist** to track suppliers or contractors across scheduled runs and surface only newly-published enforcement actions.

You can preview the full output shape without a key first — see [Try with dry run mode](#2-try-with-dry-run-mode-first) under How to use.

![The intelligence stack: DOL records → severity scoring → entity resolution → employer rollup → sector benchmarking → trend + recidivism → screening decision → watchlist monitoring](https://apifyforge.com/readme-assets/ryanclinton-dol-whd-enforcement/intelligence-layers.png)

### Features

- **Severity scoring** -- Every case gets a deterministic `severity` band (critical/high/medium/low) and 0–100 `severityScore` derived from back wages, penalties, repeat-violator status, child labor, and employees affected. Results lead with the worst offenders, so you see the cases that matter first.
- **Plain-English summaries** -- Each record carries a one-line `summary` string an LLM or analyst can quote without joining fields.
- **20+ statute coverage** -- Search violations across FLSA, FMLA, H-1B, H-2A, H-2B, SCA, Davis-Bacon, MSPA, CWHSSA, EPPA, and FLSA Child Labor provisions
- **Per-statute breakdowns** -- Every case includes a `statuteBreakdowns` array (plus a flat `violatedStatutes` list) showing violations, back wages, employees affected, and penalties for each applicable law
- **Child labor tracking** -- Dedicated fields for child labor violation count, minors involved, and penalties assessed
- **Flexible filtering** -- Filter by company name (partial match), state, city, NAICS industry code, statute, date range, minimum dollar thresholds, and repeat violator status
- **Monitoring mode** -- Set a `watchlistName` and the actor tags each result `NEW` or `UNCHANGED` across scheduled runs, so you only act on newly-published enforcement actions
- **Run-level summary** -- One `summary` record per run (mirrored to the `SUMMARY` key-value store key) with totals, severity distribution, and top states/statutes
- **Output profiles** -- Choose `minimal`, `standard`, or `full` field verbosity to match your downstream consumer
- **Automatic pagination & rate-limit handling** -- Transparently fetches up to 5,000 records with exponential backoff on 429 responses
- **Dry run mode** -- Returns sample data by default so you can test integrations without an API key

### How to use

#### 1. Get a free DOL API key

Register at [https://dataportal.dol.gov/registration](https://dataportal.dol.gov/registration) to obtain your free API key. The key is issued immediately upon registration.

#### 2. Try with dry run mode first

Run the actor with default settings (no API key needed). The `dryRun` option is enabled by default and returns sample enforcement records so you can inspect the output format and test your downstream integrations.

#### 3. Run with real data

Set `dryRun` to `false`, enter your DOL API key, and configure your search filters. The actor will query the live DOL enforcement database and return matching cases sorted by total back wages (highest first).

#### 4. Export results

Results are stored in the Apify dataset and can be downloaded in JSON, CSV, Excel, or other formats. Use the Apify API or integrations to feed data into Google Sheets, webhooks, or other systems.

### Input parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `mode` | Select | `search` | Job mode. `search` (one row per case); `screening` (one pass/review/fail verdict per employer, billed per employer); `monitoring` (entity-centric + watchlist risk-change events); `portfolio` (screening plus a portfolio-level risk rollup in the summary); `leaderboard` (rank employers by `leaderboardMetric`, worst offenders first). |
| `leaderboardMetric` | Select | `risk` | When `mode` = `leaderboard`, the ranking axis: `risk`, `back-wages`, `penalties`, `child-labor`, `cases`, or `momentum`. |
| `dryRun` | Boolean | `true` | When enabled (or when no API key is provided), returns realistic sample data without calling the DOL API. Set to `false` and provide an API key for real data. |
| `apiKey` | String (secret) | -- | Your DOL Open Data Portal API key. Register free at [dataportal.dol.gov/registration](https://dataportal.dol.gov/registration). Not needed for dry run mode. |
| `companyName` | String | -- | Search by trade/business name using partial match. Examples: `MCDONALD`, `TYSON`, `CHIPOTLE`, `WALMART`. |
| `companyNames` | Array | -- | Search several trade names at once (OR-matched) — ideal for supplier or contractor watchlists. Overrides `companyName` when set. Example: `["TYSON", "JBS", "CARGILL"]`. |
| `state` | String | -- | Filter by U.S. state using 2-letter code. Examples: `TX`, `CA`, `FL`, `NY`. |
| `city` | String | -- | Filter by city name using partial match. Examples: `HOUSTON`, `NEW YORK`, `LOS ANGELES`. |
| `naicsCode` | String | -- | Filter by NAICS industry code prefix (2-6 digits). Examples: `722` (Food Services), `236` (Construction), `561` (Administrative Services). |
| `statute` | Select | All | Filter by specific labor law statute. Options: `flsa` (Min Wage/Overtime), `fmla` (Family/Medical Leave), `h1b` (H-1B Visa), `h2a` (H-2A Agricultural Visa), `h2b` (H-2B Non-Ag Visa), `sca` (Service Contract Act), `dbra` (Davis-Bacon Act), `mspa` (Migrant Workers), `cwhssa` (Contract Work Hours Act), `eppa` (Employee Polygraph Protection), `flsa_cl` (FLSA Child Labor). |
| `dateFrom` | String | -- | Start date for the findings period in `YYYY-MM-DD` format. Example: `2023-01-01`. |
| `dateTo` | String | -- | End date for the findings period in `YYYY-MM-DD` format. Example: `2024-12-31`. |
| `minBackWages` | Integer | -- | Only return cases where total back wages exceed this dollar amount. Example: `10000` for cases with $10,000+ in back wages. |
| `minPenalties` | Integer | -- | Only return cases where civil monetary penalties exceed this dollar amount. Example: `5000` for cases with $5,000+ in penalties. |
| `repeatViolator` | Boolean | `false` | When enabled, only returns cases flagged as FLSA repeat violators. |
| `minSeverity` | Select | -- | Drop cases below this severity band after scoring (`low` / `medium` / `high` / `critical`). Applied to the returned records, not the DOL query. Leave blank to keep all. |
| `enableEmployerSummary` | Boolean | `false` | Emit one `employerSummary` record per employer in the result set — repeat-offender score and band, case count, totals, first/latest case, yearly timeline, enforcement velocity, and violation concentration. |
| `maxResults` | Integer | `100` | Maximum number of enforcement records to return. Range: 1 to 5,000. |
| `outputProfile` | Select | `standard` | Field verbosity. `minimal` returns only the decision fields (severity, category, back wages, penalties, statutes, rank, summary); `standard` returns the full record without the nested per-statute breakdown; `full` returns every field including `statuteBreakdowns`. |
| `watchlistName` | String | -- | Optional monitoring mode. When set, the actor remembers the case IDs it has seen under this name and tags each result `NEW` or `UNCHANGED`, so a scheduled run surfaces only newly-published enforcement actions. Leave blank for a one-off search. |

### Output format

![Sample output — employer screening verdicts (pass / review / fail), risk bands, back wages, and enforcement trend](https://apifyforge.com/readme-assets/ryanclinton-dol-whd-enforcement/output-table.png)

Each enforcement record in the output dataset contains the following fields:

```json
{
  "schemaVersion": "1.1.0",
  "recordType": "enforcement",
  "severity": "critical",
  "severityScore": 88,
  "severityDrivers": [
    "$287,635 in back wages",
    "$42,750 in civil penalties",
    "flagged as an FLSA repeat violator",
    "3 child-labor violation(s) (3 minors)",
    "156 employees affected"
  ],
  "summary": "PACIFIC COAST STAFFING INC (NEWPORT BEACH, CA): $287,635 in back wages, 18 violation(s) under FLSA, FLSA_CL, FMLA affecting 156 employee(s). Flagged: repeat violator, child-labor findings.",
  "caseId": 2145892,
  "tradeName": "PACIFIC COAST STAFFING INC",
  "legalName": "PACIFIC COAST STAFFING INC",
  "streetAddress": "2901 W COAST HWY STE 200",
  "city": "NEWPORT BEACH",
  "state": "CA",
  "zipCode": "92663",
  "naicsCode": "561320",
  "naicsDescription": "Temporary Help Services",
  "totalViolations": 18,
  "totalPenalties": 42750,
  "employeesViolated": 156,
  "totalBackWages": 287634.50,
  "employeesOwedBackWages": 156,
  "findingsStartDate": "2023-03-15T00:00:00",
  "findingsEndDate": "2024-08-22T00:00:00",
  "flsaRepeatViolator": true,
  "violatedStatutes": ["FLSA", "FLSA_CL", "FMLA"],
  "statuteBreakdowns": [
    {
      "statute": "FLSA",
      "statuteName": "Fair Labor Standards Act",
      "violations": 14,
      "backWages": 251200.00,
      "employeesAffected": 142,
      "penalties": 35000
    },
    {
      "statute": "FLSA_CL",
      "statuteName": "FLSA Child Labor",
      "violations": 3,
      "backWages": 0,
      "employeesAffected": 0,
      "penalties": 7750
    },
    {
      "statute": "FMLA",
      "statuteName": "Family and Medical Leave Act",
      "violations": 1,
      "backWages": 36434.50,
      "employeesAffected": 14,
      "penalties": 0
    }
  ],
  "flsaMinimumWageBackWages": 98400.00,
  "flsaOvertimeBackWages": 152800.00,
  "childLaborViolations": 3,
  "childLaborMinorsInvolved": 3,
  "childLaborPenalties": 7750,
  "extractedAt": "2026-02-25T14:30:00.000Z"
}
````

#### Field reference

| Field | Type | Description |
|-------|------|-------------|
| `schemaVersion` | String | Output schema version (semver). Additive within a major version. |
| `recordType` | String | Record discriminator: `enforcement`, `summary`, or `error`. |
| `severity` | String | Deterministic severity band: `critical` (score ≥70), `high` (≥45), `medium` (≥20), or `low`. Sort or filter on this to surface the worst offenders. |
| `severityScore` | Number | 0–100 severity composite, reproducible from documented weights (back wages, penalties, repeat-violator status, child labor, employees affected). |
| `severityDrivers` | Array | Plain-English list of the factors behind the severity score. |
| `enforcementCategory` | String | Headline category from the dominant statute: `Child Labor`, `Visa Program Abuse`, `Prevailing Wage`, `Wage Theft`, `Family & Medical Leave`, `Migrant Worker Protection`, `Employee Polygraph Protection`, or `Other`. |
| `violationPattern` | Array | Stable rule-based tags: `minimum-wage`, `overtime-abuse`, `child-labor`, `repeat-offender`, `visa-program-abuse`, `prevailing-wage`, `large-workforce-impact`, `high-penalty`. |
| `dataCompleteness` | Number | 0–100 share of key identity/context fields populated (older DOL records vary). |
| `rankInResults` | Number | Severity rank within the cases returned this run (1 = most severe). `null` on single-result runs. |
| `percentileInResults` | Number | Severity percentile **within the returned result set** (0–100). Not an industry-wide benchmark — it ranks only the cases this query returned. |
| `summary` | String | One-line plain-English case summary an LLM can quote without joining fields. |
| `violatedStatutes` | Array | Flat list of statute codes with ≥1 violation, e.g. `["FLSA", "FLSA_CL"]`, for quick filtering. |
| `changeFlag` | String | Watchlist mode only: `NEW` (case unseen on prior runs) or `UNCHANGED`. |
| `alertLevel` | String | Watchlist mode only, on `NEW` cases: `critical` (child labor or severity ≥80), `high` (repeat violator, ≥$100k penalty, or high severity), `medium`, or `none`. Branch Slack/webhook routing on this. |
| `caseId` | Number | Unique DOL case identifier |
| `tradeName` | String | Business trade name / DBA |
| `legalName` | String | Legal entity name |
| `resolvedEmployer` | String | Canonical employer name (corporate suffixes + punctuation/case normalised) so the same company groups across cases and runs. |
| `employerKey` | String | Stable hash of the resolved name — the entity join key for cross-run and cross-case grouping. |
| `employerNameConfidence` | Number | 0–100 confidence in the name normalization. |
| `streetAddress` | String | Street address of the investigated establishment |
| `city` | String | City name |
| `state` | String | Two-letter state code |
| `zipCode` | String | ZIP code |
| `naicsCode` | String | NAICS industry classification code |
| `naicsDescription` | String | Human-readable NAICS industry description |
| `totalViolations` | Number | Total violation count across all statutes |
| `totalPenalties` | Number | Total civil monetary penalties assessed (USD) |
| `employeesViolated` | Number | Total number of employees with violations |
| `totalBackWages` | Number | Total back wages owed to employees (USD) |
| `employeesOwedBackWages` | Number | Number of employees owed back wages |
| `findingsStartDate` | String | Start date of the investigation findings period |
| `findingsEndDate` | String | End date of the investigation findings period |
| `flsaRepeatViolator` | Boolean | Whether the employer is flagged as an FLSA repeat violator |
| `statuteBreakdowns` | Array | Per-statute breakdown of violations, back wages, employees affected, and penalties |
| `flsaMinimumWageBackWages` | Number | FLSA minimum wage back wages owed (USD) |
| `flsaOvertimeBackWages` | Number | FLSA overtime back wages owed (USD) |
| `childLaborViolations` | Number | Number of FLSA child labor violations |
| `childLaborMinorsInvolved` | Number | Number of minors involved in child labor violations |
| `childLaborPenalties` | Number | Civil penalties for child labor violations (USD) |
| `extractedAt` | String | ISO 8601 timestamp of when the record was extracted |

Records are sorted **severity-first**, so the most serious cases lead the dataset. Each run also appends one `recordType: "summary"` record (and mirrors it to the `SUMMARY` key in the run's key-value store) carrying run-level totals: case count, total back wages and penalties, employees affected, repeat-violator and child-labor case counts, the severity distribution, and the top states and statutes. In watchlist mode the summary also reports `newCases` plus a `watchlistDelta` block (new cases, new critical cases, and the new back wages, penalties, and violations since the prior run).

#### Employer summary records

Set `enableEmployerSummary: true` and the run appends one `recordType: "employerSummary"` record per employer in the result set, aggregating every returned case for that company:

```json
{
  "recordType": "employerSummary",
  "employer": "TYSON FOODS",
  "employerKey": "employer_3f2a91c0e7d4",
  "employerNameConfidence": 95,
  "state": "AR",
  "caseCount": 17,
  "firstCaseDate": "2009-04-01T00:00:00",
  "latestCaseDate": "2024-11-12T00:00:00",
  "totalBackWages": 1458320.50,
  "totalPenalties": 382000,
  "totalEmployeesAffected": 2411,
  "totalViolations": 214,
  "repeatOffenderScore": 91,
  "repeatOffenderBand": "chronic",
  "employerRiskScore": 92,
  "employerRiskBand": "critical",
  "laborComplianceRating": "F",
  "riskDrivers": ["$1,840,320 in back wages + penalties", "17 enforcement actions", "4 case(s) in the last 12 months", "child-labor findings", "flagged FLSA repeat violator"],
  "casesPerYear": 1.1,
  "workforceExposure": "high",
  "volatility": "high",
  "emergingRisk": true,
  "emergingRiskReasons": ["4 cases in the last 12 months", "severity rising", "penalties rising"],
  "enforcementArchetype": ["Chronic Repeat Offender", "Child Labor Offender", "Wage Theft Heavy"],
  "recidivismDetected": true,
  "repeatViolationGapMonths": 8,
  "screeningResult": "fail",
  "screeningReasons": ["child-labor findings", "repeat violator", "over $500k in back wages"],
  "enforcementMomentum": 86,
  "averageGapBetweenCasesMonths": 9,
  "backWagesPerAffectedWorker": 605.0,
  "sectorBenchmark": {
    "naicsSector": "31",
    "comparedTo": "WHD-enforced employers in this NAICS sector (sampled)",
    "backWagesPercentile": 97,
    "penaltyPercentile": 95,
    "workerImpactPercentile": 92,
    "caseFrequencyPercentile": 99,
    "childLaborPercentile": 99,
    "sectorMedianBackWages": 0,
    "sampleEmployers": 2589,
    "basis": "vs 2589 sampled WHD-enforced employers in NAICS sector 31 (baseline 2026-06-05)"
  },
  "childLabor": { "risk": "critical", "cases": 4, "penaltyTotal": 220000, "minorsInvolved": 11, "lastCaseDate": "2024-06-12T00:00:00" },
  "contractor": { "federalContractorExposure": true, "prevailingWageViolations": 17, "davisBaconRisk": "elevated" },
  "watchlistEvent": "RISK_INCREASED",
  "previousRiskScore": 78,
  "riskDelta": 14,
  "timeline": [{ "year": 2009, "cases": 2 }, { "year": 2024, "cases": 4 }],
  "casesLast12Months": 4,
  "casesPrevious12Months": 1,
  "caseVelocity24M": 5,
  "enforcementTrend": "accelerating",
  "backWagesTrend": "up",
  "penaltyTrend": "up",
  "severityTrend": "up",
  "topViolationType": "FLSA",
  "violationConcentration": 81
}
```

Stable enums on this record: `laborComplianceRating` (`A` → `F`, credit-rating style), `repeatOffenderBand` (`single` / `repeat` / `serial` / `chronic`), `employerRiskBand` (`minimal` / `elevated` / `high` / `severe` / `critical`), `screeningResult` (`pass` / `review` / `fail`), `childLabor.risk` and `contractor.davisBaconRisk` (`minimal` / `low` / `elevated` / `high` / `critical`), `workforceExposure` and `volatility` (`low` / `medium` / `high`), `enforcementTrend` (`accelerating` / `steady` / `declining` / `insufficient-data`), and the `up` / `down` / `flat` metric trends. `repeatOffenderScore` measures recurrence; `employerRiskScore` measures overall exposure; `enforcementMomentum` (>50 = worsening) and `emergingRisk` answer "is this employer getting worse?" — different questions, different fields.

**Contractor / supplier screening (`mode: "screening"`).** Pass a list of vendors in `companyNames` and set `mode: "screening"`. The actor resolves each vendor to a canonical employer, emits **one verdict row per vendor** (per-case rows suppressed), and bills per employer screened. Branch your workflow on `screeningResult` — `fail` (child labor, repeat violator, >$500k back wages, or a severe/critical risk band), `review`, or `pass`. The `riskDrivers` and `screeningReasons` arrays are paste-ready into a procurement note, and the `childLabor` and `contractor` blocks let ESG and federal-contracting teams gate on their specific concern.

**Entity monitoring (`mode: "monitoring"`).** With a `watchlistName`, each employer rollup carries a `watchlistEvent` — `NEW`, `NEW_CHILD_LABOR`, `PENALTY_SURGE`, `RISK_INCREASED`, `RISK_DECREASED`, or `UNCHANGED` — plus `watchlistSeverity`, `previousRiskScore`, and `riskDelta`, so a scheduled run tells you which vendors *got worse* since last time (and how), not just which cases are new. These are ready-made automation triggers — route `WHERE watchlistEvent = "NEW_CHILD_LABOR"` straight to a critical alert.

**Portfolio & leaderboard (`mode: "portfolio"` / `mode: "leaderboard"`).** `portfolio` runs screening across a `companyNames` list and adds a `portfolio` block to the summary record — `portfolioRiskScore`, `criticalSuppliers`, `highRiskSuppliers`, `pass`/`review`/`failSuppliers`, `childLaborExposure`, and `emergingRiskSuppliers` — the one-glance supply-chain dashboard. `leaderboard` ranks employers (e.g. across a whole industry or state query) by `leaderboardMetric` so journalists, unions, and researchers get the worst offenders first.

**Sector benchmarking.** `sectorBenchmark` places an employer on a **real percentile within its NAICS sector**, computed from an actual sample of DOL enforcement data (not an invented median), across five metrics: back wages, penalties, worker impact, case frequency, and child labor. `backWagesPercentile: 97` plus `caseFrequencyPercentile: 99` says "near the top of its sector for both money owed *and* how often it's investigated" — different questions a single risk score can't separate. Coverage spans **all major 2-digit NAICS sectors** (agriculture, construction, manufacturing, retail, transport, finance, professional services, staffing/admin, health care, food service, and more); the baseline is sampled from thousands of recent enforcement cases per sector and refreshed periodically.

**Read the `comparedTo` field carefully.** This is a percentile against **other employers that have a WHD enforcement history** in the sector — *not* against every company in the industry. An employer with a clean record isn't in DOL's data at all, so this answers "how does this offender compare to other offenders?", not "how does this company compare to the whole industry." For any sector not in the bundled baseline, `sectorBenchmark` is `null` and you fall back to the within-result `rankInResults` / `percentileInResults`.

The `employerKey` is a stable persistent entity ID — the same key identifies this employer across runs (and across sibling compliance actors that adopt the same resolution), the intended foundation for a cross-source compliance graph.

**Scope:** these rollups aggregate the cases your query matched, not all-time DOL history — to get an employer's full record, search that company name on its own with a high `maxResults`. Entity resolution is conservative: it normalises name shape (case, punctuation, corporate suffixes) but does not merge genuinely different legal entities.

![What you also get — supplier screening, A–F compliance ratings, real sector benchmarking, and change monitoring](https://apifyforge.com/readme-assets/ryanclinton-dol-whd-enforcement/feature-callouts.png)

### Example use cases

#### 1. Restaurant industry compliance audit

Search for FLSA violations in the food service industry to identify patterns of wage theft. Set `naicsCode` to `722` (Food Services and Drinking Places) and `statute` to `flsa` to find restaurants that failed to pay minimum wage or overtime.

#### 2. H-1B visa program enforcement tracking

Monitor DOL enforcement of H-1B visa labor condition requirements. Filter by `statute: h1b` to find employers that violated wage and working condition obligations for H-1B workers. Cross-reference with the H-1B Visa Intelligence actor for complete visa program analysis.

#### 3. Child labor violation monitoring

Track employers investigated for child labor violations. Set `statute` to `flsa_cl` and use `minPenalties` to focus on significant cases. The output includes the number of minors involved and penalties assessed.

#### 4. Federal construction prevailing wage compliance

Search Davis-Bacon Act (DBRA) enforcement actions against federal construction contractors. Set `statute` to `dbra` and `naicsCode` to `236` (Construction of Buildings) or `237` (Heavy and Civil Engineering Construction). Combine with SAM.gov data to identify contractors with compliance issues.

#### 5. State-level enforcement analysis

Generate state-by-state enforcement reports for labor policy research. Set `state` to any 2-letter code and use date filters to analyze trends over time. The results summary logs aggregate statistics for quick analysis.

#### 6. Repeat violator identification

Find employers with a history of FLSA violations by enabling `repeatViolator`. These are companies the DOL has flagged for repeated non-compliance, which may indicate systemic labor law issues.

#### 7. Agricultural worker protection research

Track enforcement of migrant and seasonal worker protections under MSPA and the H-2A visa program. Set `statute` to `mspa` or `h2a` and filter by agricultural NAICS codes (e.g., `111` for Crop Production, `112` for Animal Production) to find cases involving vulnerable worker populations.

#### 8. High-value back wage investigations

Identify the largest wage theft cases by setting a high `minBackWages` threshold (e.g., `100000` for cases exceeding $100,000). Results are sorted by back wages descending, making it easy to find the most impactful enforcement actions.

### Statutes reference

The WHD enforces the following major statutes. Use the `statute` filter value to search for violations under a specific law.

| Filter Value | Statute | Full Name | What It Covers |
|-------------|---------|-----------|----------------|
| `flsa` | FLSA | Fair Labor Standards Act | Federal minimum wage, overtime pay (time-and-a-half over 40 hours/week), record-keeping requirements, youth employment standards |
| `flsa_cl` | FLSA Child Labor | FLSA Child Labor Provisions | Restrictions on hours and types of work for minors under 18; hazardous occupation orders |
| `fmla` | FMLA | Family and Medical Leave Act | Up to 12 weeks unpaid, job-protected leave for family/medical reasons at covered employers (50+ employees) |
| `h1b` | H-1B | H-1B Visa Program | Employer obligations for specialty occupation workers: prevailing wages, working conditions, non-displacement of U.S. workers |
| `h2a` | H-2A | H-2A Temporary Agricultural Workers | Employer obligations for temporary agricultural visa workers: wages, housing, transportation, working conditions |
| `h2b` | H-2B | H-2B Temporary Non-Agricultural Workers | Employer obligations for temporary non-agricultural visa workers: prevailing wages and working conditions |
| `sca` | SCA | Service Contract Act | Prevailing wages and fringe benefits for employees on federal service contracts exceeding $2,500 |
| `dbra` | DBRA | Davis-Bacon and Related Acts | Prevailing wages and fringe benefits for laborers and mechanics on federal and federally-assisted construction projects over $2,000 |
| `mspa` | MSPA | Migrant & Seasonal Agricultural Worker Protection Act | Registration, disclosure, wage protections, housing and transportation standards for migrant and seasonal farm workers |
| `cwhssa` | CWHSSA | Contract Work Hours and Safety Standards Act | Overtime pay (time-and-a-half) for laborers and mechanics on federal contracts exceeding $100,000 |
| `eppa` | EPPA | Employee Polygraph Protection Act | Prohibits most private employers from requiring or using lie detector tests on employees or job applicants |

### NAICS industry codes reference

The following NAICS (North American Industry Classification System) codes are commonly associated with WHD enforcement actions. Use the `naicsCode` parameter with a 2-6 digit prefix.

| NAICS Prefix | Industry | Common Violations |
|-------------|----------|-------------------|
| `722` | Food Services and Drinking Places | FLSA minimum wage, overtime, tip credit, child labor |
| `7225` | Restaurants and Other Eating Places | FLSA minimum wage, overtime, record-keeping |
| `236` | Construction of Buildings | DBRA prevailing wages, FLSA overtime, CWHSSA |
| `238` | Specialty Trade Contractors | DBRA prevailing wages, FLSA overtime |
| `237` | Heavy and Civil Engineering Construction | DBRA prevailing wages, CWHSSA |
| `561` | Administrative and Support Services | FLSA misclassification, overtime, H-2B |
| `5613` | Employment Services / Staffing | FLSA overtime, H-1B, joint employer violations |
| `111` | Crop Production | H-2A, MSPA, FLSA |
| `112` | Animal Production and Aquaculture | MSPA, FLSA, H-2A |
| `115` | Support Activities for Agriculture | H-2A, MSPA, FLSA |
| `721` | Accommodation (Hotels/Motels) | FLSA minimum wage, overtime, H-2B |
| `812` | Personal and Laundry Services | FLSA minimum wage, overtime |
| `811` | Repair and Maintenance | FLSA overtime, record-keeping |
| `621` | Ambulatory Health Care Services | FLSA overtime, FMLA |
| `623` | Nursing and Residential Care | FLSA overtime, FMLA |
| `445` | Food and Beverage Retailers | FLSA minimum wage, child labor |
| `448` | Clothing and Clothing Accessories Retailers | FLSA minimum wage, overtime |
| `541` | Professional, Scientific, and Technical Services | H-1B, FLSA misclassification |
| `5112` | Software Publishers | H-1B prevailing wage violations |
| `423` | Merchant Wholesalers, Durable Goods | FLSA overtime, record-keeping |
| `484` | Truck Transportation | FLSA overtime |
| `562` | Waste Management and Remediation | FLSA overtime, DBRA |

### Limitations and data freshness

- **API key required for real data.** The dry run mode returns sample records. To access the actual DOL enforcement database, you must register for a free API key at [dataportal.dol.gov/registration](https://dataportal.dol.gov/registration).
- **Data update frequency.** The DOL enforcement database is updated periodically by the agency. There may be a lag of several weeks between the conclusion of an investigation and its appearance in the database.
- **Historical coverage.** The database contains enforcement records dating back several decades, though older records may have fewer detail fields populated.
- **Rate limits.** The DOL API enforces rate limits. The actor includes built-in retry logic with exponential backoff for 429 (rate limited) responses. Large queries (thousands of results) may take longer due to pagination delays.
- **5,000 record cap.** A single actor run can retrieve up to 5,000 records. For larger datasets, use multiple runs with different filter criteria (e.g., split by state or date range).
- **Company name matching.** The `companyName` filter uses partial/wildcard matching against the trade name field. Companies may appear under multiple names or spellings across different cases.
- **Penalty and back wage amounts.** Dollar amounts reflect assessed values at the time of investigation and may differ from final settlement amounts after administrative or judicial proceedings.
- **Statute-specific field availability.** Not all statutes have penalty fields in the DOL data. For example, SCA, H-2B, DBRA, and CWHSSA cases may show `0` for penalties even when violations were found.

#### What this actor does not do

- **Wage & Hour Division only.** This covers DOL WHD enforcement (wage, hour, child labor, visa-program, prevailing-wage). It does **not** include OSHA safety citations, EEOC discrimination charges, NLRB labor-board cases, or MSHA mine-safety actions — those are separate agencies and datasets.
- **Severity is a deterministic triage signal, not a legal judgment.** The `severity` band ranks cases by the scale of the assessed back wages, penalties, repeat-violator status, child labor, and employees affected. It is a sorting aid, not an assessment of legal culpability or final liability.
- **No predictions or enrichment.** The actor returns official DOL records plus deterministic intelligence. It does not predict outcomes or enrich with third-party data.
- **Sector benchmarks compare you to other *offenders*, not the whole industry.** `sectorBenchmark` gives a real percentile from a sampled DOL distribution, but the cohort is **employers with a WHD enforcement history** in that NAICS sector — not every company in the industry (clean companies aren't in DOL's data). It's a sampled baseline (thousands of recent cases per sector, refreshed periodically), `null` for sectors not in the baseline rather than an invented number. Within-result `rankInResults` / `percentileInResults` rank only your query's cases. State-level percentiles are not yet computed.
- **No cross-agency or geographic-radius data.** This does not join OSHA, SAM.gov federal-contractor, or EPA records, and it cannot search by map radius (the DOL data exposes city/state/ZIP but no coordinates). Those are separate datasets.

### Responsible use

This actor provides access to public government enforcement data published by the U.S. Department of Labor. When using this data:

- **Verify before acting.** Enforcement records reflect investigation findings and assessed penalties, not final adjudicated outcomes. Companies may have contested findings or reached different settlement terms.
- **Provide context.** A single enforcement case does not necessarily indicate ongoing or systemic compliance failures. Consider the full picture, including the date of the investigation, the company's size, and whether corrective action was taken.
- **Respect privacy.** While company names and addresses are public record, exercise judgment when publishing or sharing enforcement data, particularly for small businesses.
- **Stay current.** Cross-reference DOL enforcement data with other public sources (OSHA, EPA, SAM.gov) for a more complete compliance picture.
- **Comply with DOL API terms.** Use of the DOL API is subject to the [DOL Data Portal Terms of Use](https://dataportal.dol.gov). The API key is free but must not be shared or used to overload the service.

### Integrations and API access

#### Apify API

You can run this actor and retrieve results programmatically using the Apify API:

```bash
## Start a run
curl -X POST "https://api.apify.com/v2/acts/ryanclinton~dol-whd-enforcement/runs" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_APIFY_TOKEN" \
  -d '{
    "dryRun": false,
    "apiKey": "YOUR_DOL_API_KEY",
    "state": "CA",
    "statute": "flsa",
    "minBackWages": 10000,
    "maxResults": 200
  }'
```

#### Apify integrations

Connect DOL enforcement data to your existing tools:

- **Google Sheets** -- Automatically export enforcement records to a spreadsheet for analysis and reporting
- **Slack / Microsoft Teams** -- Send notifications when new enforcement actions match your criteria
- **Webhooks** -- Trigger downstream workflows when new data is available
- **Zapier / Make** -- Build automated workflows that combine DOL data with other data sources
- **Amazon S3 / Google Cloud Storage** -- Archive enforcement data to cloud storage for long-term analysis

#### Use in Dify

Drop this actor into [Dify](https://docs.apify.com/platform/integrations/dify) workflows via the Apify plugin's Run Actor node. Every enforcement case returns with a deterministic `severity` enum — `critical` / `high` / `medium` / `low` — plus a flat `violatedStatutes` array and (in watchlist mode) a `changeFlag` of `NEW` or `UNCHANGED`. A generic DOL scraper returns raw case rows; this returns records your downstream if/else node can branch on without parsing prose.

- **Actor ID:** `ryanclinton/dol-whd-enforcement`
- **Sample input** (monitor a company for serious wage violations):

```json
{
    "companyName": "TYSON",
    "minBackWages": 25000,
    "outputProfile": "minimal",
    "watchlistName": "tyson-watch"
}
```

- **Branching example.** A Dify if/else node routes on the stable enums — no LLM, no text parsing:
  - `severity == "critical"` → escalate to a compliance reviewer / send a Slack alert
  - `severity == "high"` and `changeFlag == "NEW"` → open a tracking ticket
  - `flsaRepeatViolator == true` → flag for priority review
  - else → log to a spreadsheet
- **Monitoring mode.** Set `watchlistName` and schedule the actor; downstream nodes branch on `changeFlag == "NEW"` (or read `newCases` from the summary record) to act only on newly-published enforcement actions.
- The `violatedStatutes` array and `severityDrivers` strings are usable verbatim in your Dify prompt or notification body — no rewriting required.

#### Scheduled monitoring

Set up the actor on a recurring schedule to monitor enforcement activity in specific states, industries, or against specific companies. Use Apify's scheduling feature to run daily, weekly, or monthly with the same filter parameters.

Add a `watchlistName` to turn a scheduled run into a true monitor: the actor remembers the case IDs it has already seen under that name and tags each result `NEW` or `UNCHANGED`, and assigns each NEW case an `alertLevel` (`critical` / `high` / `medium` / `none`). Route Slack/PagerDuty/webhook rules on `alertLevel = "critical"` (new child labor or very high severity) and read the summary's `watchlistDelta` block (new cases, new critical cases, new child-labor cases, new back wages/penalties/violations) for a dashboard-ready "what changed since last run" without re-processing the whole result set.

#### Python client example

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

run_input = {
    "dryRun": False,
    "apiKey": "YOUR_DOL_API_KEY",
    "companyName": "MCDONALD",
    "state": "TX",
    "statute": "flsa",
    "dateFrom": "2023-01-01",
    "maxResults": 500,
}

run = client.actor("ryanclinton/dol-whd-enforcement").call(run_input=run_input)

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(f"{item['tradeName']} - {item['city']}, {item['state']}")
    print(f"  Back Wages: ${item['totalBackWages']:,.2f}")
    print(f"  Penalties: ${item['totalPenalties']:,.2f}")
    print(f"  Employees Affected: {item['employeesViolated']}")
    for breakdown in item["statuteBreakdowns"]:
        print(f"  {breakdown['statuteName']}: {breakdown['violations']} violations")
```

#### JavaScript/Node.js client example

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });

const run = await client.actor('ryanclinton/dol-whd-enforcement').call({
    dryRun: false,
    apiKey: 'YOUR_DOL_API_KEY',
    naicsCode: '722',
    statute: 'flsa_cl',
    minPenalties: 5000,
    maxResults: 100,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();

for (const item of items) {
    console.log(`${item.tradeName} (${item.city}, ${item.state})`);
    console.log(`  Child Labor Violations: ${item.childLaborViolations}`);
    console.log(`  Minors Involved: ${item.childLaborMinorsInvolved}`);
    console.log(`  Child Labor Penalties: $${item.childLaborPenalties.toLocaleString()}`);
}
```

### Related actors

These actors from the Apify Store complement DOL enforcement data for broader compliance and regulatory research:

- [OSHA Inspection & Citation Search](https://apify.com/ryanclinton/osha-inspection-search) -- Search OSHA workplace safety inspection records, citations, and penalties. Combine with WHD data for a complete labor compliance profile.
- [H-1B Visa Intelligence](https://apify.com/ryanclinton/h1b-visa-intelligence) -- Search H-1B visa application data including employer petitions, wages, and approval rates. Cross-reference with WHD H-1B enforcement actions.
- [CFPB Consumer Complaints](https://apify.com/ryanclinton/cfpb-consumer-complaints) -- Search consumer financial complaints. Useful alongside DOL data for evaluating company-wide compliance posture.
- [SAM.gov Contract Monitor](https://apify.com/ryanclinton/sam-gov-contract-monitor) -- Search federal contract awards and entity registrations. Identify federal contractors with WHD enforcement actions (relevant for DBRA and SCA violations).
- [Federal Register Search](https://apify.com/ryanclinton/federal-register-search) -- Search the Federal Register for proposed and final rules from DOL and other agencies. Track regulatory changes that affect wage and hour enforcement.
- [Senate Lobbying Search](https://apify.com/ryanclinton/senate-lobbying-search) -- Search lobbying disclosure records. Research industry lobbying related to labor law and wage/hour policy.
- [Congressional Stock Trade Tracker](https://apify.com/ryanclinton/congress-stock-tracker) -- Track stock trades by members of Congress. Analyze alongside enforcement trends in specific industries.
- [EPA ECHO Environmental Compliance](https://apify.com/ryanclinton/epa-echo-search) -- Search EPA environmental compliance and enforcement data. Build multi-agency compliance profiles by combining EPA, DOL, and OSHA data.

# Actor input Schema

## `dryRun` (type: `boolean`):

Returns realistic sample data without calling the DOL API. Leave unset and it defaults to sample data only when no API key is provided — provide an API key and you get real data automatically. Set it explicitly to override either way.

## `apiKey` (type: `string`):

Your DOL Open Data Portal API key. Register free at https://dataportal.dol.gov/registration. Not needed for dry run mode.

## `mode` (type: `string`):

Job mode. 'search' (default) returns one row per case. 'screening' returns one risk verdict per employer (pass/review/fail), per-case rows suppressed — for supplier/contractor due diligence; billed per employer. 'monitoring' is entity-centric and pairs with a watchlist to surface employer risk-change events. 'portfolio' is screening plus a portfolio-level risk rollup in the summary. 'leaderboard' ranks employers by your chosen metric (worst offenders first).

## `leaderboardMetric` (type: `string`):

When mode = leaderboard, the axis to rank employers by.

## `companyName` (type: `string`):

Search by trade/business name (partial match). Examples: 'MCDONALD', 'TYSON', 'CHIPOTLE'

## `companyNames` (type: `array`):

Search several trade names at once (OR-matched) — ideal for supplier or contractor watchlists. Overrides Company Name when set. Example: \['TYSON', 'JBS', 'CARGILL'].

## `state` (type: `string`):

Filter by U.S. state (2-letter code). Examples: 'TX', 'CA', 'FL'

## `city` (type: `string`):

Filter by city name (partial match). Examples: 'HOUSTON', 'NEW YORK'

## `naicsCode` (type: `string`):

Filter by NAICS code prefix (2-6 digits). Examples: '722' (Food Services), '236' (Construction), '561' (Administrative Services)

## `statute` (type: `string`):

Filter by specific labor law statute

## `dateFrom` (type: `string`):

Start date for findings period (YYYY-MM-DD format). Example: '2023-01-01'

## `dateTo` (type: `string`):

End date for findings period (YYYY-MM-DD format). Example: '2024-12-31'

## `minBackWages` (type: `integer`):

Only return cases with back wages above this amount. Example: 10000 for $10,000+

## `minPenalties` (type: `integer`):

Only return cases with civil penalties above this amount. Example: 5000 for $5,000+

## `repeatViolator` (type: `boolean`):

Only return cases flagged as FLSA repeat violators

## `maxResults` (type: `integer`):

Maximum number of enforcement records to return (1-5,000)

## `minSeverity` (type: `string`):

Drop cases below this severity band after scoring (applied to the returned records, not the DOL query). Leave blank to keep all.

## `enableEmployerSummary` (type: `boolean`):

Add one employerSummary record per employer in the result set — repeat-offender score and band, case count, totals, first/latest case, yearly timeline, enforcement velocity, and violation concentration. Aggregates the cases matched by this query (not all-time DOL history unless your query returns the employer's full record).

## `outputProfile` (type: `string`):

Field verbosity: 'minimal' (decision fields only — severity, category, back wages, summary), 'standard' (default — full record without the nested statute breakdown), or 'full' (every field including per-statute breakdowns).

## `watchlistName` (type: `string`):

Optional. When set, the actor remembers case IDs seen on prior runs under this name and tags each result NEW or UNCHANGED — so a scheduled run surfaces only newly-published enforcement actions. Leave blank for a normal one-off search.

## Actor input object example

```json
{
  "mode": "search",
  "leaderboardMetric": "risk",
  "repeatViolator": false,
  "maxResults": 100,
  "enableEmployerSummary": false,
  "outputProfile": "standard"
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("ryanclinton/dol-whd-enforcement").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("ryanclinton/dol-whd-enforcement").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call ryanclinton/dol-whd-enforcement --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=ryanclinton/dol-whd-enforcement",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "DOL Wage & Hour Enforcement Search",
        "description": "Search the U.S. Department of Labor Wage and Hour Division (WHD) enforcement database for labor law violations, back wages, civil penalties, and employee impact data across 20+ federal statutes.",
        "version": "0.2",
        "x-build-id": "iM7xJ6plnjjNy05AF"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/ryanclinton~dol-whd-enforcement/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-ryanclinton-dol-whd-enforcement",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/ryanclinton~dol-whd-enforcement/runs": {
            "post": {
                "operationId": "runs-sync-ryanclinton-dol-whd-enforcement",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/ryanclinton~dol-whd-enforcement/run-sync": {
            "post": {
                "operationId": "run-sync-ryanclinton-dol-whd-enforcement",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "dryRun": {
                        "title": "Dry Run (Sample Data)",
                        "type": "boolean",
                        "description": "Returns realistic sample data without calling the DOL API. Leave unset and it defaults to sample data only when no API key is provided — provide an API key and you get real data automatically. Set it explicitly to override either way."
                    },
                    "apiKey": {
                        "title": "DOL API Key",
                        "type": "string",
                        "description": "Your DOL Open Data Portal API key. Register free at https://dataportal.dol.gov/registration. Not needed for dry run mode."
                    },
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "search",
                            "screening",
                            "monitoring",
                            "portfolio",
                            "leaderboard"
                        ],
                        "type": "string",
                        "description": "Job mode. 'search' (default) returns one row per case. 'screening' returns one risk verdict per employer (pass/review/fail), per-case rows suppressed — for supplier/contractor due diligence; billed per employer. 'monitoring' is entity-centric and pairs with a watchlist to surface employer risk-change events. 'portfolio' is screening plus a portfolio-level risk rollup in the summary. 'leaderboard' ranks employers by your chosen metric (worst offenders first).",
                        "default": "search"
                    },
                    "leaderboardMetric": {
                        "title": "Leaderboard Metric",
                        "enum": [
                            "risk",
                            "back-wages",
                            "penalties",
                            "child-labor",
                            "cases",
                            "momentum"
                        ],
                        "type": "string",
                        "description": "When mode = leaderboard, the axis to rank employers by.",
                        "default": "risk"
                    },
                    "companyName": {
                        "title": "Company Name",
                        "type": "string",
                        "description": "Search by trade/business name (partial match). Examples: 'MCDONALD', 'TYSON', 'CHIPOTLE'"
                    },
                    "companyNames": {
                        "title": "Company Names (multi-company)",
                        "maxItems": 100,
                        "type": "array",
                        "description": "Search several trade names at once (OR-matched) — ideal for supplier or contractor watchlists. Overrides Company Name when set. Example: ['TYSON', 'JBS', 'CARGILL'].",
                        "items": {
                            "type": "string"
                        }
                    },
                    "state": {
                        "title": "State",
                        "type": "string",
                        "description": "Filter by U.S. state (2-letter code). Examples: 'TX', 'CA', 'FL'"
                    },
                    "city": {
                        "title": "City",
                        "type": "string",
                        "description": "Filter by city name (partial match). Examples: 'HOUSTON', 'NEW YORK'"
                    },
                    "naicsCode": {
                        "title": "NAICS Industry Code",
                        "type": "string",
                        "description": "Filter by NAICS code prefix (2-6 digits). Examples: '722' (Food Services), '236' (Construction), '561' (Administrative Services)"
                    },
                    "statute": {
                        "title": "Statute / Law Violated",
                        "enum": [
                            "",
                            "flsa",
                            "fmla",
                            "h1b",
                            "h2a",
                            "h2b",
                            "sca",
                            "dbra",
                            "mspa",
                            "cwhssa",
                            "eppa",
                            "flsa_cl"
                        ],
                        "type": "string",
                        "description": "Filter by specific labor law statute"
                    },
                    "dateFrom": {
                        "title": "Date From",
                        "type": "string",
                        "description": "Start date for findings period (YYYY-MM-DD format). Example: '2023-01-01'"
                    },
                    "dateTo": {
                        "title": "Date To",
                        "type": "string",
                        "description": "End date for findings period (YYYY-MM-DD format). Example: '2024-12-31'"
                    },
                    "minBackWages": {
                        "title": "Minimum Back Wages ($)",
                        "type": "integer",
                        "description": "Only return cases with back wages above this amount. Example: 10000 for $10,000+"
                    },
                    "minPenalties": {
                        "title": "Minimum Penalties ($)",
                        "type": "integer",
                        "description": "Only return cases with civil penalties above this amount. Example: 5000 for $5,000+"
                    },
                    "repeatViolator": {
                        "title": "Repeat FLSA Violators Only",
                        "type": "boolean",
                        "description": "Only return cases flagged as FLSA repeat violators",
                        "default": false
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Maximum number of enforcement records to return (1-5,000)",
                        "default": 100
                    },
                    "minSeverity": {
                        "title": "Minimum Severity",
                        "enum": [
                            "low",
                            "medium",
                            "high",
                            "critical"
                        ],
                        "type": "string",
                        "description": "Drop cases below this severity band after scoring (applied to the returned records, not the DOL query). Leave blank to keep all."
                    },
                    "enableEmployerSummary": {
                        "title": "Emit Employer Summary Records",
                        "type": "boolean",
                        "description": "Add one employerSummary record per employer in the result set — repeat-offender score and band, case count, totals, first/latest case, yearly timeline, enforcement velocity, and violation concentration. Aggregates the cases matched by this query (not all-time DOL history unless your query returns the employer's full record).",
                        "default": false
                    },
                    "outputProfile": {
                        "title": "Output Profile",
                        "enum": [
                            "minimal",
                            "standard",
                            "full"
                        ],
                        "type": "string",
                        "description": "Field verbosity: 'minimal' (decision fields only — severity, category, back wages, summary), 'standard' (default — full record without the nested statute breakdown), or 'full' (every field including per-statute breakdowns).",
                        "default": "standard"
                    },
                    "watchlistName": {
                        "title": "Watchlist Name (monitoring mode)",
                        "type": "string",
                        "description": "Optional. When set, the actor remembers case IDs seen on prior runs under this name and tags each result NEW or UNCHANGED — so a scheduled run surfaces only newly-published enforcement actions. Leave blank for a normal one-off search."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
