Salary datasets: 8 real sources beyond the Kaggle CSVs (2026)
Most of what ranks for salary dataset is a 30-row CSV built for teaching linear regression. If you need real numbers, the useful sources are public and current: BLS OEWS, H-1B disclosure files, ONS ASHE, the Stack Overflow survey - and the newest one, live job postings, where pay transparency laws now put a stated range on a third of everything posted. Every source compared on granularity, freshness and cost, plus how to build your own salary dataset from 300,000+ postings with structured pay.
Dvir Atias
Founder, JobsPipe
Search for salary dataset and the top results are a 30-row CSV of years-of-experience against salary, built for teaching linear regression. That file has launched a million notebooks and contains nothing you can use for an actual decision. This post covers both meanings of the phrase: the practice datasets, quickly, and then the sources that hold real compensation data - what each one contains, how fresh it is, and what it costs.
The practice tier: fine for notebooks, useless for analysis
If you just need a clean numeric table for a regression exercise, Kaggle’s Salary_Data.csv variants, OpenML’s employee_salaries, and the university teaching CSVs are exactly that, and there is nothing wrong with them. Know what you are holding: a few dozen to a few thousand rows, no provenance, no collection date, often synthetic. The moment the question becomes “what does this role actually pay in this market right now”, they have nothing to say. Everything below does.
Public datasets with real salaries
Four government or survey sources publish genuine salary data you can download today, free:
- BLS OEWS (US) - the Occupational Employment and Wage Statistics program publishes employment and wage estimates for roughly 800 occupations, sliced by state and metro area. This is the canonical US salary dataset: employer-reported, methodologically serious, downloadable as spreadsheets. The catch is cadence - it updates once a year, and the estimates you download describe a reference period that is already a year old.
- H-1B LCA disclosure files (US) - the Department of Labor publishes disclosure data for every Labor Condition Application: employer name, job title, worksite and the actual offered wage. It is one of the only free datasets with real salaries attached to real company names. Bias is built in - it only covers roles hired through the visa pipeline, which skews heavily toward tech and finance.
- ONS ASHE (UK) - the Annual Survey of Hours and Earnings gives percentile earnings by occupation code, region and industry for the UK. Same trade as OEWS: rigorous, free, annual, and always at least a year behind the market.
- Eurostat SES (EU) - the Structure of Earnings Survey covers earnings across EU member states with fine demographic detail, but runs only every four years. Useful for structural comparisons between countries, not for pricing a role.
Crowdsourced and commercial sources
- Stack Overflow Developer Survey - the raw anonymized responses are downloadable as CSV, with tens of thousands of self-reported salaries attached to stacks, titles and countries. Tech-only and self-reported, but it is the best free salary dataset that knows what a programming language is.
- Levels.fyi - the reference for verified tech compensation, including equity. There is no public bulk download; you browse it or negotiate a data partnership.
- Compensation survey vendors - Mercer, Radford and Payscale sell employer-submitted survey data. This is what compensation teams actually buy, at enterprise prices, under licenses that prohibit republishing. If you are building a product rather than running an HR department, this route rarely makes sense.
The gap every survey shares
All of the above are surveys, and surveys have a shape: occupation level aggregates, a reference period a year or more in the past, and no way to cut by company, skill or week. If the question is “what are employers offering for this skill set this quarter”, a survey cannot answer it, because nobody surveyed the employers who started hiring last month.
The newest salary dataset: live job postings
Pay transparency laws changed what a job posting is. Colorado started requiring salary ranges in postings in 2021; California, Washington and New York followed; the EU Pay Transparency Directive’s transposition deadline passed in June 2026. A meaningful share of job ads now carry the number in the ad itself, which turns the world’s job postings into a continuously updating salary dataset - one with company names, job titles, locations, skills and posting dates attached.
The numbers from our own corpus, as of August 2026: of roughly 966,000 live postings, 32% state a structured salary or range. In the US, where transparency laws bite hardest, it is 53% of postings. The median advertised midpoint across US postings with an annual range sits just under $92,000. Postings-based salary data is not a census - you only see what employers disclose - but the disclosure rate is now high enough to compute honest percentiles, and it refreshes daily instead of annually. The raw strings are messy (“$180K to $240K base + equity”, “up to $240k DOE”), so we parse them into structured ranges; here is how that pipeline works.
Building your own salary dataset from postings
One request pulls live postings with pay attached. This example takes US software developer roles, filtered by ISCO-08 occupation code 2512:
curl https://api.jobspipe.dev/v1/jobs/search \
-H "Authorization: Bearer jp_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"occupation_code_or": ["2512"],
"job_country_code_or": ["US"],
"limit": 50
}'Every job in the response carries the original salary_string plus the parsed fields: salary_currency, min_annual_salary_usd, max_annual_salary_usd and avg_annual_salary_usd, normalized to annual USD so rows are comparable across countries and pay periods:
{
"title": "Senior Software Engineer",
"company": "Acme Corp",
"salary_string": "$150,000 - $190,000 a year",
"salary_currency": "USD",
"min_annual_salary_usd": 150000,
"max_annual_salary_usd": 190000,
"avg_annual_salary_usd": 170000
}Not every posting discloses pay, so drop rows where the salary fields are null and treat the rest as your sample - the same discipline any survey provider applies, just with a sample that regenerates every day. Filter by skills_or to price a skill instead of an occupation, or by company_name_or to see what a specific employer advertises. For the evaluation criteria that separate a usable feed from a liability, see our guide to salary data APIs.
If you want the aggregates without running the queries, the Labour Market Pulse publishes free monthly advertised-salary percentiles from this corpus with sample sizes shown, and our roundup of job postings datasets covers the sources for the postings themselves.
Which salary dataset should you use?
- Teaching or a demo notebook - any Kaggle CSV, and no shame in it.
- Defensible US benchmarks by occupation and metro - BLS OEWS, accepting the one-year lag.
- Real salaries at named companies, free - H-1B LCA disclosure files, accepting the visa-pipeline bias.
- Tech compensation with stack detail - Stack Overflow’s raw CSV, or Levels.fyi if you need equity and can live without bulk export.
- Current advertised pay, by skill, company or week - live postings, via the API below. The free tier is 1,000 jobs a month, enough to build a real sample.
Build a salary dataset from live postings - free tier, API key in 30 seconds.
Get a free API key