Appearance
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:
| Product | Type | Product code | What it does |
|---|---|---|---|
| Glassdoor Listing API | Scraper API (synchronous) | glassdoor_listing | Search jobs by keyword and location, get one page of 30 jobs. |
| Glassdoor Job API | Scraper API (synchronous) | glassdoor_job | Give one job id or job URL, get the whole job with its employer. |
| Glassdoor Companies API | Scraper API (synchronous) | glassdoor_companies | Search companies by location, sector, industry and rating, 10 a page. |
| Glassdoor Company API | Scraper API (synchronous) | glassdoor_company | Give one employer id or company URL, get its profile header. |
| Glassdoor Jobs Scraper | No-code scraper | glassdoor | Sweep 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| Parameter | Type | Example | Description |
|---|---|---|---|
q | string | data analyst | Job title, skill or company, up to 200 characters. Empty lists every job of the location. |
location | string | New York, NY | Required. A city, state or country, up to 120 characters. |
posted_within_days | number | 7 | Only jobs posted in the last 1, 3, 7, 14 or 30 days. |
min_salary | number | 80000 | Lowest yearly salary in the local currency; an hourly wage counts as 2,000 hours. |
max_salary | number | 150000 | Highest yearly salary in the local currency. |
job_type | string | fulltime | fulltime, parttime, contract, temporary or internship. |
min_rating | number | 4 | Only jobs at companies rated 1, 2, 3 or 4 stars and up. |
remote_only | boolean | true | Only remote jobs. |
easy_apply_only | boolean | true | Only jobs you can apply to on Glassdoor itself. |
page | number | 2 | Results page, 1–30. Defaults to 1. Page 2 and on need cursor. |
cursor | string | AB4AAoEA… | 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…"
}
}
}| Field | Description |
|---|---|
location | The place the search ran for: its Glassdoor id, city, state or country, and its name. |
total_results | How many jobs Glassdoor counts for the search (it lists at most 900 of them). |
results[].job_id, url | The Glassdoor job id and the job page. |
company_name, company_id, company_rating | The company as Glassdoor shows it; a posting without a Glassdoor profile has no id and no rating. |
salary_min, salary_median, salary_max | The pay range in salary_currency per salary_period (HOURLY, MONTHLY, ANNUAL and a few more); all null for a job without pay. |
salary_source | EMPLOYER_PROVIDED, or Glassdoor's own estimate. |
age_in_days, easy_apply, is_sponsored | Days since posting, whether it applies on Glassdoor, whether the employer pays for the placement. |
description_snippet, attributes | The 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| Parameter | Type | Example | Description |
|---|---|---|---|
job_id | string | 1010178926653 | The Glassdoor job id - job_id of a Listing API result, or jl= of a job URL. Give it or url. |
url | string | https://www.glassdoor.com/Job/jobs.htm?jl=1010178926653 | A 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| Parameter | Type | Example | Description |
|---|---|---|---|
location | string | California | A city, state or country. Every company when omitted. |
sector | string | Manufacturing | One Glassdoor sector by name, e.g. Information Technology, Finance. |
industry | string | Machinery Manufacturing | One Glassdoor industry by name, narrower than a sector. |
min_rating | number | 4 | Lowest overall rating, 1–5 in steps of 0.1. |
max_rating | number | 4.4 | Highest overall rating, 1–5 in steps of 0.1. |
page | number | 2 | Results 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| Parameter | Type | Example | Description |
|---|---|---|---|
company_id | string | 6036 | The Glassdoor employer id (6036 in …-E6036.htm). Give it or url. |
url | string | https://www.glassdoor.com/Reviews/Amazon-Reviews-E6036.htm | Any 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}| Parameter | Type | Example | Description |
|---|---|---|---|
q | string | data analyst | Job title, skill or company; empty lists every job of the location. |
location | string | New York, NY | Required. A city, state or country. |
posted_within_days | number | 7 | Only jobs posted in the last 1, 3, 7, 14 or 30 days. |
min_salary | number | 80000 | Lowest yearly salary. |
max_salary | number | 150000 | Highest yearly salary. |
job_type | string | fulltime | Job type, as in the Listing API. |
min_rating | number | 4 | Company rating from, as in the Listing API. |
remote_only | boolean | true | Only remote jobs. |
easy_apply_only | boolean | true | Only Easy Apply jobs. |
max_pages | number | 10 | Search pages to sweep, 1–20. Defaults to 5; the run stops earlier at the last page. |
include_detail | boolean | true | Also fetch each job and nest it under detail (the Job API fields). Defaults to false. |
output_format | array | ["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
| Code | HTTP | Meaning |
|---|---|---|
VALIDATION_ERROR | 400 | Missing 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_FOUND | 404 | Glassdoor suggests no place for the location, shows no job under the job_id, or has no company under the company_id. |
TARGET_BLOCKED | 502 | Every 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_resultsis 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.
Related pages
- Yelp Scraper API - local business searches and pages.
- Billing & credits - credit prices and plans.
- Files & artifacts - downloading the no-code result files.
- MCP server - the
glassdoor_listing,glassdoor_job,glassdoor_companiesandglassdoor_companytools.