Indeed Scraper — Jobs, Salary Filters & AI (US+JP) avatar

Indeed Scraper — Jobs, Salary Filters & AI (US+JP)

Under maintenance

Pricing

from $4.00 / 1,000 job scrapeds

Go to Apify Store
Indeed Scraper — Jobs, Salary Filters & AI (US+JP)

Indeed Scraper — Jobs, Salary Filters & AI (US+JP)

Under maintenance

Indeed scraper for US, Japan (求人) and more: normalized salaries (USD & JPY 万円), date/job-type/remote filters, dedup, full descriptions, optional AI skill & seniority enrichment. Pay per result.

Pricing

from $4.00 / 1,000 job scrapeds

Rating

0.0

(0)

Developer

koki yonai

koki yonai

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 minutes ago

Last modified

Categories

Share

A reliable Indeed scraper that extracts job listings as clean, structured data: title, company, location, normalized salary (USD, JPY 万円 formats and more), employment type, full description, posting date and URL — with advanced filters, duplicate removal and optional AI enrichment. No code needed: type a search query, click Start, export JSON / CSV / Excel. Works on Indeed US, Indeed Japan (求人), UK, Canada, Germany, Australia, India and other country domains.

Built for recruiters, job boards, HR-tech products and labor-market researchers who need consistent Indeed data — not a scraper that silently returns half the results.

What does this Indeed scraper do?

  • Collects job listings from Indeed search results for any query + location, on any Indeed country domain (www = US, jp = Japan, uk, ca, de, au, in, fr, nl …).
  • Survives Indeed's anti-bot protection with country-matched residential proxies, automatic retries and session rotation — so result counts stay predictable run after run.
  • Normalizes salaries into structured min / max / currency / period — including Japanese formats like 年収450万円, 月給25万円 and 時給1,200円, and US ranges like $80,000 - $110,000 a year.
  • Classifies employment type into a stable enum (fulltime / parttime / contract / temporary / internship) from any locale — 正社員 and Full-time both come out as fulltime, with the original text preserved in employmentTypeRaw.
  • Removes duplicates: the same job re-appearing across pages, and sponsored/organic twins of the same posting (same title + company + location under a different id).
  • Filters at the source: date posted, job type, remote-only (verified live on Indeed US and Japan), and minimum normalized salary.
  • Fetches the full job description (optional): visits each job's page so you get the complete text instead of the truncated — often missing — snippet on the results page.
  • AI enrichment (optional, bring your own Anthropic or OpenAI key): extracts skills, seniority level, job category, remote flag and a one-line summary per job.

What job data can you extract from Indeed?

Every job comes out as one structured record:

FieldExample
idIndeed job key (stable, used for dedup)
titleSenior React Developer
companyAcme Inc.
locationRemote in Chicago, IL / 東京都 千代田区・フルリモート
salaryRaw年収400万円~600万円
salaryNormalized{ "min": 4000000, "max": 6000000, "currency": "JPY", "period": "year" }
employmentTypefulltime / parttime / contract / temporary / internship
employmentTypeRaw正社員 / Full-time — the exact text Indeed showed
descriptionsnippet, or the full text when detail scraping is on
dateTextposting-date text as shown by Indeed (e.g. 3 days ago)
urldirect link to the job posting
ai (optional){ "skills": [...], "seniority": "...", "category": "...", "remote": true, "summary": "..." }

Plus source (the Indeed domain scraped) and a scrapedAt ISO timestamp. A full record looks like this:

{
"id": "a1b2c3d4e5f60708",
"title": "Customer Service Representative",
"company": "Acme Support Co.",
"location": "Remote in Chicago, IL",
"salaryRaw": "$18 - $22 an hour",
"salaryNormalized": { "min": 18, "max": 22, "currency": "USD", "period": "hour" },
"employmentType": "fulltime",
"employmentTypeRaw": "Full-time",
"description": "We are looking for a customer service representative to ...",
"dateText": "3 days ago",
"url": "https://www.indeed.com/viewjob?jk=a1b2c3d4e5f60708",
"source": "www.indeed.com",
"scrapedAt": "2026-06-10T12:34:56.000Z"
}

Export from the dataset as JSON, CSV, Excel or XML, or read it through the Apify API.

