H-1B Visa Salary Disclosures Scraper (LCA Wages)
Pricing
from $12.48 / 1,000 results
H-1B Visa Salary Disclosures Scraper (LCA Wages)
Scrape US H-1B / LCA visa salary disclosures from public DOL filings. Get employer, job title, base salary (USD), city, state and dates. Filter by employer, job title, city, year and min salary. Export to JSON, CSV or Excel.
Pricing
from $12.48 / 1,000 results
Rating
0.0
(0)
Developer
Scrapers Lat
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
H-1B Visa Salary Disclosures Scraper
Here is one real result, with every field the actor returns:
{"employer": "GOOGLE LLC","jobTitle": "ACCESSIBILITY ANALYST","baseSalary": "105,000","baseSalaryUsd": 105000,"location": "MOUNTAIN VIEW, CA","city": "MOUNTAIN VIEW","state": "CA","submitDate": "2024-01-08","startDate": "2024-01-25","year": 2024,"caseNumber": "I-200-24008-624300","salaryTrend": [{ "year": 2023, "count": 5000, "medianSalaryUsd": 151000, "minSalaryUsd": 72000, "maxSalaryUsd": 419000 },{ "year": 2022, "count": 5000, "medianSalaryUsd": 144000, "minSalaryUsd": 54517, "maxSalaryUsd": 395000 },{ "year": 2021, "count": 5000, "medianSalaryUsd": 140000, "minSalaryUsd": 66518, "maxSalaryUsd": 398000 }],"standardizedRole": "Accessibility Analyst","seniorityLevel": "Mid","jobFamily": "User Experience","salaryBand": "Market","observedAt": "2026-08-19T22:24:43.911Z","error": null}
The most complete H-1B / LCA salary disclosure scraper available. It returns every field the public filing exposes (employer, job title, base salary, work location, submit and start dates), plus derived fields (numeric annualized baseSalaryUsd, split city and state, ISO dates, year, DOL caseNumber), and gives you five filters (employer, job title, city, year, minimum salary) to target exactly the disclosures you need.
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- Quickstart
- Input reference
- Output reference
- Example output record
- Run via API and CLI
- Fetch results
- Billing and limits
- Use cases
- FAQ and troubleshooting
- More scrapers at scrapers.lat
What it does
US employers that sponsor H-1B workers must file a Labor Condition Application (LCA) with the Department of Labor that discloses the offered wage. This actor extracts those public salary disclosures: for any employer, job title, city or year you get the employer name, job title, base salary, work location and the submit and start dates.
On top of the raw fields it adds analytics-ready derived data: a numeric annualized salary (baseSalaryUsd), the location split into city and state, ISO-formatted dates, the filing year and the DOL caseNumber. Two optional paid add-ons attach a per-employer multi-year salary trend and AI role normalization.
Quickstart
Search a company for a given year:
{"employer": "Google","year": "2024","maxResults": 100}
Filter to senior compensation only, across all years, for a role in one city:
{"jobTitle": "Software Engineer","city": "New York","year": "All Years","minSalary": 200000,"maxResults": 250}
Input reference
| Name | Type | Required | Description | Example |
|---|---|---|---|---|
employer | string | one of employer / jobTitle / city | Employer / company name to search. | "Google" |
jobTitle | string | one of employer / jobTitle / city | Job title to search. | "Data Scientist" |
city | string | one of employer / jobTitle / city | Work-location city to filter by. | "Mountain View" |
year | string | no | Filing year, or "All Years". Data from 2013 onward. Default "2024". | "2024" |
minSalary | integer | no | Only return disclosures with annualized base salary at or above this (USD). | 200000 |
maxResults | integer | no | Max records to return. Default 100. Free accounts capped at 10. | 100 |
multiYearHistory | boolean | no | Paid add-on. Attach a per-employer multi-year salary trend. Default false. | true |
aiRoleNormalization | boolean | no | Paid add-on. AI-normalize each job title. Default false. | true |
proxyConfiguration | object | no | Optional proxy. Datacenter works; use Apify RESIDENTIAL (US) if rate limited. | { "useApifyProxy": true } |
If you leave employer, job title and city all blank, a year is required and the run is hard-capped to keep it bounded.
Output reference
| Name | Type | Description |
|---|---|---|
employer | string | Employer / sponsoring company. |
jobTitle | string | Job title on the filing. |
baseSalary | string | Base salary as shown on the page. |
baseSalaryUsd | number | Annualized base salary, numeric (USD). |
location | string | Work location as shown (city, state). |
city | string | Work-location city (derived). |
state | string | Work-location state, 2-letter (derived). |
submitDate | string | LCA submit date, ISO YYYY-MM-DD. |
startDate | string | Employment start date, ISO YYYY-MM-DD. |
year | number | Filing year (derived). |
caseNumber | string | DOL case number from the disclosure link. |
salaryTrend | array | Per-year {year, count, medianSalaryUsd, minSalaryUsd, maxSalaryUsd} (multi_year_history add-on; null otherwise). |
standardizedRole | string | AI standardized role (ai_role_normalization add-on; null otherwise). |
seniorityLevel | string | AI seniority level (ai_role_normalization add-on). |
jobFamily | string | AI job family (ai_role_normalization add-on). |
salaryBand | string | AI salary band (ai_role_normalization add-on). |
observedAt | string | Scrape timestamp, ISO. |
error | string | Error message, if any (null on success). |
Example output record
{"employer": "GOOGLE LLC","jobTitle": "ACCESSIBILITY ANALYST","baseSalary": "123,000","baseSalaryUsd": 123000,"location": "AUSTIN, TX","city": "AUSTIN","state": "TX","submitDate": "2024-09-30","startDate": "2025-03-28","year": 2024,"caseNumber": "I-200-24275-375561","salaryTrend": null,"standardizedRole": null,"seniorityLevel": null,"jobFamily": null,"salaryBand": null,"observedAt": "2026-08-19T22:24:07.020Z","error": null}
Run via API and CLI
Start a run with the Apify API:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~h1b-salary-disclosures-scraper/runs?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{ "employer": "Google", "year": "2024", "maxResults": 100 }'
Or with the Apify CLI:
apify call scrapers_lat/h1b-salary-disclosures-scraper \--input '{ "employer": "Google", "year": "2024", "maxResults": 100 }'
Fetch results
Pull the dataset items once the run finishes:
$curl "https://api.apify.com/v2/datasets/DATASET_ID/items?token=YOUR_TOKEN&format=json"
Swap format=json for csv or xlsx to export to CSV or Excel.
Billing and limits
This actor is pay per result. You are billed only for records actually returned, and never on failure.
| Event | Price (USD) | When it charges |
|---|---|---|
result | $0.012 | Per salary disclosure record returned. |
multi_year_history | $0.008 | Once per employer query, only when a non-empty multi-year salary trend is produced (extra fetches for the prior 3 years). Opt-in via multiYearHistory. |
ai_role_normalization | $0.012 | Per record, only when the AI returns usable role normalization. Opt-in via aiRoleNormalization. |
- Free Apify accounts are capped at 10 billable results per run, and the two paid add-ons are disabled for free accounts.
- Both add-ons are opt-in and off by default. They charge only on genuine success (a real trend, or usable AI output).
- A spend guard stops emitting and charging once your configured
maxTotalChargeUsdlimit is reached, so you never receive data beyond what you pay for. - Errors are written as a non-billable row and are never charged.
Use cases
- Salary benchmarking: compare offered wages for a role across employers, cities and years.
- Compensation intelligence: build pay bands from real disclosed base salaries with the numeric
baseSalaryUsdfield and the multi-year trend add-on. - Immigration and visa research: track H-1B / LCA sponsorship activity by company, role and location.
- Recruiting leads: find employers actively sponsoring specific roles and the salaries they disclose.
- Pay-transparency and market research: analyze wage distributions, medians and ranges across the US labor market.
FAQ and troubleshooting
Which years are available? 2013 through the current year, plus "All Years".
Do I have to pass an employer? No. You can search by job title or city instead. If all three are blank, set a year and the run is hard-capped.
Why is salaryTrend null? The multi-year trend is a paid opt-in add-on (multiYearHistory), requires an employer query, and is disabled for free accounts.
Why are the AI fields null? AI role normalization is a paid opt-in add-on (aiRoleNormalization), disabled for free accounts, and only populates when the model returns usable output.
I hit rate limiting. Set proxyConfiguration to Apify RESIDENTIAL in the US and retry.
More scrapers at scrapers.lat
Explore the full catalog of company registry, compliance, finance and lead-generation scrapers at scrapers.lat.
