# DOL H-1B LCA Salary Scraper (`automation-lab/dol-h1b-lca-salary-scraper`) Actor

Search official DOL salary disclosures for H-1B, H-1B1, and E-3 filings. Filter employers, roles, worksites, wages, visa classes, and case statuses, then export normalized records.

- **URL**: https://apify.com/automation-lab/dol-h1b-lca-salary-scraper.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** Jobs
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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/docs.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.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/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 H-1B LCA Salary Scraper

Search and export official U.S. Department of Labor (DOL) Labor Condition Application salary filings for H-1B, H-1B1, and E-3 visas.

Filter millions of public disclosure records by employer, job title, SOC occupation, worksite, case status, visa class, wage range, and prevailing wage level. Get a clean Apify Dataset ready for recruiting research, immigration analytics, compensation benchmarking, or sponsor-market monitoring.

No login, API key, browser, or proxy is required. Every result links back to the official DOL workbook used for the run.

### What does this H-1B salary scraper do?

DOL H-1B LCA Salary Scraper downloads one official OFLC disclosure workbook and searches it for records matching your criteria.

It can:

- 🔎 Search employer names and job titles with partial, case-insensitive matching.
- 📍 Filter by worksite city and two-letter U.S. state code.
- 💼 Select H-1B, H-1B1 Chile, H-1B1 Singapore, or E-3 Australian filings.
- ✅ Limit results to Certified, Denied, Withdrawn, or Certified - Withdrawn cases.
- 💵 Compare offered wages after normalizing hourly, weekly, biweekly, and monthly values to annual amounts.
- 📊 Filter by DOL prevailing wage level I, II, III, or IV.
- 🧾 Preserve case numbers, filing dates, SOC occupation, employer, worksite, position count, and compliance flags.
- 📦 Export JSON, CSV, Excel, XML, RSS, or another Apify Dataset format.

### Who is it for?

#### Recruiters and talent intelligence teams

Find employers filing for particular roles and locations, build sponsor lead lists, and refresh them when DOL releases a new quarterly disclosure file.

#### Immigration law firms and researchers

Research filing patterns, case statuses, offered wages, prevailing wage levels, and employer activity without manually opening a large spreadsheet.

#### Compensation and workforce analysts

Benchmark annualized offered wages by job title, SOC occupation, employer, and worksite while retaining the original DOL wage unit.

#### Visa-sponsored job products

Feed structured sponsor and salary records into search products, enrichment pipelines, or internal data warehouses.

### Why use this Actor instead of downloading the spreadsheet?

DOL workbooks are authoritative but large. A recent file is more than 130 MB compressed and contains dozens of columns.

This Actor:

- downloads the selected workbook only once per run;
- parses rows as a stream instead of loading the entire sheet into memory;
- applies filters while reading;
- stops after your requested number of matches;
- deduplicates case/worksite records;
- normalizes dates, booleans, and annual wages;
- writes only useful, typed fields to your Dataset.

You spend time analyzing the result rather than cleaning spreadsheets.

### What H-1B LCA data can I extract?

| Field group | Example fields |
|---|---|
| Filing | `caseNumber`, `caseStatus`, `receivedDate`, `decisionDate`, `visaClass` |
| Occupation | `jobTitle`, `socCode`, `socTitle` |
| Employer | `employerName`, `employerCity`, `employerState`, `employerPostalCode` |
| Worksite | `worksiteCity`, `worksiteState`, `worksitePostalCode` |
| Offered wage | `wageFrom`, `wageTo`, `wageUnit`, `annualWageFrom`, `annualWageTo` |
| Prevailing wage | `prevailingWage`, `annualPrevailingWage`, `prevailingWageLevel` |
| Filing details | `totalWorkerPositions`, `fullTimePosition`, `h1bDependent`, `willfulViolator` |
| Provenance | `sourceUrl`, `fiscalYear`, `fiscalQuarter`, `scrapedAt` |

Optional values are omitted when the source workbook does not provide them.

### How to scrape H-1B salary filings

1. Open the Actor input page.
2. Select a DOL fiscal year and quarter.
3. Enter an employer, role, SOC, worksite, status, visa, or wage filter.
4. Set `maxItems` to the maximum number of matching filings you need.
5. Click **Start**.
6. Open the **Dataset** tab when the run succeeds.
7. Preview, filter, or export the records.

