gitGood.dev
Back to Blog

Salary Transparency Laws Backfired: What Posted Ranges Actually Mean in 2026

P
Pat
13 min read

Salary Transparency Laws Backfired: What Posted Ranges Actually Mean in 2026

Pull up any senior software engineer posting in California, New York, Washington, Colorado, or Illinois right now. You will see ranges like:

  • "$95,000 - $385,000"
  • "$120K - $410K"
  • "$150,000 - $500,000 (depending on location and experience)"

These are not informative. They are legal compliance dressed up as transparency.

Salary transparency laws were supposed to fix the asymmetric information problem in tech hiring. Instead, they triggered a defensive arms race where companies post the widest legally defensible range to avoid both pay equity lawsuits and accidentally underpaying market. The result is a sticker price that tells you almost nothing about what you will actually be offered.

This post is about how to read those ranges anyway. How to figure out, before you waste four interview rounds, whether the actual band is $180k or $280k. And how to extract a more honest number out of a recruiter who has been trained not to give you one.


What the Laws Actually Require

Before we talk about gaming the system, it helps to know what the system is.

Major US salary transparency laws as of 2026:

  • California (SB 1162, 2023): Employers with 15+ employees must include the salary range "the employer reasonably expects to pay for the position" in any job posting.
  • New York State (effective Sept 2023): Same rule, "good faith" range required, applies to remote roles where the work could be performed in NY.
  • Washington State (SB 5761, 2023): Range required, plus a general description of benefits and other compensation.
  • Colorado (Equal Pay for Equal Work Act, 2021): First and most aggressive. Requires range, benefits, and any bonus or commission terms.
  • Illinois (effective Jan 2025): Range and benefits required, plus posting must include "general description of benefits and other compensation" within 14 days of any external posting.

The penalties for posting an inaccurate range are real. New York and Colorado have both issued fines. California's enforcement has been slower but is escalating.

Here is the loophole: every law uses some version of "the range the employer reasonably expects to pay." There is no requirement that the range be narrow, useful, or correspond to a single specific level. So companies post the full band that covers the range from a junior IC to a staff engineer, often across multiple geographic tiers, all in a single posting.

That is technically legal. It is also useless to you.


Why Companies Post Wide Ranges

Five reasons. None of them are about helping you.

1. Multi-level requisitions. A single posting often covers L4-L6 (or equivalent). The lower bound is the L4 minimum in the lowest-pay region; the upper bound is the L6 maximum in San Francisco. Both are accurate. Neither describes what they will offer you.

2. Geographic spread. A remote-eligible role may be open to candidates in San Francisco, Austin, and Atlanta. Each city has its own pay band. Posting one wide range is easier than posting three.

3. Pay equity lawsuit defense. If the company posts $180-220k and ends up offering $235k to attract a strong candidate, they are exposed. If they post $150-300k, they are not.

4. Counter-intel against competitors. A narrow range tells competitors exactly what you pay. A wide one does not.

5. Recruiter flexibility. A wide posted range gives the recruiter more room to negotiate up or down based on candidate strength.

This is why the posted range is, on average, 2-3x wider than the actual hiring band for any given level. The actual band is almost always a much narrower window inside the posted range, and figuring out where that window sits is the entire game.


How to Estimate the Real Band Before You Apply

You can usually narrow a posted range from a 200% spread to a 30% spread without ever talking to a recruiter, using public data. Here is the process.

Step 1: Identify the level

Look at the title closely. Every company has a published or semi-public leveling guide.

  • Google: L3 (new grad), L4, L5, L6, L7, L8 - "Software Engineer," "Senior," "Staff," "Senior Staff," "Principal"
  • Meta: E3, E4, E5 (senior), E6 (staff), E7 (senior staff)
  • Amazon: SDE I, II, III; Principal SDE
  • Microsoft: 59-67 numeric, with SDE, SDE II, Senior SDE, Principal SDE, Partner SDE

The job posting almost always names the level, even if subtly. "Software Engineer III" at Amazon = SDE III, which maps to L6. "Senior Software Engineer" almost always means the company's L5 equivalent.

Step 2: Look up the level on Levels.fyi

Levels.fyi is the gold standard for verified compensation data. Find your target company, your target level, and your target city. Look at the median total comp, not the high or low.

Median total comp at, say, Google L5 in the Bay Area is currently around $440k all-in (base + bonus + equity, RSUs valued at grant). The posted range on a Google L5 job listing might say $190k-$310k base. Both are accurate. The posting is showing base only; Levels is showing total comp. That gap is most of what people miss.

Step 3: Cross-check against Blind, Glassdoor, and Compensation.fyi

Blind in particular is useful for ranges that Levels.fyi has thin data on (smaller companies, recent reorgs). Search "[Company] [level] offer" and look at the last 6 months.

Step 4: Estimate the actual band

For most companies in 2026:

  • The actual base for a given level is in a window roughly 15-25% wide (e.g., $180k-$220k).
  • The actual total comp can be wider, mostly because equity grants vary more than base.
  • The posted range is often 3-5x as wide as the actual band.

If you do this for the top 10 companies on your list before you ever apply, you will save weeks of misallocated effort.


Scripts: How to Get a Real Number Out of a Recruiter

You will eventually be on a call with a recruiter who is trained to defer the salary conversation. Here is how to handle it.

The early-screen ask

Most recruiters will ask "what are your compensation expectations?" within the first 10 minutes of the screen. The standard advice is "never name a number first." That advice is roughly correct, but it does not work cleanly when the recruiter actually presses.

Instead, flip the question:

"I want to make sure I'm not wasting either of our time. The posted range is $150k-$300k, which is a wide band. Could you share what the actual hiring band is for this specific level and location? Once I know that, I can tell you whether it's in the range I'd consider."

Why this works: you have anchored the conversation around the posted range, not your own number. You have given the recruiter a face-saving reason to share more (efficiency, not negotiation). And you have made it about the level, not about you specifically, which is something they can answer without commitment.

When the recruiter dodges

Many will. They will say something like "we calibrate based on candidate strength and we'll know more later in the process." If they do, try:

"Totally understand. Could you share the band for someone who hits the bar for this level - not factoring in overshoot or undershoot? Even a narrower range like $30-40k wide would help me know if we're in the same ballpark."

About 60% of recruiters will give you a real range at this point. The other 40% will continue to dodge, in which case:

"Sure, I understand. I'll keep the $150-300k posted range in mind and we can revisit at offer stage. One last thing - what's the typical base/bonus/equity split for this level?"

The last question is the underrated trick. Even if they will not tell you the band, the split (e.g., "base is roughly 60%, equity is 30%, bonus is 10%") tells you a lot. Combined with public data on the equity grant size for that level at that company, you can usually back into the actual base.

When you have data and the range is wrong

Sometimes the company posts a range that is below market. The polite move is not to point this out aggressively. It is to mention what you have heard from peers:

"I appreciate that. Just to share where I'm coming from: peers I know at the same level at [comparable company] are at total comp of around $X. Is the band for this role in that ballpark, or is it materially different?"

Naming a peer company instead of an absolute number does the anchor job without locking you in.


Red Flags in a Posted Range

A few patterns that should make you slow down before you invest interview hours.

Range is more than 2x. ($120k-$300k.) This usually means the posting is multi-level, multi-region, or both. Confirm the level on the screen before you do a technical round. Many candidates have done four rounds for a "senior" role only to be offered the L4 number.

Range is suspiciously narrow. ($175k-$185k.) For a senior IC role, a 6% spread is unusual. It often means the company is anchored to a strict band with no negotiation room, which makes them a bad place to negotiate. Sometimes that is fine. Sometimes it means you should optimize the bonus or equity instead of base.

Range is lower than market. Cross-checked against Levels.fyi for the level and location, the posted band is materially below market. This usually means one of three things: the company is aiming for cost-conscious hires, the level mapping is misleading (their "Senior" is closer to a Mid at FAANG), or they are trying to anchor low and negotiate up only when forced. None of these are deal-breakers, but go in informed.

No equity mentioned anywhere. For a tech role at a company with equity, a posting that lists base only and never mentions stock often means the equity is small enough they prefer not to talk about it. Sometimes that is fine for a stable mid-size company. At a startup, it is a yellow flag.

Range listed in a footnote, not the body. Some companies bury the range so deep that you miss it. They are technically compliant, but the burial often correlates with a lowball band. Look for the body of the posting to lead with comp transparency, not hide it.


What the "Compensation Philosophy" Page Actually Tells You

A growing number of companies have started publishing a compensation philosophy page on their careers site. Linear, Stripe, Vercel, and Replit are examples. These pages will say things like "we pay at the 75th percentile of market" or "we use a single global pay band, location-adjusted using a tier system."

Read these pages. They are unusually informative.

The companies that publish them tend to be more honest about their actual bands. A "75th percentile" claim is verifiable against Levels.fyi data, and most of these companies are accurate to within a few percent. A "single global band" claim tells you that remote workers in lower-cost cities will get the same base as Bay Area workers, which can be a significant lift compared to companies that location-discount aggressively.

Companies without a compensation philosophy page are not worse, necessarily. But they leave you with less information to work with.


The Negotiation Implication

Here is the most important downstream effect of wide posted ranges:

The posted range anchors negotiation just as effectively as a single number. When a recruiter offers you $200k base and the posted range is $150k-$300k, you have just been offered the bottom third of the band. That is a strong negotiation lever. "I notice the offer is at the 25th percentile of the posted range; given my experience, I was hoping for the median or above" is a clean script that lands well.

If you walk in not knowing where in the posted range you sit, you cannot use this lever. If you walk in having researched the actual band, you can.

For the full script set on negotiating the offer once it lands, see How to Negotiate Your Tech Salary: Scripts and Templates.


The Quick Decoder

Here is a rough heuristic for translating a posted range into the likely real band, assuming a single-level senior IC role at a mid-to-large tech company:

  • Posted $150k-$300k base? Likely real band: $200k-$240k base for the level.
  • Posted $100k-$200k total? Likely real total: $140k-$170k for the level.
  • Posted $300k-$500k total? Likely real total: $370k-$430k for the level.

These are rough. They will be wrong by 10-20% for any specific company. But they get you in the right ballpark, which is what you need before you commit to four interview rounds.

The actual numbers are downstream of: the company's pay percentile target, the level you are being slotted into, the location adjustment, and the strength of your interview performance. The posted range is upstream of none of those.


Three practical changes to how you should run your job search in this environment:

1. Filter by total comp, not posted range. Use Levels.fyi as your primary filter. The posted range is a compliance artifact, not a signal.

2. Get the band early in the recruiter screen. Use the scripts above. If the recruiter genuinely cannot or will not share a real band, that itself is a signal. The best companies to negotiate with are the ones who are transparent before they need to be.

3. Anchor on the level, not the title. Two "Senior Software Engineers" at different companies may be 2-3 levels apart on real comp. Always confirm the level mapping before you apply.

The transparency laws were a step in the right direction. The market response is mostly noise. Your job is to read past the noise to the signal underneath, which is still there - just harder to find than it was three years ago.

The follow-up posts are: