Indeed Jobs Scraper - 11 Countries, Salary & Apply URL
Pricing
from $4.00 / 1,000 job returneds
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
Maintained by CommunityActor stats
0
Bookmarked
6
Total users
1
Monthly active users
2 days ago
Last modified
Categories
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
| Field | Notes |
|---|---|
jobId | Indeed's jk key. Stable, good as a primary key. |
title, company, location | As shown on the card. |
salary | The posted range or estimate, e.g. $140,000 - $215,000 a year. Often null — plenty of employers don't post pay. |
jobTypes | Array, e.g. ["Full-time"]. Empty when the card doesn't say. |
benefits | Array, e.g. ["401(k)","Health insurance","Paid time off"]. |
remote | Boolean, taken from Indeed's own remote attribute or the location text. |
postedText | As shown, e.g. 30+ days ago. Not a timestamp. |
snippet | The description excerpt from the card. |
companyRating, companyReviewCount | Indeed's employer rating out of 5 and how many reviews it's based on. null for companies without one. |
url | https://<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}
| Field | Default | Notes |
|---|---|---|
query | required | Job title or keywords. |
location | empty | City, state, or remote. Leave it blank to search the whole country. |
country | us | us, uk, ca, de, fr, au, in, nl, es, it, ie. |
maxItems | 50 | 1 to 1000. Indeed pages ten at a time. |
proxyConfiguration | Apify datacenter | The actor rotates addresses itself. Put your own servers in proxyUrls if you have them; metered residential groups aren't offered. |
notionConnector / notionParentId | — | Optional 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,companyRatingandcompanyReviewCountare 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
maxItemsis 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: falserow witherrorCode: "BLOCKED"and no charge. Re-running usually lands on friendlier addresses; if you need reliability at volume, supply your own residential proxies inproxyConfiguration.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.