Skip to content

Glassdoor Scraper API ​

Turn www.glassdoor.com job and company searches into structured data. Send a keyword and a city, state or country and get back one page of 30 jobs - title, company and its rating, location, pay range with currency and period, age, Easy Apply and the sponsored flag - then ask for any job to get its full description, job type, skills and the employer's profile, or search companies by location, sector, industry and rating, or ask for one company and get its profile header: links, headquarters, size, industry, description, seven ratings, review, salary and job counts and office addresses. No proxy pool, Cloudflare handling or parser maintenance on your side.

It ships as four synchronous Scraper APIs and a no-code scraper:

ProductTypeProduct codeWhat it does
Glassdoor Listing APIScraper API (synchronous)glassdoor_listingSearch jobs by keyword and location, get one page of 30 jobs.
Glassdoor Job APIScraper API (synchronous)glassdoor_jobGive one job id or job URL, get the whole job with its employer.
Glassdoor Companies APIScraper API (synchronous)glassdoor_companiesSearch companies by location, sector, industry and rating, 10 a page.
Glassdoor Company APIScraper API (synchronous)glassdoor_companyGive one employer id or company URL, get its profile header.
Glassdoor Jobs ScraperNo-code scraperglassdoorSweep up to 20 job search pages and export JSON, CSV or XML.

Every field is snake_case, the same convention as the Web Scraping API.

Locations. location takes what you would type into Glassdoor's location box: a city (New York, NY, Toronto, ON), a state (California) or a country (United States). The API asks Glassdoor's own location suggestions and uses the place named exactly as you typed it, else Glassdoor's first suggestion; the response tells you which place it used in location. US states (California, New York State) and United States are known at once; a city is looked up together with the search, so the first job search for a new spelling takes a few seconds longer, and later requests reuse it.

Glassdoor Listing API ​

GET https://api.scrapeit.io/api/v1/scrape/glassdoor/listing
x-api-key: YOUR_SCRAPEIT_API_KEY
ParameterTypeExampleDescription
qstringdata analystJob title, skill or company, up to 200 characters. Empty lists every job of the location.
locationstringNew York, NYRequired. A city, state or country, up to 120 characters.
posted_within_daysnumber7Only jobs posted in the last 1, 3, 7, 14 or 30 days.
min_salarynumber80000Lowest yearly salary in the local currency; an hourly wage counts as 2,000 hours.
max_salarynumber150000Highest yearly salary in the local currency.
job_typestringfulltimefulltime, parttime, contract, temporary or internship.
min_ratingnumber4Only jobs at companies rated 1, 2, 3 or 4 stars and up.
remote_onlybooleantrueOnly remote jobs.
easy_apply_onlybooleantrueOnly jobs you can apply to on Glassdoor itself.
pagenumber2Results page, 1–30. Defaults to 1. Page 2 and on need cursor.
cursorstringAB4AAoEA…pagination.next_cursor of the previous page; send it with page set to pagination.next_page.

Glassdoor pages its searches by cursor: ask for page 1, then pass page and cursor from its pagination to get page 2, and so on. A search lists at most 900 jobs (30 pages of 30); narrow it with filters - a salary range, posted_within_days - to reach the rest. Salary filters compare the middle of a job's yearly pay range, including Glassdoor's own estimate for jobs that show no pay.

Example request ​

bash
curl -G 'https://api.scrapeit.io/api/v1/scrape/glassdoor/listing' \
  -H 'x-api-key: YOUR_SCRAPEIT_API_KEY' \
  --data-urlencode 'q=data analyst' \
  --data-urlencode 'location=New York, NY' \
  --data-urlencode 'posted_within_days=7'
js
const response = await fetch(
  'https://api.scrapeit.io/api/v1/scrape/glassdoor/listing?' +
    new URLSearchParams({ q: 'data analyst', location: 'New York, NY', posted_within_days: '7' }),
  { headers: { 'x-api-key': 'YOUR_SCRAPEIT_API_KEY' } },
);
const { data } = await response.json();
for (const job of data.results)
  console.log(job.position, job.title, job.company_name, job.salary_max);
python
import requests

response = requests.get(
    "https://api.scrapeit.io/api/v1/scrape/glassdoor/listing",
    headers={"x-api-key": "YOUR_SCRAPEIT_API_KEY"},
    params={"q": "data analyst", "location": "New York, NY", "posted_within_days": 7},
    timeout=120,
)
for job in response.json()["data"]["results"]:
    print(job["position"], job["title"], job["company_name"], job["salary_max"])

Listing response ​

