Every salary figure on an employer page comes from real job postings on this board โ not a survey, and not a model. Here's exactly how.
We aggregate active and recently expired postings classified into a RevOps function. When a company posts a RevOps role with a salary range, that range becomes one data point โ but only when it lists both a minimum and a maximum. Postings without a published range are excluded entirely.
For a given role and seniority, we take the median of the posted minimums and the median of the posted maximums. Medians, not averages, so a handful of unusually high or low postings don't distort the range. Postings in other currencies are converted to US dollars using exchange rates before the medians are taken; the rare posting in a currency we don't track is left out rather than counted as dollars.
We only publish a figure when at least five postings back it. Below that, the number gets noisy enough to mislead, so we suppress it rather than show a range built on two or three listings. Each figure is labeled with its sample size (n) and the period it reflects.
The underlying postings update continuously as roles are crawled and expire. The figures you see are recomputed from the live set, and each page shows the date it was last reviewed.
Start from a job description template with the live salary range for the role already baked in.