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.
What does this actor do?
The Indeed Jobs Scraper extracts job listings, salaries, company ratings, full job descriptions, and remote work info from Indeed.com without needing an account, an API key, or any setup. Give it a position keyword and a location (or paste full Indeed search URLs) and it pushes one structured JSON record per job into your dataset.
Built for production scraping: residential proxy rotation, Chrome TLS impersonation, automatic session refresh, and a clean output schema that drops straight into a database. Use it for job market research, salary benchmarking, hiring trend monitoring, automated job alerts, competitive intelligence, or building your own Indeed data API.
What data does it extract?
Per job:
- Identifiers: Indeed job key (
id), canonical job URL, scrape timestamp - Position: title, company name, full Indeed company URL, company logo
- Location: formatted location string, plus city / state / postal code as separate fields
- Salary: original text (
$70 - $80 an hour) plus parsed min, max, currency, and pay frequency (HOURLY, YEARLY, etc.) - Job type: array of employment types (Fulltime, Contract, Part-time, etc.)
- Remote work: FULLY_REMOTE, HYBRID, or null
- Posted: relative time (
3 days ago) and parsed ISO timestamp - Company signals: rating out of 5, review count, featured-employer flag, employer activity
- Description: full HTML body and a plain-text version (typical 5,000+ characters, the entire job posting)
- Benefits: array of highlighted employer benefits (Health insurance, 401(k), Paid time off, ...)
- Flags: sponsored (ad), urgently hiring, high-volume hiring, Indeed Apply eligibility
- Apply links: external ATS URL when present, plus the canonical Indeed apply URL
- Echoes: the original
position/location/countryyou searched for, and the start URL if applicable
How to use this actor
- Set
positionto your search keyword andlocationto a city, state, ZIP, orremote. Pick a country. - Set
maxItemsPerSearchto cap your run (the actor stops at this count to keep costs predictable). - Click Start. Wait for the dataset to fill and export as JSON, CSV, Excel, or HTML.
For more advanced runs you can paste full Indeed search URLs (or single job URLs) into startUrls instead of using position / location. Filters supported: max age in days (fromage), employment type (jobType), experience level, remote-only mode, and search radius.
Input parameters
| Field | Type | Description |
|---|---|---|
position | string | Search keywords, e.g. python developer. |
location | string | City, state, ZIP, or remote. Leave blank for nationwide. |
country | enum | Two-letter country code; picks the right Indeed regional site. |
maxItemsPerSearch | int | Hard cap per search. Default 100. |
startUrls | array | Optional. Full Indeed search URLs or job URLs. |
parseCompanyDetails | bool | When ON, fetches the detail page for each job to get the full description and company info. Default ON. Turn OFF for ~3x cheaper search-only runs. |
saveOnlyUniqueItems | bool | Deduplicate by Indeed job key. Default ON. |
fromage | int | Max job age in days (1, 3, 7, 14, ...). |
sort | enum | date for newest first, blank for relevance. |
jobType | enum | Filter to fulltime / parttime / contract / temporary / internship. |
experienceLevel | enum | entry_level / mid_level / senior_level. |
remoteOnly | bool | Return only fully-remote jobs. |
radius | int | Search radius in miles around location. |
maxConcurrency | int | Parallel request count. Default 5. |
proxyConfiguration | object | Apify proxy. Residential is recommended. |
Output format
Each record looks like this:
{"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"}
Pricing
This actor uses pay-per-event pricing on the Apify platform:
| Event | Price |
|---|---|
| Per job result | $0.003 |
Apify's standard subscription tiers (Bronze, Silver, Gold, Platinum, Diamond) apply automatic discounts on top.
Approximate run cost:
- 100 jobs: ~$0.30
- 500 jobs: ~$1.50
- 1,000 jobs (single search cap): ~$3.00
Set maxItemsPerSearch to control spend per run, and configure maxTotalChargeUsd on the run options for a hard ceiling.
Frequently asked questions
Does this actor require an Indeed account or API key?
No. The actor uses Indeed's public mobile search pages. It mints its own Cloudflare session cookies automatically on each run and refreshes them as they expire. You do not paste any cookies, sessionids, or login credentials.
How fresh is the data?
Real-time. Every run hits Indeed live; there is no internal cache. Job postings appear in results within minutes of being posted on Indeed.
Why mobile pages?
Indeed soft-blocks unauthenticated pagination on desktop search results beyond the first page, redirecting to a sign-in challenge. The mobile search path (/m/jobs) paginates cleanly through the full result set without any sign-in prompt, so we use it. The data is identical to what desktop shows.
What is the per-search ceiling?
Indeed caps any single search at about 1,000 results, regardless of scraper. For very large pulls, split your query by date freshness (fromage=1, then =3, =7, ...), by location, or by sub-keyword, then deduplicate on id. The actor's saveOnlyUniqueItems flag handles dedup automatically across the same run.
Can I scrape company reviews or salaries pages?
This actor focuses on job listings (with company rating + review count attached to each job). Standalone company reviews and salary aggregation are separate use cases; consider building them as follow-up actors that consume this one's output.
Do I need residential proxies?
Residential is strongly recommended. Indeed sits behind Cloudflare, which TLS-fingerprints clients. The actor uses Chrome impersonation (BoringSSL via impit) to pass the TLS gate, but datacenter IP reputation can still trigger challenges under sustained load. Apify's RESIDENTIAL proxy group is the default proxy setting and is sufficient for most runs.
What happens if a request gets blocked?
The actor detects Cloudflare 403s, soft-block sign-in redirects, and 429 rate limits, retires the affected proxy session, and retries with a fresh session. After 5 failed retries on a single page, that page is logged and skipped; the run continues with the rest.
Other actors you might like
More Apify scrapers built by Cirkit are listed at apify.com/cirkit.