⚡Indeed Jobs Scraper avatar

⚡Indeed Jobs Scraper

Pricing

from $0.10 / 1,000 job listings

Go to Apify Store
⚡Indeed Jobs Scraper

⚡Indeed Jobs Scraper

$0.10 / 1K jobs ⚡ — Search Indeed across 62 countries by job title, location, and Indeed’s built-in filters. Get structured job data with full descriptions, pay, benefits, company ratings, 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

1

Bookmarked

45

Total users

2

Monthly active users

18 days 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.