All scrapers

Jobs & careers

Glassdoor Salaries Scraper

glassdoor.com

97.3% Success rate
5.5s Avg response
Cloudflare Protection
1,018 calls Measured over

Glassdoor publishes salary estimates for thousands of job titles per employer, ten titles to a page, and its pages sit behind Cloudflare and turn away plain requests. A salary page's address also needs the employer's exact Glassdoor slug next to its id, so a guessed URL is a 404. A dedicated plugin endpoint takes a Glassdoor company URL, an employer id or a company name, finds the right salary page itself, and returns the rows already parsed: for each job title the base pay and the total pay at the 10th, 25th, 50th, 75th and 90th percentile, the currency, the number of salaries behind the estimate and the date of the latest report. The company comes with them - name, overall rating, logo, website, industry, sector, headquarters, size and its total salary count - with the number of job titles on file. Narrow the list with job_title, which uses Glassdoor's own job-title search, and collect up to 100 rows in one call, most-reported titles first. By default the request exits from the US, so pay is reported for the US market in US dollars.

What you can extract

  • Job title and Glassdoor job-title id for every row
  • Base pay at the 10th, 25th, 50th, 75th and 90th percentile
  • Total pay at the same percentiles, including bonus and stock where Glassdoor reports them
  • Currency, the number of salaries behind each estimate and the date of the latest report
  • Company name, overall rating, logo, website, industry, sector, headquarters, size and total salary count
  • Job-title filter through Glassdoor's own search, and the total number of job titles and pages
  • Up to 100 job titles per call, most-reported first, from a company URL, employer id or name

Dedicated endpoints

/salaries/glassdoor

Glassdoor company salaries

Salary estimates for a company given as a Glassdoor company URL, employer id or company name: a salaries array with jobTitle, jobTitleId, basePay and totalPay (P10, P25, P50, P75, P90), currency, salaryCount and mostRecent, plus companyMeta (name, rating, logo, website, industry, sector, headquarters, size, salaryCount), queryLocation, jobTitleCount and numPages. job_title narrows the list; max_results 1-100 (default 20, 10 per Glassdoor page); proxy_country defaults to a US exit.

How to scrape it

curl -X POST \
  -H "X-ScrapeUnblocker-Key: $SU_API_KEY" \
  "https://api.scrapeunblocker.com/salaries/glassdoor?company=9079&max_results=10"
import requests

resp = requests.post(
    "https://api.scrapeunblocker.com/salaries/glassdoor",
    headers={"X-ScrapeUnblocker-Key": SU_API_KEY},
    params={"company": "9079", "max_results": "10"},
)
print(resp.text)
import { ScrapeUnblockerClient } from 'scrapeunblocker';

const su = new ScrapeUnblockerClient({ apiKey: process.env.SU_API_KEY });

const results = await su.glassdoorSalaries('9079', { maxResults: 10 });
console.log(results);

Requests are POST and take their parameters in the query string. Browser rendering always happens - there is no flag to enable.

Example response

{
  "company": "Google",
  "employerId": 9079,
  "slug": "Google",
  "companyMeta": {
    "employerId": 9079,
    "name": "Google Inc.",
    "shortName": "Google",
    "overallRating": 4.4,
    "logo": "https://media.glassdoor.com/sql/9079/google-squarelogo-1441130773284.png",
    "website": "https://goo.gle/4ehVuXi",
    "industry": "Internet & Web Services",
    "sector": "Information Technology",
    "headquarters": "Mountain View, CA",
    "size": "10000+ Employees",
    "salaryCount": 191759
  },
  "queryLocation": "United States",
  "salaries": [
    {
      "jobTitle": "Software Engineer",
      "jobTitleId": 4279,
      "basePay": { "P10": 134264.84, "P25": 156158.89, "P50": 184722.83, "P75": 218511.57, "P90": 254143.41 },
      "totalPay": { "P10": 207909.08, "P25": 251388.51, "P50": 311695.65, "P75": 396273.52, "P90": 486503.67 },
      "currency": "USD",
      "salaryCount": 51173,
      "mostRecent": "2026-09-25T22:31:54.373"
    },
    {
      "jobTitle": "Senior Software Engineer",
      "jobTitleId": 17959,
      "basePay": { "P10": 173235.14, "P25": 198654.69, "P50": 231325.27, "P75": 269368.83, "P90": 308894.51 },
      "totalPay": { "P10": 304199.06, "P25": 368004.59, "P50": 457125.13, "P75": 585488.63, "P90": 722108.25 },
      "currency": "USD",
      "salaryCount": 3798,
      "mostRecent": "2026-09-16T20:10:11.273"
    }
  ],
  "resultsCollected": 10,
  "jobTitleCount": 9220,
  "numPages": 918,
  "pagesFetched": 1,
  "query": { "company": "9079", "job_title": null, "max_results": 10, "proxy_country": "us" }
}

Read the API docs

Frequently asked questions

Is it legal to scrape Glassdoor salaries?

Collecting the salary estimates Glassdoor publishes - pay ranges by job title and company - is lawful in many jurisdictions, but the rules depend on your country, the data you collect and how you use it. The estimates are aggregated from many reports and carry no individual names. ScrapeUnblocker returns the public salary data; what you collect and how you use it is your decision.

How do I scrape Glassdoor salaries without getting blocked?

Glassdoor sits behind Cloudflare and turns away plain requests. The /salaries/glassdoor plugin fetches every salary page through ScrapeUnblocker's unblocking chain, reads the salary rows from the data Glassdoor ships with the page, and fetches a page again when it comes back blocked or without its rows. In ScrapeUnblocker's benchmark it returned salaries on 97.3% of 1,018 calls with different companies, about 5.5s per call.

What data do I get for each job title?

The job title and its Glassdoor id, base pay and total pay each at the 10th, 25th, 50th (median), 75th and 90th percentile, the currency, the number of salaries behind the estimate and the date of the latest report. The response adds the company's name, overall rating, logo, website, industry, sector, headquarters, size and total salary count, the location the figures are for, the total number of job titles and pages on Glassdoor, and how many pages were fetched. A value Glassdoor does not show comes back as null.

How do I pick the company and the job titles?

Pass company as any Glassdoor company URL (overview, reviews, salaries or jobs), a numeric employer id such as 9079 for Google, or a company name, which is matched with Glassdoor's company search; a URL or id is the exact choice. The rows come most-reported first, ten per Glassdoor page, and max_results collects up to 100 in one call. job_title narrows them with Glassdoor's own job-title search, such as software engineer, and a Glassdoor salary URL for one job title works as well.

Do I need a Glassdoor account or API?

No. The plugin needs no Glassdoor account, login or API key: send a company with your ScrapeUnblocker key and get the salary rows back as JSON. You get the salary estimates Glassdoor shows visitors on its public salary pages.

How much does it cost to scrape Glassdoor salaries?

Glassdoor shows 10 job titles per salary page, and each salary page fetched is billed as one request: max_results=10 is 1 request, the default 20 is 2 and 100 is 10, and pagesFetched shows the exact number. Looking up the company from a name or id is not billed. 1 request = 1 credit, EUR 1.00 per 1,000 on pay as you go, down to about EUR 0.55 per 1,000 on the Ultimate plan. Blocks and timeouts are not billed, and the free trial includes 500 requests with no card.

Related scrapers

Start scraping this site today

Free tier included. No credit card required to test it.