Indeed Job Scraper avatar

Indeed Job Scraper

Pricing

from $0.80 / 1,000 job scrapeds

Go to Apify Store
Indeed Job Scraper

Indeed Job Scraper

Scrape Indeed job listings across 59 country storefronts by keyword or search URL. Every row carries title, company_name, salary_min, salary_max, latitude, longitude, skills, benefits and the full description_text. Export JSON, CSV or Excel, or pull it from the API.

Pricing

from $0.80 / 1,000 job scrapeds

Rating

0.0

(0)

Developer

bootforge

bootforge

Maintained by Community

Actor stats

0

Bookmarked

8

Total users

1

Monthly active users

a day ago

Last modified

Share

Indeed Job Scraper extracts job listings from Indeed by keyword or pasted search URL, across 59 country storefronts. Every row carries the title, the company, a structured salary, map coordinates, skills, benefits and the full description.

What you get

One dataset row per job. Export as JSON, CSV or Excel.

{
"job_id": "a499aa89f203fdc0",
"title": "Senior Data Engineer",
"company_name": "Wells Fargo",
"company_website": "https://www.wellsfargojobs.com/en/well-life/",
"location": "Iselin, NJ 08830",
"workplace_type": "hybrid",
"salary_min": 100000.0,
"salary_max": 196000.0,
"salary_currency": "USD",
"salary_period": "yearly",
"description_text": "About this role:\n\nWells Fargo is seeking a Senior Data Engineer..."
}

Rows also carry latitude, longitude, city, region and postal_code, so results plot onto a map or filter by true distance instead of by matching a location string. Company enrichment arrives on the same row: company_website, company_twitter, company_instagram, company_facebook, company_industry, company_ceo, company_hq, company_tier and the rating breakdown behind company_rating. Indeed ships skills, benefits, education and certifications as one untyped bag; they come back split into skills, benefits, education, certifications and schedule, so you can filter on them. ref_num is the employer's own requisition ID — the key that joins a listing to an internal system — and employer_url is the same job on the company's careers site. Fields Indeed does not publish for a listing come back as null rather than invented.

What it costs

EventFreeBronzeSilverGold+
Job scraped (job-scraped)$0.00007$0.00007$0.00006$0.00006
Actor Start (apify-actor-start)$0.0005$0.0005$0.0005$0.0005

You pay per job, not per minute: $0.00007 a job, which is $0.07 per 1,000, and $0.06 per 1,000 from the Silver tier upward. A 200-job run costs about $0.01 and 10,000 jobs about $0.70. That one per-job price covers the full description in text and HTML and the whole company enrichment set — they are not extra events — and a residential proxy is included in it. The $0.0005 start fee is charged once per run at the 512 MB default.

Input

FieldTypeRequiredDefaultWhat it does
search_queriesarraynoKeywords to search on Indeed, one per entry. Each keyword returns every matching job up to max_results, with title, company, structured salary, location and the full description. Examples: python developer, data scientist, product manager. Provide at least one of search_queries or search_urls; leave empty to collect only the URLs you paste.
search_urlsarraynoReady-made Indeed search URLs, one per entry: apply the filters you want on Indeed, then paste the resulting address. Each URL returns every matching job up to max_results, and the country comes from the URL itself. Provide at least one of search_urls or search_queries; leave empty to search by keyword only.
countrystringno"US"Indeed country storefront to search. It decides which site is queried, the language of the listings and the currency of every salary. Default US. Supported: US GB CA AU IE DE FR IT NL ES AE AR AT BE BH BR CH CL CO CR CZ DK EC EG FI GR HK HU ID IL IN JP KR KW LU MX MY NG NO NZ OM PA PE PH PK PL PT QA RO SA SE SG TH TR TW UA UY VN ZA. A pasted search URL carries its own country and ignores this setting.
locationstringnoCity, state, postcode or Remote to narrow the search inside the chosen country. Examples: New York, London, Remote. Leave empty to search the whole country.
job_typestringnoEmployment type a listing must advertise. Values: full-time, part-time, contract, temporary, internship. Leave empty for any type. Indeed applies the filter before results are returned, so a filtered run does not charge you for rows you would throw away.
workplace_typestringnoWhere the work happens. Values: remote fully remote, hybrid part office part home, on-site at the employer's premises. Leave empty for any arrangement.
date_postedstringnoHow recent a posting must be. Values: 24h the last day, 3d the last three days, week the last seven days, 2weeks the last fourteen days. Leave empty for any date. Pair 24h with a daily schedule to collect only what is new.
salary_minintegernoLowest advertised annual salary a listing must offer, in the currency of the chosen country — for example 80000 in the US. Minimum 0. Leave empty to include every listing, including the many that advertise no salary at all.
fetch_descriptionsbooleannotrueAlso collect each job's full description, in plain text and in HTML, as description_text and description_html. Default true. Set it to false for a quicker listing-only run when title, company, salary and location are all you need.
max_resultsintegerno200Most jobs returned across every keyword and URL combined. Default 200, minimum 1, maximum 10000. Lower it to cap what a run costs; raise it to sweep a busy keyword to the end.
request_delayintegerno0Seconds to wait between requests, to spread a long run out over time. Default 0, minimum 0, which runs at full speed inside the ceiling set by max_requests_per_minute.
max_concurrencyintegerno8How many requests may be in flight at the same time. Default 8, minimum 1, maximum 20. A higher number finishes a large run sooner; 4 to 10 suits most searches.
max_requests_per_minuteintegerno60Ceiling on how many requests a run may send each minute. Default 60, minimum 1, maximum 600. Raise it to finish a wide search sooner, lower it to stretch a long run out.
proxyUrlsarraynoLeave empty: the run uses the residential proxy this actor ships with, included in the price of the run. To route the run through your own provider instead, add one gateway URL per entry, for example http://user:pass@host:port — works with any provider that issues URLs (DataImpulse, Bright Data, Oxylabs, Smartproxy, or your own). When set, these are used exactly as entered and nothing else is.

How to run it

  1. Open the actor on Apify Console.
  2. Enter one or more search keywords, or paste ready-made Indeed search URLs.
  3. Pick the country, add any filters you want, then Run. Export JSON, CSV or Excel from the dataset.
{
"search_queries": ["python developer"],
"country": "US",
"location": "New York",
"job_type": "full-time",
"date_posted": "week",
"fetch_descriptions": true,
"max_results": 200
}

Minimal input:

{
"search_queries": ["python developer"]
}

Available as the MCP tool herus13--indeed-scraper on mcp.apify.com and through the Apify API; send the same JSON.

Why this scraper

  • Richer rows than a search-page scrape — map coordinates, the employer's requisition ID, the company's own website and socials, industry, size tier and the direct careers-site link all arrive on the same row.
  • Filters cost you nothing — date posted, job type, workplace type and a salary floor are applied by Indeed before results come back, so you are not billed for rows you would discard.
  • Structured salarysalary_min, salary_max, salary_currency and salary_period parsed out of the raw pay text, with the original string kept as salary_raw.
  • 59 countries, one input — the same keyword compared across the US, the UK, Germany, Japan or Australia without running four different tools.
  • Validated output — mis-read cards (empty title or company, an inverted salary range, an out-of-range rating) are dropped rather than shipped.
  • Nothing to set up — no account, no cookies, no proxy configuration; a residential proxy is included in the price of the run.

Use cases

  • ATS and job-board feeds — A structured salary rather than a free-text string is what makes listings comparable and sortable, and the description in both text and HTML lets the same row serve a parser and a rendered job page.
  • Salary benchmarking by role and market — 59 storefronts from one input make it practical to compare what a title pays in the US against the UK, Germany or Australia.
  • Competitor hiring intelligence — What a company is hiring for, and where, is a reliable read on what it is building. Workplace type, posting dates and is_high_volume_hiring show whether a team is expanding or backfilling.
  • Recruitment lead generation — Companies posting heavily in a niche have budget to fill roles, and every row already carries their website, industry and size tier, so a job feed doubles as a lead list.
  • Mapping and radius analysislatitude and longitude on every job mean results plot straight onto a map or filter by real distance.

FAQ

How fast is a run? A 200-job run with full descriptions finishes in a few minutes on the 512 MB default. Raise max_requests_per_minute and max_concurrency to go faster, or lower them to stretch a long run out.

Which countries are supported? 59 storefronts: United States (US), United Kingdom (GB), Canada (CA), Australia (AU), Ireland (IE), Germany (DE), France (FR), Italy (IT), Netherlands (NL), Spain (ES), United Arab Emirates (AE), Argentina (AR), Austria (AT), Belgium (BE), Bahrain (BH), Brazil (BR), Switzerland (CH), Chile (CL), Colombia (CO), Costa Rica (CR), Czechia (CZ), Denmark (DK), Ecuador (EC), Egypt (EG), Finland (FI), Greece (GR), Hong Kong (HK), Hungary (HU), Indonesia (ID), Israel (IL), India (IN), Japan (JP), South Korea (KR), Kuwait (KW), Luxembourg (LU), Mexico (MX), Malaysia (MY), Nigeria (NG), Norway (NO), New Zealand (NZ), Oman (OM), Panama (PA), Peru (PE), Philippines (PH), Pakistan (PK), Poland (PL), Portugal (PT), Qatar (QA), Romania (RO), Saudi Arabia (SA), Sweden (SE), Singapore (SG), Thailand (TH), Turkey (TR), Taiwan (TW), Ukraine (UA), Uruguay (UY), Vietnam (VN), South Africa (ZA).

Can I just paste an Indeed search URL? Yes. Apply the filters you want on Indeed and paste the resulting address into search_urls. The country comes from the URL itself, so you do not need to set country as well.

Why are some fields empty? They are simply not on every listing: roughly a fifth of jobs carry no employment-type chip, and not every employer keeps a company profile. Missing fields come back as null rather than fabricated.

Is a proxy included? A residential proxy is included in the price of the run. To use your own, paste gateway URLs into Your own proxy URLs. Scraping at volume? Your own DataImpulse account is cheaper per GB.

Is scraping Indeed legal? This actor collects only publicly available job-listing data. You are responsible for complying with Indeed's terms and applicable laws. Do not collect personal data without a lawful basis.

Building a job-market pipeline? Pair this actor with: