Home › Guides › Indeed Jobs Scraper

Indeed jobs with structured salary and employer rating, by keyword and location

Indeed publishes two things company career sites usually don't: a salary estimate or range and an employer rating. The Indeed Jobs Scraper reads Indeed's own search payload (not fragile HTML) and returns clean rows: the salary as structured numbers (min, max, period, currency), the employer star rating and review count, the full description (measured median ~3,700 characters), benefits, location, posting date, employment type and a direct link. No login. Across 23 country sites.

Who it's for

What you get

GroupFields
JobJob id, title, location (city/state/country), remote flag, posted & created dates, employment type, schedule, tags, snippet, apply URL
SalarysalaryText, salaryMin, salaryMax (one-sided → null), salaryPeriod, salaryCurrency
EmployercompanyName, companyRating (null when none), companyReviewCount, company URL
ContentFull description (with withDescription), benefits list (67% filled in measurement)

A one-sided range returns salaryMax: null (never Indeed's internal -1); no employer rating means null, not a misleading 0. Descriptions came back 47 of 47 in measurement.

How coverage works

Indeed hides deep pagination behind a login — page 2 of any search redirects to its sign-in screen (measured 2026-10-20 with a real browser). The Actor therefore does not page: each keyword × location pair returns up to ~45 postings, and coverage grows by adding more pairs. Want 1,000 nursing jobs in Texas? Give 25 city lines instead of one state line. No Actor can give you Indeed's full result set without an account, and this one won't pretend otherwise.

Input

InputWhat it does
queries · locationsJob titles/keywords · cities, states or regions (empty = whole country)
country · maxItemsWhich national Indeed site (23 supported) · hard cap on postings (default 100)
withDescriptionAdd the full description to every row — one bulk request per slice (default on)
postedWithinDays · remote · minSalary1/3/7/14 · any/only/exclude · keep postings whose yearly salary reaches this
{ "queries": ["registered nurse"], "locations": ["Houston, TX", "Austin, TX", "Dallas, TX"], "withDescription": true, "postedWithinDays": "7" }

Honest limits

Pricing

Pay per event: $0.005 per keyword × location search that delivered rows, $0.002 per delivered posting, and $0.004 more only when a full description is returned. A list-only run is $0.002 a posting; with descriptions, $0.006. Blocked pages, empty searches, rows without a description and filtered-out postings are free. Current prices are on the actor's Pricing tab on Apify.

Benchmark pay and spot hiring intent: Indeed jobs with structured salary, employer rating and full descriptions. Exportable to JSON, CSV or Excel.

Open the Indeed Jobs Scraper →

Related

For every open role across seven ATS platforms in one query use the Job Postings Database; for companies hiring on specific ATSs, the BambooHR Careers Scraper and the Workable Job Board Scraper; and for Google's aggregated panel, the Google Jobs Scraper.

Frequently asked questions

Why do I only get about 45 postings per keyword and location?

Indeed hides deeper pages behind a login — page 2 of a search redirects to its sign-in screen (measured 2026-10-20 with a real browser). The Actor does not page; coverage grows by slicing — more keywords, more cities, narrower postedWithinDays windows — not by raising maxItems.

Do I need an Indeed account?

No. The Actor never logs in and never asks you for credentials; it reads Indeed's own search payload through Apify's Unblocker proxy.

Why is salaryMax sometimes null when salaryText has a number?

"From $50 an hour" and "Up to $120,000 a year" are one-sided. Indeed marks the missing end with -1 internally; the Actor returns null instead of a nonsense value. A salary is published on 40 to 83% of listings depending on the query.

Why is companyRating null for some employers?

Indeed sends 0 when an employer has no rating yet; a zero would read as a one-star employer, so the Actor returns null.

How are the descriptions fetched — isn't that slow?

The Actor asks Indeed's own bulk description endpoint for every job key of a slice at once (measured 47 keys in a single request, 1.4 seconds), so turning descriptions on costs seconds, not a page per posting, and needs no login.

Using the data lawfully

The Actor reads only publicly visible job postings — no login, no candidate data. Public-data scraping is broadly lawful, but a site's terms are a separate matter: Indeed's terms restrict automated collection, so review your use case, keep volumes reasonable, and don't republish Indeed's content as your own. Indeed is a trademark of Indeed, Inc.; this Actor is not affiliated with it.

Indeed Jobs Scraper — structured salary, employer rating and full descriptions. Pay per event, no API key.

Get Indeed jobs on Apify →