Indeed Jobs Scraper avatar

Indeed Jobs Scraper

Pricing

from $1.50 / 1,000 job listings

Go to Apify Store
Indeed Jobs Scraper

Indeed Jobs Scraper

Scrape Indeed job listings by keyword, country, and location. Extract titles, companies, salaries, full descriptions, benefits, skills, posted dates, apply links, and job URLs. Export data, run via API, schedule and monitor runs, or integrate with other tools.

Pricing

from $1.50 / 1,000 job listings

Rating

0.0

(0)

Developer

Chronometrica

Chronometrica

Maintained by Community

Actor stats

2

Bookmarked

5

Total users

0

Monthly active users

a day ago

Last modified

Categories

Share

What does Indeed Jobs Scraper do?

Indeed Jobs Scraper allows you to extract clean, deduplicated job data from Indeed job listings: job title, full description, company name, location, salary, employment type, benefits, skills, apply links, posting metadata, and more.

To get that data, choose the Indeed country site, enter keywords, optionally add a location, set how many jobs to save, and click Start. You can also run the scraper through the Apify API, schedule it, or connect it to other tools. It saves one row per job by default, so overlapping keywords, locations, and pages do not fill your dataset with duplicate listings.

With Indeed Jobs Scraper, you can:

  • Scrape Indeed job listings by job title, keyword, company, country, and location.
  • Extract detailed job posting data, including description text and HTML when available.
  • Collect salary ranges, company details, location fields, benefits, skills, apply URLs, and job URLs.
  • Filter Indeed jobs by posting date, radius, job type, remote status, employer, salary period, and minimum salary.
  • Run one country-wide search from the form or larger keyword/location matrices from JSON or API input.
  • Save clean unique job listings with duplicate skips counted in the run summary.
  • Download Indeed job data in JSON, JSONL, CSV, Excel, XML, RSS, or HTML.
  • Check the run summary to see how many jobs were found, saved, skipped, duplicated, filtered, or stopped.

What job listing data can I extract?

With this Actor, you can extract the following data from public Indeed job postings:

💼 Job title🏢 Company name📍 Job location
📝 Full description text🧾 Description HTML🔎 Description status
💰 Salary range💵 Salary currency⏱ Salary period
🧑‍💻 Employment type🪜 Seniority🏠 Remote status
🎁 Benefits🧰 Skills🚀 Apply link
🔗 Indeed job URL🏷 Sponsored / Easy Apply📅 Posted date
🌎 Country and source site🔍 Search keyword🧭 Search location
📊 Jobs saved♻️ Duplicates skipped🚦 Stop reason

Here are the main output groups:

Data groupExample fields
💼 Job detailsjobId, title, employmentType, seniority, isRemote, isSponsored, isEasyApply
🏢 Company detailscompanyName, companyUrl, companyWebsite, companyIndustry, companyEmployees, companyRevenue
📍 LocationlocationRaw, locationCity, locationRegion, locationCountry, resolvedCountry, sourceSite
💰 SalarysalaryRaw, salaryMin, salaryMax, salaryCurrency, salaryPeriod, salarySource
📝 DescriptiondescriptionSnippet, descriptionText, descriptionHtml, descriptionStatus
🚀 Links and enrichmentbenefits, skills, applyUrl, finalApplyUrl, jobUrl
📊 Run summarycandidateItemsSeen, jobsSaved, duplicateCandidatesSeen, duplicatesSkipped, warnings, stopReason

Salary, benefits, skills, company profile fields, and final apply URLs depend on what is available on each Indeed listing. If full job descriptions matter for your workflow, check the descriptionStatus field in the output.

Can I use this Actor through an API?

Yes. You can run Indeed Jobs Scraper manually in Apify Console or use it as an API for Indeed job data.

Developers can call this Actor through:

  • Apify API
  • Python SDK
  • Node.js SDK
  • Webhooks
  • Scheduled runs
  • Apify integrations

This makes it useful for recruiting pipelines, dashboards, job boards, warehouse loads, agents, and automated market research workflows.

Why scrape Indeed?

Indeed is a large source of job market data. Scraping Indeed can help you track hiring demand, salary signals, employer activity, and job-description language across roles and locations.

