Open Data
The cleaned H-1B / LCA dataset,
free to download.
Aggregate tables derived from every US Department of Labor Labor Condition Application disclosure — the wage-and-worksite filing behind every H-1B, H-1B1, and E-3 hire — with employer name variants resolved to canonical organizations, job titles mapped to BLS SOC codes, and wages normalized to annual USD. The same cleaned corpus that powers h1b.report, as plain CSV files under a CC BY 4.0 license. This page is the canonical home of the dataset.
- 9,331,644
- LCA filings
- FY2010–2026
- fiscal years
- 126,465
- canonical employers
- 782
- SOC occupations
You may not need the CSVs at all
Everything in this dataset is already served on h1b.report as interactive charts and analytics — wage trends, certification rates, and per-entity deep dives on the newest release, no processing required: rankings, sponsor profiles, occupation salary guides, state breakdowns, industry sectors, and the Sponsor Finder. The CSVs below are for when you want to run your own analysis.
The tables
Eight aggregate tables, one grain each. UTF-8, comma-separated, one header row; empty cell means not available. Ordering is deterministic and stable across releases.
| Table | One row per | Rows | Size |
|---|---|---|---|
| national_by_year.csv | fiscal year | 17 | 466 B |
| occupation_by_year.csv | SOC × fiscal year | 4,477 | 297 KB |
| occupation_by_state.csv | SOC × worksite state | 6,578 | 328 KB |
| occupation_wage_by_level.csv | SOC × prevailing-wage level | 1,132 | 74 KB |
| state_by_year.csv | state × fiscal year | 931 | 17 KB |
| sector_by_year.csv | NAICS-2 sector × fiscal year | 425 | 19 KB |
| employers_summary.csv | canonical employer | 18,927 | 2.2 MB |
| soc_coverage_by_year.csv | fiscal year (diagnostic) | 17 | 488 B |
The release also ships a 100-row preview sample, a machine-readable manifest.json, the full data dictionary and license as plain files.
Data dictionary
Wages are the offered WAGE_RATE_OF_PAY_FROM, annualized (hourly × 2080, weekly × 52, bi-weekly × 26, monthly × 12), kept only inside a $20,000–$1,000,000 plausibility band, and rounded to the nearest $100. Percentiles are PostgreSQL percentile_cont (linear interpolation). Certification percentages are shares of all filings for that row's entity, so the four outcome columns need not sum to 100. Full conventions are documented on the methodology page.
▸national_by_year.csv
One row per fiscal year.
| Column | Type | Unit | Definition |
|---|---|---|---|
| fiscal_year | integer | FY | DOL fiscal year |
| total_filings | integer | filings | count(*) of LCA filings that year |
| certified_pct | decimal(2dp) | % | Certified ÷ total_filings × 100 |
| median_wage | integer | USD/yr | percentile_cont(0.5), rounded to $100 |
▸occupation_by_year.csv
One row per (SOC code × fiscal year). Ordered by soc_code, fiscal_year.
| Column | Type | Unit | Definition |
|---|---|---|---|
| soc_code | string | — | SOC occupation code, e.g. 15-1252 |
| soc_title | string | — | SOC occupation title |
| fiscal_year | integer | FY | DOL fiscal year |
| filings | integer | filings | Filings for that SOC that year |
| wage_p25 | integer | USD/yr | 25th percentile annualised wage |
| wage_median | integer | USD/yr | 50th percentile annualised wage |
| wage_p75 | integer | USD/yr | 75th percentile annualised wage |
▸occupation_by_state.csv
One row per (SOC code × worksite state). Ordered by soc_code, state.
| Column | Type | Unit | Definition |
|---|---|---|---|
| soc_code | string | — | SOC occupation code, e.g. 15-1252 |
| soc_title | string | — | SOC occupation title |
| state | string | — | 2-letter worksite state code (not employer HQ) |
| filings | integer | filings | Filings for that SOC in that state |
| wage_median | integer | USD/yr | 50th percentile annualised wage |
▸occupation_wage_by_level.csv
One row per (SOC code × prevailing-wage level). Ordered by soc_code, pw_level.
| Column | Type | Unit | Definition |
|---|---|---|---|
| soc_code | string | — | SOC occupation code, e.g. 15-1252 |
| soc_title | string | — | SOC occupation title |
| pw_level | string | — | I–IV: DOL prevailing-wage skill level. I ≈ entry, IV ≈ fully competent/senior. Filings without a level are excluded from this file. |
| n | integer | filings | Filings at that SOC and level |
| wage_p25 | integer | USD/yr | 25th percentile annualised wage |
| wage_median | integer | USD/yr | 50th percentile annualised wage |
| wage_p75 | integer | USD/yr | 75th percentile annualised wage |
▸state_by_year.csv
One row per (worksite state × fiscal year). Ordered by state, fiscal_year.
| Column | Type | Unit | Definition |
|---|---|---|---|
| state | string | — | 2-letter worksite state code |
| fiscal_year | integer | FY | DOL fiscal year |
| filings | integer | filings | Filings with a worksite in that state |
| wage_median | integer | USD/yr | 50th percentile annualised wage |
▸sector_by_year.csv
One row per (NAICS-2 sector × fiscal year). Ordered by naics2, fiscal_year.
| Column | Type | Unit | Definition |
|---|---|---|---|
| naics2 | string | — | First 2 digits of the employer's NAICS code |
| sector_name | string | — | NAICS sector label, e.g. Professional, Scientific & Technical Services |
| fiscal_year | integer | FY | DOL fiscal year |
| filings | integer | filings | Filings in that sector that year |
| wage_median | integer | USD/yr | 50th percentile annualised wage |
▸employers_summary.csv
One row per canonical employer with ≥ 25 lifetime filings. Ordered by total_filings descending, then employer_name.
| Column | Type | Unit | Definition |
|---|---|---|---|
| employer_slug | string | — | URL slug; https://h1b.report/employer/<slug> |
| employer_name | string | — | Canonical employer name |
| employer_state | string | — | 2-letter state on the employer record (HQ, not worksite) |
| total_filings | integer | filings | Lifetime filings across all years |
| first_fy | integer | FY | Earliest fiscal year with a filing |
| last_fy | integer | FY | Latest fiscal year with a filing |
| certified_pct | decimal(2dp) | % | Share of all filings Certified |
| cert_withdrawn_pct | decimal(2dp) | % | Certified then withdrawn |
| withdrawn_pct | decimal(2dp) | % | Withdrawn before decision |
| denied_pct | decimal(2dp) | % | Denied |
| median_wage | integer | USD/yr | 50th percentile annualised wage, all years |
| top_soc_code | string | — | Most-filed SOC for that employer (ties broken by lowest soc_code) |
| top_soc_title | string | — | Title of top_soc_code |
▸soc_coverage_by_year.csv
Diagnostic table: how much of each fiscal year carries a SOC occupation code. Read this before comparing occupation counts across years — a year with low coverage will under-report every SOC.
| Column | Type | Unit | Definition |
|---|---|---|---|
| fiscal_year | integer | FY | DOL fiscal year |
| total_filings | integer | filings | All filings that year |
| filings_with_soc_code | integer | filings | Filings carrying a SOC code — the population behind the occupation_* files |
| soc_coverage_pct | decimal(2dp) | % | filings_with_soc_code ÷ total_filings × 100 |
Not subject to MIN_N suppression: it is a per-year completeness diagnostic, and every row aggregates an entire fiscal year.
What's deliberately not included
- No row-level filings. Every table is an aggregate; any row backed by fewer than 25 filings (MIN_N = 25) is omitted entirely rather than blanked, so columns do not sum exactly to national totals.
- No name-variant crosswalk. Employers are keyed on the canonical organization only. The mapping from raw DOL name spellings to canonical employers — and FEIN, its join key — is not published in any form.
- Occupation coverage varies by year. The three
occupation_*tables only include filings that carry a SOC code; check soc_coverage_by_year.csv before comparing occupation counts across years. National, state, and sector tables count every filing. - An LCA is not a visa — it is a prerequisite wage filing, and the most recent fiscal year is always partially reported. Read the methodology and limitations before citing.
License & citation
The dataset is licensed under Creative Commons Attribution 4.0 (CC BY 4.0): free to share and adapt, including commercially, with attribution — a link to h1b.report suffices. The underlying DOL disclosure records are US-government public records; the license applies to the derived, cleaned tables.
The license covers the data, not the site. h1b.report's chart designs, page layouts, branding, and written analysis are not part of this release and may not be reproduced — see the terms. Reuse the tables freely with attribution; build your own presentation on top of them.
h1b.report (2026). H-1B / LCA Open Data: aggregate tables, FY2010–FY2026. Derived from US DOL OFLC LCA disclosure data. https://h1b.report/open-data
Mirrors
The same release is published on Kaggle, GitHub, and Hugging Face. Those are copies for convenience, refreshed on a lag of at least one quarterly release: new DOL data lands on this page first — within ~24 hours of each release, where the dataset is produced — and reaches the mirrors a quarter later. If freshness matters, download from this page.