json
{
  "data": {
    "query": "",
    "location": { "id": 2280, "type": "state", "name": "California, US" },
    "search_url": "https://www.glassdoor.com/Job/california-jobs-SRCH_IL.0,10_IS2280.htm",
    "total_results": 643409,
    "results": [
      {
        "position": 1,
        "job_id": "1010208580432",
        "title": "Substitute Program Leader",
        "url": "https://www.glassdoor.com/job-listing/substitute-program-leader-think-together-JV_IC1147149_KO0,25_KE26,40.htm?jl=1010208580432",
        "company_name": "Think Together",
        "company_id": 399340,
        "company_rating": 3.2,
        "company_logo_url": "https://media.glassdoor.com/sql/399340/think-together-squarelogo-1504717966337.png",
        "location": "Twentynine Palms, CA",
        "salary_min": 21,
        "salary_median": 21,
        "salary_max": 21,
        "salary_currency": "USD",
        "salary_period": "HOURLY",
        "salary_source": "EMPLOYER_PROVIDED",
        "age_in_days": 77,
        "easy_apply": true,
        "is_sponsored": true,
        "description_snippet": "Provide homework assistance, academic enrichment and physical activity, using curriculum and materials provided by the program. Provide a clear TB test.",
        "attributes": ["Tutoring", "Part-time", "Hourly pay", "High school diploma or GED"]
      }
    ],
    "pagination": {
      "current_page": 1,
      "next_page": 2,
      "next_cursor": "AB4AAoEAPAAAAAAAAAAAAAAAAmVc9uQAcAEB…"
    }
  }
}
FieldDescription
locationThe place the search ran for: its Glassdoor id, city, state or country, and its name.
total_resultsHow many jobs Glassdoor counts for the search (it lists at most 900 of them).
results[].job_id, urlThe Glassdoor job id and the job page.
company_name, company_id, company_ratingThe company as Glassdoor shows it; a posting without a Glassdoor profile has no id and no rating.
salary_min, salary_median, salary_maxThe pay range in salary_currency per salary_period (HOURLY, MONTHLY, ANNUAL and a few more); all null for a job without pay.
salary_sourceEMPLOYER_PROVIDED, or Glassdoor's own estimate.
age_in_days, easy_apply, is_sponsoredDays since posting, whether it applies on Glassdoor, whether the employer pays for the placement.
description_snippet, attributesThe opening lines of the description, and the skills, requirements and benefits Glassdoor extracted from it.

Glassdoor sometimes pairs a pay amount with a period that does not match it (an "annual" 55-60 USD); such pay is returned as the site gives it.

Glassdoor Job API ​

GET https://api.scrapeit.io/api/v1/scrape/glassdoor/job
x-api-key: YOUR_SCRAPEIT_API_KEY
ParameterTypeExampleDescription
job_idstring1010178926653The Glassdoor job id - job_id of a Listing API result, or jl= of a job URL. Give it or url.
urlstringhttps://www.glassdoor.com/Job/jobs.htm?jl=1010178926653A Glassdoor job URL with jl=<id>: the job page or a search page opened on the job.
bash
curl -G 'https://api.scrapeit.io/api/v1/scrape/glassdoor/job' \
  -H 'x-api-key: YOUR_SCRAPEIT_API_KEY' \
  --data-urlencode 'job_id=1010178926653'

Job response ​

json
{
  "data": {
    "job_id": "1010178926653",
    "title": "RN Instructor - PCA/HHA Training Program (Full-Time)",
    "url": "https://www.glassdoor.com/job-listing/rn-instructor-pca-hha-training-program-full-time-special-touch-home-care-services-JV_IC1132200_KO0,48_KE49,81.htm?jl=1010178926653",
    "apply_url": "https://www.glassdoor.com/partner/jobListing.htm?pos=101&ao=1110586&tgt=APPLY_START…",
    "company_name": "Special Touch Home Care Services",
    "company_id": 1138002,
    "company_rating": 4,
    "location": "Brooklyn, NY",
    "city": "Brooklyn, NY",
    "state": "New York State",
    "country": "United States",
    "latitude": 40.65,
    "longitude": -73.95,
    "job_types": ["Full-time"],
    "salary_min": 45,
    "salary_median": 45,
    "salary_max": 45,
    "salary_currency": "USD",
    "salary_period": "HOURLY",
    "salary_source": "EMPLOYER_PROVIDED",
    "age_in_days": 133,
    "discovered_at": "2026-10-25",
    "easy_apply": true,
    "is_sponsored": true,
    "expired": false,
    "description_html": "<div><p><b>Company</b></p>\n<p>For over 40 years, Special Touch Home Care has been a leader…",
    "description_text": "Company\nFor over 40 years, Special Touch Home Care has been a leader…",
    "skills": ["Bilingual", "Writing skills", "Communication skills", "Teaching"],
    "education": [],
    "experience_years": ["1"],
    "benefits": [],
    "review_highlights": [
      { "sentence": "Excellent health care benefits.", "sentiment": "POSITIVE", "reviews_count": 2 }
    ],
    "company": {
      "company_id": 1138002,
      "name": "Special Touch Home Care Services",
      "url": "https://www.glassdoor.com/Overview/Working-at-Special-Touch-Home-Care-Services-EI_IE1138002.11,43.htm",
      "website": "https://www.specialtouchhomecare.com/",
      "headquarters": "Brooklyn, NY",
      "size": "1001 to 5000 Employees",
      "size_category": "LARGE",
      "type": "Company - Private",
      "revenue": "$25 to $100 million (USD)",
      "year_founded": 1984,
      "industry": "Health Care Services & Hospitals",
      "sector": "Healthcare",
      "ceo_name": "Evan Ostrovsky",
      "overall_rating": 4,
      "ceo_approval": 0.72,
      "recommend_to_friend": 0.73,
      "reviews_count": 6,
      "benefits_rating": 2.5
    }
  }
}

