Indeed Jobs Scraper avatar

Indeed Jobs Scraper

Pricing

from $2.00 / 1,000 results

Go to Apify Store
Indeed Jobs Scraper

Indeed Jobs Scraper

Search Indeed by keyword + location and get structured job listings — title, company, salary range, rating, location, remote flag, posted date and (optionally) the full job description.

Pricing

from $2.00 / 1,000 results

Rating

0.0

(0)

Developer

Farhan Febrian Nauval

Farhan Febrian Nauval

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Search Indeed by keyword and location and get clean, structured job listings — job title, company, salary range, company rating, location, remote flag, and posting date — with an option to pull the full job description for every result. No account, no login, no API key.

Why use this actor

  • Keyword + location search, just like using Indeed itself (the "what" and "where" boxes).
  • 17 country sites supported — United States, UK, Canada, Australia, India, Germany, France, and more.
  • Real salary data — where Indeed shows an actual employer-provided pay range, you get the exact numbers (salaryMin / salaryMax) plus whether it's a real posted salary or an estimate.
  • Full job descriptions on demand — flip one switch to get the complete description, benefits list, and salary text for each job.
  • Company signals — rating, review count, and remote flag on every listing.
  • Clean JSON output, ready for spreadsheets, databases, or your own pipelines.
  • Nothing fails silently — if a search returns nothing, you get a clear reason, not an empty file.

How it works

  1. You enter a search keyword, a location, and pick the country site.
  2. The actor runs that search on Indeed and reads the job listings.
  3. Optionally, it opens each job to add the full description, benefits, and salary text.
  4. Results stream into your dataset, ready to download as JSON, CSV, or Excel.

You don't manage any of the fetching, retries, or blocking — just describe the search you want.

Indeed shows search results as pages, but for visitors who are not signed in, only the first page of a search is publicly available — trying to open page 2 sends you to a sign-in screen. This is Indeed's own limit, not the actor's.

What this means for you: each search returns the first page of results (about 24 jobs) for that exact query. The actor detects the sign-in wall and stops cleanly — it never crashes or loops.

How to get more jobs: run narrower searches instead of trying to page deeper. For example:

  • Add a date filter (fromage) like "last 3 days" to keep pulling fresh listings over time.
  • Use a tighter location plus a radius (e.g. a specific city + 25 miles).
  • Use more specific keywords (e.g. "senior react developer" instead of "engineer").
  • Split one broad search into several focused ones and combine the results.

The number of total matches Indeed reports for your search is included in every record as searchTotalJobCount, so you always know how big the full pool is.

Input

{
"query": "software engineer",
"location": "New York",
"country": "us",
"fromage": 7,
"radius": 25,
"fetchDetail": true,
"maxItems": 50,
"maxConcurrency": 4,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}
FieldTypeDescription
querystringSearch keywords — job title, skill, or company (the Indeed "what" box).
locationstringCity, state, postal code, or region (the Indeed "where" box). Leave empty to search the whole country.
countrystringWhich Indeed country site to search: us, uk, ca, au, in, ie, de, fr, es, it, nl, za, sg, nz, br, mx, ph. Default us.
fromageintegerOnly return jobs posted within this many days (e.g. 1, 3, 7, 14). Optional.
radiusintegerDistance around the location to include, e.g. 25. Optional.
fetchDetailbooleanIf true, opens each job to add the full description, benefits, and salary text. Slower but richer. Default false.
maxItemsintegerOverall cap on jobs returned. 0 = all available on the first results page. Default 50.
maxConcurrencyintegerHow many job pages to open in parallel when fetchDetail is on. Default 4.
proxyConfigurationobjectResidential proxy strongly recommended. If you don't set a country here, it's matched automatically to the country you chose.

Output

One record per job. Below is a real record captured from the search software engineer in New York (US) — with fetchDetail off:

