Indeed Jobs Scraper - Search, Filters & Browse Jobs avatar

Indeed Jobs Scraper - Search, Filters & Browse Jobs

Pricing

from $3.00 / 1,000 results

Go to Apify Store
Indeed Jobs Scraper - Search, Filters & Browse Jobs

Indeed Jobs Scraper - Search, Filters & Browse Jobs

Scrape Indeed jobs from 60+ country sites. Extract titles, companies, salaries, locations, remote status, benefits, and descriptions via keyword search, SERP filters, or Browse Jobs. Browser + CapSolver + Apify RESIDENTIAL.

Pricing

from $3.00 / 1,000 results

Rating

0.0

(0)

Developer

kane liu

kane liu

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

9 hours ago

Last modified

Share

Scrape Indeed job listings across 60+ country sites — extract job titles, companies, salaries, locations, remote/hybrid status, benefits, ratings, and full descriptions. Search by keyword with SERP filters, or discover roles via Browse Jobs categories. This Actor is a practical Indeed API alternative for job market research, recruiting pipelines, and salary benchmarking.

Works with Indeed country domains (for example www.indeed.com, uk.indeed.com, ca.indeed.com). Scraping runs on a hosted Cloud Run worker (Patchright headed Chrome + CapSolver + sticky Apify RESIDENTIAL); this Actor handles input, dataset output, and PPE.

What does Indeed Jobs Scraper do?

Indeed Jobs Scraper lets you extract structured job data from Indeed search results and job detail pages. Give it a keyword and location (or a Browse Jobs category), pick one or more country sites, and start a run. The Actor returns clean dataset rows ready for CSV, Excel, JSON, or downstream APIs.

You can:

  • Run keyword search with filters (job type, experience, remote/hybrid, education, date posted, radius, Indeed Apply)
  • Discover jobs through Browse Jobs categories (/browsejobs)
  • Scrape up to 10 country sites in one run
  • Optionally open job detail pages for full descriptions
  • Export results with host, country, salary text, benefits, and timestamps

What job listing data can I extract from Indeed?

FieldDescription
Job titlePosition name from the listing
CompanyEmployer name
LocationCity / region / Remote text
Country + hostISO-2 country and Indeed host used
SalarySalary text when Indeed shows it
Job typesFull-time, part-time, contract, etc.
Remote / hybridWork setting when available
BenefitsBenefit chips when present
Company ratingRating and review count when shown
DescriptionFull text when scrapeDetails is enabled
Posted timeRelative or timestamp when available
Job URLCanonical Indeed job link
Browse categoryCategory label in browse mode

Why scrape Indeed job postings?

Indeed remains one of the largest public job boards worldwide. Scraping Indeed job listings helps you:

  • Build custom job databases for recruiting or lead gen
  • Benchmark salaries by role, location, and country
  • Track hiring demand and skill trends over time
  • Monitor competitors’ open roles
  • Feed AI agents, CRM workflows, or enrichment pipelines
  • Compare remote vs onsite demand across markets

How to scrape Indeed jobs

  1. Create a free Apify account.
  2. Open Indeed Jobs Scraper.
  3. Choose search or browse mode.
  4. Enter a keyword and location (search), or a browse category.
  5. Select a country site (or up to 10 via countries).
  6. Optionally enable filters and scrapeDetails.
  7. Click Start and download the Dataset as JSON, CSV, Excel, or JSONL.

