Indeed Jobs Scraper — Pay Per Result
Pricing
from $5.00 / 1,000 job listings
Indeed Jobs Scraper — Pay Per Result
Scrape public Indeed job listings by keyword and location. Playwright browser + residential proxies, stable schema, pay per result (~$5 / 1,000 jobs).
Pricing
from $5.00 / 1,000 job listings
Rating
0.0
(0)
Developer
Smorgi Apps
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Scrape public Indeed job listings by keyword and location. Clean, stable dataset schema. Pay-per-event pricing.
Store search keywords: Indeed scraper · Indeed job scraper · Indeed jobs · jobs data · job listings scraper
What you get
For each job:
| Field | Description |
|---|---|
id | Indeed job key |
title | Job title |
company | Company name |
companyRating | Company rating when shown |
location | Location string |
salary | { min, max, period, currency, raw } |
jobType | e.g. Full-time |
postedAt | ISO date when parseable, else relative text |
description | Plain text |
descriptionHtml | HTML description (when available) |
url | Public job URL |
isRemote | Remote heuristic |
scrapedAt | ISO timestamp |
searchQuery | Query that found this job |
Example input
{"queries": ["software engineer", "data analyst"],"location": "Remote","country": "www.indeed.com","maxItemsPerQuery": 50,"datePosted": "7","parseFullDescription": true,"dedupeAcrossQueries": true,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Example output item
{"id": "abc123def456","title": "Software Engineer","company": "Example Corp","companyRating": 3.8,"location": "Remote","salary": {"min": 120000,"max": 150000,"period": "year","currency": "USD","raw": "$120,000 - $150,000 a year"},"jobType": "Full-time","postedAt": "2026-07-28T12:00:00.000Z","description": "We are looking for a software engineer...","descriptionHtml": "<div>We are looking for a software engineer...</div>","url": "https://www.indeed.com/viewjob?jk=abc123def456","isRemote": true,"scrapedAt": "2026-08-02T06:00:00.000Z","searchQuery": "software engineer"}
Pricing (PPE)
| Event | Price | When charged |
|---|---|---|
apify-actor-start | $0.00005 | Once per run (auto; first 5s compute waived) |
apify-default-dataset-item (Job listing) | $0.005 (~$5 / 1,000 jobs) | Each job written to the dataset |
Browser + residential proxies are required for Indeed reliability — that cost is baked into the per-job price so the Actor stays profitable without passing opaque platform usage on top.
Local PPE test:
$ACTOR_TEST_PAY_PER_EVENT=true ACTOR_USE_CHARGING_LOG_DATASET=true npm run dry-run
Reliability
- Real Chromium browser (Playwright) — plain HTTP clients get 403’d by Indeed
- Session pool + up to 6 retries; blocked sessions are retired
- Block / captcha heuristics → retry with a fresh proxy session
- Dedupe by Indeed
jobkey(optional across queries) - Mosaic JSON parse first; DOM selectors as fallback
- Default residential proxies + low concurrency (1–2)
- Run fails if zero jobs are returned (so you are not left with a silent empty success)
We do not promise 100% success — Indeed rate-limits and challenges aggressive traffic. If a run fails, lower concurrency to 1 and retry.
Limitations (honest)
- Public pages only. No login, no Indeed employer/applicant private data.
- Residential proxies required for reliable results. Datacenter IPs are almost always blocked.
- Cloudflare / captcha interstitials can still interrupt runs; the actor retries and fails those requests rather than bypassing challenges with ToS-evasive tooling.
- Browser runs cost more compute than HTTP scrapers — price reflects delivered jobs (PPE), not compute.
- Layout changes on Indeed can break parsers — report issues; we prioritize selector stability.
- Full descriptions require one extra page per job (
parseFullDescription: true). - Results reflect what Indeed shows publicly for the given domain/country at scrape time.
How to run
On Apify
- Open this Actor in Console or Store
- Paste queries + location
- Keep residential proxy on
- Start → download dataset (JSON / CSV / Excel)
Local
# from monorepo rootnpm installcd actors/indeed-jobs# edit storage/key_value_stores/default/INPUT.jsonnpm run dry-run
Publish
cd actors/indeed-jobsnpm run sync-sharednpx apify loginnpx apify push
Then set PPE events in Console and publish to Store.
Related actors (catalog)
Same publisher profile (cross-discovery): LinkedIn Jobs, Facebook Marketplace, G2 Reviews, Trustpilot Reviews, Google Trends, company lead-gen wedge — shipping in wave 1.