Indeed Jobs Scraper - Search, Filters & Browse Jobs avatar

Indeed Jobs Scraper - Search, Filters & Browse Jobs

Pricing

from $1.50 / 1,000 jobs

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. Thin Actor + VPS worker with control-plane managed egress.

Pricing

from $1.50 / 1,000 jobs

Rating

0.0

(0)

Developer

kane liu

kane liu

Maintained by Community

Actor stats

0

Bookmarked

6

Total users

2

Monthly active users

21 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 VPS worker through the control plane; this Actor handles input, row-plan output, dataset delivery, 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 200Up to your maximum total charge

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 the control-plane route changes, update WORKER_BASE_URL (and WORKER_AUTH if the API key changes) in Apify Console — no Actor code change required. Egress is supplied by the worker control plane; the Actor never mints or forwards vendor proxy URLs.

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 billed job rows for the keyword/location or Browse Jobs request. Default 70; larger requests run in parts of 70. Countries and pages share this input budget.
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 row is one billed job. jobKey is the stable hashed identity used to deduplicate rows while the control plane continues large runs in small units. Each row looks like this:

{
"source": "indeed",
"job_id": "abc123",
"jobKey": "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.

RUN_SUMMARY.placeholderTitleCount counts Dataset rows whose title is a placeholder that Indeed itself shows for some employer feeds (currently Jobs for you) instead of a role name. These rows are real jobs with their own job ID, company, location and URL. The title is kept exactly as Indeed publishes it.

How many Indeed jobs can this scraper return?

Throughput depends on keyword popularity, country site, filters, and whether detail pages are enabled. maxResults applies to the search input, defaults to 70, and larger requests are collected in parts of 70. All job row types count together, and the run stops at your maximum total charge. For large exports, 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: us → www.indeed.com, gb → uk.indeed.com, my → malaysia.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 Actor start and each result. Platform usage (compute units, proxy, and so on) is paid by the developer, not billed to you (User pays platform usage costs: No).

EventPrice
Actor start (apify-actor-start)$0.005 per start (scaled by memory GB)
Result (apify-default-dataset-item)$2.000 / 1,000 on FREE–SILVER; $1.500 / 1,000 on GOLD–DIAMOND
Tier$/1,000 resultsper result
FREE$2.000$0.002
BRONZE$2.000$0.002
SILVER$2.000$0.002
GOLD$1.500$0.0015
PLATINUM$1.500$0.0015
DIAMOND$1.500$0.0015

Example: one FREE-plan run that returns 200 jobs ≈ $0.005 start + $0.40 results. No extra platform-usage invoice on top of those events.

These result tiers take effect on the Store on 3 October 2026, 14:51 UTC. Until then the live listing still uses the previous result discounts ($3.00/1k FREE–BRONZE).

Privacy

Dataset jobKey, job_id, and job_id_hash fields store the same truncated SHA-256 of the Indeed jobkey (plaintext keys are not emitted). jobKey is the row-plan deduplication identity. 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 200 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 through the VPS worker. Any required browser or egress configuration is managed by the worker control plane.

What happens if Indeed blocks a page?

Blocked or empty pages are recorded in RUN_SUMMARY warnings. Partial datasets may still be returned. The worker uses control-plane extraction with a browser fallback; extreme filters 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.