Indeed Jobs Scraper - Salaries, Benefits & Ratings avatar

Indeed Jobs Scraper - Salaries, Benefits & Ratings

Pricing

from $0.10 / 1,000 job listings

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

Indeed Jobs Scraper - Salaries, Benefits & Ratings

Search Indeed in 62 countries by title and location with the filters Indeed itself applies. Full descriptions, pay, benefits, company rating and apply links in Bright Data's Indeed format.

Pricing

from $0.10 / 1,000 job listings

Rating

0.0

(0)

Developer

Zyra

Zyra

Maintained by Community

Actor stats

0

Bookmarked

9

Total users

8

Monthly active users

13 hours ago

Last modified

Categories

Share

Indeed Jobs Scraper

Indeed job listings with full descriptions, salaries, benefits and company ratings, from 62 countries.

Enter a job title and a location. You get back every matching Indeed job as a flat row: title, company, pay, benefits, shift schedule, company rating, the full description and the apply link.

A run of 100 jobs takes about 2 seconds, and 1,000 jobs about 15.

What you can do with it

  • Benchmark pay. Salary ranges as numbers, with the period (hour, year…), the currency, and whether Indeed estimated the figure or the employer stated it.
  • Track hiring. See who is hiring for a role, where, and since when.
  • Screen employers. Every job carries the company's Indeed rating and review count, plus its size, revenue and industry.
  • Feed a job board or a model. Flat rows with stable ids, ready for a spreadsheet, a database or a dataframe.

Why this one

  • Drop-in for Bright Data. The first 28 fields have the same names, order and formats as Bright Data's Indeed dataset, so existing pipelines keep working.
    • It is also more complete: in a 600-job comparison we filled apply_link on 100% of jobs (Bright Data: 2%), company_website on 79% (0%), salary_formatted on 78% (46%) and company_rating on 88% (72%).
  • Live jobs. Every job comes from a search run at that moment, so none are expired.
  • Filters applied by Indeed. Date posted, job type, remote, hybrid or in person, experience level, radius and Easy Apply are all applied by Indeed during the search. A narrower search is faster and cheaper, and matches what you'd see on the site.
  • Full descriptions without an extra fetch. Each search result already includes the complete description, as HTML and as plain text.
  • Public data only. The actor sees what a signed-out visitor sees, and never signs in.

Input

FieldExampleNotes
titleweb developerJob title, keywords or company. Indeed's syntax works: "exact phrase", -exclude, company:(Google), title:(nurse).
locationNew York, NYCity, state, zip code or remote.
countryusOne of 62 Indeed countries: us, uk, in, ca, de, fr, au
limit1001–1,000. Default 100.
datePosted7Last 1, 3, 7 or 14 days.
jobTypefulltimefulltime, parttime, contract, internship, temporary, seasonal, perdiem, apprenticeship.
workSettingremoteremote, hybrid, onsite.
experienceLevelseniorentry, mid, senior, no_experience, under_1_year. Indeed US only.
radius25Miles around the location: 0, 5, 10, 15, 25, 35, 50, 100.
easyApplyOnlyfalseOnly jobs you can apply to on Indeed.
proxyConfigurationApify ProxyLeave as it is. Indeed refuses connections from the Apify platform's own network, so runs go through Apify Proxy.

You need a title, a location or both. Filters combine with AND.

{ "title": "case manager", "location": "Grand Rapids, MI", "country": "us", "limit": 10, "jobType": "fulltime" }

Output

One item per job. Real examples: sample_output.json.

Bright Data–compatible fields (same names, order and formats):

jobid, company_name, date_posted_parsed, job_title, description_text, benefits, qualifications, job_type, location, salary_formatted, company_rating, company_reviews_count, country, date_posted, description, region, company_link, company_website, domain, apply_link, srcname, url, is_expired, discovery_input, job_location, job_description_formatted, logo_url, shift_schedule

Extra detail:

  • Pay: salary_min, salary_max, salary_period, salary_currency, salary_is_estimated
  • Place: city, postal_code, street_address, country_name
  • Company: company_size, company_revenue, company_industry, company_description, company_ceo, company_address
  • Job: work_setting, experience_level, is_remote, attributes, emails
  • Collection: date_on_indeed, timestamp
{
"jobid": "bc3930a1d889a475",
"job_title": "ACT IDDT Case Manager (26-133)",
"company_name": "Network180",
"salary_formatted": "$21.99 - $29.15 an hour",
"company_rating": 3.5,
"company_reviews_count": 31,
"benefits": [
"License reimbursement",
"Paid holidays",
"Loan repayment program"
],
"shift_schedule": [
"Weekends as needed",
"Evenings as needed"
],
"date_posted": "3 days ago",
"url": "https://www.indeed.com/viewjob?jk=bc3930a1d889a475"
}

Before comparing two salaries, check salary_period: hourly and yearly pay appear in the same results. salary_is_estimated tells you whether a figure is Indeed's estimate rather than the employer's.

The run summary (what was requested, how many jobs arrived, what was charged) is in the key-value store under OUTPUT.

Limits

  • One search tops out at about 750–970 jobs. Indeed stops paging there, however many jobs match. For more, run several searches with narrower locations.
  • A city goes deeper than a state. Nurse in Los Angeles, CA returned 862 jobs; nurse in California returned 398.
  • A search without a location returns only about 100 jobs. On Indeed Canada it returns none, so the actor asks for a city.
  • Some fields depend on what the employer entered. For example, salary appears on about 75% of jobs, and the company rating only when the company has reviews on Indeed.

Pricing

Pay per result: you are charged per job delivered. A run stops once it has spent its maximum charge, and it never charges for a job it didn't deliver.


Development

pip install -r requirements-dev.txt
pytest tests/ # offline: client, inputs, scrape loop, billing
INDEED_LIVE=1 pytest tests/ # also hits Indeed: every filter, all 62 countries
python tools/gen_dataset_schema.py # regenerate .actor/dataset_schema.json from the Job fields
python tools/stress_test.py # concurrency ramp against Indeed
PathWhat it is
src/indeed_client.pyThe Indeed client: a plain library with no Apify dependency.
src/inputs.pyActor input → validated run configuration.
src/scrape.pyThe search loop: retries, and resuming from the last cursor after a failure.
src/main.pyThe run: delivery, push-then-charge, budget limits, run summary.
research/R&D notes, raw API samples and the Bright Data sample. Not shipped in the image.
  • Billing event: job-listing, charged per job after each page is pushed. The start fee is Apify's built-in apify-actor-start, which the platform charges itself.
  • API key risk: the client uses the API key built into Indeed's iOS app. That key is not a published API, so Indeed can change it at any time. The headers are in one place, API_HEADERS in src/indeed_client.py.