Indeed Scraper avatar

Indeed Scraper

Pricing

from $0.06 / 1,000 jobs

Go to Apify Store
Indeed Scraper

Indeed Scraper

Indeed jobs scraper API with salaries and company data, from searches or links in 39 countries: title, company, pay range, job type, remote, address, posting date, description, and employer size, revenue and website. Filter by date posted, job type, remote, experience and pay. $0.065 per 1,000 jobs.

Pricing

from $0.06 / 1,000 jobs

Rating

0.0

(0)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

7

Total users

0

Monthly active users

a day ago

Last modified

Categories

Features

Limited permissions

Share

Indeed scraper for job listings: type the job you want and a place, or paste an Indeed search link, and get one row per job with the title, company, pay, job type, remote or hybrid, the full address, the date it went up, the whole description and the employer's size, revenue and website.

It reads Indeed in 39 countries, and Indeed's own filters work: posted within N days, job type, remote or hybrid, experience level. A search returns up to 1,000 jobs, and pay is filled only on the jobs that list it.

InputJob titles or keywords and a location, Indeed search links, or Indeed job links and job keys
OutputOne row per job: title, company, pay range and period, job type, remote, level, address, posting date, apply link, full description, and the employer's size, revenue, industry, headquarters and website
Ceiling1,000 jobs per search, 100,000 per run
SpeedAbout 150 jobs in 3 to 5 seconds (measured on our runs)
Account neededNone from you
Price$0.065 per 1,000 jobs, the same rate on every plan. The free plan's $5 a month covers about 76,000 jobs
Using an AI agent?
Actordami_studio/indeed-jobs-scraper
Set one fieldqueries, labelled "Job titles or keywords" in the Console
Cap the billmaxTotalChargeUsd on the run, for example 0.10: it never charges past that
MCP, one linkhttps://mcp.apify.com/?tools=fetch-actor-details,dami_studio/indeed-jobs-scraper
How oftenDaily, with "Posted within" set to 1, to catch each new job the day it goes up

🔍 What Indeed Scraper does

You give it what you are looking for and where. It searches Indeed the way the site does, 100 jobs at a time, and writes one row per job until it has as many as you asked for. Several searches can go in one run, and a job that two of them find comes back once.

Every row is complete on its own: the full description is in it, and so is the employer's profile. There is no second step to open each job.

The filters go to Indeed, and each row is checked against them again before it is written. A job that doesn't match is left out and not charged.

📋 What data you get from each Indeed job

What you getField
The job's key and linkjobKey, url
Title and companytitle, company, companyUrl
Wherelocation, city, region, postalCode, streetAddress, countryCode
PaysalaryMin, salaryMax, salaryPeriod (hour, day, week, month, year), salaryCurrency, salaryIsEstimate, salaryText
Job type, place of work, leveljobTypes, isRemote, isHybrid, levels
Skills, benefits and other tagsattributes
WhenpostedAt (on Indeed), firstPublishedAt
Where to applyapplyUrl, source
The descriptiondescription (text), descriptionHtml
The employercompanySize, companyRevenue, companyIndustry, companyHeadquarters, companyDescription, companyCeo, companyWebsite, companyLogoUrl
What found itsearchQuery, searchLocation, country

▶️ How to scrape Indeed jobs

  1. Open Indeed Scraper on Apify and go to the Input tab.
  2. Type one job title or keyword per line under "Job titles or keywords", for example registered nurse.
  3. Put a city, state or ZIP code under "Location" and pick the "Country".
  4. Set "Jobs per search" and any filters you want.
  5. Click Start, then open the Output tab or download the rows as JSON, CSV or Excel.

Run it with an empty input and you get one free sample row that shows the shape of the output.

💰 How much does it cost to scrape Indeed jobs?

$0.065 per 1,000 jobs, the same rate on every plan. The free plan's $5 a month covers about 76,000 jobs.

Not charged: the sample row, note rows that say a search found nothing or a link was wrong, jobs your filters left out, and a job a second search found again.

📥 What you give it

FieldWhat it isDefault
queriesJob titles or keywords, one search per linenone
locationCity, state, ZIP code or region; empty searches the whole countrynone
countryThe Indeed country site: us, uk, ca, de, fr, in and 33 moreus
radiusDistance from the location, miles in the US and UK, kilometres elsewhere25
startUrlsIndeed search links, job links or 16-character job keysnone
postedWithinDaysOnly jobs posted in the last N days, 1 to 300 (any date)
jobTypesfulltime, parttime, contract, temporary, internship, perdiemany
workplaceremote or hybridany
experienceLevelsnoexperience, entry, mid, seniorany
minYearlySalaryLeave out jobs whose pay over a year tops out below thisnone
onlyWithSalaryLeave out jobs with no pay listedfalse
maxItemsPerSearchJobs per search, up to 1,000100
maxItemsJobs in the whole run1000
includeDescriptionThe full description, as text and HTMLtrue
proxyConfigurationYour own connection settings, if you want them usednone
{
"queries": ["registered nurse"],
"location": "Houston, TX",
"country": "us",
"postedWithinDays": 7,
"jobTypes": ["fulltime"],
"maxItemsPerSearch": 100
}

📤 What you get back

