Indeed Jobs Scraper - 11 Countries, Salary & Apply URL avatar

Indeed Jobs Scraper - 11 Countries, Salary & Apply URL

Pricing

from $4.00 / 1,000 job returneds

Go to Apify Store
Indeed Jobs Scraper - 11 Countries, Salary & Apply URL

Indeed Jobs Scraper - 11 Countries, Salary & Apply URL

window.mosaic.providerData is where an Indeed results page keeps its jobs, as JSON, before a card renders. This takes them from there, on all eleven country sites: title, company, location, salary when posted, job type, benefits, remote flag and apply link. $4.00 per 1,000 jobs.

Pricing

from $4.00 / 1,000 job returneds

Rating

5.0

(1)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

6

Total users

1

Monthly active users

2 days ago

Last modified

Share

Indeed Jobs Scraper

window.mosaic.providerData["mosaic-provider-jobcards"] is where an Indeed results page keeps its jobs, as JSON, before a single card renders. This actor takes them from there instead of parsing rendered HTML, on all eleven country sites: US, UK, Canada, Germany, France, Australia, India, Netherlands, Spain, Italy and Ireland. You supply a keyword and a location. Each posting comes back as a row with the salary, the benefits list and the employer's star rating attached, where Indeed publishes them.

Indeed sits behind Cloudflare, which is why most HTTP scrapers hand you a Just a moment… page. This one reads Indeed's own in-page job data over a Chrome TLS fingerprint, takes a fresh exit address for every page, and falls back to a real browser when a page keeps refusing.

What you get per job

FieldNotes
jobIdIndeed's jk key. Stable, good as a primary key.
title, company, locationAs shown on the card.
salaryThe posted range or estimate, e.g. $140,000 - $215,000 a year. Often null — plenty of employers don't post pay.
jobTypesArray, e.g. ["Full-time"]. Empty when the card doesn't say.
benefitsArray, e.g. ["401(k)","Health insurance","Paid time off"].
remoteBoolean, taken from Indeed's own remote attribute or the location text.
postedTextAs shown, e.g. 30+ days ago. Not a timestamp.
snippetThe description excerpt from the card.
companyRating, companyReviewCountIndeed's employer rating out of 5 and how many reviews it's based on. null for companies without one.
urlhttps://<site>/viewjob?jk=<jobId>.

Real row from a software engineer / New York run:

{
"ok": true,
"jobId": "b709e7cb840be77f",
"title": "Sr. Backend Engineer - Charlotte AI (Hybrid, EST)",
"company": "CrowdStrike",
"location": "New York State",
"salary": "$140,000 - $215,000 a year",
"jobTypes": ["Full-time"],
"benefits": ["401(k)", "Parental leave", "Health insurance", "Paid time off"],
"remote": true,
"postedText": "30+ days ago",
"snippet": "Building globally distributed, fault-tolerant, highly scalable cloud ecosystems…",
"companyRating": 3.8,
"companyReviewCount": 55,
"url": "https://www.indeed.com/viewjob?jk=b709e7cb840be77f"
}

Input

{
"query": "software engineer",
"location": "New York",
"country": "us",
"maxItems": 100
}
FieldDefaultNotes
queryrequiredJob title or keywords.
locationemptyCity, state, or remote. Leave it blank to search the whole country.
countryusus, uk, ca, de, fr, au, in, nl, es, it, ie.
maxItems501 to 1000. Indeed pages ten at a time.
proxyConfigurationApify datacenterThe actor rotates addresses itself. Put your own servers in proxyUrls if you have them; metered residential groups aren't offered.
notionConnector / notionParentIdOptional delivery into Notion via an Apify MCP connector.

Limits worth knowing

  • Card data only. The full job description is on the detail page and isn't fetched.
  • salary, companyRating and companyReviewCount are blank on a large share of rows. Plenty of employers never fill them in, and nothing can recover a field the posting doesn't carry.
  • The browser locale is always en-US, whichever country you pick. That changes how relative dates are phrased, not which country's jobs you get.
  • Fewer results than maxItems is normal. Indeed rate-limits per session as well as per address: a client that gets page one fine can be refused on page two. The run rotates and retries, then keeps what it has rather than throwing it away.
  • Blocked runs cost nothing. If Cloudflare refuses every address, you get one ok: false row with errorCode: "BLOCKED" and no charge. Re-running usually lands on friendlier addresses; if you need reliability at volume, supply your own residential proxies in proxyConfiguration.proxyUrls.

Billing

$4.00 per 1,000 jobs ($0.004 each). Flat on every plan. From 24 August 2026 a $0.005 run-start fee applies on top.

The per-job price is the whole bill. Browser time, proxy rotation and the retries after a block are already inside it, and none of them turn up as a separate line.

Only rows with ok: true are charged. BLOCKED, NO_RESULTS and BAD_INPUT rows are free.