How each number here is produced, and where it stops being reliable
We recompute these figures from the source releases listed below. A source link opens the publisher’s data page; it does not identify a single record behind an aggregate. Source units, periods and employer grouping can differ, so the figures require those definitions as well as the files to reproduce them.
| Source | What it is | Coverage | Rows | Loaded |
|---|---|---|---|---|
| USCIS H-1B Employer Data Hub Files and method | USCIS decisions on H-1B petitions (Form I-129) | FY2009–FY2026 (through Q3) | 1,067,375 | 2026-08-28 |
| U.S. Department of Labor — OFLC LCA disclosure files Files and method | Department of Labor Labor Condition Applications (ETA-9035) | FY2021–FY2026 (through Q3) | 3,291,920 | 2026-08-28 |
| U.S. Department of Labor — OFLC PERM disclosure files Files and method | Department of Labor permanent labor certifications (ETA-9089) | FY2021–FY2026 (through Q3) | 703,447 | 2026-08-28 |
| State WARN layoff notices Files and method | State WARN layoff notices | CA · 2018-11-15 to 2026-08-24 | 13,739 | 2026-08-28 |
Coverage and row counts are read from the database. Loaded means loaded into this dataset, not the publisher’s release date, website deployment date or a manual review date. Row counts have different units across sources and are not comparable coverage scores.
The publisher may replace a download. The local release identifiers below describe the files used for this dataset; byte-for-byte equivalence with the current download has not been rechecked. This inventory applies to data loaded on2026-08-28. It is not a new download or a review date.
Source U.S. Department of Labor — OFLC LCA disclosure files ·Coverage FY2021–FY2026 (through Q3) ·Loaded 2026-08-28 ·Files and method
LCA_Disclosure_Data_FY2021_Q1.xlsxLCA_Disclosure_Data_FY2021_Q2.xlsxLCA_Disclosure_Data_FY2021_Q3.xlsxLCA_Disclosure_Data_FY2021_Q4.xlsxLCA_Disclosure_Data_FY2022_Q1.xlsxLCA_Disclosure_Data_FY2022_Q2.xlsxLCA_Disclosure_Data_FY2022_Q3.xlsxLCA_Disclosure_Data_FY2022_Q4.xlsxLCA_Disclosure_Data_FY2023_Q1.xlsxLCA_Disclosure_Data_FY2023_Q2.xlsxLCA_Disclosure_Data_FY2023_Q3.xlsxLCA_Disclosure_Data_FY2023_Q4.xlsxLCA_Disclosure_Data_FY2024_Q1.xlsxLCA_Disclosure_Data_FY2024_Q2.xlsxLCA_Disclosure_Data_FY2024_Q3.xlsxLCA_Disclosure_Data_FY2024_Q4.xlsxLCA_Disclosure_Data_FY2025_Q1.xlsxLCA_Disclosure_Data_FY2025_Q2.xlsxLCA_Disclosure_Data_FY2025_Q3.xlsxLCA_Disclosure_Data_FY2025_Q4.xlsxLCA_Disclosure_Data_FY2026_Q3.xlsxThese 21 quarterly files include cumulative and incremental releases. Records are deduplicated by case number within each fiscal year using the existing release-priority rules. The retained records have 18 source tags; that is not a count of input files. Wages use certified filings with a stated, non-suspect wage. Filing counts and wage samples differ.
Source USCIS H-1B Employer Data Hub ·Coverage FY2009–FY2026 (through Q3) ·Loaded 2026-08-28 ·Files and method
uscis_h1b_tableau_FY2009.csvuscis_h1b_tableau_FY2010.csvuscis_h1b_tableau_FY2011.csvuscis_h1b_tableau_FY2012.csvuscis_h1b_tableau_FY2013.csvuscis_h1b_tableau_FY2014.csvuscis_h1b_tableau_FY2015.csvuscis_h1b_tableau_FY2016.csvuscis_h1b_tableau_FY2017.csvuscis_h1b_tableau_FY2018.csvuscis_h1b_tableau_FY2019.csvuscis_h1b_tableau_FY2020.csvuscis_h1b_tableau_FY2021.csvuscis_h1b_tableau_FY2022.csvuscis_h1b_tableau_FY2023.csvuscis_h1b_tableau_FY2024.csvuscis_h1b_tableau_FY2025.csvuscis_h1b_tableau_FY2026.csvThese are annual exports from the H-1B Employer Data Hub’s Tableau crosstab, with approved and denied counts for six application categories. The loaded period is FY2009–FY2026 (through Q3). Older Data Hub export files retained locally are not combined with these exports for change-of-employer figures. Counts describe petitions, not unique people; employer-name matching does not establish a current sponsorship policy.
Source U.S. Department of Labor — OFLC PERM disclosure files ·Coverage FY2021–FY2026 (through Q3) ·Loaded 2026-08-28 ·Files and method
PERM_Disclosure_Data_FY2021.xlsxPERM_Disclosure_Data_FY2022_Q4.xlsxPERM_Disclosure_Data_FY2023_Q4.xlsxPERM_Disclosure_Data_FY2024_Q4.xlsxPERM_Disclosure_Data_New_Form_FY2024_Q4.xlsxPERM_Disclosure_Data_FY2025_Q4.xlsxPERM_Disclosure_Data_FY2026_Q3.xlsxBoth old and new FY2024 form releases are included. Layout is identified from field headers, not inferred from whether a filename contains “New_Form”. Certified, Certified-expired, Denied and Withdrawn remain separate statuses. Total records include those statuses; they are not a count of green cards or unique people.
Source State WARN layoff notices ·Coverage CA · 2018-11-15 to 2026-08-24 ·Loaded 2026-08-28 ·Files and method
warn_ca.xlsxwarn-report-for-7-1-2019-to-6-30-2020.pdfwarn-report-for-7-1-2020-to-06-30-2021.pdfwarn-report-for-7-1-2021-to-06-30-2022.pdfwarn-report-for-7-1-2022-to-06-30-2023.pdfwarn-report-for-7-1-2023-to-06-30-2024.pdfwarn-report-for-7-1-2024-to-06-30-2025.pdfwarn-report-for-7-1-25-to-6-30-26.pdfThe spreadsheet is tagged CA_current; each archived PDF is tagged CA_ followed by its filename without the extension. CA_current does not identify a unique download time. Filed locations, repeated and amended observations are retained. Source-record identifiers distinguish observations, not official events. Only matched observations appear on an employer page, and matching may be incomplete.
Our denial rates come from USCIS petition adjudications. That is a different dataset from the Department of Labor's LCA certification status, which is approved at close to 100% for nearly every employer. The two are often reported interchangeably; they measure different things.
We do not blend petition types. Application categories describe the petitions in the source data. They do not determine which category or outcome applies to an individual. We lead with historical change-of-employer decisions and show each application type separately.
The headline denial figure combines 5 fiscal years, FY2021 through FY2025. One employer's petitions in a single year are often a handful of cases, and a percentage drawn from a handful reads like a probability. Combining years raises the count — but that only helps if the years belong to the same period. Across all employers in our data, the share of change-of-employer petitions denied ran at 9.54% in FY2018, 9.42% in FY2019 and 4.99% in FY2020, and has stayed between 1.28% and 1.99% in every one of the 5 years from FY2021 through FY2025. Averaging the earlier years in with the recent ones would not give a steadier estimate; it would give a number that describes no period at all. So the window covers one period, it stops short of the incomplete current year, and every figure taken from it carries the years it covers — on the page, in the tables, and in the search result summary. Each employer page also lists its own petitions year by year, so the combined figure never stands alone.
The window is not "the last 5 years" computed automatically. A window that rolls forward on its own would, sooner or later, merge two different adjudication periods without anything drawing attention to it. Its boundaries are set deliberately, and each time we reload the data we re-check that the years inside it still resemble one another; if they stop doing so, the refresh stops and the window gets re-decided by a person.
A threshold is a decision about what not to show you. We use 10 of them. Two decide whether a figure is a percentage or a raw count; the rest decide whether a page exists, whether we ask search engines to list it, and how long a list gets before we cut it. Each one is listed below with what it excludes, because the useful question is not which constants we chose but which trade-offs we made.
| Threshold | Value | What it gates |
|---|---|---|
| Certified filings needed for a median wage | 10 certified filings | Below this we show the count, not a median |
| USCIS decisions needed for a denial rate counted over FY2021–FY2025 combined for the headline, and within each single year for the year-by-year rows | 20 decisions | Below this we show approved/denied counts, not a percentage |
| Certified filings for an employer to get its own page | 10 certified filings | Employers below this are still in our data and still appear in search results, but without a page of their own |
| Certified filings for a city to get its own page | 50 certified filings | Filings in smaller places are counted on the employer's page, but we publish no city median for them |
| Certified filings for a job title to get its own page | 100 certified filings | Roles below this are counted as unclassified rather than split into their own page |
| Content score for a page to be listed for search engines | 7 points | Pages below this still answer at their own address; they are left out of the sitemap and marked noindex |
| Employers listed on a city or job-title page | 25 employers | Only the largest by filing count are listed; the page states the full total next to the list |
| Worksite states listed next to an employer's name | 5 states | The list is labelled with the full count. Coverage conclusions are computed from the complete set, never from this truncated one |
| WARN source records listed on one employer page | 25 source records | Longer histories are cut, and the page says so — it shows “25+ source records” rather than a count that looks complete |
| Employers listed in the “filing address in this city” section | 300 employers | Beyond this the list is truncated and labelled as truncated |
The first two are different quantities gating different things, so they are configured and described separately — one is about wages, the other about petition outcomes, and merging them into a single “minimum sample” would hide that. The reasoning behind the denial-rate one:a number that a single case can move by ten percentage points should not be called a rate. At 20 decisions one case moves it by five points, which we think a reader can work with — and that is why every rate on this site is printed next to its n, at the same size. Screening out the worst samples is the first job; letting you judge what is left is the second.
Below a threshold we show raw counts rather than a percentage with a warning label attached. A small-sample percentage gets read as a probability no matter what the label says, while “8 approved, 2 denied” carries its own uncertainty.
Wage summaries use medians of certified filings with a reported wage, never averages. A row with one filing shows that single filed value and is not labeled a median. For samples from 2 to 9, the median is withheld; at10 or more we show it with the wage sample size. We exclude filings whose wage is implausible against its own prevailing wage — almost always a unit entered wrong, such as an hourly rate filed as a yearly one. Those records stay in the database, flagged; they are kept out of summary statistics.
A filed wage is what the employer committed to the Department of Labor. It excludes bonuses and equity, and it does not confirm what any individual was paid.A filing is also not a hire — employers file for roles they do not always fill.
The same company files under many spellings. We merge them only by rules that aredeterministic — identical after normalising case and punctuation, identical after dropping a legal suffix, or a name that literally contains the other as its “doing business as” prefix. We do not merge by similarity scores or edit distance.
The reason is asymmetric cost: wrongly merging two companies puts two different pay distributions on one page, which is not fixable by a reader; failing to merge only costs an extra page. Where we know from public fact that two filing entities are one company, that judgement is recorded by hand, with its evidence, rather than inferred.
Job titles work the same way, and the limit is visible: 28.6% of certified filings currently reduce to one of our 29 role pages. The rest carry titles we cannot group without guessing, so we leave them ungrouped rather than force them somewhere. They remain visible on their employer's page.
We also never flatten seniority. Staff and non-staff filings for the same role differ by tens of percent; a single blended figure overstates one end and understates the other.
Cities are grouped by the worksite on the filing, not the employer's address, and get a page at 50 certified filings (2,578 qualify; 2,298 of those also clear the content threshold and are listed in the city index). Where we cannot confidently place a city inside one federal statistical area, we show the city's own figures and make no comparison to a wider area — an area average printed under a city heading is two different populations in one number.
WARN coverage and employer matching are separate limits. WARN records are published state by state, and the loaded date ranges are listed above. “Not covered” means we have not loaded the relevant state’s records. “No matching records” means a source is loaded but no observations have been matched to that employer. Neither state establishes that no notices were filed or that no layoffs occurred. Employer pages identify loaded and missing worksite states; matching may be incomplete even in a loaded state.
The most recent fiscal year is incomplete in the loaded LCA, USCIS and PERM releases.WARN coverage uses the dates of loaded observations, not a fiscal-quarter release claim. Where we know how far into the year the data runs, we say so; where the publisher gives us no way to tell, we say “partial year” rather than invent a quarter. A partial year always reads as a decline if it is not labelled.
Nothing here is legal or immigration advice, and none of it predicts what will happen to your petition. A high denial rate does not mean an employer will not sponsor you; a low one does not mean your petition will be approved.