Indeed Jobs Scraper: Salary, Remote & Skills, 23 Countries avatar

Indeed Jobs Scraper: Salary, Remote & Skills, 23 Countries

Pricing

from $3.00 / 1,000 job results

Go to Apify Store
Indeed Jobs Scraper: Salary, Remote & Skills, 23 Countries

Indeed Jobs Scraper: Salary, Remote & Skills, 23 Countries

Scrape Indeed jobs by keyword and location in 23 countries. Each job comes with salary already split into min/max/period plus annual pay, a remote/hybrid/onsite flag, skills, benefits and full description. No login, no duplicates, pay only for jobs saved.

Pricing

from $3.00 / 1,000 job results

Rating

0.0

(0)

Developer

Tidy Data Labs

Tidy Data Labs

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

11 days ago

Last modified

Share

Scrape Indeed job listings by keyword and location and get data you can use straight away: salary already split into min / max / period / currency with annual pay, a remote / hybrid / onsite flag, job type, benefits, a skills list, posting date, full description and job URL. Works on 23 Indeed country sites.

$3 per 1,000 jobs, residential proxy included. You pay only for unique jobs saved to your dataset, never for duplicates or failed pages.

Why use this Indeed scraper?

  • Salary you can sort and average. Indeed shows pay as text like "$33 - $48 an hour" or "£30,000 a year". You get salaryMin: 33, salaryMax: 48, salaryPeriod: "hour", plus salaryMinAnnual: 68640, so hourly and yearly jobs sit on one scale.
  • Remote, hybrid or onsite in one field. Filter remote jobs with workArrangement = "remote" instead of searching descriptions.
  • Skills and benefits as lists. Count the skills employers ask for, or compare benefits across companies.
  • Clean, flat records. One row per job with the same fields every time, ready for CSV, Excel, Google Sheets or a database.
  • Built to keep running. Each search runs in a fresh browser session on residential proxy, results are de-duplicated, and the run stops on its own when new searches stop finding new jobs.
  • Spend caps you control. Set Max results or a maximum charge per run, and the actor stops cleanly at the limit.

What Indeed shows vs. what you get

On IndeedIn your dataset
$33 - $48 an hoursalaryMin 33, salaryMax 48, salaryPeriod "hour", salaryCurrency "USD", salaryMinAnnual 68640, salaryMaxAnnual 99840
"This position is remote and can be located anywhere within the Continental US" (in the description)workArrangement "remote"
Requirements buried in a long descriptionskills ["SQL", "Tableau", "Power BI", "Forecasting", ...]
Just postedpostedAt "2026-10-02T05:00:00.000Z"
Benefits sectionbenefits ["Health insurance", "401(k) matching", "Paid parental leave", ...]

What does Indeed Jobs Scraper do?

Type in what you'd type into Indeed's search boxes (for example "nurse" in "Austin, TX"), choose how many jobs you want and how recent they should be, and the actor returns one structured record per job. It's built for:

  • Salary benchmarking: compare pay across roles, cities and companies without re-parsing pay text yourself.
  • Labor-market and skills research: see which skills, licenses and certifications employers ask for.
  • Job boards and aggregators: feed fresh listings into your own site, newsletter or alerts.
  • Recruiting and sales intelligence: track which companies are hiring, for what, and where.

It reads only Indeed's public, logged-out search and job pages. It never logs in and collects no data about job seekers.

What data does it extract?

FieldExample
titleRegistered Nurse (RN) – Mobile IV Therapy
company, companyRatingUnited Airlines, 3.9
location, city, state, postalCode, countryAustin, TX
salaryText (as shown)$22 - $36 an hour
salaryMin, salaryMax, salaryPeriod, salaryCurrency22, 36, hour, USD
salaryMinAnnual, salaryMaxAnnual45760, 74880
salarySourceindeed / parsed / llm
workArrangementremote / hybrid / onsite
jobType, jobTypesFull-time, [Full-time, Part-time]
benefits[Health insurance, 401(k), Paid time off]
postedAt, postedRelative2026-10-04T05:00:00Z, "Just posted"
shortDescription, descriptionfirst 300 characters, full plain text
skills[BLS Certification, RN License, Patient monitoring, …]
easyApply, isSponsored, urgentlyHiringtrue / false
jobUrlhttps://www.indeed.com/viewjob?jk=…

How to scrape Indeed jobs

  1. Click Try for free.
  2. Enter Keywords and Location, pick the Indeed country site, and set Max results and Posted within (days).
  3. Click Start. Download the results as JSON, CSV, Excel or HTML, or pull them through the Apify API.

Input example

{
"keywords": "data analyst",
"location": "Chicago, IL",
"countryDomain": "www.indeed.com",
"maxResults": 200,
"postedWithinDays": 7
}

More input examples

Remote jobs only, last 3 days:

{ "keywords": "python developer", "location": "Remote", "maxResults": 300, "postedWithinDays": 3 }

UK jobs, any date:

{ "keywords": "registered nurse", "location": "Manchester", "countryDomain": "uk.indeed.com", "maxResults": 200, "postedWithinDays": 0 }

