Indeed Jobs Scraper - Salary, Company, Remote & Description
Pricing
from $0.04 / 1,000 job scrapeds
Indeed Jobs Scraper - Salary, Company, Remote & Description
Scrape Indeed job postings by keyword and location on 62 Indeed country sites: title, company profile and rating, salary, full description, location, job type, remote flag, skills and dates. Date, job-type, remote and salary filters; monitor mode; lookup by job key. No login.
Pricing
from $0.04 / 1,000 job scrapeds
Rating
0.0
(0)
Developer
Top Api
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
What does Indeed Jobs Scraper do?
Indeed Jobs Scraper searches Indeed job postings by keyword and location on any of the 62 Indeed country sites and turns every hit into a structured row: one row per job with the title, the company profile and rating, the salary, the full description, the location with coordinates, job type, remote flag, skills, benefits and dates. Built for recruiters and staffing teams, job boards and aggregators, and labor-market analysts who need Indeed jobs data without a login, cookies or an API key.
Indeed Job Scraper - Indeed Job Postings API - Indeed Job Search Scraper - Indeed Jobs Data Extractor
- Indeed's own job search, not a page crawl: the same search Indeed runs for your keyword and location, 100 jobs per request, up to 1,000 jobs per search (measured: 1,000 unique jobs over 10 pages, 0 duplicates).
- Every field a job board needs: title, company, salary with an annualised minimum and maximum, full description as text and HTML, location down to coordinates, job types, remote flag, apply URL - on a 300-job test run 100% of rows had a title, company, location and coordinates, 42% a salary, 86% a job type, 82% a company rating.
- One better than the rest:
salary.annual_min/salary.annual_maxnormalise hourly, daily, weekly and monthly pay to a yearly figure;is_remoteandwork_arrangementcome on every row;benefits,schedulesandskillsare split out of Indeed's attribute list;is_externaltells you whether the apply link leaves Indeed. - Filters: date window, job type, remote, minimum salary, salary-only, title keywords and company exclusions.
- Monitor mode: remembers which jobs each search already delivered and returns only new ones - pair it with a schedule for a feed of fresh postings.
- 62 country sites: indeed.com, uk.indeed.com, de.indeed.com, ca.indeed.com, in.indeed.com, jp.indeed.com and 56 more, with the local currency and labels.
- Lookup by job key: paste Indeed job keys or job URLs to get the full job, including expired postings.
- No login, cookies or Indeed API key: the actor reads only what Indeed's public search serves.
- Export anywhere: JSON, CSV, Excel, XML, RSS; schedules, webhooks, Make, Zapier, n8n, Google Sheets, Slack.
- Works with AI agents: call it through the Apify API or the MCP server;
compacttrims rows for LLM context windows.
What data can you get from Indeed jobs?
| π Job key and URL (`id`, `url`) | π Title and normalised title | π’ Company name, Indeed page, website, industry, revenue, logo |
| β Company rating and review count | π² Salary text, min, max, exact, currency, period | π Annualised salary (`salary.annual_min`, `salary.annual_max`) |
| π Location: city, state, county, postal code, street, country, latitude, longitude | π Remote / hybrid / in-person (`is_remote`, `work_arrangement`) | πΌ Job types (`job_types`) |
| π Benefits, ποΈ schedules and shifts | π§ Skills and requirements (`skills`), full Indeed taxonomy (`attributes`) | ποΈ Occupation categories |
| π Full description as text and HTML, 300-character snippet | π Apply URL, Indeed Apply flag, external-apply flag | π Posted date, date on Indeed, days ago, expired flag |
| π·οΈ Reference number, language, source feed | π Urgent-hire and high-volume-hiring flags | π Search query, location, country, page and position |
On a 300-job test run across three searches (warehouse in Dallas, nurse in Austin, software engineer in London) every row had a title, company, location, coordinates, description and apply URL; 42% published a salary, 86% a job type, 66% benefits, 82% a company rating, 78% a company website, 70% a company revenue band and 66% a postal code.
How to scrape Indeed jobs with Indeed Jobs Scraper
- Create a free Apify account - $5 of monthly credit, no card needed.
- Open Indeed Jobs Scraper and click Try for free.
- Type your keywords into Search queries (one per line), a Location and pick the Indeed country site.
- Set Max jobs per query, optionally a date window, job type, remote or salary filter.
- Click Start. Rows stream into the dataset as each page of 100 jobs arrives.
- Open the Storage tab and Export as JSON, CSV or Excel - or let a schedule run it for you.
β¬οΈ Input
| Parameter | Type | Description |
|---|---|---|
| π What to scrape | ||
searchQueries | List | Keywords, one per line, e.g. warehouse, registered nurse, company:Amazon, title:("data engineer") -intern. An Indeed search URL also works and brings its own location and filters. Default: the sample search warehouse in Dallas, TX. |
location | String | City, state, postal code or region as typed on Indeed, e.g. Dallas, TX, 75201, London, Remote. Empty = the whole country site. |
country | Select | Indeed country site: US, UK, CA, AU, IN, DE, FR, JP, BR, MX and 52 more. Default US. |
jobKeys | List | Direct lookup instead of a search: job keys (5e5dafc2a80c214d) or job URLs. Returns the full job, expired postings included. |
| π― Filters (applied by Indeed) | ||
sortBy | Select | relevance (default) or date (newest first - pairs with monitor mode). |
postedWithinDays | Select | Any time, 1, 3, 7, 14 or 30 days, by the date the job reached Indeed. |
jobType | Select | Any, fulltime, parttime, contract, temporary, internship, permanent. |
remote | Select | Any, remote, hybrid, inperson. |
radius | Integer | Miles around the location. Default 25. |
minSalary | Integer | Minimum yearly base salary in the site's currency, e.g. 50000. Jobs without a salary stay unless withSalaryOnly is on. |
| βοΈ Refine results | ||
withSalaryOnly | Boolean | Keep only jobs that publish a salary or hourly rate. Default false. |
titleKeywords | String | Keep only titles containing one of these, e.g. nurse, rn. |
excludeKeywords | String | Drop jobs whose title or company contains one of these, e.g. staffing, recruiting, travel. |
| β Extra data | ||
includeDescription | Boolean | Adds description_text, description_html and description_snippet - charged as job-description at $0.01 per 1,000 jobs that carry one. Default true. |
| π Monitoring | ||
monitorMode | Boolean | Return only jobs not delivered by previous runs of the same search. Pair with a daily schedule. |
monitorStoreName | String | Name of the key-value store that keeps the per-search memory. Default indeed-jobs-monitor. |
| π¦ Output | ||
maxResultsPerQuery | Integer | Default 100; 0 = everything Indeed serves (at most 1,000 per search). |
maxItems | Integer | Hard cap for the whole run. 0 = none. |
compact | Boolean | Core fields only, sized for AI agents and MCP. |
| βοΈ Advanced | ||
proxyConfiguration | Object | Default: Apify proxy. Indeed's job-search API answered Apify datacenter and residential proxies alike in testing. |
maxConcurrency | Integer | Parallel searches, 1-8. Default 4. |
Input JSON
{"searchQueries": ["registered nurse", "https://www.indeed.com/jobs?q=warehouse&l=Dallas%2C+TX&fromage=7"],"location": "Austin, TX","country": "US","sortBy": "date","postedWithinDays": "7","jobType": "fulltime","withSalaryOnly": true,"maxResultsPerQuery": 100}
Use Indeed's search syntax for exact matches
Plain keywords use Indeed's broad matching and bring related roles. Do: title:("registered nurse") for the exact phrase in the title, nurse -travel to exclude a word, company:Amazon for one employer Β· Don't: paste a whole sentence (looking for a nursing job in Austin), which Indeed treats as loose keywords and returns unrelated jobs.
One run, one country site
country picks the Indeed site, its language and its currency. A search for lager with country: "DE" runs on de.indeed.com and returns EUR salaries and German labels (Vollzeit); the same keyword on US returns almost nothing. To search several countries, add one Indeed URL per country to searchQueries (https://uk.indeed.com/jobs?q=warehouse&l=London): the URL's host sets the site for that line.
Pick the date window from the date on Indeed
postedWithinDays and the date_on_indeed field use the moment the posting reached Indeed, which is what Indeed's own "Date posted" filter uses; date_published is the employer's date and can be a day earlier. A job is checked against the window again.
Monitor mode works best with newest-first sorting
Set sortBy: "date", monitorMode: true and a cap at least as large as the daily volume of your search. Each run reads the newest jobs, delivers only the ones it has not delivered before and stops at the first page that is entirely known - a typical daily check costs one API request.
β¬οΈ Output
Every Indeed job becomes one dataset item. Here is the table view of a test run for warehouse in Dallas, TX and registered nurse in Austin, TX:
And one row as JSON (description shortened):
{"id": "5891fd4c8516f38a","title": "Registered Nurse - RN","company": { "name": "Baylor Scott & White Institute for Rehabilitation", "rating": 3.6, "review_count": 164, "website": "https://www.bswrehab.com/", "industry": "Health Care", "indeed_url": "https://www.indeed.com/cmp/Baylor-Scott-&-White-Institute-For-Rehabilitation" },"location": { "formatted": "Lakeway, TX 78734", "city": "Lakeway", "state": "TX", "postal_code": "78734", "country_code": "US", "latitude": 30.3711, "longitude": -97.8699 },"is_remote": false,"job_types": ["Full-time"],"benefits": ["Disability insurance", "Dental insurance", "Tuition reimbursement", "Paid time off"],"salary": { "text": "$32 - $48 an hour", "min": 32, "max": 48, "currency": "USD", "period": "hour", "annual_min": 66560, "annual_max": 99840 },"description_snippet": "Overview: Baylor Scott & White Institute for Rehabilitation Location: Lakeway, TX Registered Nurse (RN) Inpatient Full Time Hours: Days 7a - 7p Compen ...","url": "https://www.indeed.com/viewjob?jk=5891fd4c8516f38a","apply_url": "https://jobs-selectmedicalcorp.icims.com/jobs/385837/job","is_external": true,"date_on_indeed": "2026-10-03T09:02:21.814Z","posted_days_ago": 0,"search_query": "registered nurse","country": "US"}
Fields
| Field | Type | What it is | Fill on test run |
|---|---|---|---|
id, url, title | string | Indeed job key, job page on the country site, title | 100% |
normalized_title | string | Indeed's normalised title | 99% |
company.name, company.key, company.indeed_url | string | Employer and its Indeed company page | 100% / 96% / 94% |
company.website, company.industry, company.revenue, company.description | string | Company profile from Indeed's employer dossier | 78% / 26% / 70% / 66% |
company.logo_url, company.header_image_url | string (URL) | Company images | 77% / 70% |
company.rating, company.rating_count, company.review_count | number | Indeed company rating (0-5) and counts | 82% |
location.* | object | formatted, city, state, county, postal_code, street_address, country_code, country, latitude, longitude | 100% (postal code 66%, street 51%) |
is_remote, work_arrangement | boolean, string | Indeed's remote / hybrid / in-person tag | always / 17% tagged |
job_types, benefits, schedules, skills | string[] | Indeed's attributes split by taxonomy group | 86% / 66% / 37% / 100% |
attributes, occupations | object[] | Every attribute and occupation as key + label | 100% |
salary | object | text, min, max, exact, currency, period, annual_min, annual_max; null when the posting has no salary | 42% |
description_text, description_html, description_snippet | string | Full description (add-on) and its first 300 characters | 100% with the add-on |
apply_url, is_indeed_apply, is_external | string, boolean | Where applying leads; Indeed Apply available; link leaves indeed.com | 100% / 57% true / 89% true |
source_name, source_type | string | Feed the posting came from (Indeed or the employer / ATS) | 100% |
is_urgent_hire, is_high_volume_hiring, work_schedule | boolean, string | Hiring signals when Indeed shows them | 0% / 19% / 13% |
date_published, date_on_indeed, posted_days_ago | string (ISO 8601), integer | Employer date, date the job reached Indeed, age | 100% |
expired, expiration_date, ref_num, language | boolean, string | Status and references | 100% / 2% / 100% / 100% |
search_query, search_location, country, sort, page, position, scraped_at | string, integer | Where the row came from | 100% |
How can I use Indeed jobs data?
- π― Recruiters and staffing agencies - find companies hiring now for a role in a metro area, with the company website, rating and revenue band on the same row.
- π Job boards and aggregators - publish fresh listings with full descriptions, parsed salaries, coordinates and the external apply link; run it hourly with
sortBy: "date"and monitor mode. - π° Compensation analysts - compare
salary.annual_min/salary.annual_maxby title, region and country without converting hourly and yearly pay by hand. - π’ Sales and partnership teams - a company posting ten warehouse jobs this week is buying equipment, software and services; filter by
postedWithinDaysand group bycompany.name. - π€ AI and research teams - feed
description_text,skillsandbenefitsto an LLM; usecompactto keep the rows small. - π Labor-market researchers - run the same search on a schedule and track postings, salaries and remote share week over week across 62 countries.
How much does it cost to scrape Indeed jobs?
Indeed Jobs Scraper is pay-per-result: $0.037 per 1,000 jobs plus $0.01 per 1,000 jobs with the full description (on by default, so $0.047 per 1,000 jobs with descriptions), no start fee.
| Jobs | With description (default) | Without description |
|---|---|---|
| 100 | $0.0047 | $0.0037 |
| 1,000 | $0.047 | $0.037 |
| 10,000 | $0.47 | $0.37 |
| 100,000 | $4.70 | $3.70 |
There is nothing else to pay: Apify platform usage (compute, proxy) is included in these prices. On the test runs a 25-job search took 8 seconds on 256 MB; a 1,000-job search is 10 API requests.
Integrations, API, scheduling & MCP
- Schedules: run Indeed Jobs Scraper hourly, daily or weekly from the Schedules tab; combine with
monitorModeandsortBy: "date"to get only new jobs. - Webhooks: fire a URL when a run finishes - push rows to your ATS, CRM, Slack or a sheet.
- No-code: Make, Zapier, n8n, Google Sheets, Airtable, Slack via Apify integrations.
- API: call it from Node.js or Python with
apify-client- code on the API tab and the Apify API reference. - MCP / AI agents: connect Claude, Cursor or any MCP client through the MCP tab and ask for Indeed jobs in plain language;
compact: truekeeps the rows small.
More TopApi scrapers
| π Google Maps Reviews Scraper - reviews of any place with ratings, owner replies and dates | π΅ TikTok Scraper - posts, stats and transcripts by profile, hashtag or keyword | πΈ Instagram Scraper - posts, reels and profiles with engagement |
| π Facebook Search Posts Scraper - public posts found by keyword search | πΌ Indeed Jobs Scraper - this actor: Indeed job postings by keyword, location and country | π§ All TopApi actors |
Limits & empty runs
- Results per search: Indeed serves 100 jobs per request and stops at 1,000 per search (measured). Split a broad search by city, radius, date window or job type to go deeper.
- Speed: about 100 jobs per second of API time; a 25-job run finished in 8 seconds on 256 MB including container start.
- Salary: 42% of US jobs published a salary on the test run;
salaryisnullfor the rest, never a fabricated zero. Indeed's own salary estimates are not part of this data. - Remote tag:
work_arrangementis filled only when Indeed tags the job (17% on the test run);is_remotealso reads a "Remote" location. - Hiring signals:
is_urgent_hire, repost and applicant counts are not exposed by Indeed's public search and are not shipped as fields (exceptis_high_volume_hiring, filled on 19%). - Empty dataset: means no jobs match the search and filters, an unknown job key, or every job was already delivered in monitor mode - the run status says which.
- Lookups: a job key Indeed does not return is listed under
notFoundin the run summary.
FAQ
How many Indeed jobs can Indeed Jobs Scraper collect in one run?
Up to 1,000 per search query (Indeed's own ceiling, measured as 10 pages of 100 with 0 duplicates) and as many queries as you list. A query list of 20 city-level searches returns up to 20,000 jobs in one run.
Can I run Indeed Jobs Scraper on a schedule to get new jobs automatically?
Yes. Save your input as a task, open Schedules, pick the cadence, and turn on monitorMode with sortBy: "date". Each run delivers only the jobs it has not delivered before.
Can Indeed Jobs Scraper search more than one country?
Yes. country sets the Indeed site for the run (62 sites); a search URL from another site in searchQueries (for example https://uk.indeed.com/jobs?q=warehouse&l=London) runs on that site in the same run.
Can I integrate Indeed Jobs Scraper with other apps?
Yes - Make, Zapier, n8n, Google Sheets, Slack and more via Apify integrations, or use webhooks to trigger an action when a run finishes.
Can I use Indeed Jobs Scraper with the Apify API?
Yes. The API lets you start runs, fetch datasets and manage schedules. Use apify-client for Node.js or Python; the API tab has ready-to-paste code.
Can I use Indeed Jobs Scraper through an MCP server?
Yes. Open the MCP tab, connect your MCP client (Claude Desktop, Cursor, LibreChat...), and ask for Indeed jobs in plain language. Set compact: true so each job is a short row.
Do I need an Indeed account, cookies or an API key for Indeed Jobs Scraper?
No. The actor reads only what Indeed's public job search serves to any visitor; you pass keywords, a location and a country and nothing else.
Why did my Indeed Jobs Scraper run return no results?
Most often the filters are too tight (a 24-hour window plus withSalaryOnly on a small market), the search uses a sentence instead of keywords, or the location is spelt in a way Indeed does not recognise. In monitor mode an empty run means nothing new was posted. The run status names the cause.
How is Indeed Jobs Scraper different from other Indeed scrapers?
It reads Indeed's own job-search API instead of rendering pages, so it needs no browser and 256 MB of memory; it annualises every salary, splits job types, benefits, schedules and skills out of Indeed's attributes, flags remote and external-apply jobs, applies date, type, remote, salary and keyword filters, and remembers what it delivered for scheduled monitoring - at $0.047 per 1,000 jobs with descriptions.
Is it legal to scrape Indeed jobs data?
Indeed Jobs Scraper extracts only publicly available job postings; it does not log in or collect private data. Job postings are business data, but descriptions can contain personal data such as a recruiter's name or phone number, which is regulated (for example by GDPR). Make sure you have a legitimate purpose before you use it.
Your feedback
We keep improving Indeed Jobs Scraper. Found a bug or missing a field? Open an issue on the Issues tab - we answer within one working day.

