The short answer
Glassdoor no longer takes API partners. Its Help Center says, in an article updated November 26, 2024, “Glassdoor no longer supports API partnerships”, and the one use of API keys we found described there is employers connecting their Glassdoor reviews to Sprout Social. To get the reviews of any company, with the six sub-ratings, pros, cons, job title, location and the company's reply, our Glassdoor Reviews Scraper delivers them from a company link or name, with no Glassdoor account or API key. Two employers over 7 days, 220 reviews, took a 27-second run.
What Glassdoor offers today
From Glassdoor's Help Center articles Glassdoor API and Sprout Social Integration and its Research page, read on November 4, 2026:
| Option | What you get | Catch |
|---|---|---|
| API partnerships | None offered: “Glassdoor no longer supports API partnerships.” The article sends questions about Glassdoor's data to its Research page. | The article is dated November 26, 2024. It says nothing about how to apply. |
| Employer Center API keys | A key created by an Employer Administrator lets an employer “view and respond to Glassdoor reviews” from Sprout Social, per an article updated April 6, 2026. | For employers with an Employer Center account. The article describes no other use of the keys. |
| Research page | Articles and a newsletter from Glassdoor Economic Research, which describes “the latest insights and research on today’s labor market”. | The page lists articles. It names no API, dataset or request form. |
| Our Glassdoor Reviews Scraper | Every review of a company, back to the oldest (very large companies may need several runs), or only those since a date. Rating, six sub-ratings, pros, cons, job title, location, tenure, the company's reply. | Paid per review delivered. Glassdoor's terms and privacy law apply to how you use the data. |
Compare two employers over the same week
This script reads the reviews posted in the last 7 days about Amazon and Walmart and prints them side by side: the average rating, the six sub-ratings, the share who recommend the company, the share of 1 and 2 stars, and how often and how fast the company replied:
import statistics
from datetime import datetime
from decimal import Decimal
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("quarra/glassdoor-reviews-scraper").call(
run_input={
"startUrls": [
"https://www.glassdoor.com/Reviews/Amazon-Reviews-E6036.htm",
"https://www.glassdoor.com/Reviews/Walmart-Reviews-E715.htm",
],
"since": "7 days",
"maxReviewsPerCompany": 500,
},
max_total_charge_usd=Decimal("2.00"),
)
reviews = [r for r in client.dataset(run.default_dataset_id).iterate_items()
if r["type"] == "review" and r["status"] == "ok"]
def when(s):
return datetime.fromisoformat(s.replace("Z", "+00:00"))
def mean(rs, key):
values = [r[key] for r in rs if r[key] is not None]
return round(statistics.mean(values), 2) if values else None
def percent(part, whole):
return round(100 * part / whole) if whole else None
def hours_to_reply(rs):
delays = [(when(r["employerResponseDate"]) - when(r["date"])).total_seconds() / 3600
for r in rs if r["employerResponseDate"]]
return round(statistics.median(delays)) if delays else None
rows = [
("Reviews", len),
("Oldest review", lambda rs: min(r["date"] for r in rs)[:10]),
("Average rating", lambda rs: mean(rs, "rating")),
("Work/life balance", lambda rs: mean(rs, "workLifeBalanceRating")),
("Culture and values", lambda rs: mean(rs, "cultureAndValuesRating")),
("Diversity and inclusion", lambda rs: mean(rs, "diversityAndInclusionRating")),
("Career opportunities", lambda rs: mean(rs, "careerOpportunitiesRating")),
("Compensation and benefits", lambda rs: mean(rs, "compensationAndBenefitsRating")),
("Senior management", lambda rs: mean(rs, "seniorManagementRating")),
("% who recommend", lambda rs: percent(
sum(r["recommend"] == "positive" for r in rs),
sum(r["recommend"] is not None for r in rs))),
("% of 1 or 2 stars", lambda rs: percent(sum(r["rating"] <= 2 for r in rs), len(rs))),
("% with a company reply", lambda rs: percent(sum(bool(r["employerResponse"]) for r in rs), len(rs))),
("Median hours to reply", hours_to_reply),
]
companies = sorted({r["companyName"] for r in reviews})
print(f"{'':28}" + "".join(f"{c:>12}" for c in companies))
for label, fn in rows:
values = [fn([r for r in reviews if r["companyName"] == c]) for c in companies]
print(f"{label:28}" + "".join(f"{str(v):>12}" for v in values))
Tested with apify-client 3.4 on November 4, 2026: 220 reviews in a 27-second run, the output below. max_total_charge_usd keeps the run under $2.00 whatever the companies post. With apify-client 2.x, write run["defaultDatasetId"] instead of run.default_dataset_id.
| Reviews dated October 28 to November 3, 2026 | Amazon | Walmart |
|---|---|---|
| Reviews | 162 | 58 |
| Oldest review | 2026-10-28 | 2026-10-28 |
| Average rating | 3.46 | 3.38 |
| Work/life balance | 3.18 | 3.42 |
| Culture and values | 3.18 | 3.16 |
| Diversity and inclusion | 3.71 | 3.84 |
| Career opportunities | 3.68 | 3.5 |
| Compensation and benefits | 3.92 | 3.34 |
| Senior management | 3.16 | 3.16 |
| % who recommend | 59 | 55 |
| % of 1 or 2 stars | 19 | 21 |
| % with a company reply | 0 | 48 |
| Median hours to reply | None | 38 |
A few things the table does not say by itself. Among the 162 Amazon reviews delivered, none carries a company reply; among Walmart's 58, 28 do. The recommend question was left blank on 60 of Amazon's reviews and 25 of Walmart's, and the script leaves those out of the percentage. A sub-rating the reviewer skipped comes as null, never 0, and is left out of the average. Without a language set you get every language: 15 of Amazon's 162 reviews were not in English, so add "languages": ["en"] to compare English reviews only. And a week is a sample: with 58 reviews on one side, a gap of 0.08 stars is too small to read. Widen since and maxReviewsPerCompany before you conclude anything.
Only the new reviews, every day
The Actor has no watch mode: it does not remember what it delivered before. Schedule it on Apify with a window longer than the interval, and keep the review IDs you have already seen. reviewId is unique on Glassdoor and does not change between runs. This script reads the last 2 days of Walmart reviews, appends the ones it has not seen to a file and prints what is new. Run it once a day:
import json
from pathlib import Path
from apify_client import ApifyClient
SEEN = Path("seen-review-ids.json")
seen = set(json.loads(SEEN.read_text())) if SEEN.exists() else set()
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("quarra/glassdoor-reviews-scraper").call(run_input={
"startUrls": ["https://www.glassdoor.com/Reviews/Walmart-Reviews-E715.htm"],
"since": "2 days",
"maxReviewsPerCompany": 100,
})
delivered = [r for r in client.dataset(run.default_dataset_id).iterate_items()
if r["type"] == "review" and r["status"] == "ok"]
new = [r for r in delivered if r["reviewId"] not in seen]
with open("new-reviews.jsonl", "a", encoding="utf-8") as f:
for r in new:
f.write(json.dumps(r, ensure_ascii=False) + "\n")
SEEN.write_text(json.dumps(sorted(seen | {r["reviewId"] for r in delivered})))
print(len(delivered), "delivered,", len(new), "new,",
sum(r["rating"] <= 2 for r in new), "of them at 1 or 2 stars")
On November 4, 2026, two executions about 13 seconds apart. The first printed 13 delivered, 13 new, 3 of them at 1 or 2 stars. The second delivered the same 13 reviews and printed 13 delivered, 0 new, 0 of them at 1 or 2 stars. Both runs were charged for their 13 reviews, $0.06 each on the Free plan, because a review is charged every time it is delivered. At that rate a daily schedule costs about $1.83 a month on the Free plan. A window of 1 day would cost less but leaves no margin when a run is late or fails. If a company posts more than maxReviewsPerCompany reviews in the window, the newest are kept and the run says so in its status: raise the number.
Whole history
Leave since out, leave maxReviewsPerCompany empty and raise maxItems, which is 1,000 by default for all companies together, to read a company back to its first review:
{
"startUrls": ["https://www.glassdoor.com/Reviews/MOD-Pizza-Reviews-E366264.htm"],
"maxItems": 5000
}
On November 4, 2026, this input read MOD Pizza from its newest review back to its oldest, dated July 14, 2014: 1,795 reviews in 17 seconds, 1,795 distinct review IDs, and the same 1,795 as the company's review count in the run summary. Reading it in full costs $7.72 on the Free plan and $7.36 on Business.
Limits
- No reviewer name, profile or ID. Names and signatures in the company's replies are removed by a name-recognition step that is good but not perfect, so treat a reply as text that may still hold a name.
- Reviews only: no salaries, interview reports or job listings.
- Dates are delivered in UTC. Glassdoor gives review times without a time zone; the Actor converts them to UTC from US Pacific time, which is our measurement, not a Glassdoor statement.
- A company given by name works when exactly one company has that name. With several matches you get a free error record that lists them, and you then use the link.
- Glassdoor sorts reviews in seven languages (
en,fr,de,nl,pt,es,it). The very few written in another language come withlanguageset tonull. - A single rating filter is applied by Glassdoor itself. Several ratings and the
keywordsfilter are applied by the Actor, so a rare word on a large company means reading many pages. Reviews that do not match are not charged; bound the reading withsinceormaxReviewsPerCompany. - A date far in the past on a very large company is looked up in each language and can cost more than one run can cover. The run says so; pick one or two languages.
- If Glassdoor limits access during a run, the run says so in its status and keeps what it delivered. Running it again later gives the rest.
- Glassdoor's terms and privacy law apply to how you use the data.
What it costs
| Apify plan | Per 1,000 reviews |
|---|---|
| Free | $4.30 |
| Starter | $4.30 |
| Scale | $4.20 |
| Business and above | $4.10 |
Plus $0.005 per run start at the default memory. The 220 reviews of the comparison cost $0.95 on the Free plan and $0.91 on Business. Reviews outside your filters, a review given more than once in the same run and error records are not charged.
Questions
Does Glassdoor have an API?
Not one you can apply to. Its Help Center article “Glassdoor API”, updated November 26, 2024, says “Glassdoor no longer supports API partnerships.” Employers can create API keys in the Employer Center to connect Sprout Social, per an article updated April 6, 2026.
How do I get all the reviews of a company?
Give the Actor the company link or its name, leave Max reviews per company empty and raise Max results in total. It reads back to the oldest review: 1,795 of 1,795 for MOD Pizza on November 4, 2026.
Can I get the name of the reviewer?
No. The Actor delivers no reviewer name, profile or ID, and removes names from the company's replies. The review ID and link let you find a review on Glassdoor.
Do I need a Glassdoor account or an API key?
No. You need an Apify account and its API token.
Run it on the Apify Store
Reviews cost $4.30 per 1,000 on the Free and Starter plans ($4.20 on Scale, $4.10 on Business and above), plus $0.005 per run at the default memory. Errors and reviews outside your filters are not charged, a run that finds nothing costs only its start, and you can set a maximum cost per run.