Methodology
This report is computed directly from our job_listings table: every row the board has ever published or archived, pulled from Adzuna, USAJOBS, Reed, Arbeitnow and Remotive across the US, UK, Canada and Australia. Pending and rejected rows, which never reached a public page, are excluded.
A listing counts toward "no salary listed" when neither a minimum nor a maximum pay figure was captured from the source feed. Posting age is the number of days between the date the source feed says a role was first posted and today, for every listing in the dataset, whether it is still open or has since closed or expired. "Listed 30+ days" and "listed 60+ days" are measured the same way, across every listing we collected rather than only the ones still live today, because our own 30-day retention window archives a listing right around the point a 30-day figure would start to count it. Remote share and category mix come straight from the fields each source feed sent us.
Limitations
This is aggregated data from a handful of job feeds, not a census of the job market. The mix of sources, queries and per-country caps our fetcher runs with shapes what ends up in the dataset, and a listing that a source never sent us cannot appear in it. Figures should be read as a description of what we collected, not as a claim about hiring in general. We do not currently store how many candidate listings our own quality filter rejected before import, so that figure is left out rather than estimated.