Levels.fyi vs H1B Salary Database vs Payscale

If you're researching a tech offer, the tool you open first should match the number you actually need. Total compensation, a visa-compliant base wage, and a general market midpoint are not the same thing.

Levels.fyi, public H-1B salary data, and Payscale get treated like substitutes. They aren't.

Which tab should you open first? For company levels and equity-heavy packages, start with Levels.fyi. For H-1B or prevailing wage questions, use Department of Labor filings. For titles that don't sit on a software ladder, Payscale usually maps the market more honestly.

What each source is actually measuring

Levels.fyi is a crowdsourced compensation site. People submit base salary, equity, and bonus. The site rolls those pieces into total compensation and tags them to company-specific levels (Google L5, Meta E5, and so on).

Public "H-1B salary databases" are not one official product. They are search layers on top of OFLC case disclosure files and prevailing wage resources. A Labor Condition Application (LCA) is the form an employer files before sponsoring an H-1B, H-1B1, or E-3 worker. It states a job, location, SOC code, and wage. It is a compliance filing, not a take-home-pay survey.

Payscale estimates pay from surveys and job-matching models. Payscale's methodology page describes how it standardizes titles and blends those inputs. Coverage is broad. Ladder-specific tech packages are not its strength.

None of these tools replaces an offer letter. They help you check whether an offer is even in the right neighborhood.

Coverage at a glance

Source Use it when you need Typical output Missing pieces
Levels.fyi Tech total comp and company levels Base, equity, bonus, percentiles, level maps Official visa wages, many non-tech jobs
H-1B LCA / prevailing wage data Sponsor research and wage compliance Certified base wages by SOC, city, and wage level RSUs, bonuses, most roles with no LCA
Payscale A wider job market, including non-tech Survey percentiles and custom reports FAANG-style level ladders and full TC

Two sources beat one when the role is both technical and visa-sensitive. One source is enough when it isn't.

The table is a starting filter, not a ranking. Accuracy depends on sample size, location, and whether you are looking at cash or at the whole package.

Levels.fyi for tech total compensation

Levels.fyi is built for people comparing software, product, data, and similar roles at companies that publish internal levels. You search a company, a level, and a location, then read a spread of total compensation rather than a single "average salary" scraped from job ads.

Total compensation on the site is base plus annualized equity plus bonus. At senior levels, equity often outweighs salary. That is the main reason a Levels.fyi number can look wildly higher than an H-1B wage for the same title.

Turns out the level name matters more than the job title. A Google L4 is not a Meta E4 and not a Microsoft 61, even when recruiters talk as if they were the same seniority. The site is useful because it keeps those ladders separate instead of dumping every "software engineer" into one bucket.

Self-reported data has a tilt. People who just landed a strong package are more likely to submit it. Small companies with few reports get noisier numbers, and Levels.fyi's verified stream notes that figures may be shifted slightly to protect anonymity. Names are never published. Treat a thin sample as a clue, not as a floor you can demand.

International submissions exist here in a way they do not in U.S. LCA files. If you are comparing a U.S. offer with a London or Zurich package, this is the only one of the three that even tries to show full tech comp outside the H-1B system. Tax and rent still sit outside the spreadsheet. The number is not take-home pay.

Use Levels.fyi to answer: what are people at this level actually getting in cash plus stock? Do not use it as proof of a prevailing wage.

H-1B salary data from DOL filings

H-1B wage research starts at the Department of Labor, not at a blog with a search box. Employers file LCAs before they sponsor certain specialty-occupation workers. DOL later publishes those records in disclosure files, typically as spreadsheets by federal fiscal year. Third-party sites reindex the same files so you can search by employer, title, city, or SOC code.

The wage on an LCA is a base wage. It is not total compensation. It will not include RSUs, signing bonuses, or refreshers. If you compare that number with a Levels.fyi total-comp chart, you are comparing two different objects.

DOL also sets prevailing wages so that hiring a foreign worker does not undercut U.S. workers in the same occupation and area. Lookups now run through the FLAG system rather than the old online wage library. Four wage levels exist, from entry-level work up to fully competent work. The employer must pay the higher of the prevailing wage and the actual wage paid to similarly situated U.S. workers.

Here is a practical query path:

  1. Identify the occupation, not just the recruiting title. O*NET and the SOC system are the official language (software developers are often 15-1252, but confirm the code for the real job).
  2. Open the DOL prevailing wage resources or a FLAG wage search and set the work location. Remote roles still have a worksite or reporting location for wage purposes.
  3. Note the wage level the employer is using. Level I is entry. Level IV is fully competent.
  4. Search recent LCA disclosure files for the same employer, SOC, and city.
  5. Record the certified wage range, not a single "average." Filings vary.
  6. Remember that a certified LCA is not an approved petition. Plenty of filings never become jobs.

Public LCA records include employer, job title, wage, location, and similar fields. They do not include the worker's name, SSN, or passport number.

This dataset is the one to use when you need a compliance floor, when you are checking whether a sponsor actually files for your title, or when an offer is being justified as a "prevailing wage." It is the wrong dataset for equity negotiations.

Payscale when the job is not a software ladder

