Indeed Jobs Scraper API - Salary, ATS & Company Data
Pricing
from $1.00 / 1,000 indeed job listings
Indeed Jobs Scraper API - Salary, ATS & Company Data
Fast Indeed jobs API for search, monitoring, and enrichment across 60+ markets. Get salaries, benefits, coordinates, descriptions, company data, public emails, and external ATS apply links.
Pricing
from $1.00 / 1,000 indeed job listings
Rating
2.2
(2)
Developer
Newbs
Maintained by CommunityActor stats
14
Bookmarked
449
Total users
2
Monthly active users
2 days ago
Last modified
Categories
Share
Collect current Indeed job listings without maintaining a browser or signing in. This API-first Indeed jobs scraper searches 60+ country markets and returns structured salaries, benefits, skills, full descriptions, coordinates, company data, public emails, and external employer or ATS apply links.
Use it for recruiting research, job-board feeds, salary benchmarking, hiring intelligence, company lead generation, and scheduled new-job alerts. Results are available as nested JSON or a flat table ready for CSV, Excel, Google Sheets, Make, Zapier, n8n, webhooks, and the Apify API.
Quick start
{"keyword": "software engineer","country": "united states","city": "Austin, TX","numberOfResults": 50,"maxResultsTotal": 50,"postedWithinDays": 7,"dataDepth": "standard"}
The legacy job array remains supported for existing Tasks and API integrations. New users can start with one keyword and add more searches only when needed.
Why use this Indeed jobs API?
- Fast API-first collection: keyword searches use Indeed's structured job response rather than loading every listing in a browser.
- Useful salary fields: original salary text, pay period, currency, estimated-pay flag, minimum, maximum, and annualized compensation.
- Recruiting-ready data: benefits, skills, work arrangement, experience level, job type, full description, company profile, and direct application URL.
- Precise location data: formatted and split city/state fields, latitude, longitude, requested location, and radius provenance.
- Predictable limits: set both results per search and a hard maximum across the complete run.
- Monitoring mode: return only jobs that were not seen by the same recurring search during the selected retention window.
- Clean exports: choose complete nested JSON or flat spreadsheet-friendly columns.
- Operational diagnostics: every run writes an
OUTPUTsummary with results, scanned rows, filters, duplicates, failures, and limit status.
Choose the data depth
| Mode | Best for | Included data |
|---|---|---|
basic | High-volume feeds and fast monitoring | Title, company, location, coordinates, date, salary, attributes, and apply URL |
standard | Recruiting and job-market analysis | Basic fields plus full description, benefits, skills, and public emails |
full | Company leads and enriched datasets | Standard fields plus employer website, industry, size, revenue, locations, CEO, and images |
Existing integrations that omit dataDepth keep the previous full-data behavior. The Store form recommends standard for a better speed-to-detail balance.
Search options
| Input | Description |
|---|---|
keyword | One role, skill, company, or Indeed search expression |
job | Additional keywords; retained for backward compatibility |
startUrls | Indeed search URLs or direct job URLs |
jobKeys | jk identifiers from direct Indeed job URLs |
country / city | Hiring market and optional city, state, region, or postal code |
numberOfResults | Maximum accepted jobs for each search |
maxResultsTotal | Hard result cap across all searches; 0 disables the global cap |
postedWithinDays | Freshness filter; 0 includes all available dates |
remoteMode | Any, remote, hybrid, or on-site |
jobTypes | Full-time, part-time, contract, temporary, internship, and more |
requireSalary | Return only jobs with exposed compensation |
minimumAnnualSalary | Filter using annualized compensation in the market currency |
experienceLevel | Entry, mid, or senior heuristic classification |
Indeed search URLs preserve their keyword, location, radius, freshness, and sort settings. Direct job URLs are best effort because individual job pages can require verification; keyword and search-URL collection remains the recommended high-reliability path.
Indeed search expressions
Indeed accepts useful expressions in keyword. Validate important expressions with a small run before scaling them.
"data engineer"title:("senior data engineer") -interntitle:("data engineer" or "data scientist")company:Google
Output fields
Each nested result has schemaVersion: "2.0" and can include:
title,subTitle,jobKey,jobDate,jobType,workArrangement, andexperienceLevelformattedLocationplus city, state, postal code, country, latitude, and longitudesalarywith original, parsed, currency, estimated, and annualized valuesbenefits,skills,attributes,emails, and full text/HTML descriptionsindeedJobLinkandapplicationInfo.externalApplyUrl- company profile, review URL, website, industry, employee count, revenue, locations, CEO, logo, and description
searchQuery,source, and optionaldataQualitymetadata
Set outputFormat to flat for top-level fields such as companyName, salaryMin, latitude, externalApplyUrl, and completenessScore.
Incremental job monitoring
Use onlyNewJobs: true in a scheduled Task to skip jobs already returned by the same search configuration. The Actor stores job keys in a dedicated named key-value store and automatically removes entries older than seenJobTtlDays.
{"keyword": "data engineer","country": "united states","city": "Remote","postedWithinDays": 7,"sortType": "date","onlyNewJobs": true,"seenJobTtlDays": 30,"maxResultsTotal": 100}
Use a custom incrementalStoreName when multiple Tasks should intentionally share monitoring state. Otherwise, the Actor isolates state using a fingerprint of the search configuration.
Pricing
Pay $4 per 1,000 successfully saved jobs, plus a $0.005 Actor start event. Apify platform usage is included, so there is no separate compute, storage, data-transfer, or proxy charge from this Actor.
Apify applies a notice period to price increases. During that transition, an existing user may temporarily see the previous tiered result price in the Pricing tab; the price displayed by Apify at run time is authoritative.
Empty searches, filtered jobs, previously seen jobs, and duplicates do not create billable result events. Use Apify's maximum charge per run together with maxResultsTotal for strict spending control.
API and automation
curl "https://api.apify.com/v2/acts/newbs~Indeed-Job-Scraper/runs?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"keyword":"data engineer","country":"united states","maxResultsTotal":100,"dataDepth":"standard"}'
Save common configurations as Apify Tasks, schedule them, and connect successful runs to webhooks, Make, Zapier, n8n, a database, or a spreadsheet. The Actor can also be called through Apify's MCP integration for AI-agent workflows.
Reliability and diagnostics
The Actor distinguishes a valid empty search from a source failure:
SUCCEEDED: jobs were saved.EMPTY: Indeed returned no source jobs.FILTERED: source jobs were found but none matched the filters.UNCHANGED: every matched job was already returned by the same incremental monitor.MAX_RESULTS_REACHED: the configured global result cap stopped additional searches.CHARGE_LIMIT_REACHED: Apify's spending limit stopped additional results.FAILED: the source request did not complete.
Check the OUTPUT record in the run's default key-value store for request-level details. Restrictive combinations can require scanning more source jobs; the Actor adjusts page sizes using observed filter acceptance while respecting the scan cap.
Responsible use
This Actor extracts publicly available job-posting data. Results can contain employer-provided content or public contact information. Your use must comply with applicable laws, privacy requirements, contractual obligations, and platform terms. This Actor is not affiliated with, endorsed by, or sponsored by Indeed.