Start with 25 records to validate your search, then increase the limit for a larger export.

### Input

All supplied filters are combined with AND logic. Empty filters include every value.

| Input | Type | Meaning |
|---|---|---|
| `fiscalYear` | integer | DOL fiscal year, from 2008 onward |
| `quarter` | string | `Q1`, `Q2`, `Q3`, or `Q4` disclosure file |
| `employerQuery` | string | Employer name contains this text |
| `jobTitleQuery` | string | Job title contains this text |
| `socCode` | string | Exact SOC occupation code |
| `state` | string | Exact two-letter worksite state |
| `city` | string | Worksite city contains this text |
| `caseStatuses` | array | Accepted DOL case statuses |
| `visaClasses` | array | Accepted visa classes |
| `wageMin` | number | Minimum annualized offered wage |
| `wageMax` | number | Maximum annualized offered wage |
| `wageLevel` | string | Exact prevailing wage level |
| `maxItems` | integer | Maximum unique records to save |
| `sourceUrl` | string | Optional official `dol.gov` XLSX override |

#### Example: employer salary search

```json
{
  "fiscalYear": 2026,
  "quarter": "Q2",
  "employerQuery": "Microsoft",
  "caseStatuses": ["Certified"],
  "visaClasses": ["H-1B"],
  "maxItems": 20
}
````

#### Example: California software engineer benchmark

```json
{
  "fiscalYear": 2026,
  "quarter": "Q2",
  "jobTitleQuery": "Software Engineer",
  "state": "CA",
  "wageMin": 120000,
  "caseStatuses": ["Certified"],
  "maxItems": 100
}
```

### Output

Each Dataset item represents one unique LCA case/worksite combination.

```json
{
  "caseNumber": "I-200-26001-123456",
  "caseStatus": "Certified",
  "decisionDate": "2026-01-08",
  "visaClass": "H-1B",
  "jobTitle": "Software Engineer",
  "socCode": "15-1252.00",
  "socTitle": "Software Developers",
  "employerName": "Example Technology Inc.",
  "worksiteCity": "Redmond",
  "worksiteState": "WA",
  "wageFrom": 145000,
  "wageUnit": "Year",
  "annualWageFrom": 145000,
  "prevailingWage": 131040,
  "annualPrevailingWage": 131040,
  "prevailingWageLevel": "Level III",
  "totalWorkerPositions": 1,
  "fullTimePosition": true,
  "h1bDependent": false,
  "willfulViolator": false,
  "sourceUrl": "https://www.dol.gov/media/LCA_Dislclosure_Data_FY2026_Q2.xlsx",
  "fiscalYear": 2026,
  "fiscalQuarter": "Q2",
  "scrapedAt": "2026-07-16T00:00:00.000Z"
}
```

The example illustrates the schema; values vary with official filings.

### How annual wage normalization works

The Actor keeps the source wage and creates comparable annual fields.

- Hourly wage × 2,080 hours
- Weekly wage × 52 weeks
- Biweekly wage × 26 periods
- Monthly wage × 12 months
- Annual wage × 1

`wageMin` and `wageMax` apply to `annualWageFrom`. The calculation is a normalization aid, not a guarantee of actual annual compensation, hours, bonuses, equity, or employment duration.

### How much does it cost to scrape H-1B salary filings?

The Actor uses pay-per-event pricing:

- a small one-time start charge for downloading and opening the official workbook;
- a per-filing charge only for records saved to the Dataset;
- automatic volume discounts based on your Apify plan.

The exact live price appears in the Apify Console before you start a run. Use a focused filter and low `maxItems` for inexpensive tests.

### Tips for better salary research

- 🎯 Start with one employer or role to confirm spelling used in DOL filings.
- 🗺️ Use the worksite state rather than employer state for local compensation analysis.
- 🧑‍💻 Use SOC codes when titles vary across employers.
- 📈 Compare offered wage with annual prevailing wage and wage level.
- 📅 Keep the fiscal year and quarter in downstream records because DOL files are cumulative or period-specific.
- 🔁 Schedule the same input after quarterly disclosure updates for repeatable monitoring.
- 🧹 Expect employer-name variations and normalize them in your warehouse when aggregating sponsors.

### Integrations and automation workflows

#### Google Sheets or Excel

Export CSV or XLSX from the Dataset and share a filtered employer/role benchmark with recruiters or analysts.

#### Webhooks

Trigger a webhook after every successful run, then load new records into a CRM, ATS, database, or notification workflow.

#### Make and Zapier

Use the Apify integration to start a run on a schedule and process Dataset items in a no-code workflow.

#### Data warehouses

Pull JSON Dataset items into BigQuery, Snowflake, PostgreSQL, or your lakehouse. Use `caseNumber` plus worksite fields as a stable deduplication key.

### API usage: run with the Apify API

Use Actor ID `automation-lab/dol-h1b-lca-salary-scraper`.

#### cURL

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/automation-lab~dol-h1b-lca-salary-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"fiscalYear":2026,"quarter":"Q2","employerQuery":"Microsoft","maxItems":25}'
```

