Indeed Job Scraper — ✅ Pay Per Result · Cloudflare-Safe avatar

Indeed Job Scraper — ✅ Pay Per Result · Cloudflare-Safe

Pricing

from $5.00 / 1,000 job scrapeds

Go to Apify Store
Indeed Job Scraper — ✅ Pay Per Result · Cloudflare-Safe

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

bootforge

Maintained by Community

Actor stats

0

Bookmarked

5

Total users

1

Monthly active users

5 days ago

Last modified

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

  • 🔎 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 salarymin, max, currency, and period (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

  1. Click Try for free and open the actor.
  2. Enter one or more search_queries or paste search_urls.
  3. Choose your country (US, GB, CA, AU, IE, DE, FR, IT, NL, ES) and optional location.
  4. Optional: add filters (job_type, workplace_type, date_posted, experience_level, salary_min).
  5. Click Start and watch results stream into the dataset.
  6. 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

FieldTypeDefaultDescription
search_queriesstring[]Keywords to search. At least one of queries or URLs is required.
search_urlsstring[]Pre-built Indeed search URLs; country auto-detected from the host.
countryenumUSStorefront: US, GB, CA, AU, IE, DE, FR, IT, NL, ES. Each maps to a country TLD (US → indeed.com, GB → uk.indeed.com).
locationstringCity, state, postcode, or Remote.
job_typeenumfull-time, part-time, contract, temporary, internship.
experience_levelenumentry, mid, senior.
workplace_typeenumremote, hybrid, on-site.
date_postedenum24h, 3d, week, 2weeks.
salary_minintAnnual salary floor, in the country's currency.
fetch_descriptionsbooltrueFetch the detail page for each job's full description (text + HTML).
max_resultsint200Cap across all queries (hard limit 10,000).
max_concurrencyint4In-flight requests (1–20). Higher = faster but more blocking risk.
max_requests_per_minuteint30Request-rate ceiling across all workers.
request_delayint0Fixed delay (seconds) between requests.
proxyobjectApify residentialProxy 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"
}
FieldDescription
job_id, urlIndeed job key and canonical view URL.
title, company_nameAlways present (empty-value cards are dropped, not shipped).
company_url, company_rating, company_review_count, company_logo_urlCompany details when Indeed surfaces them.
location, workplace_type, employment_type, is_easy_applyJob metadata.
salary_min, salary_max, salary_currency, salary_period, salary_rawStructured salary plus the original text.
description_text, description_htmlFull description (only when fetch_descriptions is on).
posted_relative, posted_iso, apply_urlPosting metadata.
country, scraped_atStorefront 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.

EventUSD
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.

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-scraper Python 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.

Building a full job-market pipeline? Pair this actor with our other scrapers — same proxy config format, same Pydantic-validated output, all open source.