· 15 min read
Indeed Jobs Scraper: 60+ Countries Covered (2026)
Each output record carries 56 fields of structured data, including full job descriptions, normalized salaries, precise geographic coordinates, and comprehensive company ratings. Running this scraper across Indeed's 62 supported countries yields deep insights into the labor market without requiring a login, cookies, or complex proxy management. A thousand results cost $2.00 on the free plan, which makes large-scale talent acquisition and market analysis highly cost-effective. This tool is designed for recruitment teams, researchers, and job board owners who need rich, structured company data, but it is not for those who require direct candidate application forms or internal applicant tracking system access.
Try it before you read further. Apify's free plan includes $5.00 of usage every month with no credit card, enough for up to 2,500 results at $0.002 each before platform usage. Open Indeed Jobs Scraper on Apify and run the prefilled example.
How reliable is Indeed Jobs Scraper in production?
Across the last 30 days of public runs on the Apify platform, Indeed Jobs Scraper recorded 404 runs with the following outcomes.
| Outcome | Runs | Share |
|---|---|---|
| Succeeded | 313 | 77.5% |
| Failed | 16 | 4.0% |
| Aborted by the user | 54 | 13.4% |
| Timed out | 21 | 5.2% |
| Total | 404 | 100.0% |
Our telemetry shows that about 9 in a hundred runs failed or timed out. To protect automated runs, configure automatic retries inside Apify Console and set up webhooks to alert your engineering team if a run fails. If you are scraping large datasets, divide your target searches into smaller geographical areas to prevent runs from exceeding timeout limits.
What does it cost to run Indeed Jobs Scraper?
Each result costs $0.002 on Apify's free plan, which is $2.00 per 1,000 results. Starting a run is charged separately at $0.005 per GB of Actor memory. Apify also bills the platform usage each run consumes, at the rates of your Apify plan, on top of these charges.
| Apify plan | Per result | Per 1,000 results |
|---|---|---|
| FREE | $0.002 | $2.00 |
| BRONZE | $0.00167 | $1.67 |
| SILVER | $0.00133 | $1.33 |
| GOLD | $0.001 | $1.00 |
| PLATINUM | $0.001 | $1.00 |
| DIAMOND | $0.001 | $1.00 |
Worked example: collecting 10,000 results costs $20.00 in result charges before run-start fees and platform usage. With 9.2% of runs failing or timing out in the last 30 days, budget for re-running a portion of those batches rather than assuming every run completes.
The maxItemsPerSearch control is the primary driver of your bill because it determines the total volume of results generated and written. To verify your data schema without incurring unnecessary charges, run your initial tests with this limit set to a low integer. This lets you inspect the output structure before scaling to full production runs.
How do you run Indeed Jobs Scraper from the API?
None of its 18 controls is strictly required, so the defaults below produce a valid run on their own. The payload below uses the schema's own prefilled values, so it runs as written once you substitute your API token.
Call the synchronous endpoint to start a run and receive dataset items in one request:
curl -X POST "https://api.apify.com/v2/acts/crawlerbros~indeed-jobs-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"position":"web developer","location":"San Francisco","maxItemsPerSearch":5}'
The same run from Python, using the official client:
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run_input = {
"position": "web developer",
"location": "San Francisco",
"maxItemsPerSearch": 5
}
run = client.actor("crawlerbros~indeed-jobs-scraper").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)
And from Node.js:
import { ApifyClient } from 'apify-client'
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' })
const input = {
"position": "web developer",
"location": "San Francisco",
"maxItemsPerSearch": 5
}
const run = await client.actor('crawlerbros~indeed-jobs-scraper').call(input)
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)
The synchronous endpoint holds the connection open until the run finishes, which is convenient for small batches and wrong for large ones. For anything long running, start the run asynchronously and poll, or attach a webhook, so a dropped connection does not cost you the results.
Which Indeed Jobs Scraper inputs matter, and which can you skip?
The position and location parameters are the core controls for targeting your search. Most users should leave the default values unchanged for filters like jobType or workplaceType on their initial runs to ensure they capture a broad initial dataset. To target specific URLs, you can paste Indeed search links directly into the startUrls list.
position(string): Job title, skill or keywords, e.g.web developer,nurse. Search one company's jobs withcompany:Amazon, titles only withtitle:(data analyst); quotes, OR and -exclusions work too.location(string): City, region or postal code, e.g.San Francisco,Austin, TX,10001,London. Leave empty to search the whole country.maxItemsPerSearch(integer): Maximum number of jobs to save for each search (the keyword search and each search URL). Indeed shows up to about 1,000 jobs for one search; split large searches by location or filters to collect more. Default:100.country(string): Indeed country site to search. Results come in the site's language and salaries in its currency. Default:"US".jobType(string): Employment type. Default:"".workplaceType(string): Where the work happens. Default:"".datePosted(string): Only jobs added to Indeed within this period. Default:"".experienceLevel(string): Required experience level. Default:"".educationLevel(string): Required education. Default:"".salaryMin(integer): Only jobs whose salary range reaches at least this yearly amount, in the country's currency (hourly and monthly pay is converted to yearly). Jobs without any salary information are excluded.easyApplyOnly(boolean): Only jobs you can apply to directly on Indeed. Default:false.radius(integer): Distance around the location (Indeed's default is 25). Ignored without a location.
The other 6 controls, with their defaults, are listed in the input schema on Indeed Jobs Scraper on Apify.
Fixed-choice controls: country accepts 62 values (default US), including US (United States), AR (Argentina), AU (Australia), AT (Austria); jobType accepts 12 values (default ""), including "" (Any), fulltime (Full-time), parttime (Part-time), contract; workplaceType accepts "" (Any), remote, hybrid, inPerson (In-person); datePosted accepts "" (Any time), 1 (Last 24 hours), 3 (Last 3 days), 7 (Last 7 days), 14 (Last 14 days), 30 (Last 30 days); experienceLevel accepts "" (Any), noExperience (No experience needed), entry (Entry level), mid (Mid level), senior (Senior level); educationLevel accepts "" (Any), noDegree (No degree required), highSchool (High school diploma or GED), associate (Associate degree), bachelor (Bachelor's degree), master (Master's degree), doctoral (Doctoral degree).
What does Indeed Jobs Scraper return?
The extracted records are perfect for building active job boards, tracking regional compensation trends, and sourcing hiring leads with associated company profiles. However, they conspicuously do not contain candidate resumes or private company emails that have not been published inside the job descriptions. Use this dataset to construct market maps and lead lists rather than sourcing active job-seeker profiles.
id(e.g.6b86092e2a95d2c2)positionName(e.g.Sr. Machine Learning Engineer)company(e.g.DocuSign)url(e.g.https://www.indeed.com/viewjob?jk=6b86092e2a9...)location(e.g.Seattle, WA 98104)streetAddress(e.g.999 3rd Avenue)city(e.g.Seattle)state(e.g.WA)postalCode(e.g.98104)countryCode(e.g.US)latitude(e.g.47.604954)longitude(e.g.-122.33376)salary(e.g.$178,900 - $262,825 a year)salaryMin(e.g.178900)salaryMax(e.g.262825)salaryPeriod(e.g.YEARLY)salaryCurrency(e.g.USD)salaryAnnualMin(e.g.178900)salaryAnnualMax(e.g.262825)jobType(e.g.Permanent, Full-time)jobTypesremoteWorkType(e.g.Hybrid)experienceLevel(e.g.Senior level)educationLevelsbenefitspayTypesattributesoccupationsdescriptioneasyApply(e.g.false)externalApplyLink(e.g.https://careers.docusign.com/careers-home/job...)postedAt(e.g.Today)postingDateParsed(e.g.2026-10-07)datePostedISO(e.g.2026-10-07T20:49:54Z)companyUrl(e.g.https://www.indeed.com/cmp/Docusign)companyLogo(e.g.https://d2q79iu7y748jz.cloudfront.net/s/_squa...)rating(e.g.3.5)reviewsCount(e.g.139)companyRatingscompanyCeoApproval(e.g.38)companyFounded(e.g.2003)companyIndustry(e.g.Information Technology Support Services)companySize(e.g.5,001 to 10,000)companyRevenue(e.g.$1B to $5B (USD))companyWebsite(e.g.http://www.docusign.com)companyCeo(e.g.Allan Thygesen)companyHeadquarters(e.g.San Francisco, CA)companySalariescompanyWorkWellbeingcompanyInfoisExpired(e.g.false)urgentlyHiring(e.g.false)searchQuery(e.g.software engineer)searchLocation(e.g.Seattle, WA)country(e.g.US)scrapedAt(e.g.2026-10-08T06:59:29Z)
These are the documented fields. Optional ones can be empty on a given record, so measure how often each field your deliverable depends on is populated across a real sample before automating the handoff.
How do you build the workflow end to end?
Open Indeed Jobs Scraper and work through these in order. Each step ends with something to check, so a bad configuration surfaces on a small run rather than a scheduled one.
- Select your target territory from the country dropdown to ensure the scraper accesses the correct national Indeed site.
- Input your target role, skill, or enterprise name into the position field, using the company:Name syntax for direct brand targeting.
- Define a geographic boundary in the location field and adjust the radius to narrow or expand the regional search area.
- Apply specific job criteria using workplaceType, jobType, and experienceLevel to screen out irrelevant listings.
- Set maxItemsPerSearch to 5 for a quick verification run to check the schema output without consuming excess resources.
- Keep saveOnlyUniqueItems enabled to prevent identical listings from writing duplicate records to your dataset.
- Execute the run and review the dataset in Apify Console to confirm fields like salaryAnnualMin and coordinates contain valid data.
- Check the run log for any blocks or empty responses before setting up an automated schedule.
How do you apply it? Three worked playbooks
These are Indeed Jobs Scraper's own documented use cases, each worked through as an operating pattern rather than a description.
Use case 1: Job market and salary research
Outcome: Job market and salary research: compare pay by title, city and country with structured, yearly-normalised salaries and companies' salary reports.
Configure: Set position to "data analyst", country to "US", and set includeCompanyRatings to true.
Working method: Execute searches across multiple regions by changing the location parameter, then aggregate the output records and group them by salaryAnnualMin and salaryAnnualMax.
Deliverable: A spreadsheet comparing localized average annual salaries, local currencies, and compensation ranges across your target cities.
Stop condition: The dataset contains fewer than 10 records with populated salaryAnnualMin values after scanning multiple search locations.
Use case 2: Lead generation for recruiters, staffing agencies and HR tech
Outcome: Lead generation for recruiters, staffing agencies and HR tech: companies that are hiring now, with size, revenue, industry, website, CEO and the recruiter emails and phone numbers given in the listing.
Configure: Set position to "software engineer", datePosted to "7", and keep includeCompanyRatings set to true.
Working method: Set up a weekly schedule to scrape new listings, then filter the resulting dataset to isolate records with non-empty emails or phoneNumbers fields.
Deliverable: A CSV file containing hiring company names, website URLs, industry categories, and direct recruiter contact details.
Stop condition: Three consecutive runs return zero contact records in the emails and phoneNumbers fields.
Use case 3: Employer reputation
Outcome: Employer reputation: compare employers by Indeed rating, review count, category ratings and CEO approval.
Configure: Set position to "company:Amazon", country to "US", and set includeCompanyRatings to true.
Working method: Run search queries for your list of competitor companies, extract the nested companyRatings object, and rank the companies by workLifeBalance and culture scores.
Deliverable: A structured comparison table of competitor employee satisfaction metrics, CEO approval rates, and work wellbeing scores.
Stop condition: The rating field returns null or missing for more than half of the scraped corporate profiles.
What breaks, and how do you design around it?
- Over the last 30 days, 4.0% of public runs failed and 5.2% timed out. Build retries and alerting around those rates rather than assuming every run completes.
To bypass the search ceiling where Indeed stops serving listings after about 1,000 results, split wide queries into smaller local runs using postal codes. If a specific employer has a vast volume of active listings, run distinct searches targeting different job titles or states. This allows you to reconstruct the entire hiring footprint of a major corporation without hitting search result caps.
When should you not use Indeed Jobs Scraper?
Do not use this scraper if you are targeting jobs in the United Kingdom and want to aggregate from multiple European platforms simultaneously; instead, use UK Jobs Aggregator. If you are looking for job listings from other specialized platforms or require global remote-first boards, you should consider using We Work Remotely Jobs Scraper or LinkedIn Jobs Scraper. Additionally, if your focus is entirely on employee sentiment, reviews, and detailed salary directories within the United States without active job openings, CareerBliss Company Reviews & Salaries Scraper is a more appropriate choice.
What should you check before trusting the output?
- Verify that the positionName and company fields are present in every row and do not contain empty strings.
- Confirm that the salaryCurrency matches your target market, noting that salaryAnnualMin appears only on jobs with documented pay.
- Check that companyRatings contains numeric values between 1 and 5 and reviewsCount contains integers when includeCompanyRatings is enabled.
- Verify that items containing email or phone numbers list them in the dedicated emails and phoneNumbers arrays.
- Check that the latitude and longitude fields contain valid geographic coordinates instead of missing values.
None of this proves a record is correct. It gives a scheduled Indeed Jobs Scraper run defined points where it should stop instead of quietly passing bad data downstream.
Frequently asked questions
Is there a free trial available for this scraper?
Yes. Apify's free plan includes $5.00 of monthly usage with no credit card. This covers up to 2,500 results of this Actor at the free-plan price, letting you run several test batches and verify the data format before committing to any paid plan.
How reliable is this Actor for automated daily runs?
Platform telemetry shows a success rate of 77.5%, with 16 failed runs and 21 timed-out runs out of 404 total runs. For unattended daily tracking, we recommend setting up monitoring webhooks to alert you of empty datasets and scheduling retries to manage failures.
Can I target specific countries and languages?
Yes, you can search across 62 Indeed country sites. The results will automatically return in the country's local language, and all structured salary figures will be represented in the local currency of that territory.
How do I avoid getting duplicate job listings in my dataset?
Ensure the saveOnlyUniqueItems setting is set to true. This built-in deduplication function removes identical job listings across overlapping search queries, keeping only unique records in your dataset to save on result fees.
Does this scraper extract direct email addresses and phone numbers?
Yes. The scraper extracts emails and phone numbers that employers write into the job description. These are normalized into international formats, but because most employers prefer applications through Indeed, only some listings contain this contact data.
Where to go next
When you are ready to run it, open Indeed Jobs Scraper on Apify; the free plan covers up to 2,500 results a month.
Start with the Indeed Jobs Scraper Actor page for the current input schema, pricing tier, and run history.
If you are comparing approaches rather than committing to one Actor, these category pages list every option we publish:
- Job listing scrapers covers 81 Actors in this family.
Other Actors we maintain for related data:
- Indeed Keyword Scraper: Scrape job listings from Indeed.
- We Work Remotely Jobs Scraper: Scrape remote job listings from WeWorkRemotely.com with titles, companies, locations, salaries, full descriptions, and company profiles.
- UK Jobs Aggregator: Aggregate UK and EU job listings from RemoteOK, Arbeitnow, Reed.co.uk, and Adzuna (optional API key for extra countries).
- LinkedIn Jobs Scraper: Scrape job listings from LinkedIn without login.
- CareerBliss Company Reviews & Salaries Scraper: Scrape CareerBliss.com - employee company reviews, star ratings across 8 workplace categories, real salary data by job title, and a directory of featured employers.
- InfoJobs Spain Jobs Scraper: Scrape job listings from InfoJobs.net (Spain) with titles, companies, descriptions, contract types, salaries, locations, and more.
- Seek.com.au Jobs Scraper: Scrape Seek.com.au job listings with titles, companies, locations, salaries, work arrangements, and full descriptions.
- Bayt.com Middle East Jobs Scraper: Scrape Middle East job listings from Bayt.com with titles, companies, locations, salaries, career level, experience, full descriptions, skills, and apply links.
Related guides:
- LinkedIn Jobs Scraper: Up to 2,500 Free Results a Month (2026)
- Workable Jobs Scraper: Up to 1,000 Free Results a Month (2026)
- ZipRecruiter Jobs Scraper Pro: 3 Practical Use Cases
- The Hub Startup Jobs Scraper: 19 Data Fields per Record (2026)
Resources
Actor documentation, input schema, and pricing: verified against the published Actor on 2026-10-09.
Actor last updated by its maintainers on 2026-10-08.
Run outcome figures cover the 30 day public window ending 2026-10-09.
Featured actors
Indeed Jobs Scraper
Scrape jobs from Indeed worldwide. Search by keywords and location across 60+ countries. Get full job descriptions, salaries, company info, ratings, and more. No login or API key needed.
Run on Apify ↗