RefolkCandidates
TeardownApplying at volume

The Padded-Range Batch, Posted Spreads Read to a Real Floor

You can turn a stack of 30-plus postings into a ranked apply order by converting each posted range to a realistic offer floor with the spread math shown.

18 min readLast reviewed October 2, 2026Read as Markdown

You have a stack of postings and their salary ranges are all over the map: one says 95K to 125K, the next says 75K to 145K, a third lists no number at all. Before you decide where to spend a finite number of applications, you need to know which of those numbers are real. This guide carries one batch from raw ranges to a ranked apply order, showing the spread math, the padded-top mis-read, the multi-level requisition caught late, and the no-range postings triangulated - with the wrong turns left in so you can follow along on your own list.

Most ranking advice stops at "trust the lower number." That is not wrong, but it is not a method. The method is arithmetic plus a few documented tells, applied row by row.

Why posted ranges mislead a batch read

A posted range is not a scale of negotiating room from stingy to generous. It is a legal and recruiting artifact, and reading it as an offer forecast is where most batch triage goes wrong. The cleanest statement of the problem: a range of 70,000 to 95,000 usually means the company would pay 70,000 at minimum qualifications and 95,000 for someone at the top of the band, not that there is 25,000 of headroom waiting for you.

Two forces pull the range wider than any single offer. The first is compliance. Good-faith pay-transparency laws penalize paying below the posted minimum, so employers anchor the floor low to protect against a future "you paid me under the posted range" claim. The top, by contrast, commits them to almost nothing. The second is sourcing: a single requisition can genuinely be hunting across two levels, and the band has to stretch to cover both.

The posted bottom is a legal shield, not an offer floor, and the posted top is a ceiling someone already reached.

The upshot for a batch: you cannot rank by posted number. You rank by a floor you compute. The rest of this guide is how to compute it, fast, across 30-plus postings, and how to catch the rows that will lie to you.

The spread math, and the one formula that matters

Range spread is (maximum - minimum) / minimum, expressed as a percent. That single number tells you whether a posting plausibly describes one level or is covering more. Published compensation sources are unanimous on the formula and close to unanimous on where a normal single-level band sits.

Here is the benchmark that anchors every judgment that follows.

Role typeTypical single-level spread
Hourly / non-exempt30-40%
Professional / managerial40-60%
Executive60-70%

Different authorities frame the center slightly differently: one house build uses minimum at 80 to 85 percent of midpoint and maximum at 115 to 120 percent, which yields roughly 40 to 50 percent spread. Another cites traditional spreads of 40 to 60 percent. The practical takeaway is stable: for a named professional level, a spread well under 50 percent is plausibly one level, and a spread climbing past 60 percent needs an explanation.

Work the arithmetic on a real example. A posting at 75,000 to 145,000 computes to (145,000 - 75,000) / 75,000, which is 93 percent. That is nearly double the top of a normal professional band. It is not a generous employer; it is a band covering multiple levels, or padding, or both.

93%
Spread on a 75K to 145K posting, by (max - min) / min
Nearly double the top of a normal professional single-level band, so the range is covering more than one level or is padded.

A worked batch, from raw ranges to tags

Walk one batch the whole way. Say you have 32 postings. After normalizing them into a sheet, five representative rows look like this, and they cover every fork you will hit.

PostingPosted rangeSpreadTitle has level word?First tag
A95K-125K32%Yes (Senior)Single-level
B75K-145K93%NoWide
C110K-135K23%Yes (Staff)Single-level
D90K-170K89%NoWide
E(none)n/aYesTriangulate

Posting A is the easy one. A 32 percent spread with a level word in the title is a single named level. Its minimum is a real floor you can reason about. Posting C is similar: 23 percent is tight, the title says Staff, so the band describes one grade.

Postings B and D are the ones that cost people applications. Both have spreads near 90 percent and neither title carries a level word. At this point in the read, the temptation is to tag both as padding and either skip them or anchor on the bottom. That is a wrong turn, and the next section is where I caught it.

One posting from range to tag

  1. Normalize
    Record min, max, title, location, YOE in one row
  2. Spread
    Compute (max - min) / min as a percent
  3. Classify
    Tag single-level under ~50% or wide above
  4. Check JD
    For wide rows, look for broad YOE span and level-less title
Every ranged posting runs the same four-stage read before it earns a floor estimate.

The padded-top mis-read

The first instinct with posting B (75K to 145K, 93 percent spread) was to read the 145K top as the "real" number the company would stretch to for a strong candidate, and to rank the posting near the top of the batch. That is the trap named in the failure modes: treating the top as reachable. The max reflects a candidate already agreed to that number at the top of the band, not negotiation headroom held in reserve for you.