Here are just some of the ways you could use Indeed job data:

📈 Monitor hiring trendsTrack demand by role, skill, location, company, or remote status.
💰 Benchmark salariesCompare salary ranges across markets and job families.
🧲 Build recruiting workflowsCollect active job listings for sourcing, staffing, and lead generation.
🏢 Track competitorsWatch hiring activity, expansion signals, and technology adoption.
🧪 Research labor marketsAnalyze job descriptions, benefits, skills, and compensation signals.
🧱 Enrich job boardsFeed clean Indeed job data into apps, databases, and career tools.

Scrape Indeed salaries and full descriptions

Use Indeed Jobs Scraper when salary ranges, full descriptions, and job URLs are the fields that matter most. Each saved row can include salaryRaw, salaryMin, salaryMax, salaryCurrency, salaryPeriod, descriptionText, descriptionHtml, descriptionStatus, applyUrl, and jobUrl when those values are available on the public listing.

Indeed benefits and skills scraper

Indeed listings often include useful labor-market signals beyond the job title. This Actor saves benefits, skills, employment type, seniority, remote status, company fields, and posting metadata where available, so you can compare hiring requirements across roles, markets, and employers.

Indeed Jobs API for job listings

Indeed Jobs Scraper can be run manually in Apify Console or called as an API. Use it from scheduled runs, webhooks, the Apify API, Python SDK, Node.js SDK, or downstream warehouse jobs when you need repeatable Indeed job-listing data.

No Indeed account login or user-provided browser cookies are required.

Clean, duplicate-free Indeed job datasets

Indeed search results can overlap across related keywords, locations, and pages. For normal datasets, keep saveOnlyUniqueItems enabled so the Actor saves one row per job and skips duplicate candidates before they become saved rows.

The OUTPUT summary shows candidateItemsSeen, duplicateCandidatesSeen, duplicatesSkipped, and jobsSaved, so you can see how many matching rows were found, how many were duplicates, and how many unique job listings were saved. Turn unique-job mode off only when you intentionally want to measure keyword overlap or search ranking behavior.

How much does scraping Indeed cost?

Indeed Jobs Scraper uses a Pay-Per-Event pricing model. You are charged for saved job listings.

The current price is $1.50 per 1,000 saved job listings, or $0.0015 per job listing. For example:

Saved job listingsEstimated Actor charge
100 jobs$0.15
1,000 jobs$1.50
10,000 jobs$15.00

Check the Pricing tab for the current rate before production runs. Start with maxItems between 10 and 100 if you want to test the output before running larger searches. For normal runs, keep Unique jobs only enabled so duplicate candidates are skipped before they become saved rows.

How do I use Indeed Jobs Scraper?

Indeed Jobs Scraper was designed for an easy start even if you've never extracted data from the web before. Here's how you can scrape Indeed job data with this tool:

  1. Create or log in to your Apify account.
  2. Open Indeed Jobs Scraper.
  3. Choose the Indeed country site to search.
  4. Add a job title, keyword, skill, or company to search for.
  5. Optionally add a location. Location narrows the keyword search; leave it empty for a country-wide search.
  6. Set the maximum number of job listings to collect.
  7. Add filters such as posted date, radius, job type, remote-only, employer exclusions, or salary filters if needed.
  8. Click Start and wait for the data to be extracted.
  9. Download your data in JSON, JSONL, CSV, Excel, XML, RSS, or HTML.

⬇️ Input

The input uses one main search flow:

  1. Country Choose the Indeed country site to search.

  2. Keywords Search Indeed by job titles/keywords inside the selected country.

  3. Location Optionally enter a city, state, province, or region. Location narrows the keyword search; it is not a separate search mode. Leave it blank for country-wide results.

Job listings to collect is the shared cap for the whole run. All keywords and the selected country/location share this same save limit.

You can also add optional filters for date, radius, job type, remote jobs, employers, salary, and enrichment.

Here's a simple input example for a country-wide software engineer search in the United States:

