Indeed Jobs Scraper & Company Reviews avatar

Indeed Jobs Scraper & Company Reviews

Pricing

from $4.99 / 1,000 results

Go to Apify Store
Indeed Jobs Scraper & Company Reviews

Indeed Jobs Scraper & Company Reviews

Indeed Jobs Scraper & Company Reviews — Scrape Indeed job listings and company reviews, including job titles, employers, locations, salaries, ratings, review counts, employee feedback, and company insights. Export structured data for recruitment, market research, and employer analysis.

Pricing

from $4.99 / 1,000 results

Rating

0.0

(0)

Developer

API Empire

API Empire

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Indeed Scraper — Extract Jobs, Company Reviews and Ratings as JSON

Indeed Jobs Scraper & Company Reviews pulls job listings straight from Indeed's own mobile-app API, and for every employer behind those listings, reads the public company page for the reviews staff actually wrote — full text, pros, cons, five sub-ratings, and the real star rating Indeed's job endpoint never exposes. Every row is typed, normalized JSON: no HTML, no selectors, no parsing. Reviews arrive as child rows linked to their parent job by parentId, so one run pairs a listing with the employer sentiment behind it.

🧭 What is Indeed Jobs Scraper & Company Reviews?

Indeed Jobs Scraper & Company Reviews is an Apify Actor that combines Indeed job search with Indeed employer-review extraction in a single run. It queries Indeed's mobile GraphQL endpoint for job listings — title, salary, location, employment type, description — and, once per unique employer, fetches that employer's public /cmp/<company>/reviews page for the review records plus the company's real star rating and review count. No Indeed account or login is required; every field comes from Indeed's own public mobile API and public company pages.

  • 🔍 Scrape job listings by keyword, location, radius, employment type, remote/hybrid and seniority
  • ⭐ Scrape employer reviews — full text, pros, cons, reviewer job title/location, employment status and five per-review sub-ratings
  • 📊 Read the employer's real star rating and review count, which Indeed's job endpoint never returns
  • 📦 Export as JSON, CSV or any other Apify dataset format
  • 🛡️ No proxy management required — the Actor walks a fallback ladder (direct → datacenter → residential) automatically

📊 What data does Indeed Jobs Scraper & Company Reviews collect?

Every run can return three kinds of data on the same dataset: the job listing itself, the employer's reviews, and the employer's aggregate profile and rating.

Data TypeKey FieldsJSON Field Names
Job listingstitle, salary range, location, posting date, employment typetitle, job.salary.min / job.salary.max, locationShort, job.dates.datePublished, job.jobType
Company reviewsreview text, pros, cons, reviewer job title, five sub-ratingsreview.text, review.pros, review.cons, review.reviewerJobTitle, review.subRatings
Employer profile & ratingstar rating, review count, industry, revenue, CEOcompanyRating, companyReviewsCount, company.industry, company.revenue, company.ceo.name

🛠️ Why not build this yourself?

Indeed does not currently offer a public API for job search. Its Publisher API (Job Search / Get Job) closed to new applicants in October 2022, was marked deprecated in 2023, and the public Publisher API and XML feed were retired in 2024 — both endpoints are labelled "(Deprecated)" in Indeed's own developer docs today (developer.indeed.com/docs/publisher-jobs/job-search, checked 2026-08-16). There is no public API for employer reviews either — /cmp/<company>/reviews is a server-rendered page, and the review data behind it sits behind a Cloudflare configuration keyed to the TLS fingerprint of the client making the request.

Building this yourself means reverse-engineering a private endpoint that can be rotated or revoked at any time, maintaining a TLS-fingerprint-aware HTTP client, and running a proxy fallback ladder for the pages that do get challenged. Indeed Jobs Scraper & Company Reviews already does all three, maintained centrally instead of in every team's own scraper.

👥 Why do developers and teams scrape Indeed?

For recruiters and staffing agencies

Before pitching a client or sourcing candidates for one, a staffing agency wants to know how many roles a company is actively hiring for and what its own employees say about it. A single run pairs a company's live job listings — jobId, title, salaryText, locationShort — with the same employer's reviews — review.pros, review.cons, review.subRatings.management — so a recruiter can walk into a pitch knowing both the hiring volume and the retention story behind it, instead of relying on a single star average.

