Indeed Jobs Scraper - Full Descriptions, Salaries & Ratings avatar

Indeed Jobs Scraper - Full Descriptions, Salaries & Ratings

Pricing

from $4.20 / 1,000 job scrapeds

Go to Apify Store
Indeed Jobs Scraper - Full Descriptions, Salaries & Ratings

Indeed Jobs Scraper - Full Descriptions, Salaries & Ratings

Scrape Indeed job postings by keyword and location. Returns title, company, company rating, location, remote type, salary (raw + normalized), job type, posted date, the FULL job description and an apply URL. Optional AI enrichment adds seniority, skills and a normalized title. Null-honest output.

Pricing

from $4.20 / 1,000 job scrapeds

Rating

0.0

(0)

Developer

WebDataLabs

WebDataLabs

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

16 hours ago

Last modified

Share

Search Indeed the way you would in a browser - a job title and a location - and get back a clean row per posting with the complete job description, the advertised salary as both raw text and normalized numbers, the employer's Indeed rating, and a working apply link.

Fields Indeed does not state come back as null. Never 0, never "N/A", never a guess.

What data can I extract from Indeed?

FieldExample
titleSoftware Engineer, Early Career, Campus
companyGoogle
companyRating / companyReviewCount4.3 / 6268
location / city / stateNew York, NY / New York / NY
isRemote / remoteTypefalse / null (or remote, hybrid, onsite)
postedAt / postedAgoLabel2026-08-07T05:00:00.000Z / 30+ days ago
salaryDisclosedtrue
salaryMin / salaryMax123000 / 174000
salaryCurrency / salaryPeriodUSD / year
salaryRaw$123,000 - $174,000 a year
jobTypeFull-time
descriptionthe full posting text, emails and phone numbers removed
applyUrl / jobUrlclean links, no expiring tracking tokens
aiSeniority / aiNormalizedTitle / aiSkillswith AI enrichment on

postedAt is Indeed's own timestamp, not a guess reconstructed from "30+ days ago".

Example output

A real record, unedited except for truncating the description:

{
"jobId": "e6489bd83820f079",
"title": "Software Engineer, Early Career, Campus",
"company": "Google",
"companyRating": 4.3,
"companyReviewCount": 6268,
"location": "New York, NY",
"city": "New York",
"state": "NY",
"isRemote": false,
"remoteType": null,
"postedAt": "2026-08-07T05:00:00.000Z",
"postedAgoLabel": "30+ days ago",
"salaryDisclosed": true,
"salaryMin": 123000,
"salaryMax": 174000,
"salaryCurrency": "USD",
"salaryPeriod": "year",
"salaryRaw": "$123,000 - $174,000 a year",
"jobType": "Full-time",
"description": "The application window will be open until at least September 30, 2026 …",
"applyUrl": "https://www.indeed.com/applystart?jk=e6489bd83820f079",
"jobUrl": "https://www.indeed.com/viewjob?jk=e6489bd83820f079",
"aiSeniority": null,
"aiNormalizedTitle": null,
"aiSkills": null,
"query": "software engineer",
"searchLocation": "New York, NY",
"country": "us",
"scrapedAt": "2026-09-22T17:10:37.742Z"
}

When an employer does not advertise pay, the honest version comes back instead -

salaryDisclosed: false
with every salary field null, so you can filter on "actually disclosed" rather than guessing which zeros are real.

How to use the Indeed scraper

  1. Put a job title or keyword in Job title or keyword - whatever you would type into Indeed.
  2. Add a Location (New York, NY, London, Berlin). Leave it empty to search the country.
  3. Pick the Country - this chooses the Indeed site, and with it the listing language.
  4. Set Maximum jobs. The actor keeps searching until it reaches that number or runs out of new postings.

Everything else has a sensible default.

This is the honest limit and it is worth understanding before you run a large job.

Indeed serves logged-out visitors exactly one page of results per search. Page two redirects to a sign-in wall, on every country site. No scraper can page past it without an account.

