DEV Community

Radar Labs
Radar Labs

Posted on Originally published at sjdfi0wjvosdju9.github.io

One company, one 75,500 dollar gap between role families

The company is one company. The pay is not one number.

I keep a public dataset of job postings that actually state a salary range — right now 8,049 of them, deduplicated, from 266 employers' own hiring systems. Same dataset, one question: inside a single company, how far apart are the role families?

The answer is $75,500 of median difference between the top and bottom of the range table.

Data and ML: $237,500 median. Support and operations: $162,000.

Everything else sorts in between — engineering, product, sales, marketing, finance, design, people/recruiting, legal, security.

Why this gap is worth sitting with

Three things make it more than trivia.

It is bigger than the level gap. I also grouped these postings by job-title seniority. Titles containing "senior" or "staff" have a median of $185,791; titles with no level word at all sit at $193,500. Seniority words, as written in job ads, barely move the number — often they do not even point the right way. Role family moves it by $75,500. If you are optimising your career for pay, the discipline you pick does more work than the adjective in front of your title.

It is a range, not a promise. These are posted ranges: base salary bands the employer publishes to comply with pay-transparency law. They are not total compensation. They exclude equity, bonus, and everything else that quietly decides whether two people with the same title actually earn the same money. A $75,500 posted gap may be smaller or larger once equity is counted — the dataset cannot tell you, and any article claiming otherwise is making it up.

It compounds. A gap that size, held over a decade of raises computed as percentages of base, is not a one-time difference. It is the thing that decides whether you can buy a house.

Method, so you can distrust it properly

  • Source: employers' own ATS job boards (Greenhouse, Ashby, Lever, Workable, Recruitee and friends), fetched directly — not scraped from aggregators that republish stale listings.
  • Filter: only postings that publish an explicit salary range. That is the hard constraint, and it is why the dataset is 8,049 and not 19,000.
  • Deduplication across boards, currency normalisation, and a median computed per role family rather than an average of averages.
  • Known holes: US-heavy, base-salary-only, no equity, no cost-of-living adjustment, and role-family labels come from title keywords, so border cases (a "Solutions Engineer" in support? in sales?) are a judgement call.

What to do with it

If you are choosing between two offers at the same company, ask for the band of the role family you would actually be in, not the band of the title on the offer letter. If you are negotiating, the role-family median is a better anchor than the seniority word, because it is the number the company's own compensation team uses.

The dataset is open: salary-ranges-full.csv, one row per posting with employer, title, location, and the posted range. The role-family breakdown, with sample sizes printed on the page, is at the role pay page. Take it, quote it, argue with it — that is what it is for.

Top comments (0)