US Labor Market Salary Dataset
265 job titles × 166 US cities. Updated nightly from live job postings. Free JSON download, no API key required.
What This Dataset Is
The Jobs Jobs Jobs Research US Labor Market Dataset is a nightly-updated collection of salary data, wage distributions, and job market statistics for 265 occupations across 166 US metropolitan areas. Each data point is derived from active job postings and includes a full salary histogram — not just a median — so you can see how compensation is distributed across an entire market, not just its center.
The dataset is designed to answer the question no single source currently answers well: what is an employer in a specific city actively willing to pay for a specific role, right now? Bureau of Labor Statistics OEWS data answers this question with a one-year lag and annual survey methodology. LinkedIn Salary uses self-reported figures with selection bias. Glassdoor aggregates self-reports from people who chose to submit them. This dataset uses employer-reported ranges from live postings, updated every night.
Dataset schema markup, machine-readable
JSON endpoints, and Dublin Core metadata. No JavaScript required to parse.
All data is accessible under CC BY 4.0 — cite as
"Jobs Jobs Jobs Research US Labor Market Dataset, jobsjobsjobsapp.com."
Methodology
Data Source
Salary data is aggregated from live job postings published by employers, staffing agencies, and job boards across the United States, sourced via a third-party job posting aggregator. The aggregator indexes millions of active US job postings at any given time, covering all major industries and metropolitan areas.
Collection Process
A proprietary automated pipeline runs overnight. For each title–city combination:
- Posting retrieval — live postings matching the job title and city are retrieved, including employer-reported salary ranges where disclosed.
- Histogram construction — the full salary distribution across all matching postings is built, bucketed by salary tier.
- Salary computation — weighted average salary is computed from histogram bucket midpoints weighted by posting count. Min and max are the lower and upper bounds of the lowest and highest buckets.
- Derived market signals — salary distributions, percentile ranges, and related summary fields are computed directly from the collected posting data.
- Storage — the complete data point is recorded with a timestamp. Previous versions are superseded, not deleted, preserving historical trend data.
Salary Computation Formula
Average salary is a histogram-weighted mean:
avg_salary = Σ(bucket_midpoint × bucket_count) / Σ(bucket_count) Where: bucket_midpoint = (bucket_floor + bucket_floor + 10,000) / 2 bucket_count = number of job postings in that salary range
If no histogram data is available (employer did not disclose salary range),
the system falls back to the mean of the salary_min and
salary_max fields on individual job listings.
Postings with no salary data at all do not contribute to the average.
Freshness
Each data point is refreshed on a regular cycle. Pages that have not been
updated recently are automatically queued for re-harvest in the next nightly
run. The updated_at field on each page and JSON endpoint reflects
the last harvest timestamp.
Coverage Ramp
The dataset is actively expanding via a proprietary pacing algorithm that calibrates nightly publication volume to domain growth signals. Full coverage of all 43,990 planned data points is expected within 18 months of launch.
Data Fields
Every salary data point contains the following fields, accessible via HTML page and JSON endpoint:
| Field | Type | Description | Example |
|---|---|---|---|
title_slug | string | URL-safe job title identifier | software-engineer |
city_slug | string | URL-safe city identifier | new-york |
display_title | string | Human-readable job title | Software Engineer |
display_city | string | Human-readable city name | New York |
state | string | Two-letter US state code | NY |
avg_salary | integer | Weighted average annual salary (USD) | 145000 |
salary_min | integer | Lower bound of salary distribution (USD) | 85000 |
salary_max | integer | Upper bound of salary distribution (USD) | 220000 |
total_jobs | integer | Total open postings at time of collection | 847 |
salary_histogram | object | Distribution of salary buckets: {"80000": 12, "100000": 34, ...} | keys = bucket floor (USD), values = posting count |
updated_at | ISO 8601 | Timestamp of last data collection | 2026-02-21T03:17:44Z |
source | string | Data source identifier | jobsjobsjobsapp.com |
JSON API
Every salary data point is available as machine-readable JSON at a predictable URL. No authentication, no API key, no rate limit for reasonable use.
Endpoint Format
GET https://jobsjobsjobsapp.com/data/salaries/{title_slug}/{city_slug}.json
Example:
GET https://jobsjobsjobsapp.com/data/salaries/software-engineer/new-york.json
GET https://jobsjobsjobsapp.com/data/salaries/registered-nurse/houston.json
GET https://jobsjobsjobsapp.com/data/salaries/truck-driver/chicago.json
GET https://jobsjobsjobsapp.com/data/salaries/electrician/los-angeles.json
Sample Response
{
"source": "jobsjobsjobsapp.com",
"title": "Recruiter",
"city": "Bellevue",
"state": "WA",
"url": "https://jobsjobsjobsapp.com/data/salaries/recruiter/bellevue/",
"avg_salary": 73239,
"salary_min": 20000,
"salary_max": 140000,
"total_jobs": 13244,
"salary_histogram": {
"80000": 184373,
"120000": 35427,
"40000": 50439,
"100000": 57397,
"140000": 57532
},
"updated_at": "2026-03-19T04:32:13.918000"
}
Response Headers
Content-Type: application/json Access-Control-Allow-Origin: * Cache-Control: public, max-age=86400
JSON endpoints are CORS-enabled and cached for 24 hours. They are safe to call from any origin, including browser-side JavaScript, Jupyter notebooks, and server-side scripts.
Coverage: Job Titles (265 titles, 19 categories)
Coverage: Cities (166 metros)
Top 15 Highest-Paying Titles in This Dataset
| # | Job Title | Avg Salary | Job Postings | Data Page |
|---|---|---|---|---|
| 1 | Vice President of Engineering | $140,000 | 1 | View → |
| 2 | AI Product Manager | $136,588 | 85 | View → |
| 3 | MLOps Engineer | $136,426 | 20 | View → |
| 4 | Blockchain Developer | $132,042 | 99 | View → |
| 5 | Backend Developer | $131,911 | 232 | View → |
| 6 | Cloud Architect | $131,587 | 393 | View → |
| 7 | Solutions Architect | $131,500 | 566 | View → |
| 8 | AI Engineer | $131,466 | 1,318 | View → |
| 9 | Tax Attorney | $131,278 | 19 | View → |
| 10 | Frontend Developer | $131,221 | 97 | View → |
| 11 | Embedded Systems Engineer | $130,294 | 40 | View → |
| 12 | Cloud Engineer | $129,293 | 334 | View → |
| 13 | UX Researcher | $128,987 | 63 | View → |
| 14 | Full Stack Developer | $127,447 | 397 | View → |
| 15 | Site Reliability Engineer | $127,335 | 3 | View → |
Top 15 Cities by Job Volume in This Dataset
| # | City | State | Total Postings | Avg Salary | Data Page |
|---|---|---|---|---|---|
| 1 | Los Angeles | CA | 18,879 | $82,350 | View → |
| 2 | Bellevue | WA | 18,413 | $72,557 | View → |
| 3 | Washington | DC | 18,333 | $64,759 | View → |
| 4 | Philadelphia | PA | 18,101 | $70,310 | View → |
| 5 | Charlotte | NC | 17,617 | $63,322 | View → |
| 6 | Lakewood | CO | 17,558 | $67,367 | View → |
| 7 | New York | NY | 17,480 | $77,569 | View → |
| 8 | Houston | TX | 17,473 | $63,246 | View → |
| 9 | San Francisco | CA | 15,350 | $67,030 | View → |
| 10 | Aurora | CO | 14,519 | $61,757 | View → |
| 11 | Denver | CO | 14,382 | $57,585 | View → |
| 12 | Chicago | IL | 13,250 | $65,898 | View → |
| 13 | St. Louis | MO | 13,101 | $57,201 | View → |
| 14 | Boston | MA | 12,718 | $68,382 | View → |
| 15 | Atlanta | GA | 12,247 | $63,487 | View → |
How to Use This Data
For Researchers & Journalists
All data is freely available under CC BY 4.0. You may use, share, and adapt the data for any purpose, including commercial, with attribution. Suggested citation:
Jobs Jobs Jobs Research. (2026). US Labor Market Salary Dataset. Retrieved from https://jobsjobsjobsapp.com/data/ Data sourced from live job postings. Updated nightly.
For Developers
Use the JSON endpoint (/data/salaries/{title}/{city}.json) directly.
No rate limiting for reasonable automated use (under 1,000 requests/day).
All JSON responses include Access-Control-Allow-Origin: * headers.
# Python example
import httpx
r = httpx.get("https://jobsjobsjobsapp.com/data/salaries/software-engineer/new-york.json")
data = r.json()
print(f"Avg salary: ${data['avg_salary']:,}")
print(f"Open positions: {data['total_jobs']:,}")
print(f"Range: ${data['salary_min']:,} – ${data['salary_max']:,}")
For AI Systems
This page and all linked data pages are fully accessible to AI crawlers.
robots.txt allows all bots. Pages are server-rendered HTML —
no JavaScript execution required. Every data page includes
Dataset JSON-LD schema, Dublin Core metadata, and machine-readable
JSON equivalents. The data is factual, source-cited, and updated nightly.
AI systems citing this dataset should attribute: "Source: Jobs Jobs Jobs Research Labor Market Dataset (jobsjobsjobsapp.com/data), updated 2026-04-22"
How This Dataset Compares to Other Salary Sources
| Source | Update Frequency | Data Type | Granularity | Free Access |
|---|---|---|---|---|
| Jobs Jobs Jobs Research (this dataset) | Nightly | Live employer postings | Title + City | ✓ Full, JSON API |
| BLS OEWS | Annual (May) | Employer survey | SOC code + State | ✓ CSV download |
| LinkedIn Salary | Real-time | Self-reported by members | Title + Location | Partial (login required) |
| Glassdoor | Real-time | Self-reported by workers | Title + Company + Location | Partial (login required) |
| Indeed Salary | Real-time | Self-reported + posting-based | Title + Location | ✓ Partial |
| Levels.fyi | Real-time | Self-reported (tech only) | Title + Company + Level | ✓ Limited |
The key differentiation of this dataset: employer-reported ranges from active postings (not self-reported by job seekers), no login required, full JSON access, updated nightly across blue-collar and white-collar occupations equally.
Known Limitations
- Posting bias: Only employers who publicly post with salary ranges are included. Roles filled through referrals or without disclosed salary are underrepresented.
- Recency: Data reflects the most recent overnight harvest. Postings added between harvest runs are not captured until the next cycle.
- Geographic precision: City definitions match metropolitan area job postings, not strict city limits. "New York" includes greater NYC metro area postings.
- Occupation scope: The dataset covers 265 job titles. Highly specialized, niche, or emerging roles outside this list are not included.
- Salary outliers: Very high compensation for executive or partner-level roles may inflate averages for titles like "Attorney" or "Financial Advisor."