How do I scrape Indeed jobs? (no code, 4 steps)

  1. Click "Try for free" — an Apify account is free, no credit card required.
  2. Type your search: query (e.g. software engineer), optional location, country domain.
  3. Click Start. The default input is safe to run as-is and stops at your maxItems cap.
  4. Export your data from the Storage tab (JSON / CSV / Excel), or pull it via API.

Optional switches: scrapeJobDetails for full descriptions, filters for date-posted / job type / remote-only / minimum salary, enableAiEnrichment + your LLM API key for AI fields.

How much does it cost to scrape Indeed?

Pricing is pay-per-result — events are charged per job delivered, plus a fraction-of-a-cent start fee per run:

EventPricePer 1,000 jobs
Job scraped$0.004 / job$4
Full job description — charged instead of "Job scraped" when full descriptions are on$0.01 / job$10
AI enrichment — add-on, charged only for successfully enriched jobs+$0.003 / job+$3

Worked examples: 1,000 job cards = $4. 1,000 jobs with full descriptions = $10 (billed as the "Full job description" event instead of "Job scraped" — never both). Add AI enrichment on top: +$3 per 1,000. Each run also bills a tiny actor-start fee ($0.00005 per GB of run memory — about $0.0002 per run).

You can set a maximum charge limit on every run — the actor detects it mid-run and stops cleanly instead of doing unpaid work.

Proxies & plans (important): Indeed aggressively 403s datacenter IPs, so this actor runs on residential proxies. Your Apify run therefore needs residential proxy access — the free plan does not include it, so a free run returns an empty dataset (repeated 403 / tunnel-connection errors). A paid plan or the pay-as-you-go residential proxy add-on is required; residential traffic is billed by Apify separately from this actor's per-result fees above. The actor's own fees are only charged for jobs actually delivered.

Can I use the official Indeed API instead?

Indeed's official APIs are gated: publisher/partner programs, employer products and ATS integrations — there is no general-purpose public API for reading search results. If you've been searching for an "Indeed API" for job data, a scraper like this one is the practical alternative — this actor instantly becomes your Indeed API, callable from any language or no-code tool.

How do I use the Indeed scraper API? (Python, CLI, no code)

How to scrape Indeed with Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("akagifreeez/indeed-pro-scraper").call(run_input={
"searchQuery": "software engineer",
"country": "www",
"maxItems": 100,
})
for job in client.dataset(run["defaultDatasetId"]).iterate_items():
print(job["title"], job["salaryNormalized"])
  • API endpoints — start runs and fetch results over HTTP from any language; webhooks fire when a run finishes.
  • Python / JavaScript clients, CLI.
  • MCP — connect the actor to Claude or other AI agents via the Model Context Protocol.
  • No code — pipe results into Google Sheets, Make, Zapier, n8n and other Apify integrations.
  • Scheduling — run it daily/hourly with Apify Schedules to build job-market time series.

How do I scrape Indeed Japan (求人) listings?

This is where this actor stands apart: Indeed Japan is a first-class citizen, not an afterthought.

{
"searchQuery": "エンジニア",
"location": "東京都",
"country": "jp",
"maxItems": 100
}
  • Japanese salary strings are normalized to numbers: 年収400万円〜600万円min: 4000000, max: 6000000, currency: "JPY", period: "year"; 月給25万円 and 時給1,200円 are recognized with their periods, so you can actually sort and filter by pay.
  • Japanese employment types are classified into the same enum as English ones: 正社員fulltime, アルバイト・パートparttime, 契約社員/業務委託contract, 派遣temporary — the original Japanese text stays in employmentTypeRaw.
  • Requests use Japan-based residential IPs and a Japanese locale — the proxy country always matches the Indeed domain you target, which is what keeps block rates low on jp.indeed.com.
  • The remote-only filter works on Indeed Japan too (returns フルリモート listings — verified live).

The same country-matching logic applies to every supported domain — scraping Indeed UK uses UK IPs, Indeed Germany uses German IPs, and so on.

Who uses this Indeed scraper?

Recruiters and sourcing teams track which companies are hiring for which roles, benchmark offered salaries against the market (the normalized salary field makes this a sort, not a parsing project), and spot newly posted roles daily with a scheduled run.

