Payscale API: the compensation API you can read about but not sign up for
Payscale has exactly one documented API - Jobalyzer, a compensation-report service - and the docs never tell you how to get a key, because credentials come with a Payscale commercial relationship. Here is what the API actually does: OAuth client-credentials auth, report endpoints for pay, experience, skills and education impact, a Bayesian model over 60 million crowdsourced profiles, and metered per-report charges. And the ceilings that matter - eight countries, no bulk access, no employer dimension - plus the advertised-pay route when what you need is salary data as data.
Dvir Atias
Founder, JobsPipe
Search for “payscale api” and the results are a vacuum: API directories with empty provider pages, a couple of scrapers on Apify, and one documentation site - developers.payscale.com - that describes a service called Jobalyzer in real technical detail without ever telling you how to sign up. That picture is accurate. Payscale has exactly one documented API, it is live and it is real, but the credentials arrive through a Payscale commercial relationship, not a registration form. Here is what Jobalyzer actually does, what the integration list on the marketing site really means, and what to reach for when the thing you need is salary data as data.
What Payscale sells, and where the data comes from
Payscale is a compensation-management vendor. Its products - the Payfactors platform and the newer Payscale Ascent - exist for HR and compensation teams deciding what to pay their own employees. The data underneath is Payscale’s crowdsourced online salary survey: employee-reported pay profiles, which the developer docs quantify as “over 60 million current pay records” growing by more than 200,000 new profiles a month, feeding a “proprietary parametric Bayesian model”. Hold on to that sentence, because it defines everything the API can and cannot do: every answer is a modeled estimate built from self-reported profiles, not an observed market price.
Jobalyzer, the one documented API
Jobalyzer is Payscale’s HTTP REST service for generating compensation reports. Authentication is OAuth 2.0 client credentials: you post your client_id and client_secret to the token endpoint on accounts.payscale.com with grant_type=client_credentials and scope jobalyzer, then send the bearer token to the reports endpoint. A report request, translated from the documented Python quickstart:
curl -X POST "https://jobalyzer.payscale.com/jobalyzer/v2/reports" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"customerId": "your-client-id",
"user": "your-client-id",
"AutoResolveJobTitle": true,
"requestedReports": ["pay", "yoe"],
"answers": {
"JobTitle": "Software Developer",
"Country": "United States"
}
}'The pay report returns modeled base, bonus and total cash compensation for the job profile you describe; yoe models pay against years of experience. Separate v1 endpoints score how individual factors move pay: /jobalyzer/v1/impact/skills, /jobalyzer/v1/impact/certs and /jobalyzer/v1/impact/education, plus autocomplete and job-title matching helpers so your inputs resolve to titles the model knows. Usage is metered: the documentation has whole sections on report charges and viewing usage, and every generated report draws down an account allocation.
How access actually works
The quickstart’s first step assumes you already hold a client id and secret. Nowhere on the documentation site is there a signup form, a pricing page or an application process - the troubleshooting section simply discusses what an invalid client looks like. Access to Jobalyzer is something you negotiate with Payscale. The same reading applies to the API integrations Payscale announces for Oracle, SAP SuccessFactors, Gusto, Humi, Paylocity, ADP, BambooHR, UKG, Remote, Namely and Dayforce: those are pipes that flow a customer’s employee data into the Payfactors platform - the announcement’s call to action is “Already a customer? Reach out to your Payscale representative” - not a data API out of it.
What the model answers, and the edges
The documentation is refreshingly specific about scope. The compensation model is built for eight countries: the US, Canada, Australia, New Zealand, South Africa, the UK, Ireland and India. Each report is generated from the best 45 matching profiles, using submissions as recent as the previous day but reaching back as far as two years when data on a title is sparse. Those are sensible choices for the product it is - and they draw hard edges:
- Estimates, not observations. A report is a Bayesian point estimate for a job profile. You never see underlying records, distributions you can re-cut, or sample sizes beyond the rating the report carries.
- No bulk shape. One report per job profile per charge. Pricing a whole taxonomy of titles across cities means per-report economics multiplied out - there is no dataset product behind the API.
- No employer dimension, no postings. Jobalyzer prices a title in a place. It cannot tell you what any specific company is offering, and it has no connection to actual open roles.
- Eight countries. Everywhere else, the model simply does not exist.
The scrapers filling the rest of the search results inherit all of this: scraping payscale.com pages gets you the same modeled numbers a report contains, minus the license, plus the fragility of parsing a compensation vendor’s web pages.
Advertised pay, when you need salary data as data
A survey model answers the compensation team’s question: what should we pay? Products, analysts and sourcing tools usually arrive with a different one: what are employers offering right now, for this role, this skill, this city? That question belongs to advertised data - and pay-transparency laws have made it answerable. Of the 2.9 million active postings in the JobsPipe index today, 928,737 - 32% - advertise pay that we parse into structured fields. In the US the laws bite harder: 801,652 of 1,582,685 active US postings state pay, just over half. Pricing a role from what employers advertise this month is one call:
curl https://api.jobspipe.dev/v1/jobs/search \
-H "Authorization: Bearer jp_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"job_title_or": ["Data Engineer"],
"job_country_code_or": ["US"],
"posted_at_max_age_days": 30
}'Each record carries salary_currency, min_annual_salary_usd, max_annual_salary_usd and avg_annual_salary_usd, normalized to annual USD, on top of the posting itself - title, company, location, full description. Cut the market by skills_or, occupation_code_or for ISCO-08 occupations, or isic_division_or for industries. The free tier is 1,000 jobs a month, no card required. For how the whole salary-data market fits together, the salary data API guide compares the real options, the salary datasets guide covers bulk sources, and the Levels.fyi API guide covers the other big self-reported source and its access story.
Which route fits
- Setting pay bands as an HR or comp team. Payscale’s products - that is precisely what they are for, and Jobalyzer is how customers pull those reports programmatically.
- Compensation reports inside your own HR product. A Jobalyzer partnership conversation with Payscale, priced per report.
- Verified big-tech compensation with equity. Levels.fyi, whose access model we cover separately.
- Market-wide advertised pay by role, skill or city, fresh this week. Live postings data - the class built for products, analytics and agents.
Price any role from what employers advertise - 900k+ live postings with parsed pay, free tier included.
Get a free API key