Indeed Jobs Scraper - Salaries, Ratings & 14 Countries avatar

Indeed Jobs Scraper - Salaries, Ratings & 14 Countries

Pricing

from $0.50 / 1,000 run start fees

Go to Apify Store
Indeed Jobs Scraper - Salaries, Ratings & 14 Countries

Indeed Jobs Scraper - Salaries, Ratings & 14 Countries

Indeed scraper for job postings in 14 countries. Per job: title, employer, rating and review count, location, salary split into minimum, maximum and period, job types, benefits and posting date. No login or API key. For recruiters, salary research and hiring monitors.

Pricing

from $0.50 / 1,000 run start fees

Rating

0.0

(0)

Developer

SR

SR

Maintained by Community

Actor stats

0

Bookmarked

5

Total users

3

Monthly active users

18 days ago

Last modified

Categories

Share

Indeed Jobs Scraper

Indeed Jobs Scraper is an Indeed scraper that collects job postings from Indeed with employer information, parsed salary ranges, publication dates and job attributes. Supply job titles or keywords and one or more locations, then receive a dataset of distinct vacancies from any of 14 national Indeed sites. You can use the results for recruitment research, salary comparisons, monitoring hiring activity or updating your own index of public job listings. No Indeed account, login or API key is needed, and every row arrives as structured JSON that you can export to CSV, Excel or your own database.

Indeed Jobs Scraper input

The main input is queries, a list of job titles or keywords. locations is an optional list of cities, regions or postcodes. Every query is combined with every location, in the order you provide them. Leaving locations empty searches the whole national market. The actor reads the first result page for each combination; it does not claim to retrieve every vacancy in that market. Add relevant locations or more specific search terms when you want broader coverage.

This is the input from an actual successful run:

{
"queries": ["data engineer"],
"locations": ["New York"],
"limit": 100,
"retries": 4
}
FieldDefaultMeaning
queriesRequiredSearch terms; several terms are supported
locationsWhole market when omittedCities, regions or postcodes
marketusNational Indeed site
posted_withinanyany, 24h, 3d, week or 2weeks
job_typeanyany, fulltime, parttime, contract, temporary, internship
remote_onlyfalseApply Indeed's remote search filter
sortrelevanceRelevance or date
limit100Maximum distinct delivered jobs, from 1 to 2000
retries4Attempts per search, from 1 to 6

The supported markets are us, uk, nl, de, fr, es, it, ca, au, in, ie, be, pl and se. Salaries and location names come from the selected national site. Currency is supplied by the posting, rather than assumed from the market. Search terms and locations are trimmed. Existing API integrations may also use comma-separated text and the legacy query and location aliases. The legacy min_salary option remains available to API integrations as a salary filter. The actor processes at most the first 60 query/location combinations and reports a warning if a longer list is supplied.

The console prefill contains New York so you can try a concrete search immediately. That prefill is not a default for API calls: omit locations to search the whole market. The posted-within and contract filters are interpreted by Indeed. A remote filter may include hybrid roles, so inspect each row's is_remote field if you need fully remote vacancies.

What the Indeed scraper returns (output)

Each dataset row represents one vacancy. job_id is Indeed's job key and is used to remove duplicates across searches within the run. position is the row's one-based position after that deduplication. A posting appearing in several query/location combinations is delivered once, with the query and location that first produced it.

The following complete row was actually returned during validation:

{
"job_id": "018b1c3eb568518f",
"title": "Data Engineer",
"company": "BDG",
"company_rating": 3.8,
"company_reviews_count": 16,
"location": "New York, NY",
"city": "New York",
"state": "NY",
"is_remote": false,
"url": "https://www.indeed.com/viewjob?jk=018b1c3eb568518f",
"salary_min": 105000,
"salary_max": 145000,
"salary_period": "YEARLY",
"salary_currency": "USD",
"salary_text": "$105,000 - $145,000 a year",
"job_types": [
"Full-time"
],
"shifts": null,
"benefits": [
"Unlimited paid time off",
"Dental insurance",
"Health insurance",
"401(k)",
"Vision insurance"
],
"posted_relative": "30+ days ago",
"posted_at": "2025-02-11T06:00:00Z",
"is_new": false,
"urgently_hiring": false,
"easy_apply": false,
"is_sponsored": false,
"snippet": "Experience working data generating frontends in React and TypeScript. Join BDG and help shape the future of data-driven media! Retirement Savings: 401(k) plan.",
"market": "us",
"query": "data engineer",
"search_location": "New York",
"parse_path": "mosaic",
"source": "indeed-jobs-scraper",
"platform": "indeed",
"fetched_at": "2026-10-03T13:46:22.261Z",
"country_code": "US",
"salary_currency_iso": "USD",
"salary_unit": "YEAR",
"is_suggestion": false,
"position": 1
}

The main fields include title, company, company_rating, company_reviews_count, location, city, state, url, salary_min, salary_max, salary_period, salary_currency, salary_text, posted_at, posted_relative and snippet. Boolean attributes identify remote work, new postings, urgent hiring, easy applications and sponsored placements. job_types, shifts and benefits contain the labels supplied by Indeed.

