Indeed Scraper
Pricing
from $0.06 / 1,000 jobs
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
Maintained by CommunityActor stats
0
Bookmarked
7
Total users
0
Monthly active users
a day ago
Last modified
Categories
Features
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.
| Input | Job titles or keywords and a location, Indeed search links, or Indeed job links and job keys |
| Output | One 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 |
| Ceiling | 1,000 jobs per search, 100,000 per run |
| Speed | About 150 jobs in 3 to 5 seconds (measured on our runs) |
| Account needed | None 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? | |
|---|---|
| Actor | dami_studio/indeed-jobs-scraper |
| Set one field | queries, labelled "Job titles or keywords" in the Console |
| Cap the bill | maxTotalChargeUsd on the run, for example 0.10: it never charges past that |
| MCP, one link | https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/indeed-jobs-scraper |
| How often | Daily, 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 get | Field |
|---|---|
| The job's key and link | jobKey, url |
| Title and company | title, company, companyUrl |
| Where | location, city, region, postalCode, streetAddress, countryCode |
| Pay | salaryMin, salaryMax, salaryPeriod (hour, day, week, month, year), salaryCurrency, salaryIsEstimate, salaryText |
| Job type, place of work, level | jobTypes, isRemote, isHybrid, levels |
| Skills, benefits and other tags | attributes |
| When | postedAt (on Indeed), firstPublishedAt |
| Where to apply | applyUrl, source |
| The description | description (text), descriptionHtml |
| The employer | companySize, companyRevenue, companyIndustry, companyHeadquarters, companyDescription, companyCeo, companyWebsite, companyLogoUrl |
| What found it | searchQuery, searchLocation, country |
▶️ How to scrape Indeed jobs
- Open Indeed Scraper on Apify and go to the Input tab.
- Type one job title or keyword per line under "Job titles or keywords", for example
registered nurse. - Put a city, state or ZIP code under "Location" and pick the "Country".
- Set "Jobs per search" and any filters you want.
- 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
| Field | What it is | Default |
|---|---|---|
queries | Job titles or keywords, one search per line | none |
location | City, state, ZIP code or region; empty searches the whole country | none |
country | The Indeed country site: us, uk, ca, de, fr, in and 33 more | us |
radius | Distance from the location, miles in the US and UK, kilometres elsewhere | 25 |
startUrls | Indeed search links, job links or 16-character job keys | none |
postedWithinDays | Only jobs posted in the last N days, 1 to 30 | 0 (any date) |
jobTypes | fulltime, parttime, contract, temporary, internship, perdiem | any |
workplace | remote or hybrid | any |
experienceLevels | noexperience, entry, mid, senior | any |
minYearlySalary | Leave out jobs whose pay over a year tops out below this | none |
onlyWithSalary | Leave out jobs with no pay listed | false |
maxItemsPerSearch | Jobs per search, up to 1,000 | 100 |
maxItems | Jobs in the whole run | 1000 |
includeDescription | The full description, as text and HTML | true |
proxyConfiguration | Your own connection settings, if you want them used | none |
{"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"}
| Field | How to read it |
|---|---|
salaryMin, salaryMax | Empty when the job lists no pay. Read them with salaryPeriod: 32.7 per hour is not 32.7 per year |
salaryIsEstimate | true when the range is Indeed's estimate rather than the employer's figure |
postedAt | When the job went up on Indeed; firstPublishedAt can be earlier, when the employer first posted it elsewhere |
applyUrl | Often the employer's own site, through a tracking link |
companyIndustry, companyRevenue, companyCeo | Empty 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: falsewith anerrorCode: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 infieldanddetails),NOT_SERVED(try again later),TIME_LIMITandCOST_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 want | Use |
|---|---|
| Jobs from Indeed, with pay and the employer's profile | This one |
| Jobs from Google's job search, which gathers many boards | Google Jobs Scraper |
| Jobs from ZipRecruiter | ZipRecruiter Scraper |
| Tech jobs from Dice | Dice Jobs Scraper |
| Jobs straight from company career pages | Career 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 ApifyClientclient = 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:continueprint(row["title"], row["company"], row["salaryMin"], row["salaryMax"])
Is scraping Indeed legal?
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.