Indeed Jobs Scraper — Bypass 25 Limit, 60+ Countries
Pricing
from $1.40 / 1,000 job listing scrapeds
Indeed Jobs Scraper — Bypass 25 Limit, 60+ Countries
Scrape 100% real Indeed job postings from 60+ countries. Bypass the 25-job limit with multi-city discovery. Get salaries, company profiles, full descriptions, ATS apply URLs, and resume match scores. No login. Residential proxy. $1.40 per 1,000 jobs scraped
Pricing
from $1.40 / 1,000 job listing scrapeds
Rating
0.0
(0)
Developer
Scrape Pilot
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
💼 Indeed Jobs Scraper — Search by Keyword or URL [Bypass the 25-Job Limit]
Extract 100% genuine job postings from Indeed across 60+ countries — job titles, salaries, company ratings, full descriptions, GPS, company profiles, and ATS apply URLs — using keyword search, direct URLs, or regional auto-expansion. Bypasses Indeed's ~25-jobs-per-page limit with deep multi-city discovery. No login required. Residential proxy ready. Pay per successful result — just $1.40 per 1,000 jobs scraped.
💡 What is the Indeed Jobs Scraper?
This actor extracts full job postings from Indeed by loading public search result pages in a stealth Playwright browser, reading the embedded mosaic-provider-jobcards JSON model, and then batch-hydrating complete HTML job descriptions via Indeed's internal /rpc/jobdescs endpoint. It uses a multi-layer enrichment pipeline so each output record is as complete as possible:
- Search-page JSON extraction — pulls the
mosaicProviderJobCardsModel.resultsobject straight fromwindow.mosaic.providerData(title, company, salary, rating, location, taxonomy, external apply URL). - RPC description hydration — batches job keys and calls Indeed's internal
/rpc/jobdescs?jks=...endpoint for the full rich HTML job description (not just the snippet). - Company profile enrichment — matches well-known employers against a built-in company database (CEO, revenue, industry, website, employee count, founded year), with sensible generic fallbacks for unknown companies.
- Resume keyword scoring — compares your resume/CV skills against each job's title + description and returns a 0–100 match score plus matched/missing keyword lists.
- Requirements & benefits extraction — automatically parses bullet-point requirements and benefits out of the job description using section-header heuristics with regex fallbacks.
On top of core job data, the actor supports regional auto-expansion: give a US state (e.g., "Texas") or country and it will run the same query across 5–8 top cities in that region, producing 2–5× more unique jobs than a single national search — this is the main mechanism that bypasses Indeed's ~25-jobs-per-page limit.
No Indeed account, no login, no cookies required. You are charged only for successful job records.
🚀 Key Features
| Feature | Description |
|---|---|
| Dual search modes | Keyword + Country + Location OR start URLs — perfect for ad-hoc searches and repeatable saved searches. |
| Bypass the 25-job limit | Deep multi-city discovery + seniority expansions + pagination produce 2–5× more unique jobs than a single national query. |
| Rich structured data | Salary (min/max/type/currency), job type, remote flag, city/state/postal, date published, company rating, review count. |
| Full job descriptions | Batch hydration via Indeed's internal /rpc/jobdescs RPC — plain text and original HTML. |
| External / ATS apply URL | Captures the thirdPartyApplyUrl so you can hit the real application portal directly. |
| Company profile enrichment | CEO name, revenue, industry, website, employee count, and founded year for known employers. |
| Resume match score | 0–100 fit score per job with matched & missing keyword lists. |
| Requirements & benefits extraction | Auto-parses bullet points under "Requirements", "Qualifications", "Benefits", "Perks", etc. |
| Regional auto-expansion | Give a US state, UK region, or Canadian province and it auto-expands to top cities. |
| Seniority deep search | Optional expansion to Senior / Lead / Junior variants of your base keyword. |
| 60+ country domains | US, UK, Canada, Australia, Germany, France, India, Netherlands, Spain, Italy, Brazil, Mexico, Singapore, Japan, Ireland, and many more. |
| Advanced Indeed filters | Radius, date posted, remote/hybrid, job type, minimum salary, sort by relevance or date. |
| Powerful post-filters | Strict keyword match, only jobs with salary, only external jobs, one job per company. |
| Residential proxy ready | Uses Apify's RESIDENTIAL proxy group by default with stealth Playwright to avoid IP blocks. |
| Pay per success | Charged only for job records that pass all your filters. |
| Spending limit protection | Automatically stops the run when your Apify pay-per-event spending limit is reached. |
| Clean, structured JSON | Ready for CRM, job boards, dashboards, spreadsheets, and data pipelines. |
📥 Input Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
position | string | No | "" | Primary job title / keyword (e.g., "Senior Full-Stack Developer"). |
keywords | array | No | [] | Additional keywords run as separate searches. |
country | string | No | "United States" | Target Indeed country domain (60+ supported). |
location | string | No | "" | City, state, region, or "Remote". Leave blank for a national search. |
radius | integer | No | 25 | Search radius in miles. |
datePosted | string | No | "any" | any, 1, 3, 7, 14, 30 (days). |
postedBy | string | No | "all" | all, employer, recruiter. |
jobType | array | No | [] | full-time, part-time, contract, internship, temporary. |
remote | string | No | "any" | any, remote, hybrid. |
experienceLevel | string | No | "all" | all, entry, mid, senior. |
minSalary | integer | No | null | Minimum annualized salary floor. Hourly salaries are multiplied by 2080 before comparison. |
sort | string | No | "relevance" | relevance or date. |
startUrls | array | No | [] | Indeed search URLs to scrape directly (bypasses keyword building). |
deepSearch | boolean | No | false | Adds Senior / Lead / Junior variants of your primary keyword. |
expandToCities | boolean | No | true | If location matches a known region, auto-expands to top cities in that region. |
strictKeywordMatch | boolean | No | false | Rejects jobs whose title + description don't contain all query terms. |
includeJobsWithNoSalary | boolean | No | true | Set false to keep only jobs with a salary. |
oneJobPerCompany | boolean | No | false | Keep only the first job per company. |
resolveExternalApplyUrl | boolean | No | false | Charge an extra PPE event when an external apply URL is present. |
includeCompanyDetails | boolean | No | true | Enrich with CEO, revenue, industry, website, employee count, founded year. |
resumeKeywords | array | No | [] | Resume skills used to compute the resumeMatchScore. |
onlyExternalJobs | boolean | No | false | Keep only jobs with an external apply URL. |
flattenOutput | boolean | No | true | Flatten output JSON (single-level). |
maxJobs | integer | No | 50 | Hard cap on the number of jobs pushed to the dataset. |
proxy | object | No | {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]} | Apify Proxy configuration. |
Example Input (Keyword + Regional auto-expansion)
{"position": "Senior Full-Stack Developer","keywords": ["React", "Python", "AWS"],"country": "United States","location": "Texas","radius": 25,"datePosted": "7","jobType": ["full-time", "contract"],"remote": "remote","deepSearch": true,"expandToCities": true,"includeCompanyDetails": true,"resumeKeywords": ["React", "Python", "AWS Amplify", "FastAPI", "TypeScript"],"maxJobs": 200}
Example Input (Direct Indeed URLs)
{"startUrls": [{ "url": "https://www.indeed.com/jobs?q=python+developer&l=Remote" },{ "url": "https://uk.indeed.com/jobs?q=data+engineer&l=London" }],"maxJobs": 100,"includeCompanyDetails": true}
Example Input (Minimum salary + external jobs only)
{"position": "Backend Engineer","country": "United States","location": "Remote","minSalary": 120000,"onlyExternalJobs": true,"includeJobsWithNoSalary": false,"maxJobs": 50}
📤 Output Fields
Each successful job is pushed to the dataset as an object with the following fields:
| Field | Type | Description |
|---|---|---|
jobKey | string | Indeed's unique job ID (used to build canonical URLs). |
positionName | string | Original job title as displayed by Indeed. |
normTitle | string | Normalized title (Indeed's standardized title). |
company | string | Company name (falls back to "Confidential"). |
salary | string | Human-readable salary text (e.g., "$135,000 - $165,000 a year"). |
salaryMin | number or null | Minimum salary parsed from Indeed. |
salaryMax | number or null | Maximum salary (-1 for "From $X" style). |
salaryType | string | yearly or hourly. |
currency | string | Currency code (e.g., USD, GBP, EUR). |
jobType | string | Full-time, Part-time, Contract, Internship, Temporary. |
remote | string | Remote, Hybrid, or On-site. |
location | string | Formatted location string. |
city | string | City. |
state | string | State / province. |
countryCode | string | ISO country code (e.g., US). |
postalCode | string | Postal / ZIP code. |
latitude | number or null | GPS latitude (when available). |
longitude | number or null | GPS longitude (when available). |
datePublished | string | ISO 8601 UTC publish timestamp. |
dateOnIndeed | string | Relative date label (e.g., "Just posted", "2 days ago"). |
jobDescription | string | Full job description as clean plain text. |
jobDescriptionHtml | string | Full job description as raw HTML. |
requirements | array of strings | Bullet-point requirements extracted from the description. |
benefits | array of strings | Bullet-point benefits extracted from the description. |
companyHeaderRating | number or null | Indeed company rating (0–5). |
reviewsCount | number or null | Number of company reviews on Indeed. |
companyOverviewLink | string | Indeed company overview URL. |
companyDetailsCeoName | string | CEO name (if matched in the enrichment DB). |
companyDetailsRevenue | string | Revenue band (e.g., "$10B+"). |
companyDetailsIndustry | string | Industry classification. |
companyDetailsWebsite | string | Company careers / corporate website. |
companyDetailsEmployeesCount | string | Employee count band (e.g., "100,000+"). |
companyDetailsFoundedYear | number or null | Founding year. |
externalApplyUrl | string | External / ATS apply URL (Indeed's thirdPartyApplyUrl). |
url | string | Canonical Indeed job URL (/viewjob?jk=...). |
jobUrl | string | Same as url (alias for convenience). |
resumeMatchScore | number | Resume match score (0–100), only when resumeKeywords is set. |
resumeMatchedKeywords | array of strings | Resume keywords found in the job. |
resumeMissingKeywords | array of strings | Resume keywords missing from the job. |
Jobs that fail to scrape (not found, blocked, empty, or filtered out) are not charged and are logged as warnings rather than pushed to the dataset.
Example Output
[{"jobKey": "a0a667a4adaa51d5","positionName": "Senior Full-Stack Developer (AWS Amplify Gen2 / React / Python)","normTitle": "Full Stack Developer","company": "National Testing Network","salary": "$135,000 - $165,000 a year","salaryMin": 135000,"salaryMax": 165000,"salaryType": "yearly","currency": "USD","jobType": "Full-time","remote": "Remote","location": "Remote","city": "Remote","state": "","countryCode": "US","postalCode": "","datePublished": "2026-09-13T16:19:55Z","dateOnIndeed": "Just posted","jobDescription": "...full text...","jobDescriptionHtml": "<div>...full HTML...</div>","requirements": ["5+ years of React experience", "Bachelor's degree in CS or equivalent"],"benefits": ["Health insurance", "401(k) matching", "Paid time off"],"companyHeaderRating": 0,"reviewsCount": 0,"companyOverviewLink": "https://www.indeed.com/cmp/National-Testing-Network","companyDetailsCeoName": "","companyDetailsRevenue": "$100M to $500M","companyDetailsIndustry": "Corporate Services & Operations","companyDetailsWebsite": "","companyDetailsEmployeesCount": "1,000 to 5,000 employees","companyDetailsFoundedYear": null,"externalApplyUrl": "http://www.indeed.com/applystart?jk=a0a667a4adaa51d5&...","url": "https://www.indeed.com/viewjob?jk=a0a667a4adaa51d5","jobUrl": "https://www.indeed.com/viewjob?jk=a0a667a4adaa51d5","resumeMatchScore": 78,"resumeMatchedKeywords": ["React", "Python", "AWS"],"resumeMissingKeywords": ["FastAPI"]}]
💰 Pricing
| Metric | Price |
|---|---|
Per successful job scraped (job-scraped) | $0.0014 |
| Per 1,000 successful jobs scraped | $1.40 |
Per external apply URL resolved (external-apply-resolved) | $0.001 |
| Per 1,000 external apply URLs resolved | $1.00 |
Per Actor start (apify-actor-start) | $0.03 |
- Pay-per-event: you are charged one
job-scrapedevent ($1.40 / 1,000) per successfully scraped job (a job that passes all your filters and is pushed to the dataset). - Optional
external-apply-resolvedevent ($1.00 / 1,000) — triggered only ifresolveExternalApplyUrl = trueand the job has an external apply URL. apify-actor-startevent ($0.03) — flat charge per run.- Failed, blocked, empty, or filtered-out jobs are free — no charge.
- Example: 1,000 successful jobs = $1.40. 10,000 successful jobs = $14.00.
- Spending limit protection: the run automatically and gracefully stops as soon as your configured Apify spending limit for the
job-scrapedevent is reached — no further jobs are processed or charged.
🛠 How to Use on Apify
- Create a task with this actor.
- Choose a mode:
- Keyword mode — fill in
position,country, and optionallylocation. Addkeywordsfor extra searches. - URL mode — paste Indeed search URLs into
startUrls.
- Keyword mode — fill in
- Optional tuning:
- Set
deepSearch = trueto add Senior / Lead / Junior variants. - Set
expandToCities = trueand give a state/region ("Texas","California","United Kingdom","Canada") for auto multi-city expansion — this is the main way to bypass the 25-job limit. - Set
resumeKeywordsto enable theresumeMatchScore. - Set
onlyExternalJobs = trueto keep only jobs with a third-party apply URL.
- Set
- Proxies are configured automatically — the actor requests Apify's
RESIDENTIALproxy group and uses stealth Playwright to avoid IP blocks. - Run — the actor scrapes each search page, batch-hydrates job descriptions, enriches company data, and pushes results to the Dataset.
- Export — download as JSON, CSV, or Excel from the Dataset tab.
Running via API
curl -X POST "https://api.apify.com/v2/acts/your-username~indeed-jobs-scraper/runs" \-H "Content-Type: application/json" \-H "Authorization: Bearer YOUR_API_TOKEN" \-d '{"position": "Senior Full-Stack Developer","country": "United States","location": "Texas","expandToCities": true,"deepSearch": true,"maxJobs": 200}'
🎯 Use Cases
| Industry / Use Case | How It Helps |
|---|---|
| Recruitment / Staffing | Build pipelines of open roles by keyword, city, and seniority — matched automatically to candidate resumes. |
| Job Boards | Aggregate fresh Indeed listings across multiple regions into your own job board, refreshed daily. |
| Salary Benchmarking | Track salary ranges for a given role across cities and companies over time. |
| Market Research | Analyze hiring trends per industry, region, or company. |
| Competitive Intelligence | Monitor which companies are hiring for which roles and how often. |
| Lead Generation | Extract company names, ratings, and external apply URLs to build employer outreach lists. |
| Sales Prospecting | Trigger outreach when target companies post new roles in your niche. |
| Academic Research | Study hiring patterns, remote-work adoption, and salary distributions across countries. |
| Career Coaching | Feed resumeKeywords and get a ranked list of best-fit jobs with match scores. |
| ATS / Apply-flow Automation | Get the true external apply URL for each job to automate applications. |
❓ Frequently Asked Questions
1. Do I need an Indeed account? No. The actor reads Indeed's public search pages and public job description RPC. No login, no cookies.
2. How does it bypass Indeed's ~25-job limit? Two ways: (a) regional auto-expansion — a state/region search becomes 5–8 separate city searches, multiplying unique jobs; (b) deep search — seniority variants of your keyword each return their own result set.
3. Why do I need residential proxies? Indeed blocks most datacenter IPs after moderate usage. The actor requests Apify's residential proxy group by default to reduce blocking.
4. Can I scrape jobs across multiple countries in one run?
Yes — pass multiple startUrls (e.g., www.indeed.com and uk.indeed.com) or run separate tasks per country. The country field controls the domain built for keyword mode.
5. How are salaries parsed?
The actor reads Indeed's extractedSalary and salarySnippet objects, producing salaryMin, salaryMax, salaryType, and currency. Hourly salaries are annualized (× 2080) only for the minSalary filter — the output preserves the original type.
6. What is resumeMatchScore?
A 0–100 score computed by comparing your resumeKeywords against the job's title + full description, plus matched/missing keyword lists.
7. Am I charged for jobs that fail or are filtered out?
No. You're only charged one job-scraped event per job that passes filters and is pushed to the dataset.
8. What triggers the external-apply-resolved charge?
Only when resolveExternalApplyUrl = true and the job has an external apply URL — a separate $1.00 / 1,000 PPE event.
9. What happens when my spending limit is reached? The actor detects the pay-per-event spending limit and stops processing further jobs, preventing overspending.
10. Can I export to CSV or Excel? Yes — every Apify dataset can be downloaded as JSON, CSV, Excel, or XML from the Dataset tab.
📝 Technical Notes
- Targets:
https://{domain}/jobs?q=...&l=...(search) andhttps://{domain}/rpc/jobdescs?jks=...(descriptions). - Parsing strategies: (1)
window.mosaic.providerData["mosaic-provider-jobcards"].metaData.mosaicProviderJobCardsModel.resultsfor search results, (2)/rpc/jobdescsfor full descriptions, (3) BeautifulSoup for HTML → plain-text cleaning, (4) regex + section-header heuristics for requirements/benefits. - Anti-bot:
playwright-stealth,--disable-blink-features=AutomationControlled, ApifyRESIDENTIALproxy group, Chrome 124 user agent. - City expansion:
REGION_CITY_EXPANSIONmaps US states, UK regions, and Canadian provinces to their top cities (5–8 each). - Seniority expansion:
SENIORITY_EXPANSIONSadds Senior / Lead / Junior (and optionally Staff / Principal / Manager / Director) variants to the primary keyword. - Company enrichment: a curated
COMPANY_PROFILES_DATABASE(CEO, revenue, industry, website, employees, founded) with generic fallbacks for unknown companies. - Charging: uses Apify's pay-per-event
Actor.charge(event_name=...)with spending-limit detection (event_charge_limit_reached) to stop the run gracefully. - Output: pushed to the Apify Dataset per successful job as camelCase JSON records.
🌍 Supported Countries
United States, United Kingdom, Canada, Australia, Germany, France, India, Netherlands, Spain, Italy, Brazil, Mexico, Singapore, Switzerland, Japan, Ireland, South Africa, New Zealand, Sweden, Belgium, Austria, Poland, Portugal, Argentina, Chile, Colombia, Hong Kong, Malaysia, Philippines, Saudi Arabia, United Arab Emirates.
🏙️ Regional Auto-Expansion
When expandToCities = true and location matches a known region, the actor runs separate searches across the region's top cities — this is the primary mechanism to bypass Indeed's 25-job-per-page cap.
| Region | Auto-expands to |
|---|---|
| Texas | Houston, Dallas, Austin, San Antonio, Fort Worth, Plano, Arlington, El Paso |
| California | Los Angeles, San Francisco, San Diego, San Jose, Sacramento, Irvine, Oakland |
| Florida | Miami, Orlando, Tampa, Jacksonville, Fort Lauderdale, St. Petersburg |
| New York | New York, Brooklyn, Queens, Buffalo, Rochester, Albany |
| Illinois | Chicago, Aurora, Naperville, Rockford, Joliet |
| Washington | Seattle, Bellevue, Spokane, Tacoma |
| Georgia | Atlanta, Alpharetta, Savannah, Marietta |
| United Kingdom | London, Manchester, Birmingham, Leeds, Glasgow, Edinburgh, Bristol, Liverpool |
| Canada | Toronto, Vancouver, Montreal, Calgary, Ottawa, Edmonton |
🔍 SEO Keywords
Indeed Jobs Scraper, Indeed scraper, job scraper, Apify Indeed actor, bypass Indeed 25 job limit, Indeed keyword search, Indeed URL scraper, multi-country job scraper, job posting scraper, salary data scraper, remote job scraper, ATS apply URL, external apply URL scraper, company profile enrichment, resume match score, Indeed RSS alternative, hiring data API, recruitment data, pay per event scraper, residential proxy job scraper
🔗 Related Actors
- Clutch.co Scraper – Extract agency profiles, reviews, emails, buyer leads, and AI pain-point insights from Clutch.co.
- Instagram Profile & Leads Scraper – Extract public Instagram profile data, emails, phones, and business info.
Start scraping Indeed jobs today — only $1.40 per 1,000 successful jobs, with 60+ countries, city auto-expansion, full descriptions, and resume match scoring built in.