For employer-brand and people-analytics teams

A star average tells an HR team nothing about why people leave. Because reviews come back as full text with five sub-ratings — workLifeBalance, payAndBenefits, jobSecurityAndAdvancement, management, cultureAndValues — an employer-brand team can group complaints by axis, track sentiment on a competitor over time, or benchmark its own companyReviewsSummary.happinessScore against a rival's, from the same dataset the job search already produced.

For labour-market researchers and analysts

Labour-market and compensation researchers can pair job.salary.min / job.salary.max and job.jobType across a metro area with the same employers' review.rating and review.subRatings.payAndBenefits — all from public listings and public review pages, no login, no paywalled panel data. Comparing posted pay against what employees say about compensation and benefits produces a dataset neither number alone could.

For AI engineers and agent builders

An agent built to answer "which companies are hiring for X, and are they good to work for" needs typed fields it can pass straight into an LLM context window or a RAG index — not HTML to parse. job, company and review blocks arrive as stable JSON keys on every row, so a tool-calling agent can filter on review.subRatings.management or job.salary.min without a parsing step in the loop.

🪜 How to scrape Indeed (step by step)

  1. Open Indeed Jobs Scraper & Company Reviews on its Apify Store page and click Start — no Indeed account is needed.
  2. Enter your job keywords (query) and a location, or paste one or more Indeed search or company URLs into urls.
  3. Turn on includeCompanyReviews and set reviewSort, reviewRatingFilter and maxReviewsPerCompany if you want the employer-review side tuned.
  4. Click Start to run the Actor.
  5. Download results as JSON, CSV or any other Apify dataset export format, or pull them straight from the Apify API.

What to do when Indeed changes its structure

Indeed Jobs Scraper & Company Reviews is maintained, and its output schema stays stable across those updates — field names and types on your end don't change when Indeed's page or API changes underneath.

⬇️ Input

All 22 input parameters, read directly from .actor/actor.json. None are required — the Actor needs either a query or at least one entry in urls to have something to search.