Missing information stays missing. A posting without salary information can have null salary bounds and an empty currency string. Employer ratings can be zero. search_location is null for a market-wide search. Some fallback rows contain fewer attributes when the source does not supply the usual structured job data. Do not treat a missing salary as a zero salary, or a missing review count as proof that an employer has no reviews.

Additional fields help combine this data with other sources: source, platform, fetched_at, country_code, salary_currency_iso and salary_unit. The existing salary_period keeps Indeed's spelling, such as YEARLY, while salary_unit uses YEAR, MONTH, WEEK, DAY or HOUR. The existing currency field remains intact; salary_currency_iso provides a code or null for integrations that need a normalised nullable field. country_code uses GB for the UK market.

Indeed sometimes recommends other vacancies when a search has no exact matches. Those postings remain part of the delivered dataset, as in existing runs, and are marked is_suggestion=true. Use that field when you need to separate the site's recommendations from ordinary search results.

The run's key-value store also contains summary, including searches completed, pages parsed, jobs returned and jobs with salaries. If a search fails, errors contains its code and message. Partial runs retain the successfully collected vacancies and identify failures; an empty result does not produce fabricated jobs.

Pricing

The existing price is $0.0005 per run plus $0.003 per delivered vacancy. The start fee applies even if the search returns no jobs. Empty results have no job charge, duplicates do not create additional job charges, and failed searches do not create job charges. Recommendations are delivered vacancies and use the same job event as other rows.

Users without a paid Apify plan receive at most 10 results per run. Only delivered results are counted for the job event. A paid plan removes this free-plan cap, while the requested maximum, source availability and 60-search limit still apply. The run summary reports whether the free-plan cap was reached.

Two examples from real runs of this actor: the console prefill (data engineer in New York) delivered 39 vacancies, which costs $0.0005 + 39 x $0.003 = $0.1175. A search for nurse in London on the UK site delivered 15 vacancies, or $0.0455. A search that finds nothing costs only the $0.0005 start fee. The number of rows for the same input changes over time as listings appear and expire; only delivered rows are charged.

Use cases for an Indeed scraper

  • Recruitment and sourcing research: see which employers are hiring for a role in a city, how they describe it and which benefits they offer.
  • Salary benchmarking: collect posted salary ranges with their currency and period for one job title across several cities or countries.
  • Hiring monitors: run the same search daily, sorted by date, and alert on new job_id values from employers you follow.
  • Job boards and aggregators: refresh your own index of public vacancies with a link back to each original posting.
  • Labour-market analysis: count postings per title, contract type or remote flag to see how demand develops over time.

Practical tips

For salary comparisons, keep the currency and period with each salary amount. An hourly figure is not comparable with an annual one until your own analysis applies a consistent conversion. For a recurring hiring monitor, use sort=date and a posted-within window, then deduplicate across runs using job_id. The actor's own deduplication covers the current run only. For recruitment research, review sponsored postings separately if paid placement matters to your analysis.

Results change as Indeed adds, updates or removes listings. The requested limit is a maximum, not a guarantee. A search can return fewer rows because the first page is smaller, searches overlap or listings lack a usable identifier.

Indeed scraper compared with the alternatives

Indeed's official developer APIs are aimed at employers and ATS partners who post jobs and receive applications. They are not a public job-search feed, so they do not give you other employers' vacancies for a keyword and location. Browser extensions can copy the results page you are looking at, but they work page by page in your own browser and cannot run on a schedule. A self-written script needs maintenance whenever the site changes and leaves salary parsing to you.

This actor runs in the cloud on Apify, can be scheduled or called through the Apify API, and returns the salary already split into minimum, maximum, period and currency. Several other Indeed actors exist in the Store; this one focuses on a compact, consistent row per vacancy with employer rating, review count and a clear marker for recommended jobs, at a fixed price per delivered vacancy.

FAQ

Does one search return every matching Indeed job?

It reads the first result page for that query/location combination. Use relevant additional queries or locations to expand coverage, within the 60-combination limit.

Can I search without a city?

Yes. Leave locations empty or omit them to search across the selected market. The corresponding search_location field is null.

Why are some salary fields empty?

Not every posting includes salary information. The actor returns the information Indeed supplies and preserves null or empty values when it is absent.

Yes. They preserve the actor's existing behaviour and are labelled is_suggestion so your integration can decide whether to use them.

What happens if one search fails?

Other completed searches can still deliver their results. Read the errors and summary records to see what completed. Empty searches do not generate job charges; the normal per-run start fee still applies.

Indeed's public developer documentation covers posting jobs and handling applications for employers and their software partners. To search vacancies by keyword and location and receive the results as data, use a scraper such as this one.

Can I export Indeed jobs to CSV or Excel?

Yes. Every run stores its rows in an Apify dataset, which you can download as JSON, CSV, Excel or XML from the console, or read through the Apify API.

Which Indeed countries are supported?

United States, United Kingdom, Netherlands, Germany, France, Spain, Italy, Canada, Australia, India, Ireland, Belgium, Poland and Sweden. Pick one with market.