{
"searchTerm": "software engineer",
"country": "us",
"location": "",
"postedWithinDays": "7",
"radiusMiles": 25,
"sortBy": "relevance",
"maxItems": 25,
"maxPagesPerSearch": 2,
"balanceKeywordCoverage": true,
"saveOnlyUniqueItems": true,
"excludeCompanies": "",
"salaryType": "any",
"minSalary": 0,
"followApplyRedirects": false,
"scrapeCompanyDetails": false,
"jobType": "any",
"remoteOnly": false
}

Click on the Input tab for a full explanation of input in JSON.

Search terms

Use one job title, skill, company, or role family per line. Multiple distinct search terms can help you collect broader job market data.

Good search terms:

data engineer
analytics engineer
data scientist

Overlapping search terms can return the same job more than once. Keep saveOnlyUniqueItems enabled unless you are measuring keyword overlap or search ranking.

Locations and countries

Choose one Indeed country site first. Location is optional and narrows the keyword search inside that country. For a country-wide search, leave the location field empty.

Supported countries:

Argentina, Australia, Austria, Bahrain, Belgium, Brazil, Canada, Chile, China,
Colombia, Costa Rica, Czech Republic, Denmark, Ecuador, Egypt, Finland, France,
Germany, Greece, Hong Kong, Hungary, India, Indonesia, Ireland, Israel, Italy,
Japan, Kuwait, Luxembourg, Malaysia, Mexico, Morocco, Netherlands, New Zealand,
Nigeria, Norway, Oman, Pakistan, Panama, Peru, Philippines, Poland, Portugal,
Qatar, Romania, Saudi Arabia, Singapore, South Africa, South Korea, Spain,
Sweden, Switzerland, Taiwan, Thailand, Turkey, Ukraine, United Arab Emirates,
United Kingdom, United States, Uruguay, Venezuela, Vietnam

Filters, quality controls, and enrichment

OptionWhat it does
postedWithinDaysKeeps jobs from the selected freshness window.
radiusMilesSearches around the selected location.
jobTypeFilters full-time, part-time, contract, or internship jobs.
remoteOnlyReturns remote jobs only.
excludeCompaniesSkips matching employers and counts skipped rows in the run summary.
salaryType and minSalaryFilters jobs by salary period and minimum salary when salary data is available.
saveOnlyUniqueItemsRemoves duplicate jobs from overlapping keywords, locations, and pages.
balanceKeywordCoverageGives each keyword a turn before going deeper into one keyword's pages.
followApplyRedirectsAdds the final employer or ATS apply URL when available. This is slower.
scrapeCompanyDetailsAdds company website, industry, size, revenue, and description when available.

⬆️ Output sample

The results will be wrapped into a dataset which you can find in the Output tab. Each result is one saved Indeed job listing.

For easier postprocessing, export the results to one of the supported formats: JSON, JSONL, CSV, Excel spreadsheet, XML, RSS, or HTML table.

Here's an example of the exported JSON output:

{
"jobId": "example-job-key",
"title": "Junior Data Analyst",
"companyName": "Example Company",
"companyUrl": "https://www.indeed.com/cmp/example-company",
"locationRaw": "London",
"locationCity": "London",
"locationRegion": "ENG",
"locationCountry": "gb",
"resolvedCountry": "gb",
"sourceSite": "uk.indeed.com",
"isRemote": false,
"salaryRaw": "GBP 24,000-42,000 per year",
"salaryMin": 24000,
"salaryMax": 42000,
"salaryCurrency": "GBP",
"salaryPeriod": "year",
"salarySource": "listing",
"employmentType": "fulltime",
"seniority": "junior",
"descriptionSnippet": "Support data-driven decision-making processes...",
"descriptionText": "Full job description text...",
"descriptionHtml": "<p>Full job description HTML...</p>",
"descriptionStatus": "full",
"benefits": ["Example benefit"],
"skills": ["SQL", "Python", "Power BI"],
"applyUrl": "https://example.com/apply",
"jobUrl": "https://uk.indeed.com/viewjob?jk=example-job-key",
"query": "data analyst",
"searchLocation": "London",
"verifiedAt": "2026-06-21T02:15:24.063Z",
"isExpired": false,
"verificationSource": "search",
"scrapedAt": "2026-06-21T02:15:24.063Z"
}

Run summary

Indeed Jobs Scraper also saves an OUTPUT summary in the default key-value store. Use it to see why the final number of saved jobs changed.

