Technical writing

DOL OFLC Visa Disclosures: The Federal Database Behind H-1B, H-2A, and H-2B Wage Records

· 18 min read· AI Analytics
DOLOFLCH-1BVisaFederal Data

The Department of Labor Office of Foreign Labor Certification publishes every H-1B Labor Condition Application, H-2A agricultural temporary worker certification, and H-2B non-agricultural temporary worker certification — the employer wage attestations behind the US guest-worker visa system.

The OFLC performance data is among the most consequential underused federal datasets. It records what hundreds of thousands of US employers attest they will pay foreign workers each year, the occupations and worksites those workers will fill, and how that offer compares to the prevailing wage the Department of Labor has determined is appropriate for the position. It is public, machine-readable, published quarterly, and has driven some of the most significant investigative reporting on labor markets and immigration in the past decade.

What OFLC is

The Office of Foreign Labor Certification sits within the Employment and Training Administration (ETA), the largest agency within the Department of Labor by headcount and budget. ETA administers unemployment insurance, job training programs, and the federal workforce development system; OFLC is its specialist unit responsible for one narrow but consequential function: certifying that foreign workers may be employed in the United States without harming the wages and working conditions of domestic workers.

OFLC administers four main certification programs that together cover essentially the entire universe of employment-based temporary and permanent worker admissions. The H-1B, H-1B1, and E-3 programs cover specialty occupation workers — positions nominally requiring a bachelor's degree or equivalent. The H-2A program covers temporary agricultural workers. The H-2B program covers temporary non-agricultural workers in seasonal industries. PERM — Program Electronic Review Management — administers permanent labor certification for employers seeking to sponsor foreign workers for employment-based green cards in the EB-2 and EB-3 preference categories.

Across these programs, OFLC processes roughly one million applications annually, generating disclosure data that covers the wage structure of a significant segment of the US workforce. The H-1B alone accounts for 500,000 to 600,000 Labor Condition Application certifications per fiscal year; H-2A adds 370,000 or more certified positions; H-2B adds 60,000 to 130,000 depending on supplemental allocations. PERM adds tens of thousands of permanent certification decisions. All of it is published.

H-1B Labor Condition Applications

The Labor Condition Application is the gateway document for the H-1B process. Before an employer can petition USCIS for an H-1B worker, it must obtain a certified LCA from OFLC. The LCA is a public attestation by the employer on four conditions: that it will pay the worker at least the required wage, that employment of the H-1B worker will not adversely affect the working conditions of similarly employed domestic workers, that there is no strike or lockout in the relevant occupation at the worksite, and that the employer has provided notice of the LCA filing to workers in the affected occupation.

The LCA process is administrative, not discretionary. DOL does not evaluate whether the employer actually needs the worker or whether a qualified US worker is available for the position. It certifies only that the employer has attested to the required conditions and that the offered wage meets the prevailing wage requirement. This is the key structural fact for understanding the LCA dataset: it captures employer attestations, not DOL judgments about the merits of any individual hire.

The prevailing wage requirement is set by reference to the Occupational Employment and Wage Statistics survey conducted by the Bureau of Labor Statistics, or to an employer-commissioned private survey meeting DOL standards. The employer must offer the higher of the prevailing wage or its actual wage for the position. The prevailing wage is further divided into four levels — Level I (17th percentile), Level II (34th percentile), Level III (median), Level IV (67th percentile) — corresponding to different experience tiers within an occupation. The employer selects the level applicable to the position, which creates a structural opportunity to file at Level I and offer wages far below the occupation's median while remaining technically compliant.

Each LCA is filed on Form ETA-9035, which generates the fields present in the quarterly disclosure file. The core fields are:

FieldDescription
CASE_NUMBERUnique DOL case identifier; links to USCIS petition if selected in lottery
CASE_STATUSCertified, Certified — Withdrawn, Denied, or Withdrawn
EMPLOYER_NAME / FEINEmployer legal name and Federal Employer Identification Number
SOC_CODE / SOC_TITLEStandard Occupational Classification code and title for the position
NAICS_CODE6-digit industry code for the employer's primary business
FULL_TIME_POSITIONY or N; part-time positions carry different wage-hour calculations
BEGIN_DATE / END_DATEApproved employment period (H-1B initial period is three years)
TOTAL_WORKERSNumber of workers covered by the LCA (one LCA can cover multiple workers)
WAGE_RATE_OF_PAY_FROM / WAGE_UNIT_OF_PAYEmployer's offered wage and unit (Year, Month, Week, Hour)
PREVAILING_WAGE / PW_UNIT_OF_PAYDOL-determined prevailing wage for the occupation and area
PW_WAGE_LEVEL / PW_SOURCELevel I–IV and whether OES survey or private survey was used
WORKSITE_CITY / WORKSITE_STATELocation of actual employment; may differ from employer headquarters
H1B_DEPENDENT / WILLFUL_VIOLATORWhether employer is H-1B dependent (50%+ H-1B workforce) and prior violator status

The H-1B program operates under a statutory annual cap of 65,000 visas, plus 20,000 reserved for workers holding a US master's degree or higher. Employers in higher education, affiliated nonprofit research organizations, and government research organizations are cap-exempt and may file at any time without entering the annual lottery. The LCA dataset captures all certifications regardless of cap status, including cap-exempt university and research institution filings. A consequence is that LCA counts substantially exceed actual visa issuances: an employer might certify 1,000 LCAs, win 200 lottery slots, and end up with 200 visa holders — but 1,000 rows in the DOL disclosure data.

Who dominates the H-1B filing data

The most consistent finding across H-1B data analyses from any year is that the top employers by LCA volume are not the large technology product companies that dominate public perception of the program. They are IT staffing and outsourcing companies, primarily Indian-headquartered: Infosys, Tata Consultancy Services, Cognizant Technology Solutions, Wipro, and HCL America routinely appear in the top five employers by certified LCA count. Accenture and its subsidiaries also appear consistently near the top.

Apple, Google, Microsoft, Amazon, and Meta — the firms most prominently associated with H-1B in political debate — file substantial but comparatively modest numbers of LCAs. The distinction matters for wage analysis because the two groups operate under different business models with different wage incentives. Large technology product employers typically retain H-1B workers long-term and file at Level III or Level IV with wages well above the prevailing wage floor. IT staffing companies place workers at client sites for the duration of specific projects; their competitive advantage depends partly on labor cost, creating an incentive to file at Level I with wages at or just above the legal minimum. LCA analyses consistently find that Level I filings are concentrated among staffing companies, with median wage ratios near 1.00.

Computer-related occupations dominate H-1B filings. The 15-xxxx SOC major group — Computer and Mathematical Occupations — accounts for more than 60 percent of certified LCAs in most fiscal years. Within that group, Software Developers (SOC 15-1252), Computer Systems Analysts (15-1211), and Computer Occupations, All Other (15-1299) are consistently the top three individual codes. Healthcare occupations (29-xxxx), architecture and engineering (17-xxxx), and business and financial operations (13-xxxx) make up most of the remainder.

H-2A: Temporary agricultural workers

The H-2A temporary agricultural worker program has no annual numerical cap. Congress placed no ceiling on H-2A certifications when it created the program in the Immigration Reform and Control Act of 1986, on the theory that agricultural labor demand fluctuates with growing seasons in ways a fixed cap cannot accommodate. An employer who can demonstrate a shortage of available domestic workers for a temporary agricultural position and who meets the wage and housing requirements may obtain as many H-2A certifications as needed. This has produced essentially unconstrained growth: certified positions have risen from roughly 60,000 in fiscal year 2012 to more than 370,000 in fiscal year 2023, making H-2A the fastest-growing guest worker program in the United States by worker volume.

The wage floor for H-2A workers is the Adverse Effect Wage Rate, a DOL-determined hourly rate set annually for each state based on USDA Farm Labor Survey data. The AEWR is designed to prevent employment of foreign guest workers from depressing wages for domestic agricultural workers. As of recent years, AEWRs range from roughly $14 to $19 per hour depending on state, with western states generally higher. Employers must pay at least the AEWR or the applicable piece rate, whichever is higher. They must also provide free housing that meets federal and state safety standards, pay inbound and outbound transportation costs, and guarantee work for at least three-quarters of the workdays in the contract period. This combination of wage floor, housing requirement, and work guarantee makes H-2A materially more expensive per worker than unauthorized agricultural labor, which has historically been the primary driver of employer resistance to the program.