So this actor goes deeper the way a person would: it repeats your search with different filters - date windows, job type, radius, experience level, sorted by date instead of relevance - and merges the results, removing duplicates. Every repeat is a fresh first page with a partly different set of postings.

What that means in practice:

  • A single search returns roughly 40+ jobs on Indeed US, and about 15 on other country sites.
  • Repeating with filters reliably multiplies that. A measured run on software engineer in New York, NY collected 183 distinct jobs from 16 searches.
  • Returns diminish as it goes. Each extra search finds fewer postings the run has not already seen, so the actor stops once a search stops paying for itself. Stop when a search adds fewer new jobs than this (Advanced) controls where that line sits; set it to 0 to exhaust every filter.
  • The most effective way to go deeper is more locations, not a bigger maxJobs - run the neighbouring cities as separate runs rather than asking one search for thousands of rows.

A run that stops early tells you why in the log, and you are only ever charged for jobs actually delivered.

How much does it cost to scrape Indeed?

Pay per result, at the rates shown in the pricing box above - one charge per job delivered, and a separate smaller charge per job when AI enrichment is switched on. There is no subscription, and a trial run of a hundred jobs costs a few cents.

You are charged for jobs that reach your dataset. A run that is cut short by its budget, its timeout, or by Indeed running out of matches bills only for what it handed over.

Who is this Indeed scraper for?

  • Recruiters and staffing agencies tracking who is hiring, for what, and at what pay.
  • Compensation and HR teams benchmarking salaries with salaryMin/salaryMax already parsed.
  • Job boards and aggregators that need full descriptions, not truncated snippets.
  • Market researchers measuring hiring demand by role, company or city over time.
  • AI and RAG pipelines - the description is clean plain text with contact details removed.

Which countries are supported?

Eighteen Indeed sites, each verified: United States, United Kingdom, Canada, Australia, India, Ireland, Singapore, Germany, Austria, Switzerland, France, Netherlands, Spain, Italy, Poland, Brazil, Mexico and Japan.

Frequently asked questions

This actor reads only public job postings that Indeed serves to logged-out visitors. It does not log in, does not touch personal profiles, and does not defeat any security measure - Indeed's bot protection is handled by Apify's own Web Unblocker proxy. Job postings are business information rather than personal data, and email addresses and phone numbers are stripped out of descriptions before anything is written, since recruiter contact details do sometimes appear there. You are responsible for how you use the data, including under GDPR where it applies.

Does it really include the full job description?

Yes - the complete posting text for every job, not the two-line snippet Indeed shows on the results page. In the verification run every one of 50 jobs came back with a description, ranging from about 900 to 10,000 characters.

Why does one run make several searches?

Because Indeed only gives logged-out visitors one page per search. See "How many jobs can I get" above - the repeated searches are how the actor gets past that, and they are what your maxJobs target is spent on.

What happens when a job does not show a salary?

salaryDisclosed is false and every salary field is null. Most postings do not advertise pay, and a fabricated 0 would be indistinguishable from a real one once it is in your spreadsheet.

Do I need to configure a proxy?

No. The default is Apify's Web Unblocker, which is what handles Indeed's Cloudflare challenge. Residential and datacenter proxies were measured failing against Indeed - residential succeeds and fails in waves on the same URL - so change this only if you know why you are changing it.

What does AI enrichment add?

Three extra fields per job, read out of the full description: aiSeniority (Intern through Director+), aiNormalizedTitle (the role reduced to a standard name so you can group across employers), and aiSkills (the technologies and skills the posting names). It is off by default and billed separately, per enriched job. When the model cannot support an answer the field is null rather than a guess.

Can I get only recent jobs?

Yes - Posted within applies Indeed's own date filter, so the search itself goes deeper into recent postings rather than filtering afterwards.

  • Google Jobs Scraper - the same shape for the Google Jobs vertical, which aggregates LinkedIn, Stepstone, XING and company career sites.
  • Naukri Jobs Scraper - India, with salary bands and skills.

Support

Something wrong or missing? Open an issue on the actor's Issues tab with the run ID and the input you used, and it will get looked at.

Leave a review

If this saved you time, a review on the Apify Store genuinely helps other people find it.