The rules
- Every number on these pages is read from a stored statistic. Nothing is typed in by hand, and each chart can show its own table and calculation.
- Every claim carries its sample size, written as n.
- A number that rests on too few postings is hidden and labelled "not enough data", with the n it would have had. It is never shown as zero.
- Postings we could not classify are kept as their own row, "Not determined". They are never dropped from a chart.
- Trends use fixed sets of employers and print the date their record starts.
The sample
The pay statistics cover 64,604 job postings, one row per posting. A posting is in the sample when the employer's own job board states an annual base salary in US dollars whose bottom is $100K or more, the posting is open to the public, and it passed the same checks as every listing on the site (site methodology). When a posting lists several pay ranges, we use the one with the highest floor.
So the sample is six-figure postings on the 5,255 employer boards we monitor. It is not every job, not every employer, and not what anyone is paid. Bonus, commission, equity and hourly pay are not counted.
The pay-disclosure statistics use a wider set: all 625,931 open postings on those boards, whatever they pay. A posting "discloses" when any pay figure appears on it, hourly included. A disclosure rate is not a legal compliance rate: laws differ in scope, exemptions and dates, and we do not judge any posting against a law.
What a median means here
The median floor ($147K right now) is the middle floor among six-figure postings. Because every posting starts at $100K or more, the median describes the upper part of the market only.
The cut matters most for junior roles. Right now the median floor for mid-level postings is $131,250 (n=1,320) and for entry-level postings $130K (n=726). Most entry and mid-level jobs pay under $100K and never enter the sample; the few that do are unusual roles, often in high-paying fields. Read the seniority chart as a description of this sample, not as a career ladder.
A floor is the bottom of an advertised range. Offers can land anywhere in the range, or outside it, and postings do not show where.
Removed is not filled
"Removed" means the posting disappeared from the employer's board. It may have been filled, paused, moved or cancelled. We do not know which, so we never call it a hire.
Time on board is the number of days from when we first saw a posting to when it was removed. For postings removed in the last 7 days the median is 10.0 days (n=83,307). We started watching on Oct 6, 2026, and each board on its own first fetch, so older postings look younger than they are. It is not a time to fill.
Trends and panels
We are still adding employer boards, so raw daily totals mostly measure our own growth. Trends therefore follow a fixed panel: the employers we already watched on a given day, frozen from then on. Each trend prints its panel, the number of employers, n for every day, and the date its record starts ("tracking since").
- Panel p20261008: 448 employers, frozen on Oct 8, 2026.
- Panel p20261015: 1,932 employers, frozen on Oct 15, 2026.
- Panel p20261101: 4,398 employers, frozen on Nov 1, 2026.
A day counts only the employers whose boards were all fetched that day; an employer we could not observe is left out, never counted as zero. A series with fewer than 7 days gets no trend claim. Points are never smoothed. Days with intake events (a backlog cleared, rules changed) carry a numbered note, and a change of calculation method is marked on the chart.
Pay statistics are only tracked from Oct 24, 2026. Before that, pay data was re-evaluated in place, so earlier days cannot be rebuilt honestly.
Coverage and refresh
We monitor 5,255 approved employer boards; 99.7% had a successful fetch in the last 24 hours. Of published postings, >99.9% were re-checked within the last 8 hours.
The live statistics are recomputed about every 30 minutes, and these pages show them within 5 minutes of each run. Each night a copy of the day's values is stored as history; trends are drawn from that history.
What we do not publish, and why
- Pay changes on open postings (direction). Events before 24 Oct 2026 compared different grains; the fixed events need weeks of history.
- A named ranking of employers by pay disclosure. Held back until employers can see and correct their own numbers.
- Tech-skill pay premiums. Not in the live statistics yet; a premium also has to be measured within job family to mean anything.
- Pay trends before 24 Oct 2026. Pay data was re-evaluated in place on 8-12 Oct, so earlier days cannot be replayed honestly.
- Headcount, hires, applicants, time to fill. Job postings do not show any of these.
There is no download or API for these statistics yet. When there is, it will be linked here.
Versions
Every stored value carries its calculation version. When a formula changes the version changes, and trend charts mark the day. Changes so far:
- insights pages (2026-10-24, vw-insights-build): /insights and six topic pages read live_stat / daily_stat only; no formula changed, calculation_version stays snap-v2.
- snap-v2 (2026-10-24, vw-insights-s0): insights.daily_stat / live_stat / panel / intake_note (migration 049); statistic formulas above; salary_changed payload at posting grain; past-date disclosure rates re-aggregated from market cells as snap-v2-mkt. snap-v1 snapshot tables unchanged.
- snap-v1 grain note (2026-10-08, vw-company-entity): daily_company_snapshot grouped by company_id going forward; formulas unchanged, calculation_version not bumped because employer:company is 1:1 today.
- snap-v1 (2026-10-08): initial.
Questions or corrections: [email protected].