Fast, card-only results (title, company, location, salary; no full description):

{ "keywords": "warehouse associate", "location": "Dallas, TX", "maxResults": 500, "fetchDetails": false }

Output example

{
"jobKey": "08f32bd70b67b819",
"title": "Pediatric Private Duty Nurse (LVN/RN)",
"company": "Private Household/Agency",
"location": "Georgetown, TX 78626",
"salaryText": "$22 - $36 an hour",
"salaryMin": 22,
"salaryMax": 36,
"salaryPeriod": "hour",
"salaryCurrency": "USD",
"salaryMinAnnual": 45760,
"salaryMaxAnnual": 74880,
"salarySource": "indeed",
"workArrangement": "onsite",
"jobType": "Full-time",
"jobTypes": ["Full-time", "Part-time"],
"postedAt": "2026-10-04T05:00:00.000Z",
"skills": ["CPR Certification", "BLS Certification", "RN License", "Pediatrics", "Tube feeding"],
"jobUrl": "https://www.indeed.com/viewjob?jk=08f32bd70b67b819"
}

How is salary normalized?

  1. Indeed's own structured pay when the posting has it (salarySource: "indeed").
  2. Otherwise a built-in parser reads the displayed text in many formats: ranges, "from"/"up to", K suffixes, £ € ₹ and other currencies, European 45.000 € and Indian 5,00,000 number formats, hourly/daily/weekly/monthly/yearly (salarySource: "parsed").
  3. Optional AI enrichment (off by default): turn on AI enrichment with Claude and add your own Anthropic API key. Claude then fills in pay that appears only in the description, remote/hybrid hints and extra skills (salarySource: "llm"). This runs on your Anthropic account at roughly $0.002 per job with Claude Haiku.

Annualized values assume 2,080 hours, 260 days, 52 weeks or 12 months per year.

How much does it cost to scrape Indeed?

The actor uses pay-per-result pricing: $0.003 per job saved ($3 per 1,000). Platform usage, including the residential proxy, is included in that price. The Apify free plan's monthly credit covers about 1,500 jobs.

To cap your spend, set Max results or a maximum charge per run in the run options. The actor stops cleanly when it reaches either limit.

How many results can I get?

Indeed shows logged-out visitors only the first page of results for any search. To get past that, the actor runs several first-page searches that slice your query in different ways (newest first, by distance, job type and experience level) and removes duplicates. A typical city-level search returns 100–400 unique jobs. Broad national searches return more. The run stops by itself once new searches stop turning up new jobs, so you never pay for duplicates.

For larger collections, run several searches with narrower keywords or locations.

Tips

  • Use residential proxy (the default). Indeed blocks datacenter IPs.
  • Turn off Fetch full job details for faster, cheaper-to-run searches when you only need the title, company, location and salary.
  • Set Location to Remote to search remote jobs.
  • Schedule the actor daily with Posted within = 1 to build a running feed of new jobs.

Guides

Guide 1: Build a salary benchmark for a role and city

  1. Set Keywords to the role (for example data analyst) and Location to the city.
  2. Set Max results to 300 and Posted within (days) to 30.
  3. Download the dataset as CSV or Excel. Use salaryMinAnnual and salaryMaxAnnual to compare hourly and yearly postings on the same scale, and workArrangement to compare work arrangements.
{
"keywords": "data analyst",
"location": "Chicago, IL",
"maxResults": 300,
"postedWithinDays": 30
}

Guide 2: Get a daily feed of new jobs

  1. Set your keywords and location, and set Posted within (days) to 1.
  2. Save the input as a task and add a daily Schedule in Apify Console.
  3. Connect it to Google Sheets, Slack or email from the Integrations tab, so new postings arrive automatically each morning.

Guide 3: Compare the job market across countries

Pick another Indeed country site (for example uk.indeed.com or ca.indeed.com) and run the same keywords. Salaries are normalized to min/max per period in each run, so you can compare ranges between markets after converting currency.

Guide 4: Research which skills employers ask for

Keep Fetch full job details on. Each job includes a skills list taken from the description. Count the most common skills across a few hundred postings to see what employers want for a role.

Run it from code (API)

Replace YOUR_APIFY_TOKEN with your token from Console > Settings > API & Integrations. This call runs the actor and returns the results in one request:

curl -X POST "https://api.apify.com/v2/acts/tidydata-labs~indeed-jobs-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"keywords":"nurse","location":"Austin, TX","maxResults":50}'

You can do the same with the apify-client package for Python or JavaScript, or connect the actor to Make, Zapier, n8n, Google Sheets or a webhook from the Integrations tab.

This actor collects only publicly available job postings that anyone can see without an account, and it does not collect personal data about job seekers. Job postings can still contain personal details, such as a recruiter's name, so make sure your use of the data complies with GDPR, CCPA and other applicable laws. Read Apify's blog post on the legality of web scraping for more.

Integrations and API

Connect the results to Google Sheets, Slack, Zapier, Make, Airtable or a webhook, or call the actor from code with the Apify API and the Python or JavaScript client.

Feedback

Found a bug or need a field that's missing? Open an issue on the Issues tab. We usually reply within a day.