The correction is penetration math, covered below. For now, the fix is a rule: never let the posted maximum enter your ranking. It is noise. You rank on the floor you compute from the bottom half of the band.

Catching the multi-level requisition

A wide range is not automatically padding. The most common honest reason a range runs wide is that one requisition is leveling across two grades. The tell is in the job description, not the number: a broad years-of-experience span (for example "5 to 15 years") paired with a title that carries no level word (no "Senior", no "Staff").

This is where posting B and posting D diverge, and where the batch reordered. Reading posting B's JD: it asks for "5 to 15 years" and the title is just "Software Engineer." That is a multi-level requisition. The 93 percent spread is a leveling decision, not deception - the company is sourcing across base and senior and will slot you to a level, then anchor the offer inside that level's slice of the band. Reading posting D's JD: it asks for "7 to 9 years" and the title is "Software Engineer" with no level word but a narrow YOE band. That narrow experience ask against an 89 percent spread is the padding tell. The width is not explained by leveling, so it is either compliance padding or cost-of-location.

Why does a level-less requisition legitimately straddle such a wide band? Because the two populations it is sourcing from are both enormous. In Refolk's index of professional profiles, there are 352,528 people in the United States with the current title "Software Engineer," and 181,653 with "Senior Software Engineer" - the senior pool is about 52 percent the size of the base-title pool. A single req that omits the level word is realistically fishing in both, which is why its range has to stretch by design.

SegmentPeople (current title)Comparison
Software Engineer, US352,528baseline
Senior Software Engineer, US181,653~52% of base-title pool
Software Engineer, UK43,765US pool ~8.1x UK

That same table carries the location lesson. The US pool is about 8.1 times the UK pool for the identical title. A single global posting has to span two labor markets priced very differently, so a chunk of an apparent range is geography, not level. Fix your location and much of the width disappears before you ever reach negotiation.

If you want to see which levels a company actually sources, and what people with your exact background currently sit at, searching Refolk's index of profiles by title, company, and tenure tells you faster than scraping self-reported benchmarks.

Converting a range to an expected floor

The expected floor for a typical hire sits in the first half of the band, not near the max. Two conventions drive this. New-hire starting salaries generally should not exceed the midpoint, leaving room for future growth. And a new-hire target compa-ratio of 85 to 95 percent is standard, which puts most starting offers below the midpoint, not at it.

You need two measures and must not confuse them. Compa-ratio is salary divided by the midpoint: 1.00 means paid exactly at the midpoint. Range penetration is (salary - minimum) / (maximum - minimum): it reads 0 percent at the floor and 100 percent at the ceiling. The same salary can read about 95 percent compa-ratio and about 33 percent penetration, so decide which one drives your ranking and label it.

ZoneCompa-ratioRange penetrationWho sits here
First quartile~80-90%0-25%New to grade, learning
Midpoint1.0050%Fully proficient / market rate
New-hire ceilingup to 1.00up to 50%Standard new-hire cap

Apply it to posting A (95K to 125K, a clean single level). Midpoint is 110K. New-hire convention caps a typical offer at the midpoint, so your expected floor is roughly 95K to 110K depending on how your experience reads against the grade. If you are new to this grade, anchor nearer the first quartile, around 95K to 103K. If you are fully proficient, nearer 110K.

Now posting B, the multi-level req (75K to 145K). You cannot convert the whole band - it spans two levels. Convert only the slice for the level you would land. If you read as senior, estimate the senior sub-band (say the top third, roughly 115K to 145K) and then apply the new-hire cap inside that slice, landing your floor around 120K to 130K. If you would land base level, the relevant slice is the bottom, and your floor is far lower. This is why the multi-level flag reorders the batch: posting B is either excellent or mediocre depending entirely on your level, and you must decide which before it can be ranked.

Triangulating a posting with no range

When no range is posted, build a floor from three to five independent sources, not one. The discipline that matters most is filtering: use only data points from the last 12 months, your exact job title, and your specific location. Thin or stale data is how triangulation goes wrong.

Posting E had no range. Here is the triangulation run, source by source, for a Senior Software Engineer role in a named metro.

  • Crowdsourced tech comp by company and level gave verified base, equity, and bonus breakdowns for that company at that level.
  • Public H-1B wage filings by employer gave a legally filed base figure for the same title at the same company.
  • General self-reported benchmarks gave a wider, noisier range for the metro.
  • Government wage data gave an occupation-and-area median as a sanity floor.
  • The company's own transparent postings for adjacent roles (same level, different team) gave a band the employer actually committed to.

Three of those agreed within a tight window; the self-reported benchmark was the outlier and got down-weighted. The derived floor was the low end of the tight cluster, treated exactly like a computed minimum from a posted range and then run through the same new-hire penetration cap.