#### JavaScript / Node.js

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/dol-h1b-lca-salary-scraper').call({
  fiscalYear: 2026,
  quarter: 'Q2',
  employerQuery: 'Microsoft',
  maxItems: 25,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("automation-lab/dol-h1b-lca-salary-scraper").call(run_input={
    "fiscalYear": 2026,
    "quarter": "Q2",
    "jobTitleQuery": "Data Scientist",
    "state": "CA",
    "maxItems": 50,
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)
```

### Use with Apify MCP

Connect the Actor to AI assistants through the Apify MCP server.

MCP endpoint:

```text
https://mcp.apify.com?tools=automation-lab/dol-h1b-lca-salary-scraper
```

#### Claude Code

```bash
claude mcp add --transport http apify \
  "https://mcp.apify.com?tools=automation-lab/dol-h1b-lca-salary-scraper" \
  --header "Authorization: Bearer $APIFY_TOKEN"
```

#### Claude Desktop, Cursor, and VS Code

Claude Desktop and Cursor accept an `mcpServers` JSON entry. VS Code users can add the same HTTP endpoint through the MCP server configuration UI.

```json
{
  "mcpServers": {
    "apify-h1b-salary": {
      "url": "https://mcp.apify.com?tools=automation-lab/dol-h1b-lca-salary-scraper",
      "headers": {
        "Authorization": "Bearer YOUR_APIFY_TOKEN"
      }
    }
  }
}
```

Restart Claude Desktop or Cursor after saving the configuration. In VS Code, reload the window and confirm the Apify tool appears.

Example prompts:

- “Find certified FY2026 H-1B filings for data scientist roles in California.”
- “Compare offered and prevailing wages for this employer’s software roles.”
- “Create a CSV-ready list of Level IV sponsor filings above $150,000.”

### Scheduling quarterly sponsor monitoring

Create an Apify Schedule with your saved Actor input.

When DOL publishes a new quarterly workbook:

1. update the quarter in the scheduled task;
2. run the task;
3. compare `caseNumber` and worksite keys with your previous export;
4. notify your recruiting, legal, or analytics workflow about new matches.

DOL publication timing can vary, so the Actor reports a clear error if the requested file is not yet listed.

### Data quality and limitations

- The Actor returns public LCA filings, not proof that a visa was issued or a person was hired.
- An LCA can cover multiple positions.
- Offered wages do not necessarily include bonuses, equity, benefits, or actual paid compensation.
- DOL may correct, replace, or rename disclosure files.
- Historical workbook column names can vary; the Actor supports common current and legacy names.
- Very broad filters may require scanning much of a large workbook and take longer.
- `maxItems` stops after matching records, not after scanned rows.
- No-match searches correctly produce an empty Dataset.

### Privacy, legality, and responsible use

DOL publishes these disclosure records for public access. The Actor reads the official public export without bypassing authentication or technical restrictions.

Use the data lawfully. Do not infer protected characteristics, identify individual beneficiaries, make automated employment decisions, or treat an LCA as proof of immigration status. Follow applicable employment, privacy, anti-discrimination, and data-retention laws.

This Actor is not affiliated with or endorsed by the U.S. Department of Labor and does not provide legal advice.

### Troubleshooting

#### “No workbook was found for the selected fiscal period”

The DOL may not have published that quarter yet, or the historical year may use a different file layout. Choose a period listed on the DOL OFLC performance page. Advanced users can provide the exact official XLSX in `sourceUrl`.

#### The Dataset is empty

An empty Dataset means no rows matched all filters. Remove filters one at a time, check employer spelling, use a broader job-title fragment, or increase the wage range.

#### The run takes longer than expected

The Actor must download the complete workbook before streaming rows. Narrow filters found late in the file require more scanning. Keep `maxItems` proportionate to your workflow.

#### Why is the annualized hourly wage surprising?

Annualization uses 2,080 hours for comparability. It does not account for part-time schedules, overtime, unpaid time, or filing-specific employment duration.

### FAQ

#### Is this an H-1B visa approval database?

No. It is an LCA disclosure search. Certification of an LCA is one part of an employment-based visa process and is not a USCIS petition or visa approval.

#### Does it include H-1B1 and E-3 records?

Yes. Select H-1B1 Chile, H-1B1 Singapore, or E-3 Australian in `visaClasses`.

#### Can I search several employers in one run?

`employerQuery` is one partial text filter. Run separate saved tasks for unrelated employers or use a shared substring for related legal names.

#### Can I export more than 25 records?

Yes. Increase `maxItems` up to 100,000. Start small to validate filters and cost.

#### Are results deduplicated?

Yes. Duplicate rows with the same case number and worksite city, state, and postal code are emitted once.

#### Where does the data come from?

Every row comes from an official DOL OFLC disclosure XLSX file and includes its `sourceUrl`.

### Related scrapers

Combine this Actor with other Automation Lab tools:

- [LinkedIn Profile Scraper](https://apify.com/automation-lab/linkedin-profile-scraper) for public professional profile research after you have a lawful list of targets.
- [Yellow Pages Scraper](https://apify.com/automation-lab/yellowpages-scraper) for business-directory enrichment.
- [MX Record Checker](https://apify.com/automation-lab/mx-record-checker) for validating whether organization domains can receive email.

No other Automation Lab Actor currently covers the same official DOL LCA salary dataset.

### Support

If a DOL workbook changes format or a valid filter produces unexpected output, open an issue from the Actor’s Apify page.

Include:

- the fiscal year and quarter;
- the input used, with sensitive downstream details removed;
- the run URL;
- the expected and actual behavior.

That evidence makes source-format changes faster to diagnose.

# Actor input Schema

## `fiscalYear` (type: `integer`):

DOL fiscal year to search.

## `quarter` (type: `string`):

Quarterly/YTD disclosure file to search.

## `employerQuery` (type: `string`):

Case-insensitive partial employer name, for example Microsoft or Deloitte.

## `jobTitleQuery` (type: `string`):

Case-insensitive partial job title, for example Software Engineer.

## `socCode` (type: `string`):

Exact Standard Occupational Classification code, such as 15-1252.

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

Exact two-letter U.S. worksite state code, such as CA, NY, or TX.

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

Case-insensitive worksite city filter.

## `caseStatuses` (type: `array`):

Include only selected DOL case statuses.

## `visaClasses` (type: `array`):

Include H-1B, H-1B1, E-3, or any combination.

## `wageMin` (type: `number`):

Minimum offered wage after annualizing hourly, weekly, biweekly, and monthly source values.

## `wageMax` (type: `number`):

Maximum annualized offered wage.

## `wageLevel` (type: `string`):

Exact DOL prevailing wage level.

## `maxItems` (type: `integer`):

Stop after this many matching, unique LCA filing/worksite records.

## `sourceUrl` (type: `string`):

Optional direct dol.gov XLSX URL. Overrides fiscal year discovery; useful when DOL publishes a corrected file.

## Actor input object example

```json
{
  "fiscalYear": 2026,
  "quarter": "Q2",
  "employerQuery": "Microsoft",
  "caseStatuses": [
    "Certified"
  ],
  "visaClasses": [
    "H-1B"
  ],
  "maxItems": 20
}
```

# Actor output Schema

## `overview` (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 = {
    "fiscalYear": 2026,
    "quarter": "Q2",
    "employerQuery": "Microsoft",
    "caseStatuses": [
        "Certified"
    ],
    "visaClasses": [
        "H-1B"
    ],
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/dol-h1b-lca-salary-scraper").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 = {
    "fiscalYear": 2026,
    "quarter": "Q2",
    "employerQuery": "Microsoft",
    "caseStatuses": ["Certified"],
    "visaClasses": ["H-1B"],
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/dol-h1b-lca-salary-scraper").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 '{
  "fiscalYear": 2026,
  "quarter": "Q2",
  "employerQuery": "Microsoft",
  "caseStatuses": [
    "Certified"
  ],
  "visaClasses": [
    "H-1B"
  ],
  "maxItems": 20
}' |
apify call automation-lab/dol-h1b-lca-salary-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=automation-lab/dol-h1b-lca-salary-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "DOL H-1B LCA Salary Scraper",
        "description": "Search official DOL salary disclosures for H-1B, H-1B1, and E-3 filings. Filter employers, roles, worksites, wages, visa classes, and case statuses, then export normalized records.",
        "version": "0.1",
        "x-build-id": "8CnTxWTpFlhb9v0yw"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/automation-lab~dol-h1b-lca-salary-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-automation-lab-dol-h1b-lca-salary-scraper",
                "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/automation-lab~dol-h1b-lca-salary-scraper/runs": {
            "post": {
                "operationId": "runs-sync-automation-lab-dol-h1b-lca-salary-scraper",
                "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/automation-lab~dol-h1b-lca-salary-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-automation-lab-dol-h1b-lca-salary-scraper",
                "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": {
                    "fiscalYear": {
                        "title": "📅 Fiscal year",
                        "minimum": 2008,
                        "maximum": 2027,
                        "type": "integer",
                        "description": "DOL fiscal year to search.",
                        "default": 2026
                    },
                    "quarter": {
                        "title": "Fiscal quarter",
                        "enum": [
                            "Q1",
                            "Q2",
                            "Q3",
                            "Q4"
                        ],
                        "type": "string",
                        "description": "Quarterly/YTD disclosure file to search.",
                        "default": "Q2"
                    },
                    "employerQuery": {
                        "title": "🏢 Employer name contains",
                        "type": "string",
                        "description": "Case-insensitive partial employer name, for example Microsoft or Deloitte."
                    },
                    "jobTitleQuery": {
                        "title": "Job title contains",
                        "type": "string",
                        "description": "Case-insensitive partial job title, for example Software Engineer."
                    },
                    "socCode": {
                        "title": "SOC code",
                        "type": "string",
                        "description": "Exact Standard Occupational Classification code, such as 15-1252."
                    },
                    "state": {
                        "title": "Worksite state",
                        "type": "string",
                        "description": "Exact two-letter U.S. worksite state code, such as CA, NY, or TX."
                    },
                    "city": {
                        "title": "Worksite city contains",
                        "type": "string",
                        "description": "Case-insensitive worksite city filter."
                    },
                    "caseStatuses": {
                        "title": "Case statuses",
                        "type": "array",
                        "description": "Include only selected DOL case statuses.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "Certified",
                                "Certified - Withdrawn",
                                "Denied",
                                "Withdrawn"
                            ]
                        }
                    },
                    "visaClasses": {
                        "title": "Visa classes",
                        "type": "array",
                        "description": "Include H-1B, H-1B1, E-3, or any combination.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "H-1B",
                                "H-1B1 Chile",
                                "H-1B1 Singapore",
                                "E-3 Australian"
                            ]
                        }
                    },
                    "wageMin": {
                        "title": "💵 Minimum annualized offered wage",
                        "minimum": 0,
                        "type": "number",
                        "description": "Minimum offered wage after annualizing hourly, weekly, biweekly, and monthly source values."
                    },
                    "wageMax": {
                        "title": "Maximum annualized offered wage",
                        "minimum": 0,
                        "type": "number",
                        "description": "Maximum annualized offered wage."
                    },
                    "wageLevel": {
                        "title": "Prevailing wage level",
                        "enum": [
                            "Level I",
                            "Level II",
                            "Level III",
                            "Level IV"
                        ],
                        "type": "string",
                        "description": "Exact DOL prevailing wage level."
                    },
                    "maxItems": {
                        "title": "📦 Maximum filings",
                        "minimum": 1,
                        "maximum": 100000,
                        "type": "integer",
                        "description": "Stop after this many matching, unique LCA filing/worksite records.",
                        "default": 20
                    },
                    "sourceUrl": {
                        "title": "Advanced: official workbook URL",
                        "type": "string",
                        "description": "Optional direct dol.gov XLSX URL. Overrides fiscal year discovery; useful when DOL publishes a corrected file."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
