---
title: "H1B salary database: what it actually is, how to read it, and what it leaves out"
description: "[NewSearch millions of jobs from your AI agent with MCP→](/blog/jobspipe-mcp-server)"
canonical: https://jobspipe.dev/blog/h1b-salary-database
last_updated: 2026-09-04
---

[NewSearch millions of jobs from your AI agent with MCP→](/blog/jobspipe-mcp-server)

[All posts](/blog)

![](/listly/card-field.png)

ReferenceDatabase

Reference·Aug 29, 2026·8 min read

# H1B salary database: what it actually is, how to read it, and what it leaves out

Every H1B salary lookup site - h1bdata.info, h1bgrader and the rest - is a front-end over one public dataset: the Labor Condition Application disclosure files the Department of Labor publishes every quarter, free, as Excel workbooks. Each row names the employer, the job title, the SOC occupation code, the worksite and two wages - the one the employer promised to pay and the prevailing wage floor it had to clear. Here is where the files live, what each field means, the four wage levels behind them, and the five reasons a certified LCA is not the same thing as a salary.

![Dvir Atias](/authors/dvir-atias.jpg)

Dvir Atias

Founder, JobsPipe

Search for an **H1B salary database** and you get a wall of lookup sites - h1bdata.info, h1bgrader, the levels.fyi H-1B page. They look like competing products. They are not. Every one of them is a front-end over the same public dataset: the **Labor Condition Application disclosure files** that the US Department of Labor publishes every quarter, free, as Excel workbooks. h1bdata.info says so plainly - it indexes the DOL’s LCA disclosure data, more than 4.8 million records from late 2013 through September 2025.

That has two consequences. First, you never need to trust a lookup site: the primary source is a download away. Second, everything the dataset cannot say - and there is a lot - is inherited by every site built on it. This post covers where the data comes from, what each field actually means, and the caveats that separate a certified LCA from a real salary.

## Where the database actually comes from

Before an employer can file an H-1B petition, it must file a Labor Condition Application - Form ETA-9035 - with the Department of Labor’s Office of Foreign Labor Certification, attesting that it will pay at least the prevailing wage for the occupation at the worksite. The same form covers the smaller H-1B1 visas for Chile and Singapore and the E-3 visa for Australians, which is why those show up in the files under `VISA_CLASS`.

OFLC then discloses every final determination in a quarterly public file on the DOL performance-data page, cumulative within each federal fiscal year. The most recent release covers October 1, 2025 through June 30, 2026 - the first three quarters of FY2026. Each release ships with a record-layout PDF describing every column, and `CASE_STATUS` takes one of four values: Certified, Certified-Withdrawn, Denied, Withdrawn. Denial rates here are tiny - the LCA is an attestation check, not the visa lottery.

## The fields that matter

A row in the FY2026 file has some ninety columns, most of them addresses and attorney contact details. The analytical core is about a dozen fields:

-   `EMPLOYER_NAME` and `TRADE_NAME_DBA` - the legal entity and its trade name.
-   `JOB_TITLE`, plus `SOC_CODE` and `SOC_TITLE` - the free-text title and its [SOC occupation code](/blog/soc-codes), which is what makes cross-employer comparison possible at all.
-   `NAICS_CODE` - the employer’s [industry classification](/blog/naics-codes).
-   `WORKSITE_CITY`, `WORKSITE_STATE`, `WORKSITE_POSTAL_CODE` - where the work happens, which is what the wage is anchored to.
-   `WAGE_RATE_OF_PAY_FROM` and `_TO` with `WAGE_UNIT_OF_PAY` - the wage the employer commits to pay, quoted per hour, week, bi-weekly period, month or year.
-   `PREVAILING_WAGE` with `PW_WAGE_LEVEL` - the legal wage floor for that occupation and county, and which of the four levels it was set at.
-   `TOTAL_WORKER_POSITIONS` - how many workers one application requests. A single row can stand for dozens of jobs.
-   `H-1B_DEPENDENT` and `WILLFUL_VIOLATOR` - compliance flags worth knowing about if you are profiling employers.

## Two wages per row, four levels underneath

The subtlety most lookup sites flatten away is that every row carries _two_ wages. The offered wage is what the employer says it will pay. The prevailing wage is the floor it had to clear, and that floor comes in four levels drawn from the BLS Occupational Employment and Wage Statistics survey - roughly the 17th percentile of the occupation’s local wage distribution for Level I, the 34th for Level II, the 50th for Level III and the 67th for Level IV. An employer classifying a role at Level I owes a wage that two thirds of local workers in that occupation out-earn. That mechanic is also a live policy fight: a Department of Labor rulemaking proposed in early 2026 would push the four levels up to roughly the 34th, 52nd, 70th and 88th percentiles. It is a proposal, not law - but if it lands, the wage floors in future files jump.

## What the database cannot tell you

Used carefully, LCA data is the best free source of per-company, per-role, per-city US wage figures in existence. Used naively, it misleads in five specific ways:

-   **A certified LCA is not a hire.** Employers file more LCAs than they win visas - certification happens before the H-1B lottery, and only 85,000 new cap-subject visas exist per year. The DOL itself notes the disclosure data does not indicate what the employer ultimately used the application for.
-   **One row can be many workers.** `TOTAL_WORKER_POSITIONS` means row counts are not worker counts unless you sum that field.
-   **It is base wage only.** No bonus, no equity, no benefits. For senior tech roles that can be half of total compensation, which is why the [levels.fyi](/blog/levels-fyi-api) numbers for the same employer read so much higher.
-   **The population is skewed.** Only visa-sponsoring employers and visa-eligible specialty occupations appear - heavy on software, consulting and finance, silent on everything else.
-   **It is backward-looking.** Quarterly releases, describing wages agreed months before the start date.

One neighboring dataset rounds out the picture: the USCIS H-1B Employer Data Hub. That is the _petition_ side - approvals and denials by employer, drawn from Form I-129, with NAICS and geography. It contains no wage fields at all, and nothing links a petition to a specific LCA row. The “H1B salary database” everyone searches for is the DOL file, not the USCIS one.

## Using the raw files instead of the lookup sites

If you are doing analysis rather than looking up one employer, skip the front-ends. Download the LCA disclosure file for the fiscal year from the DOL performance-data page, filter `CASE_STATUS = Certified`, decide whether your unit is applications or worker positions, and pick one wage column. Annualize `WAGE_RATE_OF_PAY_FROM` using `WAGE_UNIT_OF_PAY` before comparing anything. For prevailing wages without the download, the OFLC wage search on flag.dol.gov queries the current wage library directly. We walked through the neighboring public sources - BLS OEWS, state releases and the rest - in the [salary datasets guide](/blog/salary-dataset).

## The other half of the picture: advertised pay

LCA data answers one question with unusual precision: what did a named employer commit to pay for a specific role, in writing, under penalty of law. What it cannot answer is what employers are offering openly, right now, across the whole market - including the vast majority of jobs that involve no visa at all.

That is what live job postings measure. Counting the active US postings in the JobsPipe index the morning this post published, 47.3 percent state pay - and 44 percent of those quote it hourly rather than annually, a slice of the labour market the visa data barely touches. For US software-developer roles (ISCO-08 unit group 2512), 46,555 active postings carry an annual salary band, and the median advertised band runs $130,000 to $187,800. One call reproduces that benchmark:

```
curl -X POST "https://api.jobspipe.dev/v1/insights/salary/benchmark" \
  -H "Authorization: Bearer jp_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "occupation_code": "2512", "country": "US" }'
```

The response is a percentile table - p10 through p90 - with the sample count and a confidence tier, computed from postings no older than 90 days. Or pull the underlying postings with `/v1/jobs/search` and filters like `occupation_code_or` and `job_country_code_or`, each record carrying parsed salary fields where the employer published them. The free tier returns 1,000 jobs a month; filed wages tell you what companies promised last quarter, advertised bands tell you what they are offering today.

Advertised-salary benchmarks from millions of live postings - free tier, API key in 30 seconds.

[

← Previous

JobsPipe for Slack: search live job postings without leaving the channel

](/blog/jobspipe-for-slack)[

Next →

StepStone API: what exists, what doesn't, and how to get German jobs data

](/blog/stepstone-api)

---
Canonical URL: https://jobspipe.dev/blog/h1b-salary-database
Title: H1B salary database: what it actually is, how to read it, and what it leaves out
Description: Every H1B salary lookup site - h1bdata.info, h1bgrader and the rest - is a front-end over one public dataset: the Labor Condition Application disclosure files the Department of Labor publishes every quarter, free, as Excel workbooks. Each row names the employer, the job title, the SOC occupation code, the worksite and two wages - the one the employer promised to pay and the prevailing wage floor it had to clear. Here is where the files live, what each field means, the four wage levels behind them, and the five reasons a certified LCA is not the same thing as a salary.

---
AI agents: the full machine-readable index of this site is https://jobspipe.dev/llms.txt?src=md-twin - API quickstart, no-key sandbox (POST https://api.jobspipe.dev/v1/sandbox/jobs/search), MCP server, pricing. Free key: https://jobspipe.dev/signup