The API reads the job the way Glassdoor shows it in its job search: the search page opened on that job. company is null for a posting without a Glassdoor company profile; ceo_approval and recommend_to_friend are shares from 0 to 1. discovered_at is the day Glassdoor last found the posting, which can be later than its age suggests. A job Glassdoor no longer shows - removed, or an id that never existed - answers 404 NOT_FOUND.

Glassdoor Companies API ​

GET https://api.scrapeit.io/api/v1/scrape/glassdoor/companies
x-api-key: YOUR_SCRAPEIT_API_KEY
ParameterTypeExampleDescription
locationstringCaliforniaA city, state or country. Every company when omitted.
sectorstringManufacturingOne Glassdoor sector by name, e.g. Information Technology, Finance.
industrystringMachinery ManufacturingOne Glassdoor industry by name, narrower than a sector.
min_ratingnumber4Lowest overall rating, 1–5 in steps of 0.1.
max_ratingnumber4.4Highest overall rating, 1–5 in steps of 0.1.
pagenumber2Results page, 1–999 (10 companies each). Defaults to 1.

sector and industry take the names of Glassdoor's own filters; the Playground form lists all 25 sectors and 124 industries. A search lists at most 9,990 companies (999 pages); total_results says how many Glassdoor counts, so split a larger search by rating ranges - min_rating=4 with max_rating=4.4, min_rating=4.5 - to reach the rest.

bash
curl -G 'https://api.scrapeit.io/api/v1/scrape/glassdoor/companies' \
  -H 'x-api-key: YOUR_SCRAPEIT_API_KEY' \
  --data-urlencode 'location=California' \
  --data-urlencode 'sector=Manufacturing'

Companies response ​

json
{
  "data": {
    "location": { "id": 2280, "type": "state", "name": "California, US" },
    "sector": null,
    "industry": null,
    "total_results": 169300,
    "total_pages": 16931,
    "results": [
      {
        "position": 1,
        "company_id": 6036,
        "name": "Amazon",
        "url": "https://www.glassdoor.com/Overview/Working-at-Amazon-EI_IE6036.11,17.htm",
        "reviews_url": "https://www.glassdoor.com/Reviews/Amazon-Reviews-E6036.htm",
        "salaries_url": "https://www.glassdoor.com/Salary/Amazon-Salaries-E6036.htm",
        "locations_url": "https://www.glassdoor.com/Location/All-Amazon-Office-Locations-E6036.htm",
        "logo_url": "https://media.glassdoor.com/sql/6036/amazon-squarelogo-1552847650117.png",
        "headquarters": "Seattle, WA",
        "size_category": "GIANT",
        "size": "10000+ Employees",
        "industry": "Internet & Web Services",
        "industry_id": 200063,
        "description": "All Amazon teams and businesses, from Prime delivery to AWS, are guided by four key tenets…",
        "overall_rating": 3.5,
        "career_opportunities_rating": 3.6,
        "compensation_and_benefits_rating": 3.7,
        "culture_and_values_rating": 3.2,
        "diversity_and_inclusion_rating": 3.8,
        "senior_management_rating": 3,
        "work_life_balance_rating": 3.1,
        "reviews_count": 254336,
        "salaries_count": 538617,
        "jobs_count": 26612
      }
    ],
    "pagination": { "current_page": 1, "next_page": 2 }
  }
}

size_category is Glassdoor's size code - SMALL (1 to 50), SMALL_TO_MEDIUM (51 to 200), MEDIUM (201 to 500), MEDIUM_TO_LARGE (501 to 1000), LARGE (1001 to 5000), LARGE_TO_GIANT (5001 to 10000), GIANT (10000+) or UNKNOWN - and size is the same as Glassdoor prints it. The location is not the headquarters: a California search also lists companies headquartered elsewhere.

Glassdoor Company API ​

