Indeed Job Scraper — ✅ Pay Per Result · Cloudflare-Safe
Pricing
from $5.00 / 1,000 job scrapeds
Indeed Job Scraper — ✅ Pay Per Result · Cloudflare-Safe
Scrape Indeed jobs in 10 countries — title, company, structured salary (min/max/currency/period), location, description, posted date. HTTP-first with browser fallback handles Cloudflare. Filter by date, type, remote, experience, salary. Tiered Pay Per Result pricing.
Pricing
from $5.00 / 1,000 job scrapeds
Rating
0.0
(0)
Developer
bootforge
Maintained by CommunityActor stats
0
Bookmarked
5
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Indeed Job Scraper
The Indeed Job Scraper is an Apify actor that extracts job listings from Indeed by keyword search or pre-built search URL, across 10 country storefronts (US, GB, CA, AU, IE, DE, FR, IT, NL, ES). It returns title, company, structured salary (min, max, currency, pay period), location, workplace type, full description (text + HTML), and posting metadata. An anti-detect browser engine clears Cloudflare's managed challenge automatically — no separate CAPTCHA service.
Use it to build an ATS feed, run job-market research, benchmark salaries, generate recruitment leads, or track competitor hiring — exported to JSON, CSV, or Excel.
Table of contents
- What the Indeed scraper does
- How to scrape Indeed jobs
- Indeed scraper input
- Indeed job data output
- How much it costs
- Recommended proxies for Indeed
- Why this Indeed scraper
- FAQ
- Rate this actor
- Related actors
What the Indeed scraper does
- 🔎 Keyword search — search any term and paginate through every matching job across 10 countries.
- 🔗 Pre-built search URLs — paste a filtered Indeed URL from your browser; the country is auto-detected from the host.
- 💷 Structured salary —
min,max,currency, andperiod(yearly/monthly/weekly/daily/hourly) parsed from the raw text, not left as a free string. - 🧩 Full filter set — date posted, job type, workplace type, experience level, and salary floor, applied server-side on Indeed.
- 🛡️ Cloudflare-safe — HTTP-first for speed, transparently escalating to a stealth browser (Camoufox) that clears Cloudflare's challenge automatically.
- 📄 Full descriptions — optional per-job detail fetch for the complete description in both text and HTML.
How to scrape Indeed jobs
- Click Try for free and open the actor.
- Enter one or more
search_queriesor pastesearch_urls. - Choose your
country(US, GB, CA, AU, IE, DE, FR, IT, NL, ES) and optionallocation. - Optional: add filters (
job_type,workplace_type,date_posted,experience_level,salary_min). - Click Start and watch results stream into the dataset.
- Export as JSON, CSV, or Excel, or pull from the Apify API.
Search by keyword:
{"search_queries": ["python developer"],"country": "US","location": "New York","date_posted": "week","max_results": 200}
Scrape a filtered search URL (country auto-detected from the host):
{"search_urls": ["https://uk.indeed.com/jobs?q=data+scientist&l=London&sc=0kf%3Aattr(DSQF7)%3B"],"fetch_descriptions": true}
Indeed scraper input
| Field | Type | Default | Description |
|---|---|---|---|
search_queries | string[] | — | Keywords to search. At least one of queries or URLs is required. |
search_urls | string[] | — | Pre-built Indeed search URLs; country auto-detected from the host. |
country | enum | US | Storefront: US, GB, CA, AU, IE, DE, FR, IT, NL, ES. Each maps to a country TLD (US → indeed.com, GB → uk.indeed.com). |
location | string | — | City, state, postcode, or Remote. |
job_type | enum | — | full-time, part-time, contract, temporary, internship. |
experience_level | enum | — | entry, mid, senior. |
workplace_type | enum | — | remote, hybrid, on-site. |
date_posted | enum | — | 24h, 3d, week, 2weeks. |
salary_min | int | — | Annual salary floor, in the country's currency. |
fetch_descriptions | bool | true | Fetch the detail page for each job's full description (text + HTML). |
max_results | int | 200 | Cap across all queries (hard limit 10,000). |
max_concurrency | int | 4 | In-flight requests (1–20). Higher = faster but more blocking risk. |
max_requests_per_minute | int | 30 | Request-rate ceiling across all workers. |
request_delay | int | 0 | Fixed delay (seconds) between requests. |
proxy | object | Apify residential | Proxy configuration (see below). |
Indeed job data output
Each job is one dataset row. Sample from a live run:
{"job_id": "d39bbe15770aa014","url": "https://www.indeed.com/viewjob?jk=d39bbe15770aa014","title": "Senior Developer I - Full Stack Python Developer (Investment Technology)","company_name": "Neuberger Berman","company_url": null,"company_rating": null,"company_review_count": null,"company_logo_url": null,"location": "Hybrid work in New York, NY","workplace_type": null,"employment_type": null,"is_easy_apply": null,"salary_min": 115000.0,"salary_max": 130000.0,"salary_currency": "USD","salary_period": "yearly","salary_raw": "$115,000 - $130,000 a year","description_text": "Neuberger Berman's Investment Technology team is seeking a technically strong, full stack Python developer with 5+ years of experience...","description_html": "<div id='jobDescriptionText' class='jobsearch-JobComponent-description'>...</div>","posted_relative": null,"posted_iso": null,"apply_url": null,"country": "US","scraped_at": "2026-05-07T08:18:24+00:00"}
| Field | Description |
|---|---|
job_id, url | Indeed job key and canonical view URL. |
title, company_name | Always present (empty-value cards are dropped, not shipped). |
company_url, company_rating, company_review_count, company_logo_url | Company details when Indeed surfaces them. |
location, workplace_type, employment_type, is_easy_apply | Job metadata. |
salary_min, salary_max, salary_currency, salary_period, salary_raw | Structured salary plus the original text. |
description_text, description_html | Full description (only when fetch_descriptions is on). |
posted_relative, posted_iso, apply_url | Posting metadata. |
country, scraped_at | Storefront and capture timestamp. |
Fields the Indeed DOM doesn't surface on a given job are emitted as null rather than fabricated — fill rates are tracked over time and extractors are added as patterns stabilize.
How much it costs
This actor uses pay-per-event pricing — you pay for what you scrape, not for time.
| Event | USD |
|---|---|
| Actor start (per GB memory) | $0.002 |
| Job scraped | $0.005 |
The per-job price is the FREE/BRONZE rate; Apify auto-applies platform tier discounts down to ~$0.95 per 1,000 jobs at DIAMOND.
| Typical run (default 2 GB) | Cost |
|---|---|
| 200 jobs | ~$1.00 |
| 1,000 jobs | ~$5.00 (base tier) |
| 10,000 jobs | ~$50 base tier, less with volume discounts |
The run-start fee covers fixed engine setup (HTTP client warmup, optional Camoufox launch, first-page cookie acquisition). Most jobs are collected over the cheap HTTP path; the browser is only launched when Cloudflare challenges.
Recommended proxies for Indeed
Residential proxies are strongly recommended. Cloudflare often passes residential IPs at the HTTP layer, keeping the run on the cheap path; datacenter IPs typically fail the challenge and force the slower, costlier browser fallback. The proxy input prefills Apify Proxy residential, which works out of the box.
If you run your own scrapers (inside or outside Apify) and need reliable residential proxies for Indeed, job boards, or other Cloudflare-protected sites, we use DataImpulse — pay-as-you-go residential IPs with per-country targeting and no monthly minimum:
👉 Get DataImpulse residential proxies (referral link)
Why this Indeed scraper
- Cloudflare handled automatically — HTTP-first for speed, escalating to a Camoufox stealth browser under a virtual display that clears Cloudflare's managed challenge; no third-party CAPTCHA service.
- Structured salary — min/max/currency/period parsed from raw pay text, with the original string kept as
salary_raw. - Two input modes — keyword search or a pasted, pre-filtered search URL with the country auto-detected.
- Validated output — every row is Pydantic-validated; mis-extracted cards (empty title/company, inverted salary range, out-of-range rating) are dropped, not shipped.
- Open source — the underlying
indeed-scraperPython package ships a Typer CLI and a FastAPI server; the Apify wrapper is a thin layer.
FAQ
How does this scraper handle Cloudflare? It tries HTTP first because that's the cheapest path. When Cloudflare challenges, it transparently escalates to a stealth browser (Camoufox) that solves the managed challenge automatically, then reuses the sticky cookies across later requests to amortize the browser cost.
Which proxies work best for Indeed? Residential proxies with per-country targeting. Datacenter IPs hit Cloudflare challenges and force browser fallback. The proxy input prefills Apify residential; for your own scrapers we recommend DataImpulse.
Which countries are supported? Ten storefronts: US, GB, CA, AU, IE, DE, FR, IT, NL, ES. Each maps to a country-specific Indeed TLD. Need another country? Open an issue — adding one is a small change.
Can I just paste an Indeed search URL? Yes. Use search_urls after applying filters on Indeed.com. The country is auto-detected from the URL host (e.g. uk.indeed.com → GB), so you don't need to set country separately.
Why are some fields like posted_iso or is_easy_apply empty? The Indeed DOM doesn't surface those on every job. The scraper extracts what's reliably present and emits missing fields as null rather than fabricating them.
Is scraping Indeed legal? This actor collects only publicly available job-listing data. You are responsible for complying with Indeed's terms and applicable laws. Do not collect personal data without a lawful basis.
Rate this actor ⭐
If the Indeed Job Scraper saved you time, please leave a review on its Apify Store page — ratings help other people find it and tell us what to build next. Hit a bug or missing field? Open an issue or contact us through the actor's Issues tab and we'll fix it fast — recency and reliability are what keep this actor ranking.
Related actors
Building a full job-market pipeline? Pair this actor with our other scrapers — same proxy config format, same Pydantic-validated output, all open source.
- LinkedIn Jobs Scraper — scrape LinkedIn job listings with company enrichment, salary, and recruiter info. The natural pair for cross-board coverage.
- LinkedIn Profile Scraper — scrape LinkedIn profiles for sourcing and recruitment lead-gen.
- Trustpilot Scraper — scrape company reviews to vet employers or competitors.
- TikTok Shop Product Scraper — e-commerce product and pricing intelligence.