A row from a real run on 7 November 2026, with the description cut short here:

{
"jobKey": "1186332b2f921b9f",
"url": "https://www.indeed.com/viewjob?jk=1186332b2f921b9f",
"title": "Clinical Nurse Residency Program - Leukemia",
"company": "MD Anderson Cancer Center",
"companyUrl": "https://www.indeed.com/cmp/Md-Anderson-Cancer-Center",
"location": "Houston, TX 77030",
"city": "Houston",
"region": "TX",
"postalCode": "77030",
"countryCode": "US",
"salaryMin": 32.7,
"salaryMax": 68.26,
"salaryPeriod": "hour",
"salaryCurrency": "USD",
"salaryIsEstimate": false,
"jobTypes": ["fulltime"],
"isRemote": false,
"isHybrid": false,
"levels": ["noexperience", "mid"],
"attributes": ["Academic medical center", "Direct patient care", "Care plan evaluation"],
"postedAt": "2026-11-06T10:04:38.853Z",
"firstPublishedAt": "2026-11-04T06:00:00.000Z",
"isExpired": false,
"description": "The Clinical Nurse Resident at MD Anderson Cancer Center manages patient outcomes by providing, coordinating and supporting clinical aspects of direct patient care...",
"companySize": "10,000+",
"companyRevenue": "$1B to $5B (USD)",
"companyHeadquarters": "Houston, TX",
"companyWebsite": "https://www.mdanderson.org",
"searchQuery": "registered nurse",
"searchLocation": "Houston, TX"
}
FieldHow to read it
salaryMin, salaryMaxEmpty when the job lists no pay. Read them with salaryPeriod: 32.7 per hour is not 32.7 per year
salaryIsEstimatetrue when the range is Indeed's estimate rather than the employer's figure
postedAtWhen the job went up on Indeed; firstPublishedAt can be earlier, when the employer first posted it elsewhere
applyUrlOften the employer's own site, through a tracking link
companyIndustry, companyRevenue, companyCeoEmpty when Indeed's employer profile doesn't carry them

🧾 Reading the output

Real rows have a jobKey. Two other kinds of row are free and never charged:

  • the sample row, _sample: true, on a run with an empty input;
  • note rows, ok: false with an errorCode: NO_RESULTS (a search found nothing with these filters), NOT_FOUND (Indeed has no job with that key), BAD_INPUT (a field to fix, named in field and details), NOT_SERVED (try again later), TIME_LIMIT and COST_LIMIT (the run's own limits stopped it).

To keep only jobs, filter on rows that have a jobKey.

💡 What people use it for

  • Recruiters who want every new nursing job in three cities each morning, with pay, before they call anyone.
  • Anyone tracking what a role pays in different places: the same search in ten cities, sorted by salaryMax.
  • Job boards and newsletters that need fresh listings with the full description and the employer's profile in one row.
  • Labour-market research: how many remote jobs a skill has, and which employers post the most of them.

A recipe: run it daily with "Posted within" set to 1 and your searches, keep the rows where salaryMax is above your line, and send them to a sheet or a Slack channel with an Apify integration.

🚧 What it does not do

  • No applying to jobs and no messages to employers.
  • No candidate or resume data, and no contact details of recruiters.
  • No reviews of employers.
  • Up to 1,000 jobs per search: split a big search by place or job type to go further.
  • It is not an official Indeed tool. Dami's Studio is independent and is not affiliated with or endorsed by Indeed, or by any other company named on this page.

🧭 Which job scraper do you need?

If you wantUse
Jobs from Indeed, with pay and the employer's profileThis one
Jobs from Google's job search, which gathers many boardsGoogle Jobs Scraper
Jobs from ZipRecruiterZipRecruiter Scraper
Tech jobs from DiceDice Jobs Scraper
Jobs straight from company career pagesCareer Site Jobs Scraper

❓ Questions people ask

Do I need an Indeed account to scrape jobs?

No. You don't need an Indeed account or any key. The jobs are the ones Indeed shows anyone who searches.

Why don't my numbers match what I see on Indeed?

Indeed changes its results by the minute, mixes in ads, and personalises what a signed-in visitor sees. Compare against a private browser window, at the same time, with the same place and filters.

Can I call it from code or from an AI assistant?

Yes. The API tab of the actor shows the call for your language, and the MCP link above adds it to an assistant. In Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("dami_studio/indeed-jobs-scraper").call(
run_input={"queries": ["registered nurse"], "location": "Houston, TX", "maxItemsPerSearch": 100},
max_total_charge_usd=0.10,
)
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
if row.get("ok") is False:
continue
print(row["title"], row["company"], row["salaryMin"], row["salaryMax"])

The jobs are public: it reads what a signed-out visitor sees, with no account and nothing private. Job posts can name people, such as a hiring manager, and that falls under GDPR and similar laws, so keep only what you need. Indeed's own terms still apply to what you do with the data. Apify has written about the legality of web scraping. We are not lawyers.

Can I get more than 1,000 jobs?

Yes, across several searches: the same job words in different places, or split by job type. Each search returns up to 1,000.

🆘 If something breaks

Open the Issues tab on the actor's page and tell us the input you used and the run's link. We read every issue.