Free Apify plan limits (set by this Actor's developer)

LimitFree Apify planPaid Apify plan
Runs of this Actor10 runs totalUnlimited
Results per runUp to 1,000Up to schema max (1,000)

When the run cap is hit, the run finishes with a clear status message — not an Apify platform error.

Worker URL is config, not code: the Actor reads WORKER_BASE_URL from Actor environment variables (plus optional per-run workerBaseUrl). If you migrate the worker to a new host, update WORKER_BASE_URL (and WORKER_AUTH if the API key changes) in Apify Console — no Actor code change required. Set WORKER_PROVIDES_PROXY=1 when the worker supplies its own PROXY_URL instead of Apify RESIDENTIAL.

Example: search with filters (US)

{
"scrapeMode": "search",
"keyword": "data analyst",
"location": "Remote",
"country": "us",
"jobType": "fulltime",
"experienceLevel": "entry_level",
"remoteType": "remote",
"datePosted": "7",
"maxResults": 20,
"scrapeDetails": true
}

Example: browse categories (US)

{
"scrapeMode": "browse",
"country": "us",
"browseCategory": "Healthcare",
"maxCategories": 3,
"maxResults": 15,
"scrapeDetails": false
}

Example: multi-country batch

{
"keyword": "nurse",
"countries": ["gb", "ie", "au"],
"maxResults": 30,
"scrapeDetails": false
}

Input

FieldDescription
scrapeModesearch (keyword + filters) or browse (Browse Jobs categories)
keywordIndeed q — job title, skills, or company (search mode)
locationIndeed l — city, region, zip, or Remote
countrySingle Indeed country site (ISO-2)
countriesOptional batch of up to 10 ISO-2 country codes
maxResultsMaximum job records to return
scrapeDetailsOpen detail pages for full descriptions
jobType / experienceLevel / remoteType / educationSERP filters
datePosted / radius / sort / indeedApplyOnlyMore SERP controls
browseCategory / maxCategoriesBrowse mode controls

See the Input tab for the full schema and defaults.

Output sample

Each dataset item looks like this:

{
"source": "indeed",
"job_id": "abc123",
"title": "Data Analyst",
"company": "Example Corp",
"location_text": "Remote",
"country": "us",
"host": "www.indeed.com",
"salary_text": "$80,000 - $110,000 a year",
"job_types": ["Full-time"],
"remote_type": "remote",
"benefits": ["Health insurance", "Paid time off"],
"company_rating": 3.9,
"description": "We are looking for a Data Analyst...",
"url": "https://www.indeed.com/viewjob?jk=abc123",
"captured_at": "2026-07-20T05:00:00+00:00"
}

Diagnostics are stored in the key-value store as RUN_SUMMARY and INPUT_ECHO.

How many Indeed jobs can this scraper return?

Throughput depends on keyword popularity, country site, filters, and whether detail pages are enabled. For large exports, raise maxResults, keep scrapeDetails off when you only need card-level fields, and split countries across runs if needed.

Results can vary day to day because Indeed SERPs are dynamic. A short test run is the best way to estimate volume for your query.

Which Indeed country sites are supported?

All major Indeed country hosts from Indeed’s public country list are supported via ISO-2 codes, including:

us, gb, ca, au, de, fr, jp, in, sg, ph, br, mx, ae, za, kr, my, and 40+ more.

Examples: uswww.indeed.com, gbuk.indeed.com, mymalaysia.indeed.com.

One run does not automatically sweep every country — pick country or up to 10 codes in countries.

Indeed SERP filters (search mode)

InputIndeed parameter
jobTypejt (fulltime, parttime, contract, temporary, internship, …)
experienceLevelexplvl
datePostedfromage (1 / 3 / 7 / 14)
radiusradius
remoteTypesc remote / hybrid attributes
educationsc education attributes
encouragedToApplysc fairchance / no_degree / military_encouraged
indeedApplyOnlyiafilter=1
scExtraRaw sc fragment for advanced chips
sortrelevance or date

Dynamic skill chips depend on the query; use scExtra when you already know the token.

Pricing

This Actor uses Pay per event pricing. You pay for:

EventPrice
Actor start (apify-actor-start)$0.005 per start (scaled by memory GB)
Result (apify-default-dataset-item)$3.00 / 1,000 job items ($0.003 each)

Platform usage (compute, residential proxy, etc.) is also billed to the user (Pay per event + usage). Pricing is versioned in .actor/pricing.json and can be re-applied with scripts/sync_monetization.py.

Example: one run that returns 1,000 jobs ≈ $0.005 start + $3.00 results, plus platform usage for that run.

Privacy

Dataset job_id / job_id_hash fields store a truncated SHA-256 of the Indeed jobkey (plaintext keys are not emitted). Job URLs still include Indeed’s public jk= parameter so you can open listings.

Live View / Standby

Standby Live View exposes operational endpoints only (/, /health, /input-example, /openapi.json). It does not scrape Indeed — start a normal Actor run for data collection.

Can I use this as an Indeed API alternative?

Yes — for many job-search and market-research workflows. Indeed’s public developer APIs are mainly hiring-side. Publisher job-search APIs that used to expose searchable listings have been deprecated, so teams often use an Indeed scraper Actor for titles, companies, locations, salaries, and descriptions.

Use this Actor when you need:

  • Searchable Indeed job listings as structured data
  • Multi-country coverage without maintaining your own browser farm
  • Exports into datasets, webhooks, or MCP / agent workflows

Always respect Indeed’s terms, robots rules, and applicable laws. Do not use scraped data to spam applicants or bypass apply flows. This Actor does not click Apply or Report.

FAQ

Why did my free-plan run stop with a limit message?

Free Apify plan users can run this Actor up to 10 times, with up to 1,000 results per run. These caps are set by the Actor developer, not Apify. Upgrade to a paid Apify plan for unlimited runs (schema maxResults still applies).

How do I scrape Indeed jobs by location?

Set location (city, region, zip, or Remote) and optionally radius. Combine with country for the correct Indeed domain.

Can I scrape remote Indeed jobs only?

Yes. Set remoteType to remote (or hybrid) in search mode, and/or use location: "Remote".

Does the Actor support Indeed Browse Jobs?

Yes. Set scrapeMode to browse, optionally filter with browseCategory, and control how many categories to follow with maxCategories.

Do I need an Indeed API key?

No. The Actor scrapes public Indeed pages. CapSolver and Apify RESIDENTIAL proxy credentials are configured on the Actor side for reliability.

What happens if Indeed blocks a page?

Blocked or empty pages are recorded in RUN_SUMMARY warnings. Partial datasets may still be returned. CapSolver + residential proxy reduce block rates; extreme filters or high concurrency can still hit challenges.

Can I schedule recurring Indeed scrapes?

Yes. Use Apify Schedules or the API/client to run the Actor on a cron and append or replace datasets over time.