← Use cases

Use case

Benchmark Software Engineer Pay From Posted Salary Ranges

Posted software engineer salary ranges from 40 employers' own job boards in one run: bands by level and location, with no company list needed.

You are about to post a software engineer role, or weigh an offer for one, and you want to know what other employers are writing down for the same title this month. Salary surveys are last year’s and blended. Pay-transparency laws mean many employers now print a range on the posting itself, on their own job board. The problem is that the ranges are spread across thousands of boards, one employer at a time.

The manual way, and what it costs

Stripe's careers page listing open roles by team and location
One employer's careers page: titles, teams and locations on the list, and the pay, where an employer posts one, only inside each job.

For one or two companies you can do it by hand: open the careers page, search for software engineer, open each job, and scroll to the bottom where the pay-transparency paragraph sits. Some employers post no range at all on their board (Stripe’s 745 open roles carried none on 31 October 2026), so plenty of the clicks find nothing.

A benchmark needs dozens of employers, and you do not know in advance which ones post pay. That is hundreds of job pages to open, copy and split into minimum and maximum in a sheet, and the work starts over next quarter.

The faster way

Greenhouse, Lever, Ashby & Workday Jobs Scraper with Salaries searches the employers’ own boards for you, and you don’t need a company list.

{
  "searchAllCompanies": true,
  "titleKeywords": ["software engineer"],
  "salaryOnly": true,
  "maxTotalResults": 200,
  "maxResults": 10
}

searchAllCompanies runs the title search across about 9,400 Greenhouse and Ashby company boards, read live at run time in random order. salaryOnly keeps only jobs that post pay, and nothing else is billed. maxResults: 10 caps each employer, so one big hirer cannot fill the sample. maxTotalResults stops the run once it has enough. On 31 October 2026 this exact input, run from a customer account, returned 200 jobs from 40 employers in 15 seconds: it read 712 boards and stopped. At $1.25 per 1,000 jobs that run cost 25 cents.

What comes back

A real row from that run:

{
  "source_url": "https://job-boards.greenhouse.io/addepar1/jobs/8912699002",
  "company_name": "Addepar",
  "ats": "greenhouse",
  "detected_by": "directory",
  "title": "Full Stack Software Engineer - Alts & Data Management",
  "department": "Core Product Engineering ",
  "location": "New York, NY",
  "locations": ["Remote - United States"],
  "posted_at": "2026-10-28T16:52:45-04:00",
  "requisition_id": "R-102539",
  "salary_min": 114000,
  "salary_max": 178000,
  "salary_currency": "USD",
  "salary_interval": null,
  "salary_text": "Base Salary Range"
}
FieldExample valueMeaning
salary_min / salary_max114000 / 178000The range the employer posted; where a job posts one per location tier, the span of them
salary_currencyUSDCurrency of the range
salary_textBase Salary RangeThe employer’s own label for the range — read it, it says what the numbers are
salary_interval—Set where the board states one (Ashby: 1 YEAR); Greenhouse states it in salary_text
detected_bydirectoryThe job came from the company-board directory, not from a list you gave

Of the 200 jobs, 161 were in US dollars with a minimum of at least $30,000, which is the cut this article uses for “annual”. The median posted range ran from $155,000 to $218,900. Split by the words in the title:

Level (from the title)JobsMedian minimumMedian maximum
No level word73$140,000$200,000
”Senior” / “Sr”68$153,000$218,900
”Staff” / “Principal”20$210,000$270,000

By location, the 15 New York jobs had a median range of $160,000 to $230,000. The 72 jobs the board marks remote had a median range of $170,000 to $220,000.

What you’d do with it

Export the dataset, keep the rows that match your level and location, and take the 25th to 75th percentile of salary_max as the top of your band. source_url on every row takes you to the posting, so you can read the three closest job descriptions before writing your own. For a narrower market, add locationKeywords (["New York"]) or remoteOnly. To keep the benchmark current, schedule the same input with onlyNew on, and each run adds only postings you have not seen.

Worth knowing

A posted range is what an employer was willing to write down, not what anyone was paid, and some ranges are wide enough to be a signal in themselves: Sentry posted $155K–$400K for one senior role. Read salary_text before you average anything. Rocket Lab’s $81,000–$121,000 for a Flight Software Engineer I is labelled “Total Compensation (base and equity)”, not base pay. Sezzle posted ranges in the thousands that are not annual, which is why this article cut at $30,000. Some ranges are in other currencies: CAD, PLN, EUR and CNY all appeared in this run.

The sample is the first 40 employers the random scan reached, not a census, so a rerun reaches a different 40. The level split is a reading of title words, not a field the boards publish. Greenhouse publishes no remote flag, so remote comes from its location wording. Addepar’s row above lists “Remote - United States” only as a second location and stays unflagged.


Run it yourself: How to run Greenhouse, Lever, Ashby & Workday Jobs Scraper with Salaries walks the whole thing step by step.

For early-stage startups, which often post on Wellfound rather than their own board, Wellfound Startup Jobs Scraper & Hiring Signals returns the posted range with equity and company size; see Benchmark Startup Data Scientist Pay in San Francisco.

Last updated 2026-10-31