Before OFLC can certify an H-2A application, the employer must obtain a Job Order approved by the State Workforce Agency and conduct positive recruitment demonstrating that qualified US workers are unavailable or unwilling to accept the positions. The disclosure data records the number of domestic workers hired as a result of this recruitment. Analysis of H-2A records consistently shows that 95 to 98 percent of certified cases report zero domestic workers hired after the required recruitment effort — a pattern cited by both program proponents (as evidence of genuine labor shortages) and labor advocates (who question whether recruitment requirements are meaningful for established guest worker employers).

The geographic concentration of H-2A certifications reflects the structure of US crop agriculture. North Carolina, Georgia, Florida, and California historically account for the largest certified worker volumes, reflecting tobacco, vegetable, citrus, and nursery-stock agriculture respectively. But the disclosure data shows growing H-2A activity in states not traditionally associated with guest worker programs: Kentucky (tobacco), Michigan (blueberries), and Washington (tree fruit). A substantial share of H-2A certifications are obtained not by growers directly but by farm labor contractors, who appear in the employer fields of the OFLC disclosure while the grower directing day-to-day work may be listed only in the worksite address.

H-2B: Temporary non-agricultural workers

The H-2B temporary non-agricultural worker program covers seasonal and peak-load positions in landscaping, hospitality, ski resorts, amusement parks, seafood processing, and other service industries where the employer's need for workers is genuinely temporary. The program carries a statutory annual cap of 66,000 visas, divided into two semiannual allocations of 33,000 each for October–March and April–September.

The H-2B cap has been exhausted in every fiscal year since 2013. Both semiannual allocations are typically oversubscribed within the first days — sometimes hours — of the application filing window. When applications exceed the available cap numbers, USCIS conducts a lottery among employers who filed on the first day, which effectively means that employers who cannot project seasonal labor needs precisely enough to file on day one are shut out of the program.

Congress has responded to chronic H-2B cap exhaustion with a series of supplemental allocations authorized through annual appropriations legislation rather than a permanent cap increase. Since fiscal year 2017, the Department of Homeland Security has been authorized to issue supplemental H-2B allocations above the statutory cap for employers who demonstrate they suffered irreparable harm from insufficient H-2B workers in the prior year. These supplemental allocations have ranged from 15,000 to 64,716 additional visas in recent years. The OFLC disclosure data does not separately identify regular versus supplemental cap certifications — the VISA_CLASS field shows H-2B in both cases — so annual certified worker totals include both the statutory and supplemental volumes.

The H-2B prevailing wage standard differs from the H-2A AEWR. For H-2B positions, the prevailing wage is the locally prevailing wage for the occupation as determined by a DOL survey or an approved private wage survey, whichever is lower. H-2B employers are not required to provide free housing, though many do as a practical matter in rural coastal and mountain resort communities where seasonal housing is scarce. The combination of a 66,000 cap with supplemental allocations, private survey wage options, and no housing requirement makes H-2B structurally different from H-2A in ways that are visible in the disclosure data.

The major H-2B employer categories — landscaping, ski resort operations, seafood processing, and hospitality — each have distinctive wage and geographic profiles in the disclosure data. Landscaping employers are concentrated in the upper Midwest and Northeast; ski resort operators in Colorado, Utah, and Vermont; seafood processors in Alaska and the Gulf Coast. The disclosure data captures the full employer-level certification record for each of these sectors going back to 2008.

PERM: Permanent labor certification

PERM — Program Electronic Review Management — is OFLC's program for permanent labor certification, the administrative step required before an employer can sponsor a foreign worker for an employment-based immigrant visa (green card) in the EB-2 or EB-3 preference categories. The employer files Form ETA-9089, which requires it to document a prescribed recruitment effort and attest that no qualified US worker applied, was available, and was willing to accept the position at the offered wage.