{
"_input": "software engineer @ New York (us)",
"_source": "S1-jobcards",
"_scrapedAt": "2026-07-10T11:53:50Z",
"recordType": "JOB",
"jobkey": "c886fc9e763b5619",
"jobUrl": "https://www.indeed.com/viewjob?jk=c886fc9e763b5619",
"positionName": "Java Lead Software Engineer",
"company": "JPMorganChase",
"location": "New York, NY 10001",
"isRemote": false,
"salaryMin": 152000,
"salaryMax": 215000,
"salaryType": "YEARLY",
"salaryCurrency": "USD",
"salaryText": "$152,000 - $215,000 a year",
"salarySource": "EXTRACTION",
"companyRating": 3.9,
"companyReviewCount": 20384,
"postedAt": "30+ days ago",
"pubDate": 1777525200000,
"isNew": false,
"urgentlyHiring": false,
"indeedApplyable": false,
"companyIdEncrypted": "dfe1b23f5f99f0a7",
"companyOverviewLink": "/cmp/Jpmorganchase-2",
"searchQuery": "software engineer",
"searchLocation": "New York",
"searchCountry": "us",
"searchTotalJobCount": 2277
}

When fetchDetail is true, each record also gets the full job content (real values from the same job):

{
"_source": "S1-jobcards+S2-viewjob",
"detailCompanyName": "JPMorganChase",
"detailJobTitle": "Java Lead Software Engineer",
"descriptionText": "JOB DESCRIPTION\n\nWe have an opportunity to impact your career and provide an adventure where you can push the limits of what's possible.\n\nAs a Lead Software Engineer at JPMorganChase within the Trust and Sec... (full text continues)",
"descriptionHtml": "<div><b>JOB DESCRIPTION</b> ... </div>",
"detailBenefits": [
{ "key": "HJUWZ", "label": "Tuition reimbursement" },
{ "key": "EY33Q", "label": "Health insurance" }
],
"detailSalaryText": "$152,000 - $215,000 a year",
"datePublished": null
}

Output fields

FieldTypeDescription
_inputstringThe search that produced this record (query @ location (country)).
_sourcestringWhere the data came from — S1-jobcards (search) or S1-jobcards+S2-viewjob (search + full detail).
_scrapedAtstringUTC timestamp when the record was collected.
recordTypestringAlways JOB.
jobkeystringIndeed's unique job ID.
jobUrlstringDirect link to the job on Indeed.
positionNamestringJob title.
companystringEmployer name.
locationstringJob location as shown.
isRemotebooleanWhether the job is flagged remote.
salaryMin / salaryMaxnumberSalary range numbers, when an actual range is provided.
salaryTypestringPay period, e.g. YEARLY, HOURLY.
salaryCurrencystringCurrency, e.g. USD.
salaryTextstringSalary as shown, e.g. $152,000 - $215,000 a year.
salarySourcestringEXTRACTION = employer-provided real salary; ESTIMATION = Indeed estimate.
companyRatingnumberCompany rating (out of 5), if available.
companyReviewCountnumberNumber of company reviews.
postedAtstringHuman-readable posting age, e.g. 3 days ago.
pubDatenumberPosting date (Unix milliseconds).
isNewbooleanWhether Indeed flags the job as new.
urgentlyHiringbooleanWhether Indeed flags urgent hiring.
indeedApplyablebooleanWhether the job supports Indeed's one-click apply.
companyIdEncryptedstringIndeed's internal company reference.
companyOverviewLinkstringPath to the company page on Indeed.
searchTotalJobCountnumberTotal jobs Indeed reports for your search (the full pool size).
descriptionTextstringFull job description as plain text. (only with fetchDetail)
descriptionHtmlstringFull job description with original formatting. (only with fetchDetail)
detailBenefitsarrayListed benefits. (only with fetchDetail)
detailSalaryTextstringSalary text from the job page. (only with fetchDetail)
datePublishednumberPublish date from the job page, when present. (only with fetchDetail)

Every job also carries all of Indeed's original listing fields verbatim (company review link, job type tags, location details, and more) alongside the friendly fields above, so nothing is lost.

Searches that return nothing (or are stopped by the sign-in wall on page 1) produce a record with an _error field instead of job data — so a run never fails silently.

Notes

  • Pick the country that matches your location — search london with country: "uk", toronto with country: "ca", and so on.
  • salarySource mattersEXTRACTION is a real employer salary; ESTIMATION is an Indeed estimate. Filter on this if you only want confirmed pay.
  • Each search returns Indeed's first results page (about 24 jobs). Use fromage, radius, and more specific keywords to cover more ground — see "how many results you get per search" above.
  • Residential proxy is recommended, especially for non-US country sites.