Indeed Jobs Scraper
Pricing
from $3.00 / 1,000 results
Indeed Jobs Scraper
Scrape Indeed.com job listings with salaries, company ratings, descriptions, and remote work info. Full JSON output, fast, residential-proxy-ready.
Scrape Indeed job listings with salaries, company ratings, full descriptions, and remote-work information. This Indeed scraper returns parsed salary minimums and maximums with currency and period, job type, remote work model, company rating and review count, posting date, benefits, and the direct apply link.
No Indeed API key, no login, and no headless browser. Results land in a structured dataset you can export to JSON, CSV, Excel, or XML, or pull straight from the Apify API.
What is Indeed Jobs Scraper?
Indeed Jobs Scraper is an Apify Actor that extracts job listings with salaries and company data from Indeed and returns them as clean, structured records. Salary parsing is the differentiator. Indeed publishes salary as free text in many formats; this Actor resolves it into salaryMin, salaryMax, salaryType, and salaryCurrency so the numbers are usable without a cleanup pass.
What data can this Indeed scraper extract?
Every run writes one row per job posting. The full schema carries 40 fields; the most-used ones are below.
| Field | Type | Description |
|---|---|---|
id | string | Unique 16-character Indeed job identifier (the jk URL parameter). |
positionName | string | Job title as posted on Indeed. |
company | string | Hiring company name. |
location | string | Formatted job location (city + state, ZIP if available). |
url | string | Canonical Indeed job detail URL (desktop /viewjob format). |
salary | string | Salary or pay rate as a human-readable string. May be employer-provided or extracted from the description. |
salaryMin | number | Lower bound of the parsed pay range in the unit indicated by salaryType. |
salaryMax | number | Upper bound of the parsed pay range. |
salaryType | string | Pay frequency: HOURLY, DAILY, WEEKLY, MONTHLY, or YEARLY. |
salaryCurrency | string | ISO 4217 currency code, e.g. USD. |
salarySource | string | EXTRACTED if Indeed parsed it from the description; EMPLOYER_PROVIDED if posted. |
jobType | array | Employment types as posted, e.g. ['Fulltime', 'Contract']. |
remoteWorkModel | string | FULLY_REMOTE, HYBRID, or null when not specified. |
jobLocationCity | string | City |
jobLocationState | string | State |
jobLocationPostal | string | Postal code |
rating | number | Average company rating on Indeed (0-5). |
reviewsCount | integer | Number of reviews underlying the company rating. |
postedAt | string | Indeed's relative posting time, e.g. '2 days ago'. |
postingDateParsed | string | Approximate ISO 8601 timestamp derived from the relative time or pubDate. |
isExpired | boolean | True if the posting is no longer accepting applications. |
urgentlyHiring | boolean | Urgently hiring |
See the Output tab in Apify Console for all 40 fields.
How to scrape Indeed job listings
- Open Indeed Jobs Scraper and click Try for free.
- Set
positionandlocation, or paste Indeed search URLs intostartUrls. - Pick a
country— Indeed runs separate domains per market. - Filter with
fromagefor recency, plusjobType,experienceLevel,remoteOnly, andradius. - Turn on
parseCompanyDetailsfor company ratings, and setmaxItemsPerSearch. - Click Start and watch rows appear live in the Output tab.
- Export the dataset as JSON, CSV, Excel, or XML — or fetch it from the Apify API once the run finishes.
Indeed Jobs Scraper input options
| Input | Type | What it does | Default |
|---|---|---|---|
position | string | What to search for on Indeed. Example: 'python developer', 'senior data scientist', 'registered nurse'. Combine... | "python developer" |
location | string | City, state, ZIP, or 'remote'. Example: 'Austin, TX', '94103', 'remote'. Leave blank to search the whole country. | "Austin, TX" |
country | string | Two-letter country code. Indeed has dedicated country sites; this picks the right one. Defaults to US. | "US" |
maxItemsPerSearch | integer | Maximum number of jobs to scrape for each position keyword and each startUrls entry. Indeed itself caps any... | 25 |
startUrls | array | Alternative to position + location. Paste full Indeed search URLs (https://www.indeed.com/jobs?q=...&l=...) or... | |
parseCompanyDetails | boolean | When ON, the scraper fetches each job's detail page to get the full HTML description, company logo, employer... | true |
saveOnlyUniqueItems | boolean | Deduplicate by Indeed job key. Recommended ON. The same job often appears as both a sponsored and an organic listing... | true |
fromage | integer | Only return jobs posted in the last N days. Common values: 1, 3, 7, 14. Leave blank for any age. | |
sort | string | Sort by date (newest first) or omit for Indeed's relevance ranking. | |
radius | integer | How far from location to expand the search. Default 25. | |
jobType | string | Limit to one employment type. | |
experienceLevel | string | Filter to a specific seniority level. | |
remoteOnly | boolean | When ON, only fully remote jobs are returned. | false |
maxConcurrency | integer | Number of parallel requests. Default 5 is safe; higher values speed up large runs but increase the chance of... | 5 |
Proxy is configured through the standard proxyConfiguration object; the defaults shipped with this Actor are already tuned for the target site.
Example output
{"id": "e011635426a565cb","positionName": "Sr. System Analyst, Python Developer","company": "Esolvit Inc.","location": "Austin, TX 78751","jobLocationCity": "Austin","jobLocationState": "TX","jobLocationPostal": "78751","url": "https://www.indeed.com/viewjob?jk=e011635426a565cb","salary": "$70 - $80 an hour","salaryMin": 70,"salaryMax": 80,"salaryType": "HOURLY","salaryCurrency": "USD","salarySource": "EXTRACTION","jobType": ["Contract"],"remoteWorkModel": "HYBRID","rating": 4.6,"reviewsCount": 12,"postedAt": "3 days ago","postingDateParsed": "2026-05-13T05:00:00.000Z","isExpired": false,"sponsored": false,"urgentlyHiring": false,"featuredEmployer": false,"highVolumeHiring": false,"indeedApplyable": false,"externalApplyLink": null,"companyIndeedUrl": "https://www.indeed.com/cmp/Esolvit-Inc","companyLogo": "https://d2q79iu7y748jz.cloudfront.net/s/_squarelogo/256x256/accdc390b31c4333972dc79b3e09723e","benefits": ["Health insurance", "401(k)", "Paid time off"],"description": "Job title: Sr. System Analyst, Python Developer ... full job description ...","descriptionHTML": "<div><p><b>The Company</b></p> ... </div>","companyInfo": {"indeedUrl": "https://www.indeed.com/cmp/Esolvit-Inc","reviewsUrl": "https://www.indeed.com/cmp/Esolvit-Inc/reviews","rating": 4.6,"reviewsCount": 12,"headerImageUrl": "https://...","employerActivity": null},"searchInput": { "position": "python developer", "location": "Austin, TX", "country": "US" },"scrapedAt": "2026-05-16T16:30:00.000Z"}
How much does it cost to scrape Indeed?
This Actor runs on pay per result pricing: $0.003 per job ($3 per 1,000). A one-time start fee of $0.00005 applies per run.
| Results | Approximate cost |
|---|---|
| 1,000 | $3.00 |
| 10,000 | $30.00 |
| 100,000 | $300.00 |
You pay for rows you actually receive, so a search that returns nothing costs nothing beyond the start fee. Every Apify account includes free monthly usage credit, so you can trial Indeed Jobs Scraper at no cost.
What can you build with Indeed data?
Run salary benchmarking for a role and market
Parsed salary bands across hundreds of postings give a far more current picture than an annual compensation survey, and you can slice it by city, seniority, or remote status.
Build a recruiting or sourcing pipeline
Track which companies are hiring for which roles, and how long postings stay open — a strong signal of hiring urgency and of teams that are growing.
Generate leads for recruitment agencies
Companies posting many roles in one function are the clearest prospects for staffing services.
Research labour-market trends
Posting volume by title, location, and remote model over time is a genuine leading indicator of sector demand.
Feed a job board or aggregator
Descriptions, salaries, locations, and apply links come back structured enough to populate a job board directly.
Indeed scraping tips and limits
- Use
saveOnlyUniqueItemsto avoid paying for the same posting twice — Indeed repeats listings heavily across search pages. fromageis the key to cheap incremental runs. Set it to 1 for a daily job and you only pay for new postings.- Indeed runs country-specific domains. Set
countrycorrectly or you will silently get the wrong market. - Indeed sits behind Cloudflare. Keep the default proxy configuration rather than switching to datacenter IPs.
Integrations and automation
Run Indeed Jobs Scraper on a schedule to keep a Indeed dataset fresh, or trigger it from your own stack through the Apify API and the official JavaScript and Python clients. Native integrations push results into Google Sheets, Slack, Airtable, Zapier, Make, GitHub, or any webhook endpoint. The Actor also works as an MCP tool, so an AI agent can call it directly.
Related scrapers
| Actor | What it does |
|---|---|
| ATS Job Boards Scraper - Greenhouse, Ashby, Lever | Jobs straight from Greenhouse, Ashby, and Lever boards. |
| Workday Jobs Scraper - Search Any Workday Career Site | Any company's Workday career site. |
| Talent.com Jobs Scraper | Talent.com across 21 country markets with direct apply links. |
| Glassdoor Company Scraper | Company reviews, salaries, and interview data. |
Frequently asked questions
Does it return salary data?
Yes, and it parses it. Where Indeed publishes salary, you get salaryMin, salaryMax, salaryType, and salaryCurrency as structured values, plus the original text in salary. Not every posting discloses pay.
Can I scrape Indeed outside the United States?
Yes. Set country to the market you want and the Actor targets that Indeed domain.
Do I need a Indeed API key?
No. Indeed Jobs Scraper reads publicly available Indeed pages and endpoints directly, so there is no key to obtain, no OAuth app to register, and no account to connect.
Can I export Indeed data to CSV, Excel, or Google Sheets?
Yes. Every run stores results in an Apify dataset that exports to JSON, JSONL, CSV, Excel, XML, or HTML with one click, and the Google Sheets integration writes rows straight into a spreadsheet.
Can I run Indeed Jobs Scraper on a schedule?
Yes. Apify schedules run the Actor hourly, daily, weekly, or on any cron expression, and webhooks can notify your systems the moment a run finishes.
Is it legal to scrape Indeed?
Scraping publicly available data is broadly lawful in the US and EU, but the answer depends on what you collect and how you use it. This Actor is built to gather public job posting information Indeed publishes publicly. Personal data carries extra obligations under GDPR and CCPA. Read Apify's guide on whether web scraping is legal and take your own legal advice for your use case.
Support and feedback
Found a bug, a missing field, or a Indeed page shape this Actor does not handle yet? Open an issue from the Issues tab on the Actor page. Feature requests and custom-scraper enquiries are welcome there too.