Indeed Jobs Scraper - Salary, Company, Remote & Description avatar

Indeed Jobs Scraper - Salary, Company, Remote & Description

Pricing

from $0.04 / 1,000 job scrapeds

Go to Apify Store
Indeed Jobs Scraper - Salary, Company, Remote & Description

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

Top Api

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

4 days ago

Last modified

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 jobs search results page that Indeed Jobs Scraper turns into rows

  • 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_max normalise hourly, daily, weekly and monthly pay to a yearly figure; is_remote and work_arrangement come on every row; benefits, schedules and skills are split out of Indeed's attribute list; is_external tells 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; compact trims 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

  1. Create a free Apify account - $5 of monthly credit, no card needed.
  2. Open Indeed Jobs Scraper and click Try for free.
  3. Type your keywords into Search queries (one per line), a Location and pick the Indeed country site.
  4. Set Max jobs per query, optionally a date window, job type, remote or salary filter.
  5. Click Start. Rows stream into the dataset as each page of 100 jobs arrives.
  6. Open the Storage tab and Export as JSON, CSV or Excel - or let a schedule run it for you.

⬇️ Input

ParameterTypeDescription
πŸ” What to scrape
searchQueriesListKeywords, 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.
locationStringCity, state, postal code or region as typed on Indeed, e.g. Dallas, TX, 75201, London, Remote. Empty = the whole country site.
countrySelectIndeed country site: US, UK, CA, AU, IN, DE, FR, JP, BR, MX and 52 more. Default US.
jobKeysListDirect lookup instead of a search: job keys (5e5dafc2a80c214d) or job URLs. Returns the full job, expired postings included.
🎯 Filters (applied by Indeed)
sortBySelectrelevance (default) or date (newest first - pairs with monitor mode).
postedWithinDaysSelectAny time, 1, 3, 7, 14 or 30 days, by the date the job reached Indeed.
jobTypeSelectAny, fulltime, parttime, contract, temporary, internship, permanent.
remoteSelectAny, remote, hybrid, inperson.
radiusIntegerMiles around the location. Default 25.
minSalaryIntegerMinimum yearly base salary in the site's currency, e.g. 50000. Jobs without a salary stay unless withSalaryOnly is on.
βœ‚οΈ Refine results
withSalaryOnlyBooleanKeep only jobs that publish a salary or hourly rate. Default false.
titleKeywordsStringKeep only titles containing one of these, e.g. nurse, rn.
excludeKeywordsStringDrop jobs whose title or company contains one of these, e.g. staffing, recruiting, travel.
βž• Extra data
includeDescriptionBooleanAdds description_text, description_html and description_snippet - charged as job-description at $0.01 per 1,000 jobs that carry one. Default true.
πŸ” Monitoring
monitorModeBooleanReturn only jobs not delivered by previous runs of the same search. Pair with a daily schedule.
monitorStoreNameStringName of the key-value store that keeps the per-search memory. Default indeed-jobs-monitor.
πŸ“¦ Output
maxResultsPerQueryIntegerDefault 100; 0 = everything Indeed serves (at most 1,000 per search).
maxItemsIntegerHard cap for the whole run. 0 = none.
compactBooleanCore fields only, sized for AI agents and MCP.
βš™οΈ Advanced
proxyConfigurationObjectDefault: Apify proxy. Indeed's job-search API answered Apify datacenter and residential proxies alike in testing.
maxConcurrencyIntegerParallel 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:

Indeed Jobs Scraper output table with title, company, salary, job type and apply URL

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

FieldTypeWhat it isFill on test run
id, url, titlestringIndeed job key, job page on the country site, title100%
normalized_titlestringIndeed's normalised title99%
company.name, company.key, company.indeed_urlstringEmployer and its Indeed company page100% / 96% / 94%
company.website, company.industry, company.revenue, company.descriptionstringCompany profile from Indeed's employer dossier78% / 26% / 70% / 66%
company.logo_url, company.header_image_urlstring (URL)Company images77% / 70%
company.rating, company.rating_count, company.review_countnumberIndeed company rating (0-5) and counts82%
location.*objectformatted, city, state, county, postal_code, street_address, country_code, country, latitude, longitude100% (postal code 66%, street 51%)
is_remote, work_arrangementboolean, stringIndeed's remote / hybrid / in-person tagalways / 17% tagged
job_types, benefits, schedules, skillsstring[]Indeed's attributes split by taxonomy group86% / 66% / 37% / 100%
attributes, occupationsobject[]Every attribute and occupation as key + label100%
salaryobjecttext, min, max, exact, currency, period, annual_min, annual_max; null when the posting has no salary42%
description_text, description_html, description_snippetstringFull description (add-on) and its first 300 characters100% with the add-on
apply_url, is_indeed_apply, is_externalstring, booleanWhere applying leads; Indeed Apply available; link leaves indeed.com100% / 57% true / 89% true
source_name, source_typestringFeed the posting came from (Indeed or the employer / ATS)100%
is_urgent_hire, is_high_volume_hiring, work_scheduleboolean, stringHiring signals when Indeed shows them0% / 19% / 13%
date_published, date_on_indeed, posted_days_agostring (ISO 8601), integerEmployer date, date the job reached Indeed, age100%
expired, expiration_date, ref_num, languageboolean, stringStatus and references100% / 2% / 100% / 100%
search_query, search_location, country, sort, page, position, scraped_atstring, integerWhere the row came from100%

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_max by 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 postedWithinDays and group by company.name.
  • πŸ€– AI and research teams - feed description_text, skills and benefits to an LLM; use compact to 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.

JobsWith 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 monitorMode and sortBy: "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: true keeps 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; salary is null for the rest, never a fabricated zero. Indeed's own salary estimates are not part of this data.
  • Remote tag: work_arrangement is filled only when Indeed tags the job (17% on the test run); is_remote also 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 (except is_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 notFound in 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.

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.