{
"stopReason": "max_items_reached",
"resolvedCountry": "gb",
"sourceSite": "uk.indeed.com",
"searchesQueued": 1,
"pagesParsed": 1,
"requestedMaxItems": 10,
"candidateItemsSeen": 100,
"jobsSaved": 10,
"duplicateCandidatesSeen": 0,
"duplicatesSkipped": 0,
"rowsExcludedByCompany": 0,
"rowsExcludedByDate": 0,
"rowsExcludedBySalary": 0,
"blockedPages": 0,
"failedRequests": 0,
"warnings": [],
"statusMessage": "Saved 10 Indeed jobs."
}

Why did I get fewer jobs than requested?

maxItems is a cap on saved rows, not a guarantee that every search has that many matching jobs.

If your run saves fewer jobs than requested, check the OUTPUT summary. It shows whether rows were skipped because of duplicates, employer exclusions, date filters, salary filters, source exhaustion, page limits, failed requests, or blocked pages.

Common reasons include:

  • The selected role and location have fewer available jobs than maxItems.
  • Strict filters removed many candidate rows.
  • Multiple keywords returned the same jobs and unique-job mode skipped duplicates.
  • The search depth limit was reached before enough unique matching jobs were found.

If you need more rows, increase maxPagesPerSearch, relax strict filters, add more distinct keywords, expand the search radius, or search a broader location.

Tips for scraping Indeed

  • Start with a small test run and inspect the dataset before increasing maxItems.
  • Use distinct keywords instead of near-duplicates.
  • Keep saveOnlyUniqueItems enabled for normal datasets.
  • Use postedWithinDays for fresh job monitoring.
  • Enable followApplyRedirects only when you need the final apply destination.
  • Enable scrapeCompanyDetails only when company profile enrichment matters.
  • Check descriptionStatus when full job descriptions are important.

FAQ

Does Indeed Jobs Scraper need login or cookies?

No. You do not need to provide an Indeed account, login session, or browser cookies.

Can I use Indeed Jobs Scraper through an API?

Yes. Run it with the Apify API, Python SDK, Node.js SDK, webhooks, schedules, or integrations. The dataset contains saved job rows and the OUTPUT key-value store record contains the run summary.

Why are salaries, benefits, skills, or full descriptions sometimes missing?

Those fields depend on what Indeed exposes for each listing. Use descriptionStatus, salary fields, and the run summary to separate complete rows from partial rows.

How do I avoid duplicate jobs?

Keep saveOnlyUniqueItems enabled. The Actor saves one row per job across overlapping keywords, locations, and pages. The OUTPUT summary reports candidateItemsSeen, duplicateCandidatesSeen, duplicatesSkipped, and jobsSaved, so you can audit how many candidates were found, skipped as duplicates, and saved as unique job listings.

How much does it cost?

The current Actor charge is $1.50 per 1,000 saved job listings. Check the Pricing tab before production runs because live Store pricing is the source of truth.

This Actor extracts public job listing data. You are responsible for making sure your use case complies with applicable laws, platform terms, and privacy rules.

Job listings can sometimes include personal data or contact details. You should not scrape, store, or process personal data unless you have a legitimate reason and the right legal basis. If you're unsure whether your reason is legitimate, consult your lawyers.

Indeed is a trademark of its owner. This Actor is independent and is not affiliated with, endorsed by, or sponsored by Indeed.

  • LinkedIn Jobs Scraper for LinkedIn job listings, search URLs, job IDs, Easy Apply signals, and job criteria.
  • Indeed Jobs Scraper for Indeed salaries, full descriptions, benefits, skills, and apply links.

Support

If a run does not return what you expected, open an issue with the run ID and the input you used. The run summary shows saved rows, skipped rows, filters, warnings, and stop reason so support can be specific.

Related searches: Indeed scraper, Indeed jobs scraper, scrape Indeed jobs, Indeed job listings, remove duplicate jobs, duplicate-free job scraper, unique job listings, deduped job listings, job board deduplication, Indeed job descriptions, Indeed full description scraper, Indeed salary scraper, Indeed benefits and skills scraper, Indeed Jobs API, job market data, recruiting data, HR analytics, salary benchmarking, job board data, company hiring signals.