No-range triangulation worksheet
Posting: [company + title]
Location fixed to: [metro]
Title matched exactly: [yes/no]
Window: last 12 months only

Source 1 (verified comp by level): base = ____
Source 2 (H-1B wage filing): base = ____
Source 3 (self-reported benchmark): range = ____ to ____
Source 4 (government wage data): area median = ____
Source 5 (employer's adjacent posting): band = ____ to ____

Agreement cluster: ____ to ____
Outliers down-weighted: ____
Derived floor (low end of cluster): ____

Fill one block per no-range posting. Require at least three filled source lines before you trust the floor.

Refolk removes most of the friction in that first and fifth row: it tailors each application to the posting and scores how well your history actually fits the level the req is sourcing for, which is the judgment that triangulation is ultimately feeding. Refolk writes your resume from your own history and tailors it per posting, so the floor work and the application work use the same read of the role.

The procedure, start to finish

Run these seven steps on your own batch. Budget about two hours for 30 postings the first time, less once the sheet is built.

Batch read, raw ranges to ranked apply order

  1. Collect and normalize the batch
    Put every posting in one sheet with min, max, title, location, and YOE requirement. Where no range exists, leave the number cells blank and flag the row for triangulation. Done when all rows are filled or flagged.
  2. Compute spread for each
    Calculate (max - min) / min as a percent in its own column for every ranged row. The formula is uncontested, so apply it mechanically. Done when every ranged row shows a spread.
  3. Classify by spread band
    Tag single-level-plausible under about 50 percent and wide above. Treat the 40 to 60 percent overlap as a judgment band, not a hard line. Done when every row carries a tag.
  4. Flag multi-level requisitions
    For each wide posting, read the JD for a broad YOE span and a level-less title. If both appear, re-tag as multi-level rather than padding. Done when every wide posting is marked padding or multi-level.
  5. Convert each range to an expected floor
    Estimate the offer point at minimum to midpoint, meaning 0 to 50 percent penetration. For multi-level reqs, convert only the slice for the level you would land. Record your anchor. Done when every ranged row has a floor.
  6. Triangulate no-range postings
    Build a floor from three or more independent sources filtered to the last 12 months, exact title, and fixed location. Done when each flagged row has a sourced floor.
  7. Rank apply order
    Sort postings by expected floor against your walk-away number, annotating multi-level reqs for leveling risk. Cut anything below your walk-away. Done when you have an ordered list to work top-down.

How 32 postings narrow to an apply order

  1. Postings collected
    32

    raw batch

  2. Ranged postings
    27

    five flagged for triangulation

  3. Clear walk-away floor
    19

    after penetration math

  4. Prioritized to apply
    12

    top-ranked by floor and leveling risk

Each stage removes postings that cannot clear your walk-away number once the real floor is computed.

How this goes wrong

The failure modes below are the heart of this method. Each has a false positive that will cost you applications and a specific check that catches it.

  • Reading the bottom as your expected floor. You rank a posting high because its minimum looks healthy. If spread exceeds about 50 percent, the bottom is likely a compliance anchor nobody is offered. Check: the bottom means minimum qualifications, not typical hires.
  • Treating the top as reachable. You expect the max as negotiation headroom. It reflects a candidate already at the top of the band. Check: estimate penetration of a typical hire at 0 to 50 percent, never 100 percent.
  • Missing a multi-level requisition. You expect mid-band pay and get leveled to the bottom. Check the JD for a wide YOE span and a title with no level word, then convert only the slice for your level.
  • Mistaking cost-of-location width for a single-role band. A remote or multi-state posting stretches to cover several markets. Check whether it is multi-state, then fix your geography; the range narrows once your location is set.
  • Triangulating from one source. Thin coverage skews, especially for non-tech or obscure employers where crowdsourced data has gaps. Check: require three or more sources filtered to the last 12 months and exact title.
  • Using survey quartiles as if they were a posted range. Lifting a salary survey's first quartile as the minimum and third as the maximum mixes two different objects and will mislead your floor math. Check: a posted range and a survey distribution are not interchangeable.
  • Confusing compa-ratio with penetration. The same salary can read about 95 percent compa-ratio yet about 33 percent penetration. Using the wrong one misranks postings. Check: compute both and label which drives your decision.

Use this grid to decide what a wide posting is actually telling you.

Reading a wide posting by JD signals

Title has a level wordTitle has no level word
Likely padding or location width
Discount the top, anchor near the computed floor
Single level, wide by design
Rare; verify location, then convert normally
Multi-level requisition
Convert only the slice for the level you would land
Cross-level with a stated level
Treat as the stated level; width is likely location
Narrow YOE spanBroad YOE span
Where a wide-spread posting falls on YOE span and title level tells you whether to convert a slice or discount the width.

Keeping the batch read current

Padding is legal and will persist, so this skill does not expire. No US statute sets a maximum range width; good faith is enforced only through reasonableness, meaning the salary range the employer honestly believes at the time of the advertisement they are willing to pay. Ranges cannot be open-ended at top or bottom under laws like those in NYC and Colorado, but width itself is uncapped. Expect more wide ranges over time, not fewer: coverage keeps expanding, with Virginia becoming the thirteenth state to require posted ranges when its law takes effect July 1, 2026.

Re-check two things rather than memorizing values. First, which states require posted ranges where you are applying, since a posting with no range may simply be in a jurisdiction that does not mandate one - that changes whether a blank is a red flag or a normal gap to triangulate. Second, your own walk-away number, which moves with your situation and resets the whole ranking.

Before you call a batch done, run this checklist.

Before you commit your applications

  • Every ranged posting has a spread computed as (max - min) / min
  • Every posting is tagged single-level, wide-padding, multi-level, or no-range
  • Every wide posting was checked against its JD for YOE span and level word
  • Every multi-level req is converted on the slice for the level you would land, not the whole band
  • No ranking uses the posted maximum as a target
  • Every no-range posting has a floor from three or more sources, last 12 months, exact title, fixed location
  • You recorded whether you anchored new-hire pay at first quartile or midpoint
  • Postings below your walk-away number are cut, and multi-level reqs are annotated for leveling risk

Work the ranked list top-down. The postings at the top are the ones whose real floor clears your walk-away with the least leveling risk, and that is where a finite stack of applications should go first.

Questions job seekers ask

How do I calculate the spread of a salary range?

Use (maximum - minimum) / minimum, then multiply by 100 for a percent. A posting of 100,000 to 145,000 is (145,000 - 100,000) / 100,000 = 45 percent. This is the formula published comp sources agree on, and it is the first thing to compute for every ranged posting in your batch before you rank anything.

Should I trust the bottom of a salary range?

No, but not for the reason most people think. The posted bottom is usually a legal floor set deliberately low, because good-faith pay-transparency laws penalize paying below the posted minimum. Treat it as the compliance shield it is. Your expected floor as a typical hire sits above the minimum, roughly at minimum plus 25 to 50 percent of the width, not at the bottom itself.

What does a wide salary range mean?

Documented causes are compliance padding, one requisition spanning multiple levels, cost-of-location differences across a multi-state posting, and unfinished budget planning. The observable tells differ: a level-less title with a broad YOE span points to multi-level; a remote or multi-state posting points to location width. A spread well above 50 percent for a single named level is arithmetically hard to justify.

No salary range is posted. How do I estimate it?

Cross-reference at least three to five independent sources, filtered to the last 12 months, your exact job title, and your specific location. Useful layers include verified crowdsourced tech comp by company and level, public H-1B wage filings by employer, general self-reported benchmarks, government wage data, and the company's own transparent postings for adjacent roles. Never triangulate from a single source.

How far below the posted max will a real offer land?

The top reflects a candidate already at the top of the band, not negotiation headroom. New-hire starting pay generally should not exceed the midpoint, so a typical offer clears only the first half of the range, around zero to 50 percent range penetration. No single published percentage universally quantifies the gap below max, so estimate it from the midpoint cap rather than anchoring near the ceiling.

Is there a legal limit on how wide a salary range can be?

No US statute sets a maximum range width. The standard is good faith, enforced through reasonableness: the range the employer honestly believes they are willing to pay the successful applicant. Ranges cannot be open-ended at top or bottom under laws like those in NYC and Colorado, but width itself is uncapped, which is why padding is legal and likely to persist.

Put this to work

Paste your career in once. Every application after that is written for you.

Drop a resume or a LinkedIn URL. I rank the live openings against it, rewrite the resume and write a cover letter for the best of them, and fill in the employer's form when you press the button. You read, you decide what goes out.

  1. 01Drop your resume

    A PDF or a LinkedIn URL. About a minute, once.

  2. 02I rank the openings

    Every weekday morning, the live catalog scored against your history. Up to 20 worth your time, not two hundred links.

  3. 03Each one is written up

    Resume rewritten for the posting, a cover letter, a fit score. Press send, or let me fill in the form.

  • New matches ranked and written before you are up.
  • Every bullet stays inside what your history supports. Nothing invented.
  • Queued, submitted, interviewing, offer: one screen, not a spreadsheet.

500 free credits on sign-up. No card. Nothing is sent until you say so.

Read next