Payscale is the generalist. You enter a title, location, and a few experience factors, then you get a range built from survey responses and Payscale's internal job matching.

Thing is, that breadth is the product. Marketing, finance, operations, nursing, and mixed corporate roles show up here in a way they never will on a FAANG levels chart. If your search is "program manager at a mid-size insurer in Dallas," Payscale is closer to the labor market you are actually in than a Google L5 page.

Some reports and tools sit behind a paid plan. The free view is often enough to see a percentile band. A custom report is optional, not required, for a first pass.

Payscale will not map Meta E5 against Amazon SDE II. It also will not split RSUs the way Levels.fyi does. If you force a senior software offer through Payscale alone, you may undervalue stock and over-trust a blended "software engineer" average that mixes companies you would never join.

Use Payscale to sanity-check non-tech and hybrid roles, or to see how a title moves across cities. Then, if the same job is a true tech ladder role, open Levels.fyi before you answer the recruiter.

Why the same job can show three different numbers

A software engineer in San Francisco can look like three careers depending on the tab.

H-1B data shows the certified base. Levels.fyi adds equity and bonus, which at large tech firms can dwarf that base. Payscale may land somewhere in the middle because it is averaging a wider set of employers, some of which do not grant refreshers at all.

People then assume one source is "wrong." Usually nobody is lying. They are answering different questions. An LCA can look high next to a national average because H-1B roles cluster in specialized titles and expensive metros. A Levels.fyi senior package can look impossible next to that same LCA because stock was never in the government file.

Location multiplies the gap. The same title can move tens of percent between a coastal hub and a smaller city. Remote H-1B wages still attach to a worksite rule, not to "I live wherever." Levels.fyi location filters and DOL location filters are not interchangeable.

There is also a timing mismatch that is easy to miss if you only screenshot the pretty chart: Levels.fyi updates as people submit, Payscale refreshes survey models on its own cadence, and LCA files land in batches by fiscal year, so a hot hiring month on one site can look like old news on another, and you end up arguing about a number that was never meant to be live market tape.

Selection effects stack on top. Crowdsourced tech data skews toward people who care enough to log a package. Government files only include employers who filed. Survey panels include whoever answered. Cross-check before you treat any percentile as a promise.

A workflow you can finish in one sitting

Run the tools in this order so you do not anchor on the wrong figure.

  1. Write down the real decision. Is this a visa wage, a tech total-comp comparison, or a non-tech benchmark? Circle one.
  2. If it is a tech ladder role, search Levels.fyi for company, level, and location. Copy the base and the total-comp band separately. Keep them on two lines.
  3. If the role may be H-1B, look up the SOC and the worksite, then pull prevailing wage and recent LCAs for that employer. Copy the certified base only.
  4. If the title is outside Big Tech ladders, run Payscale with the same city and experience band.
  5. Put three columns on a page: prevailing/certified base, cash salary, total compensation. Fill only the cells that apply.
  6. Negotiate from the column that matches the offer. Do not ask a company to "match Levels.fyi TC" when they have only quoted a visa base, and do not accept an LCA wage as proof that equity is fair.

Exploding offers still need a faster version of the same grid. Do the Levels.fyi and LCA lookups first. Payscale can wait if the role is clearly a leveled software job.

Limits you should not paper over

Levels.fyi is only as good as the submissions behind a given company and level. A famous employer with hundreds of rows is more usable than a startup with four anonymous dots.

H-1B files are official, which is not the same as complete. They omit equity. They lag. They describe attested wages, not what every U.S. peer in the building makes. They also will not tell you whether a petition was selected or approved.

Payscale's strength (width) is also the limitation. Blended titles hide the premium some tech employers pay in stock.

To be honest, most messy negotiations happen because someone pasted one screenshot into a spreadsheet and called it research. If a number is missing equity, say so. If a number is only a certified LCA, say that too.

Remote, internship, and contractor arrangements break these tools in different ways. Contract rates do not map cleanly to H-1B wage levels. Intern housing stipends do not show up as TC. When the work arrangement is unusual, ask the employer how they classify the job before you argue from a database.

FAQ

Is Levels.fyi or Payscale more accurate for tech pay? For leveled software, product, and data roles, Levels.fyi is the better fit because it tracks total compensation and company ladders. Payscale is stronger when the job is not on those ladders.

Should you use H-1B data or Levels.fyi for a FAANG comparison? Use both if the worker may be sponsored. Levels.fyi for the package. LCA and prevailing wage data for the base the employer can defend on a filing.

How fresh is each source? Levels.fyi moves as users submit. Payscale updates survey models on an ongoing cycle. H-1B disclosure files are published in batches, so they are the slowest of the three.

Can Payscale replace H-1B research for a non-tech job? For a market check, yes, Payscale is usually the more relevant benchmark. For an actual H-1B filing, you still need the SOC, location, and DOL wage level. A survey percentile is not a prevailing wage.

Do you need a paid Payscale report? Not for a first comparison. Pay only if you need a branded report or deeper cuts after the free band already answers the question.

Open the source that matches the number in the offer, then fill those three columns (certified base, cash, total comp) before you reply. If two of the three cells are empty, you are not ready to negotiate yet.