Unlike H-1B LCA certification, PERM involves genuine DOL adjudication: the agency reviews the recruitment record and may audit the employer's documentation. Audit rates have historically been in the range of 20 to 30 percent of PERM filings, making PERM substantively different from the LCA's rubber-stamp administrative certification. Attorney fees for PERM preparation typically range from $3,000 to $8,000 per case, reflecting the documentation burden. PERM certification is only the first step toward a green card; the employer must then file a petition with USCIS and the worker must wait for a visa number to become available — a wait that is measured in decades for India-born workers in the EB-3 category under the current per-country cap structure.

OFLC publishes PERM performance data alongside H-1B, H-2A, and H-2B disclosure files. The PERM data contains employer name, attorney or agent name, job title, SOC code, education and experience requirements, offered wage, prevailing wage, case status (Certified, Denied, Withdrawn, or Audited), and the employer's FEIN and NAICS code. Because PERM certification is tied to a specific employer-worker-occupation combination rather than to a generic position as in LCA filings, it is more sensitive to individual privacy concerns, and DOL omits some identifying fields.

Accessing OFLC performance data

The OFLC Performance Data Center at dol.gov/agencies/eta/foreign-labor/performance is the authoritative source for all program disclosure files. The site organizes files by program and fiscal year, with quarterly files for H-1B, H-2A, H-2B, and PERM, plus annual combined files after each fiscal year closes. Files are Excel workbooks (.xlsx) rather than CSV, requiring a library capable of reading Excel format — pandas with the openpyxl engine is the standard Python approach. A quarterly H-1B file typically contains 150,000 to 200,000 rows; annual combined files can reach 600,000 rows.

Column names have changed modestly across fiscal years as OFLC has revised its disclosure format. Code written against FY2020 files may require column-name adjustments to work with FY2024 files. OFLC publishes a data dictionary for each program year that documents current column definitions and any changes from prior years. For researchers building long time-series, the pre-2014 files use an older format with fewer fields and different naming conventions; treating the pre- and post-2014 data as two distinct formats requiring separate parsing before unification is the practical approach.

There is no API for OFLC performance data. All access is through direct file downloads. For H-1B analysis, the quarterly files are preferable to the annual combined file for freshness; for H-2A and H-2B, the annual combined file is more convenient for full-year employer ranking because seasonal workers often appear across multiple quarters of the same employer's fiscal year certification.

Python workflow: downloading and analyzing H-1B LCA data

The following script downloads the most recent H-1B LCA disclosure file, normalizes wages to annual figures, computes the top 20 employers by certified worker positions, calculates median wages by SOC occupation group, and identifies employers with certified wages below the prevailing wage — the standard starting point for H-1B wage analysis:

import pandas as pd
import requests
from pathlib import Path

# DOL OFLC Performance Data Center:
# https://www.dol.gov/agencies/eta/foreign-labor/performance
#
# H-1B LCA disclosure files are published quarterly as Excel (.xlsx).
# File naming convention (subject to annual variation):
#   LCA_Disclosure_Data_FY<YYYY>_Q<N>.xlsx
#
# The most recent full-year file is typically the Q4 annual combined file.

BASE = "https://www.dol.gov/sites/dolgov/files/ETA/oflc/pdfs"

def download_lca(fiscal_year: int, quarter: int) -> Path:
    """Download and cache an H-1B LCA quarterly disclosure file."""
    filename = f"LCA_Disclosure_Data_FY{fiscal_year}_Q{quarter}.xlsx"
    dest = Path(filename)
    if not dest.exists():
        url = f"{BASE}/{filename}"
        print(f"Downloading {url}")
        r = requests.get(url, timeout=300)
        r.raise_for_status()
        dest.write_bytes(r.content)
    return dest

path = download_lca(2024, 4)

# Parse the file; read all columns as strings to avoid type-coercion issues
df = pd.read_excel(path, dtype=str)
df.columns = [c.strip().upper().replace(" ", "_") for c in df.columns]

# Keep only certified cases (the actionable subset)
# CASE_STATUS values: "Certified", "Certified - Withdrawn", "Denied", "Withdrawn"
certified = df[df["CASE_STATUS"].str.startswith("Certified", na=False)].copy()

