Indeed Jobs Scraper — salary & posting age as numbers avatar

Indeed Jobs Scraper — salary & posting age as numbers

Pricing

from $5.00 / 1,000 job postings

Go to Apify Store
Indeed Jobs Scraper — salary & posting age as numbers

Indeed Jobs Scraper — salary & posting age as numbers

Scrape Indeed search results into typed rows: salary parsed into min, max, period and a yearly estimate, posting age as a number of days, company rating, benefits and remote flag. Includes a hard cap on results so a run can never bill you more than you asked for.

Pricing

from $5.00 / 1,000 job postings

Rating

0.0

(0)

Developer

Henry Crawl

Henry Crawl

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

17 hours ago

Last modified

Share

Indeed Jobs Scraper — salary, posting age and rating as numbers

Scrape Indeed search results into rows you can sort and filter immediately. Salary arrives as salaryMin, salaryMax, salaryPeriod and a yearly estimate, posting age as a number of days, and company rating as a number — not as English strings you have to parse yourself.

What you get per job

FieldExampleNotes
jobKeyd8123dc510d5b757Indeed's own id, use it to deduplicate across runs
titleWarehouse Associate - Day Shift
companyBerlin Packaging
companyRating3.8Parsed to a number when Indeed shows it
locationChicago, IL
isRemotefalse
salaryText$18 - $22 an hourOriginal string, kept for reference
salaryMin / salaryMax18 / 22Numbers
salaryPeriodhourhour, day, week, month, year
salaryCurrencyUSD
salaryYearlyEstimate41600Normalised so hourly and yearly postings are comparable
jobTypeFull-time
benefits["Health insurance","401(k)"]The benefit chips Indeed shows on the card
postedDaysAgo30 means posted today
postedDateApprox2026-07-31Derived from the posting age
isUrgentlyHiring, isEasyApplytrue
snippetShort description shown on the card
jobUrlDirect link to the posting
searchQuery, searchLocation, pageNumberProvenance of every row
indeedDomain, proxyCountry, scrapedAtThe exact context the data was captured in

Input

{
"queries": ["warehouse associate", "forklift operator"],
"location": "Chicago, IL",
"indeedDomain": "www.indeed.com",
"proxyCountry": "US",
"datePosted": "last_3_days",
"jobType": "full_time",
"maxJobs": 1000
}

Or paste Indeed search URLs directly in startUrls.

Filters available: country site, location and radius, date posted, job type, remote only, minimum salary, and sorting by relevance or date.

Why salary comes back as numbers

A job feed is only useful if you can rank it. Hourly and yearly postings are not comparable as strings, so salaryYearlyEstimate converts both to the same basis (hourly × 2,080, weekly × 52, monthly × 12). The original salaryText is always kept so you can audit any conversion.

Country matters

Indeed is country-specific in two independent ways. indeedDomain picks which national site to search, and proxyCountry decides where the request appears to come from — which affects both results and currency. They default to the United States.

Residential proxies are used by default: Indeed refuses datacenter IP ranges.

The result cap is real

maxJobs stops the run at exactly that number. The run also stops on its own if three consecutive pages return nothing usable, so a layout change cannot quietly turn into a long, expensive run.

Runs fail loudly, not silently

Every run writes a DIAGNOSTICS record with the block rate, bytes per item and the fill rate of every output field:

{ "itemsExtracted": 500, "blockRate": "0%", "fieldCoverage": { "salaryMin": "62%", "company": "100%" } }

If nothing was extracted, or more than half the pages were blocked, the run is marked failed with the reason. An empty column that looks like data is worse than an error.

Typical uses

  • Salary benchmarking by role, city and employer
  • Tracking which companies are hiring, and how fast their postings turn over
  • Feeding a niche job board or a recruiting pipeline
  • Labour market research on posting volume and pay trends

Notes and limits

  • salaryMin, companyRating and benefits only appear where Indeed shows them, and are reported as null elsewhere rather than guessed.
  • postedDateApprox is derived from a relative age ("3 days ago"), so it is accurate to the day, not the hour.
  • Keep maxConcurrency low. Indeed authorises by session.

Support

If a field stops filling or you need a filter that is not exposed, open an issue on the actor page with the input you used.