GET https://api.scrapeit.io/api/v1/scrape/glassdoor/company
x-api-key: YOUR_SCRAPEIT_API_KEY
ParameterTypeExampleDescription
company_idstring6036The Glassdoor employer id (6036 in …-E6036.htm). Give it or url.
urlstringhttps://www.glassdoor.com/Reviews/Amazon-Reviews-E6036.htmAny Glassdoor page of the company: Overview, Reviews, Salaries, Jobs or Locations.
bash
curl -G 'https://api.scrapeit.io/api/v1/scrape/glassdoor/company' \
  -H 'x-api-key: YOUR_SCRAPEIT_API_KEY' \
  --data-urlencode 'company_id=6036'

The response carries the company fields of a Companies API result (without position) plus offices: every office address Glassdoor lists, with office_id, address_line1, address_line2, city and region. The ratings here are those of the company's reviews block, which Glassdoor keeps apart from the set its search shows and which can differ by up to 0.3.

No-code Glassdoor Jobs Scraper ​

Prefer a dashboard run and a file? Scrapers without code → Glassdoor Jobs Scraper takes the same keyword, location and filters, sweeps up to 20 search pages and produces JSON, CSV and XML files with one record per job (the Listing API job fields above). With include_detail it also opens every job and nests the Job API fields under detail. The same job is available over HTTP with an API key (x-api-key; scope scrapers:run to start, scrapers:read to poll):

POST https://api.scrapeit.io/api/v1/scrapers/glassdoor/jobs
GET  https://api.scrapeit.io/api/v1/scrapers/glassdoor/jobs/{jobId}
ParameterTypeExampleDescription
qstringdata analystJob title, skill or company; empty lists every job of the location.
locationstringNew York, NYRequired. A city, state or country.
posted_within_daysnumber7Only jobs posted in the last 1, 3, 7, 14 or 30 days.
min_salarynumber80000Lowest yearly salary.
max_salarynumber150000Highest yearly salary.
job_typestringfulltimeJob type, as in the Listing API.
min_ratingnumber4Company rating from, as in the Listing API.
remote_onlybooleantrueOnly remote jobs.
easy_apply_onlybooleantrueOnly Easy Apply jobs.
max_pagesnumber10Search pages to sweep, 1–20. Defaults to 5; the run stops earlier at the last page.
include_detailbooleantrueAlso fetch each job and nest it under detail (the Job API fields). Defaults to false.
output_formatarray["json", "csv"]One or more of json, csv, xml. Defaults to ["json"]; an empty list is rejected.

A sweep of five pages or fewer without include_detail finishes inline and the POST already answers with the result-file ids; a larger one, or any run with include_detail, answers queued, so poll the GET endpoint until status is finished (or failed). The sweep follows Glassdoor's cursors from page to page, and a job Glassdoor repeats on a later page is written once. Each swept page is billed like one Listing API request and each job page like one Job API request; a job whose page fails keeps its search fields with detail: null and a detail_error code, and that page costs nothing. A job started with an API key runs under that key, queued or not: its pages count in the key's usage.

Errors ​

CodeHTTPMeaning
VALIDATION_ERROR400Missing or blank location; a page above 1 without cursor, or a cursor on page 1; an unknown sector, industry, job_type or posted_within_days; max_salary below min_salary; no job_id/company_id or url, both of them, a url that is not a glassdoor.com company page, or a job url without jl=.
NOT_FOUND404Glassdoor suggests no place for the location, shows no job under the job_id, or has no company under the company_id.
TARGET_BLOCKED502Every attempt drew Glassdoor's Cloudflare challenge. Retry later; the request costs nothing.

See Error codes for the shared error format.

Credits and billing ​

All four APIs bill one flat price per request under their own product code - the proxy and the page render are part of it (billing & credits). Every request is scraped live - never served from the shared cache - so the jobs and counts are current. A request Glassdoor refuses is sent again through exits in other countries at no extra charge, and looking up a typed location is part of the request. A request whose location Glassdoor knows no place for answers 404 NOT_FOUND and is billed: Glassdoor answered it.

Price per request: 15 credits, flat for the Listing and Job APIs and 30 credits, flat for the Companies and Company APIs; these are introductory prices for a new product and may change - the dashboard Pricing page always shows the current price. A no-code job pays the Listing API price per search page it fetched, and the Job API price per job with include_detail.

Limits and behavior ​

  • One Listing API request returns one page of up to 30 jobs, usually in two to four seconds; one Job API request usually takes two to ten seconds; one Companies or Company API request opens a glassdoor.com page and takes 10 to 25 seconds.
  • A job search lists at most 900 jobs and a company search at most 9,990 companies; narrow larger searches with filters.
  • total_results is Glassdoor's own count and moves from request to request; Glassdoor also counts fewer jobs for visitors outside the US. Requests go out from the US first.
  • Reviews, salaries and interviews pages are not offered; the Company API returns their counts and links.

ScrapeIt Web Scraping API documentation. Managed web scraping services: www.scrapeit.io.