ParameterRequiredTypeDescriptionExample Value
includeCompanyReviewsNobooleanFetch each employer's public company page and emit its reviews as child rows. Turn this off to run as a plain job scraper. (default: true)true
maxReviewsPerCompanyNointegerUpper bound on review rows collected per employer (20 reviews per page). Large employers can have tens of thousands — Comcast alone has ~19,600 — so keep this tight unless you really want the whole archive. Set 0 to keep the star rating and skip review rows entirely. (default: 25; min: 0; max: 1000)20
reviewSortNostring (enum)Applied SERVER-SIDE by Indeed, so it decides which reviews you get first, not just their order. 'Newest' is the page default. Options: newest (Newest first, default), helpful (Most helpful first), rating_low (Lowest rated first), rating_high (Highest rated first).rating_low
reviewRatingFilterNostring (enum)Keeps only reviews in this star band. Indeed does NOT accept a star filter as a URL parameter, so this is applied client-side after fetching — pair it with 'Lowest rated first' or 'Highest rated first' so the walk reaches the band you want. Options: all, 1-2, 3, 4-5. (default: all)1-2
reviewsWorldwideNobooleanIndeed's company page defaults to reviews written in the site's own country. Leave this on to widen to every country. (default: true)true
reviewBrowserProfileNostring (enum)TLS fingerprint used for the company page. Indeed's Cloudflare configuration is fingerprint-keyed. The Actor alternates between both profiles on retry regardless of this setting — it only picks which one is tried FIRST. Options: firefox133 (default), safari17_0.firefox133
queryNostringWhat to search for — job title, skill or company name (e.g. 'Sales', 'Registered Nurse', 'Comcast'). (default: "Sales")"Registered Nurse"
locationNostringCity, state, ZIP code, or 'remote'. Leave empty to search the whole country. (default: "")"New York, NY"
countryCodeNostring (enum)Which Indeed domain to search — and which domain the company pages are read from. 56 country codes supported (us, uk, ca, au, de, … — full list below). (default: us)"us"
maxRowsNointegerHow many JOB rows to collect. Review rows are counted separately and never eat this budget. (default: 10; min: 1; max: 10000)25
radiusNostring (enum)Only applied when a location is set — ignored on a country-wide search. Options: "" (Select…), 0, 5, 10, 15, 25, 35, 50, 100 (miles/km). (default: "")"25"
jobTypeNostring (enum)Full-time, part-time, contract and internship are filtered by Indeed itself. Temporary, permanent, seasonal and freelance are matched on the listing text instead. Options: "", fulltime, parttime, contract, temporary, internship, volunteer, permanent, seasonal, freelance. (default: "")"fulltime"
remoteNostring (enum)'Remote' is applied by Indeed; 'Hybrid' is matched on the listing's own text. Options: "", remote, hybrid. (default: "")"remote"
levelNostring (enum)Matched on title/attributes/description. Indeed only exposes this reliably on the US site. Options: "", entry_level, mid_level, senior_level. (default: "")"senior_level"
fromDaysNostring (enum)Only listings posted in the last N days. Indeed will not combine this with an employment-type filter server-side — when both are set, employment type falls back to a text match. Options: 0 (No filter), 1 (Last 24h), 3, 7, 14, 30. (default: "0")"7"
sortNostring (enum)Order the job results by relevance or by posting date. Options: "", relevance, date. (default: "relevance")"date"
urlsNoarray of stringPaste Indeed search URLs (https://www.indeed.com/jobs?q=…&l=…) or company URLs (https://www.indeed.com/cmp/<company>). Each URL runs as its own search and its parameters (q, l, radius, fromage, jt, sort) win over the settings above.["https://www.indeed.com/jobs?q=sales&l=New+York%2C+NY"]
maxRowsPerUrlNointegerOptional per-URL job cap, only meaningful with two or more URLs. Leave empty so maxRows is the single ceiling. (min: 1; max: 1000; no default)50
maxJobsPerUrlNointegerSame knob as maxRowsPerUrl, kept so either name works in an API call. If both are supplied, maxRowsPerUrl wins. (min: 1; max: 1000; no default)50
enableUniqueJobsNobooleanDeduplicate job rows by Indeed job key across pages and URLs. Review rows are separately deduplicated per employer, so a second listing from the same company never re-emits its reviews. (default: true)true
includeSimilarJobsNobooleanAccepted for compatibility with the original actor's input. It has no effect: Indeed's mobile endpoint does not return 'View similar jobs' placeholder cards. (default: true)true
proxyConfigurationNoobjectCompany pages sit behind Cloudflare, so a residential proxy is strongly recommended for the review side of the run. On block, the Actor escalates automatically: direct → datacenter → residential.{ "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }

⚠️ Note: maxReviewsPerCompany is silently clamped to the 0–1000 range in code even if a larger value is submitted, and reviewRatingFilter is a client-side post-filter — Indeed's own ?frating= URL parameter is ignored server-side, so pair a narrow star band with reviewSort: rating_low or rating_high rather than newest, or the walk can page through most of a large employer's archive before it fills.

Example input:

{
"query": "Sales",
"location": "New York, NY",
"countryCode": "us",
"maxRows": 25,
"radius": "25",
"jobType": "fulltime",
"remote": "",
"level": "",
"fromDays": "7",
"sort": "date",
"urls": [],
"enableUniqueJobs": true,
"includeSimilarJobs": true,
"includeCompanyReviews": true,
"maxReviewsPerCompany": 20,
"reviewSort": "newest",
"reviewRatingFilter": "all",
"reviewsWorldwide": true,
"reviewBrowserProfile": "firefox133",
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}

Common pitfall: leaving maxReviewsPerCompany high while testing against a large employer. Comcast alone carries close to 19,600 reviews, so a high cap combined with a narrow reviewRatingFilter band can walk dozens of review pages before it fills. Start small, and pair a star-band filter with reviewSort: rating_low or rating_high so the walk reaches the band you want directly.

⬆️ Output

Every job and every review lands in the same dataset — filter on the type field ("job", "companyReview" or "reviewsUnavailable"). The Console also ships two dataset views: Jobs (the 10-column default view) and Employer reviews.

Scraped job listing (type: "job")

{
"jobId": "abcd1234efgh5678",
"title": "Sales Representative",
"normalizedTitle": null,
"companyName": "Comcast",
"locationShort": "New York, NY",
"postedText": "3 days ago",
"salaryText": "$45,000 - $65,000 a year",
"jobUrl": "https://www.indeed.com/viewjob?jk=abcd1234efgh5678",
"type": "job",
"isChild": false,
"parentId": null,
"companyRating": 3.6,
"companyReviewsCount": 19577,
"companyReviewsStatus": "ok",
"companyReviews": [ "same shape as the companyReview rows below, embedded here too" ],
"companyReviewsFetched": 20,
"companyReviewTopics": [
{ "topicId": "compensation", "name": "Pay & benefits", "rating": 3.2, "count": 4820 }
],
"companyReviewsSummary": {
"companySlug": "Comcast",
"reviewsPageUrl": "https://www.indeed.com/cmp/Comcast/reviews?fcountry=ALL",
"status": "ok",
"errorReason": null,
"ratingScore": 3.6,
"ratingCount": 19577,
"ratingSource": "comp-initialData",
"foundReviewCount": 19577,
"totalReviewCount": 19577,
"happinessScore": 62,
"happinessGrade": "C",
"reviewsCollected": 20,
"pagesFetched": 1,
"sortApplied": "newest",
"ratingBandApplied": "all",
"ratingBandIsClientSide": true,
"topics": [
{ "topicId": "compensation", "name": "Pay & benefits", "rating": 3.2, "count": 4820 }
],
"route": "cmp-html"
},
"job": {
"id": "abcd1234efgh5678",
"jobKey": "abcd1234efgh5678",
"title": "Sales Representative",
"displayTitle": "Sales Representative",
"normalizedTitle": null,
"descriptionText": "Comcast is seeking a Sales Representative to...",
"descriptionHtml": "<p>Comcast is seeking a Sales Representative to...</p>",
"jobDescription": "Comcast is seeking a Sales Representative to...",
"jobDescriptionHTML": "<p>Comcast is seeking a Sales Representative to...</p>",
"language": "en",
"locale": "en_US",
"isRemote": false,
"remoteLocation": false,
"jobType": ["Full-time"],
"shiftAndSchedule": ["Monday to Friday"],
"workingSystem": [],
"occupation": [],
"requirements": [],
"attributes": ["Full-time", "401(k) matching", "Health insurance"],
"benefits": ["401(k) matching", "Health insurance"],
"salary": {
"text": "$45,000 - $65,000 a year",
"currency": "USD",
"type": "yearly",
"min": 45000,
"max": 65000,
"weeklyMin": 865,
"weeklyMax": 1250,
"source": "EXTRACTION"
},
"hiring": {
"urgentlyHiring": false,
"highVolumeHiring": false,
"isRepost": false,
"organicApplyStarts": null,
"numOfCandidates": null
},
"dates": {
"postedText": "3 days ago",
"formattedRelativeTime": "3 days ago",
"postedToday": false,
"datePublished": "2026-08-13",
"pubDateEpoch": 1786665600000
},
"status": { "expired": false, "newJob": false, "visited": false }
},
"company": {
"name": "Comcast",
"displayName": "Comcast",
"industry": "Telecommunications",
"revenue": "$10B+ (USD)",
"numEmployees": "10,000+ employees",
"foundedYear": null,
"description": "Comcast Corporation is a global media and technology company.",
"briefDescription": "Comcast Corporation is a global media and technology company.",
"rating": { "score": 3.6, "count": 19577 },
"ceo": { "name": "Brian L. Roberts", "photoUrl": "https://media.indeed.com/...", "startDate": null },
"branding": {
"logoUrl": "https://media.indeed.com/...",
"headerUrl": "https://media.indeed.com/...",
"brandColor": "#1489CA",
"showJobBranding": false
},
"links": {
"corporateWebsite": "https://corporate.comcast.com",
"careers": null,
"facebook": null,
"instagram": null,
"twitter": null,
"indeedCompanyPage": "https://www.indeed.com/cmp/Comcast"
},
"addresses": ["1701 JFK Blvd, Philadelphia, PA 19103"],
"emails": []
},
"location": {
"countryCode": "US",
"country": "United States",
"state": "NY",
"stateName": "New York",
"city": "New York",
"postalCode": "10001",
"streetAddress": null,
"formattedShort": "New York, NY",
"formattedLong": "New York, NY 10001",
"latitude": null,
"longitude": null
},
"apply": {
"jobUrl": "https://www.indeed.com/viewjob?jk=abcd1234efgh5678",
"applyUrl": "https://www.indeed.com/applystart?jk=abcd1234efgh5678",
"originalApplyUrl": "https://www.indeed.com/applystart?jk=abcd1234efgh5678",
"thirdPartyApplyUrl": "https://www.indeed.com/applystart?jk=abcd1234efgh5678",
"indeedApplyEnabled": true
},
"sourceMeta": {
"source": "Indeed",
"feedId": null,
"fccId": null,
"scrapingInfo": { "page": 1, "index": 3 },
"rankingScores": { "bid": null, "bidPosition": null, "eApply": null, "eQualified": null }
},
"_raw": "the complete pre-transform record — mirrors every field above plus a few internal-only fields such as _mobileExtras (industry, numEmployees, ceoName, detailedSalary, trackingKey)"
}

Scraped company review (type: "companyReview")

{
"jobId": "abcd1234efgh5678",
"title": "Great benefits, tough scheduling",
"companyName": "Comcast",
"locationShort": "Philadelphia, PA",
"postedText": "August 4, 2026",
"salaryText": null,
"jobUrl": "https://www.indeed.com/cmp/Comcast/reviews/abcdef",
"type": "companyReview",
"isChild": true,
"parentId": "abcd1234efgh5678",
"parentJobUrl": "https://www.indeed.com/viewjob?jk=abcd1234efgh5678",
"companySlug": "Comcast",
"companyRating": 3.6,
"companyReviewsCount": 19577,
"reviewsPageUrl": "https://www.indeed.com/cmp/Comcast/reviews?fcountry=ALL",
"review": {
"reviewId": "3f9c2a1e8b7d4560",
"reviewUid": "3f9c2a1e8b7d4560",
"rating": 4.0,
"title": "Great benefits, tough scheduling",
"text": "Comcast offers strong health and retirement benefits, and there's real room to grow...",
"pros": "Good pay and benefits, growth opportunities",
"cons": "Scheduling can be unpredictable during peak season",
"reviewerJobTitle": "Sales Representative",
"reviewerNormalizedJobTitle": "Sales Representative",
"reviewerLocation": "Philadelphia, PA",
"reviewerCountry": "United States",
"employmentStatus": "Current employee",
"isCurrentEmployee": true,
"dateText": "August 4, 2026",
"date": "2026-08-04",
"helpfulCount": 12,
"unhelpfulCount": 1,
"url": "https://www.indeed.com/cmp/Comcast/reviews/abcdef",
"headline": "Great benefits, tough scheduling",
"reviewStatus": null,
"subRatings": {
"workLifeBalance": 3.0,
"payAndBenefits": 4.0,
"jobSecurityAndAdvancement": null,
"management": 3.0,
"cultureAndValues": 4.0
},
"companyName": "Comcast",
"companySlug": "Comcast"
}
}

A sub-rating axis the reviewer skipped is emitted as null, never 0 — Indeed itself prints 0 for a skipped axis on its own review cards, and treating that as a real one-star answer would fabricate a rating nobody gave.

Uncharged accounting row (type: "reviewsUnavailable")

When an employer's company page returns no comp-initialData (Cloudflare's soft block), the Actor pushes one accounting row per blocked employer instead of silently returning nothing:

{
"jobId": "abcd1234efgh5678",
"title": null,
"companyName": "Example Corp",
"locationShort": null,
"postedText": "",
"salaryText": null,
"jobUrl": "https://www.indeed.com/cmp/example-corp/reviews",
"type": "reviewsUnavailable",
"isChild": true,
"parentId": "abcd1234efgh5678",
"parentJobUrl": "https://www.indeed.com/viewjob?jk=abcd1234efgh5678",
"companySlug": "example-corp",
"companyReviewsStatus": "blocked",
"errorReason": "blocked",
"charged": false,
"reviewsPageUrl": "https://www.indeed.com/cmp/example-corp/reviews"
}

This row is pushed without the row_result charged event, so it is never billed. Filter it out of billed results with type != "reviewsUnavailable" (equivalently charged != false).

🆚 How does Indeed Jobs Scraper & Company Reviews compare to other Indeed scrapers?

FeatureIndeed Jobs Scraper & Company ReviewsGeneric alternative
Job listings + full review text in one run✅ reviews arrive as child rows linked to their job by parentId❌ the Indeed actors checked return either job listings with a rating number, or reviews only — never both with full text (misceres/indeed-scraper and curious_coder/indeed-scraper, observed 2026-08-16)
Per-review pros/cons and 5 sub-ratingsreview.pros, review.cons, review.subRatings.*Not documented on the job-focused Indeed actors checked (2026-08-16)
Reviews without job dataAvailable — leave includeCompanyReviews on and use urls for a company page onlyreviewly/indeed-company-reviews-scraper is reviews-only by design, no job listings (observed 2026-08-16)
Employer page fetch strategyOnce per unique employer, cached across every listing from that employer in the runNot documented on the competitors checked
Employer's real star rating on job rowscompanyRating / companyReviewsCount, read from the company page✅ curious_coder/indeed-scraper also lists "Company Rating" and "Company Review Count" among its fields (observed 2026-08-16)

If you're building an AI agent or a RAG pipeline, the output-format row is the decision-maker — parsing HTML inside an agent loop is a reliability failure mode, not a feature. Every row here, job or review, is already typed JSON.

📈 How many results can you scrape with Indeed Jobs Scraper & Company Reviews?

Job rows are capped by maxRows — default 10, minimum 1, maximum 10000 — and paginated internally through Indeed's GraphQL cursor at 100 results per page. Review rows are a separate budget: maxReviewsPerCompany defaults to 25 and is clamped between 0 and 1000 in code regardless of what is submitted. Reviews are fetched from the employer's public page in pages of 20; the Actor walks up to 60 pages per employer (1,200 reviews scanned) before slicing down to the requested cap, and up to 4× that many pages when a star-band filter (reviewRatingFilter) narrows the target — so a narrow band on a large employer can still be reached without paging the whole archive. The two budgets never share: 100 job rows from 10 companies still fetch only 10 company pages, and a company's reviews never count against maxRows.

⚠️ Employer reviews depend on a single route. Indeed's own mobile API is not entitled for the review service, so /cmp/<company>/reviews is the only source, and it sits behind a Cloudflare configuration keyed to the requester's TLS fingerprint. If Cloudflare stops honoring the two fingerprints this Actor uses, review rows return empty for every employer in that run — job rows keep flowing regardless.

🔌 Integrate Indeed Jobs Scraper & Company Reviews and automate your workflow

Indeed Jobs Scraper & Company Reviews works with any language or tool that can send an HTTP request.

REST API integration

from apify_client import ApifyClient
client = ApifyClient("<APIFY_API_TOKEN>")
run = client.actor("your-handle/indeed-jobs-scraper-and-company-reviews").call(run_input={
"query": "Sales",
"location": "New York, NY",
"maxRows": 25,
"includeCompanyReviews": True,
"maxReviewsPerCompany": 20,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
if item["type"] == "job":
print(item["title"], item["companyName"], item["companyRating"])
elif item["type"] == "companyReview":
print(" review:", item["review"]["rating"], item["review"]["pros"])

Works in Python, Node.js, Go, Ruby, cURL.

Automation platforms (n8n, Make)

Apify publishes official integration nodes for n8n and Make that can trigger any Actor run — including this one — from a workflow, and read the resulting dataset back in. Search for the Actor by name inside either platform's Apify node to wire it into a larger pipeline.

Yes, provided the data is used the way most jurisdictions treat publicly accessible information. Indeed Jobs Scraper & Company Reviews returns only publicly available data — everything comes from Indeed's own public mobile API and public company review pages, with no login and no paywalled content. Job listings are business/product data (titles, salaries, employer facts), so a terms-of-service and database-rights framing applies rather than a personal-data one — GDPR/CCPA do not attach to a job posting. Employer reviews are user-submitted opinions, but the review object carries no reviewer name, photo, email or account handle — only a job title, a general location, an employment status, and free text the reviewer chose to publish — so it does not collect direct personal identifiers either. Consult legal counsel for commercial use cases involving bulk personal data or large-scale republishing of review text.

❓ Frequently asked questions

Does Indeed Jobs Scraper & Company Reviews work without an Indeed account?

Yes. No Indeed login or account is required. Job search runs on Indeed's public mobile-app API, and employer reviews are read from Indeed's public /cmp/<company>/reviews page — both reachable without authentication.

How often is the scraped data updated?

Every run fetches live from Indeed. Job search hits the mobile GraphQL endpoint fresh each time, and each employer's company page is fetched once per run — cached only within that single run, so a second listing from the same employer doesn't refetch it. Nothing is served from a stored cache between runs.

What happens when a listing's employer has no reviews, or the review page is blocked?

The job row is unaffected either way. If the employer genuinely has no matching reviews, companyReviewsStatus is "no_reviews" and no child rows are produced. If Indeed's company page returns a Cloudflare challenge instead of comp-initialData, companyReviewsStatus is "blocked" and the Actor pushes one uncharged accounting row (type: "reviewsUnavailable") instead of billing for nothing.

Can I scrape private or login-gated Indeed content?

No. Only publicly accessible job listings and publicly accessible employer review pages are returned — there's no login flow, no session-cookie handling, and no attempt to reach anything behind Indeed's employer or candidate dashboards.

Is there a free way to try it before running it at scale?

Start with a small maxRows and maxReviewsPerCompany (the defaults are 10 and 25) to see the full row shape before committing to a larger run. Actual usage cost follows the pay-per-event pricing shown on the Actor's Apify Store page.

Does Indeed Jobs Scraper & Company Reviews work for AI agent workflows and LLM pipelines?

Yes. Every row — job or review — is typed, normalized JSON with stable field names, callable as an HTTP endpoint through the Apify API from any agent framework. There's no HTML to parse before passing a row into an LLM context window or a RAG index.

How does Indeed Jobs Scraper & Company Reviews handle Indeed's anti-bot defenses?

Job search retries transient errors with backoff and escalates through a direct → datacenter → residential proxy ladder on a 401/403/429 response. Employer reviews additionally rotate the TLS fingerprint used to fetch the company page (firefox133 / safari17_0 — Indeed's Cloudflare configuration on that endpoint is fingerprint-keyed) and retry with a fresh proxy on a soft block.

How does Indeed Jobs Scraper & Company Reviews compare to other Indeed scrapers?

Most Indeed actors on Apify do one side of this or the other — job listings with just a company rating number, or reviews with no job data at all. See the comparison table above for the specifics, observed on their Store listings 2026-08-16.

Does it return data in a format LLMs can use directly?

Yes — typed, normalized JSON with stable field names. No HTML, no selectors, no parsing step before passing a row to an LLM.

Can I use Indeed Jobs Scraper & Company Reviews without managing proxies?

Yes. The Actor resolves and rotates Apify Proxy automatically through its fallback ladder. You can still supply your own proxyConfiguration — including a specific proxy group or your own proxy URLs — if you need to.

What happens when Indeed changes its structure or blocks the scraper?

The Actor is maintained, and its output schema stays stable — field names and types on your end don't change when Indeed's page or API changes underneath.

💬 Your feedback

Found a bug, a field that stopped populating, or a company page that won't clear Indeed's challenge? We want to know — use the Actor's Issues tab on Apify or leave a review on the Store listing. Both are read and acted on.