print(f"Total rows: {len(df):,}  |  Certified: {len(certified):,}")

# --- Wage normalization ---
def to_annual(wage_str, unit_str):
    """Convert any wage unit to an annualized figure (2,080 hours/year)."""
    try:
        wage = float(str(wage_str).replace(",", "").replace("$", "").strip())
    except (ValueError, TypeError):
        return None
    unit = str(unit_str).strip().lower()
    multipliers = {"year": 1, "month": 12, "week": 52, "hour": 2080, "bi-weekly": 26}
    return wage * multipliers.get(unit, 1)

certified["WAGE_ANNUAL"] = certified.apply(
    lambda r: to_annual(r.get("WAGE_RATE_OF_PAY_FROM"), r.get("WAGE_UNIT_OF_PAY")), axis=1
)
certified["PW_ANNUAL"] = certified.apply(
    lambda r: to_annual(r.get("PREVAILING_WAGE"), r.get("PW_UNIT_OF_PAY")), axis=1
)
# Wage ratio: offered wage / prevailing wage
# 1.00 = employer offers exactly the legal minimum
# < 1.00 = potential violation (usually rounding noise)
certified["WAGE_RATIO"] = certified["WAGE_ANNUAL"] / certified["PW_ANNUAL"]
certified["TOTAL_WORKERS"] = pd.to_numeric(certified.get("TOTAL_WORKERS", 1), errors="coerce").fillna(1)

# --- Analysis 1: Top 20 employers by certified LCA positions ---
top_employers = (
    certified.groupby("EMPLOYER_NAME")
    .agg(
        total_workers=("TOTAL_WORKERS", "sum"),
        lca_count=("CASE_STATUS", "count"),
        median_wage=("WAGE_ANNUAL", "median"),
        median_pw=("PW_ANNUAL", "median"),
        median_ratio=("WAGE_RATIO", "median"),
        pct_level_i=("PW_WAGE_LEVEL", lambda x: (x.str.strip() == "I").mean()),
    )
    .sort_values("total_workers", ascending=False)
    .head(20)
)
print("\nTop 20 H-1B employers by certified worker positions:")
print(top_employers.to_string())

# --- Analysis 2: Median wage by SOC major group ---
# SOC major groups: 15-xxxx = Computer/Mathematical, 29-xxxx = Healthcare,
# 17-xxxx = Architecture/Engineering, 13-xxxx = Business/Financial
certified["SOC_MAJOR"] = certified["SOC_CODE"].str[:2]
soc_wages = (
    certified.groupby("SOC_MAJOR")
    .agg(
        count=("CASE_STATUS", "count"),
        median_wage=("WAGE_ANNUAL", "median"),
        median_pw=("PW_ANNUAL", "median"),
        median_ratio=("WAGE_RATIO", "median"),
    )
    .sort_values("count", ascending=False)
    .head(10)
)
print("\nMedian wages by 2-digit SOC major group:")
print(soc_wages.to_string())

# --- Analysis 3: Computer occupations (SOC 15-xxxx) in detail ---
computer = certified[certified["SOC_MAJOR"] == "15"].copy()
computer_detail = (
    computer.groupby("SOC_TITLE")
    .agg(
        count=("CASE_STATUS", "count"),
        median_wage=("WAGE_ANNUAL", "median"),
        median_ratio=("WAGE_RATIO", "median"),
    )
    .sort_values("count", ascending=False)
    .head(15)
)
print("\nTop computer occupation (SOC 15-xxxx) breakdowns:")
print(computer_detail.to_string())

# --- Analysis 4: Potential prevailing wage violations ---
# Filter certified cases where wage_ratio < 0.98 (allowing 2% for rounding/conversion)
# and wage data is present
violations = certified[
    certified["WAGE_RATIO"].notna()
    & (certified["WAGE_RATIO"] < 0.98)
    & (certified["WAGE_ANNUAL"].notna())
    & (certified["WAGE_ANNUAL"] > 0)
].copy()

