Indeed Jobs Scraper
Pricing
Pay per event
Indeed Jobs Scraper
Scrape Indeed.com job search results by keyword and location — structured title, company, salary, job type, posted date, snippet, and apply URL. Multi-query fan-out with per-query fault isolation. No login, no API key required. Bulk job listings export to CSV. Indeed job listings API.
Pricing
Pay per event
Rating
0.0
(0)
Developer
DevilScrapes
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
16 hours ago
Last modified
Categories
Share
🎯 What this scrapes
Indeed is the largest single job board by search volume. Give this Actor one or more keyword + location pairs and it fans out across every query, pulls the same JSON payload Indeed's own search results page renders from, and hands back normalized job postings — structured salary, job type, posted date, and a direct apply link. No login, no API key, no scraping the rendered HTML card markup that breaks every time Indeed tweaks a class name.
🔥 What we handle for you
- 🛡️ Browser fingerprint rotation —
curl-cffiimpersonates real browser TLS handshakes so Indeed sees a browser, not Python. - 🌐 Apify Proxy rotation — fresh session and exit IP on every block.
- 🔁 Retries with exponential backoff on
408 / 429 / 5xx— up to 5 attempts per page,Retry-Afterhonoured. - 🧱 Per-query fault isolation — one blocked query logs and moves on; it never aborts the other queries in the run.
- 🧊 Clean, typed dataset rows — Pydantic-validated, ISO-8601 timestamps, structured salary parsing, JSON / CSV / Excel export straight from the Apify Console.
- 💰 Pay-Per-Event pricing — you only pay for jobs that hit your dataset. No data, no charge.
💡 Use cases
- Recruiting and staffing pipeline seeding — bulk-pull open roles matching a client's target titles/locations.
- Job-aggregator backfill — feed a niche job board or newsletter from Indeed's index.
- Labor-market research — track posting volume, salary bands, and job-type mix over time.
- HR-tech competitive intel — see what titles and comp ranges competitors are hiring for.
⚙️ How to use it
- Click Try for free at the top of the page.
- Fill in the input form — most fields have sensible defaults.
- Click Start. Output streams into the run's dataset.
- Export from Storage → Dataset as JSON, CSV, or Excel — or fetch via the API.
📥 Input
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
queries | array | yes | [{'keyword': 'software engineer', 'location': 'Austin, TX'}, {'keyword': 'registered nurse', 'location': 'Remote'}] | One or more {"keyword": "...", "location": "..."} pairs. Every query is scraped independently — one… |
radiusMiles | integer | no | None | Search radius around each query's location. Omitted from the request when left blank. |
datePosted | string | no | None | Maps to Indeed's fromage param. Leave blank for any time. |
jobType | string | no | None | Maps to Indeed's jt param. Leave blank for all types. |
maxResultsPerQuery | integer | no | 100 | Hard cap on emitted rows per query; also bounds pagination. |
proxyConfiguration | object | no | {'useApifyProxy': True} | Apify Proxy. No forced proxy group by default — the target's proxy-tier requirement is confirmed by a cloud recon spike… |
Example input
{"queries": [{"keyword": "software engineer","location": "Austin, TX"},{"keyword": "registered nurse","location": "Remote"}],"maxResultsPerQuery": 3,"proxyConfiguration": {"useApifyProxy": true}}
📤 Output
Every row is one dataset item.
| Field | Type | Notes |
|---|---|---|
job_key | string | Indeed's internal job id from the mosaic-provider-jobcards blob. |
title | string | Posting title. |
company | string | Employer name. |
location | string | Display location text. |
salary_text | string | Raw salary string as shown on the card, verbatim. |
salary_min | number | Parsed lower bound from salary_text. |
salary_max | number | Parsed upper bound from salary_text. |
salary_currency | string | Parsed currency; defaults 'USD' when a numeric salary is present and no other symbol is detected. |
salary_period | string | One of hour/day/week/month/year, parsed from salary_text; null when unparseable. |
job_type | string | Normalized employment-type text from the card, when present. |
posted_date_text | string | Raw posted-date string as shown, e.g. 'Posted 3 days ago'. |
posted_date | string | Best-effort ISO-8601 parse of posted_date_text; null when unparseable. |
snippet | string | Short description text from the card. |
job_url | string | Canonical https://www.indeed.com/viewjob?jk=<job_key>. |
search_keyword | string | The query keyword that produced this row. |
search_location | string | The query location that produced this row. |
scraped_at | string | ISO-8601 wall-clock time this row was constructed. |
Example output
{"job_key": "a1b2c3d4e5f6g7h8","title": "Senior Backend Engineer","company": "Acme Co","location": "Austin, TX","salary_text": "$130,000 - $165,000 a year","salary_min": 130000.0,"salary_max": 165000.0,"salary_currency": "USD","salary_period": "year","job_type": "Full-time","posted_date_text": "Posted 3 days ago","posted_date": "2026-09-09T00:00:00Z","snippet": "We're looking for a Senior Backend Engineer to join our platform team...","job_url": "https://www.indeed.com/viewjob?jk=a1b2c3d4e5f6g7h8","search_keyword": "software engineer","search_location": "Austin, TX","scraped_at": "2026-09-12T12:00:00Z"}
💰 Pricing
Pay-Per-Event — you pay only when these events fire:
| Event | USD | What it is |
|---|---|---|
actor-start | $0.2 | One-off warm-up charge per run |
job-result | $0.003 | Per unique dataset item |
Example: 1 000 jobs at the rates above ≈ $3.20. No subscription, no minimum, no card to start — Apify gives every new account $5 of free credit.
🚧 Limitations
- US
www.indeed.comonly — other Indeed country subdomains are not covered. - Read-only public search data — no login, no applying, no resume upload.
- Full job-description body is not included; only the search-result snippet. Fetching the full
viewjobpage is a separate cost and is not part of this Actor. - Historical/removed postings are not available — only what Indeed's live search index returns at run time.
❓ FAQ
Is this legal?
We only fetch content the source makes publicly available. Respect any platform terms of service before using output commercially.
How do I export to Sheets?
After the run, click Storage → Dataset → Export and pick CSV. Google Sheets imports it directly.
Why is my run slow?
Indeed rate-limits aggressively for large pulls. The Actor backs off automatically and processes queries independently. Lower maxResultsPerQuery or trim the queries list if you're testing.
💬 Your feedback
Spotted a bug, hit a weird edge case, or need a new field? Open an issue on the Actor's Issues tab on Apify Console — we ship fixes weekly and we read every report.