Job boards and aggregators refresh listings feeds with deduplicated, structured records — employment type and salary come pre-classified, so ingestion is a column mapping, not a cleanup pipeline.

HR-tech and data products build salary-benchmarking and labor-market features on top of the structured output; the AI enrichment layer (skills, seniority, category) saves a round of LLM post-processing.

Researchers and analysts collect labor-market time series (e.g. remote-work share by region, posted-salary trends) by scheduling the same queries and diffing runs — run-to-run dedup keeps the series clean.

How is this different from basic Indeed scrapers?

Typical Indeed scrapersThis actor
Result countsInconsistent, silent gapsCountry-matched residential proxies + retries
Job descriptionAll-or-nothing, or snippet-onlyOpt-in per run — pay the detail rate only when you need full text
FiltersKeyword + location only+ salary min, date posted, job type, remote-only (US+JP verified)
DuplicatesReturned as-isid dedup + sponsored/organic twin removal (title+company+location)
SalaryRaw string onlyNormalized min/max/currency/period — incl. 万円/月給/時給
Employment typeRaw text mixed into other fieldsClassified enum + raw text preserved
Japan supportUntested, salary unparsedFirst-class (JP proxies, locale, JPY normalization)
AI analysis✅ skills / seniority / category / summary (optional, your key)
Cost controlmaxItems only; charge cap = abrupt stopmaxItems + detects your max charge limit mid-run and exits cleanly

This actor reads publicly available job listings only — no login, no user accounts, no paywalled or personal data. Scraping public data is generally lawful, but how you use the data is your responsibility: review Apify's guide on web-scraping legality and applicable local laws. This is not legal advice.

FAQ

Why do other Indeed scrapers return empty or partial results? Indeed's anti-bot system blocks datacenter IPs and mismatched geos aggressively (HTTP 403). This actor uses residential IPs from the same country as the Indeed domain you target, rotates sessions on blocks, and retries — that combination is what makes counts predictable.

How many jobs can I scrape per search? Indeed serves at most ~1,000 results per query — an Indeed limit, not the scraper's. To go beyond it, split the search into narrower runs (by city, date-posted window, or job type); dedup keeps records unique within each run.

Can I scrape Indeed without getting blocked? That's the core engineering of this actor: residential proxies geo-matched to the target domain, browser fingerprinting left intact, automatic session rotation and retries on 403s. Blocks still happen probabilistically — they're retried, not silently dropped.

How do I export Indeed jobs to Excel or Google Sheets? Every run's dataset has one-click export to Excel/CSV/JSON in the Storage tab. For Google Sheets, use Apify's Google Sheets integration to append each run's results automatically.

How often should I schedule Indeed scraping? Daily is the sweet spot for tracking new postings (combine with filters.datePosted: 1); weekly is enough for salary benchmarking. Use Apify Schedules — no code needed.

Does it handle sponsored duplicates? Yes. Sponsored listings that re-appear as organic results (same title, company and location under a different id) are collapsed into one record — while the same role legitimately posted in different cities is kept.

Can I cap my spend? Yes, twice over: maxItems stops the crawl after N unique jobs, and the platform's maximum charge limit is respected mid-run — the actor stops charging and exits cleanly when the cap is reached.

Which fields are always returned, and which depend on the listing? Title, company, location, job id and URL come back for every job. Salary, employment type and posting date are present only when Indeed itself shows them for that listing — many employers don't publish a salary, and Indeed's current US results layout surfaces the posting date on the job's own page rather than the results card. For the most complete salary, employment type and the full description, turn on scrapeJobDetails (detail mode), which opens each job's page; AI enrichment can also infer seniority and category when the structured fields are sparse.

What does AI enrichment cost on the LLM side? You bring your own Anthropic or OpenAI API key, so LLM usage is billed to you directly at provider rates; the actor only charges its enrichment fee for jobs that were successfully enriched.

What happens when Indeed changes its layout? Selectors are actively maintained — reliability is the entire point of this actor. If you ever see odd results, open an issue on the Issues tab and it will be fixed quickly; that response time is public, so you can hold me to it.

Which countries does it support? Any Indeed country domain: www (US), jp (Japan), uk, ca, de, au, in, fr, nl and more — set the country input to the domain prefix.