violations["SHORTFALL_ANNUAL"] = violations["PW_ANNUAL"] - violations["WAGE_ANNUAL"]
violation_summary = (
    violations.groupby("EMPLOYER_NAME")
    .agg(
        cases=("CASE_STATUS", "count"),
        workers=("TOTAL_WORKERS", "sum"),
        median_ratio=("WAGE_RATIO", "median"),
        median_shortfall=("SHORTFALL_ANNUAL", "median"),
    )
    .sort_values("workers", ascending=False)
    .head(20)
)
print("\nEmployers with certified LCAs below prevailing wage (potential violations):")
print(violation_summary.to_string())
print(f"\nTotal below-prevailing cases: {len(violations):,} "
      f"({len(violations)/len(certified):.1%} of certified)")

A few methodological notes on the results this workflow produces. The wage ratio will cluster tightly at 1.00 for IT staffing employers, which is itself the key finding: these employers offer the legal minimum and nothing more. Ratios slightly below 1.00 usually reflect rounding or unit-conversion differences rather than actual violations; true violations — where the employer paid less than the certified LCA wage — appear in DOL Wage and Hour Division enforcement records rather than in LCA filings, because the LCA is a prospective attestation and actual wage compliance is monitored separately through WHD audits.

The TOTAL_WORKERS field is important for employer ranking. An employer who files 100 LCAs each covering 10 workers has 1,000 certified positions despite appearing to have the same LCA count as an employer who files 100 single-worker LCAs. Sorting by total_workers rather than lca_count produces the more accurate picture of employer scale in the program. IT staffing companies typically file many single-worker LCAs; large employers in healthcare or academia sometimes file fewer LCAs covering larger worker cohorts.

How investigators use OFLC data

The OFLC performance data has driven a sustained body of investigative reporting and academic research across all four programs. The investigative patterns cluster around several themes.

H-1B wage suppression via Level I gaming. ProPublica, Reuters, Bloomberg, and the Economic Policy Institute have each documented that IT staffing companies file the substantial majority of their LCAs at Level I — the 17th percentile wage — while placing workers at client sites where they perform work the client would otherwise staff at substantially higher wages. The LCA data makes this pattern quantifiable at the employer level: filter to employers with 500 or more annual LCAs, compute the percentage filed at Level I, and the IT staffing tier separates cleanly from the technology product tier.

Displacement of US workers. Several high-profile cases — Southern California Edison, Disney, and Abbott Laboratories among them — involved employers who laid off US workers and required them to train their H-1B replacements as a condition of severance. Cross-referencing LCA filing data with WARN Act layoff notices filed under the Worker Adjustment and Retraining Notification Act was central to identifying these cases in the disclosure record.

H-2A housing conditions. The H-2A disclosure data identifies which employers are required to provide free housing (the H2A_HOUSING_REQUIRED field). Journalists investigating H-2A housing conditions join this field to OSHA inspection records at enforcedata.dol.gov on employer name and state to identify which H-2A employers have received housing-related citations. The cross-reference routinely reveals a gap between the scale of employer-provided housing and the inspection resources devoted to monitoring it.

H-2A and H-2B zero domestic hiring. The US_WORKERS_HIRED field is the primary quantitative indicator of the guest worker programs' claimed labor shortage justification. Analyses across multiple fiscal years consistently show that 95 to 98 percent of H-2A certified cases report zero domestic workers hired after the required positive recruitment effort. This finding is reproducible and is the most commonly cited statistic in H-2A program debates.

Farm labor contractor opacity. A significant share of H-2A certifications are obtained by farm labor contractors rather than by the growers who actually direct workers' daily activities. The contractor name appears in the employer fields of the OFLC disclosure; the ultimate grower does not appear unless listed in the worksite address separately. DOL Wage and Hour Division enforcement records for H-2A violations are the complementary dataset that reveals which contractors and growers have been cited after concluded investigations.

PERM audit concentration. OFLC publishes audit case statistics in the PERM performance data, which makes it possible to identify law firms and employers whose PERM filings are audited at rates substantially above the program average. Concentrated audit rates for specific attorneys or employers can indicate filing patterns that OFLC has flagged as audit-prone — a starting point for investigation that is not visible in any other public data source.


Related: USCIS H-1B visa data · BLS OEWS wage statistics

Part of the Federal Regulatory Data Hub.