π₯ Indeed Jobs Scraper API/Keyword or URL/No Login (/w EMAILS)
Pricing
from $1.19 / 1,000 results
π₯ Indeed Jobs Scraper API/Keyword or URL/No Login (/w EMAILS)
Indeed jobs + company-leads scraper β search by keyword or URL. Returns salaries, GPS, full descriptions, the resolved external/ATS apply URL, and employer firmographics (CEO, revenue, industry, website) plus optional contact-email enrichment. Clean flat output; hard maxJobs cap.
Pricing
from $1.19 / 1,000 results
Rating
4.6
(6)
Developer
Muhamed Didovic
Maintained by CommunityActor stats
19
Bookmarked
285
Total users
53
Monthly active users
6.6 hours
Issues response
3 hours ago
Last modified
Categories
Share
π₯ Indeed Jobs Scraper β Search by Keyword or URL [Bypass the 25-job limit]
Search Indeed two ways β type a keyword + country (no URL needed) or paste any Indeed search URL β and get the full result set, not just the first page. This scraper bypasses Indeed's ~25-jobs-per-page cap and returns clean, structured data: salaries, company ratings, full descriptions, GPS coordinates, company profiles, and the real external apply URL (resolved past Indeed's redirect to the employer's own site / ATS).
π‘ One actor, both modes β fill the keyword fields, paste URLs, or both. Related scrapers: Rental version β memo23/apify-indeed-cheerio Β· Keyword-only version β memo23/apify-indeed-cheerio-keywords-ppr Β· Company reviews β memo23/apify-indeed-reviews-ppr
Why use this scraper
- Two ways to search. Type a keyword + country (no URL building required), or paste a real Indeed search URL β both honor every Indeed filter and return the complete result set.
- Every filter. Keyword, location, radius, date posted, posted-by, remote, job type, experience level, minimum salary, sort β set them as fields or bring them in your URL.
- Gets ALL results. Indeed caps a normal search at ~25 jobs per page; this actor pulls the complete result set via deep discovery.
- Resolved external apply URL (optional). For jobs that redirect off Indeed, it follows the redirect chain and returns the final employer/ATS apply URL β rare among Indeed scrapers and invaluable for recruiters and lead-gen.
- Rich company profile. CEO, revenue, industry, website, founding year, employee count, rating and review count.
- Region auto-expansion. A country/region search (e.g.
Scotland,Texas) is automatically fanned out into per-city searches and deduplicated β typically 2β5Γ more unique jobs. - Clean output by default. One flat, tidy row per job (β120 named fields) β ready for CSV / Excel. The raw nested model is available if you prefer it.
- Honest limits.
maxJobsis a hard cap β you are never charged for more rows than you ask for, even with region expansion on.
Two ways to search
Option A β by keyword (no URL needed)
Fill in Positions / keywords + Country, and optionally narrow by location, radius, date posted, job type, remote, experience level, or minimum salary. That's it β the actor builds the search for you.
Option B β by URL
- Go to indeed.com (or your country's Indeed, e.g.
uk.indeed.com). - Search for a role and apply any filters you want (date, remote, salary, job typeβ¦).
- Copy the URL from the address bar and paste it into Start URLs.
Use either mode β or both at once. Every filter is honored and you get the complete result set, well past page one.
Supported inputs
Search by keyword
| Input | What it does |
|---|---|
| Positions / keywords | The role or keywords to search (e.g. registered nurse, python developer) |
| Keywords (multiple) | Optional list β run several keyword searches in one run; results merged and deduplicated |
| Country | Indeed country domain β 60+ supported |
| Location | City, state/region, or postal code |
| Radius | Miles around the location |
| Date posted | Any time / last 24 h / 3 / 7 / 14 / 30 days |
| Posted by | Employer, staffing agency, or both |
| Job type | Full-time, part-time, contract, temporary, internship, permanent, new-grad, commission (multi-select) |
| Remote work | Remote or hybrid |
| Experience level | Entry / mid / senior |
| Minimum salary | Filter to a salary floor, in the country's currency |
| Sort | Relevance, or date (newest first) β ideal for daily runs |
Search by URL
| Input | What it does |
|---|---|
| Start URLs | One or more Indeed search (or individual job) URLs β every filter in the URL is honored |
Options (both modes)
| Input | What it does |
|---|---|
| Deep search | Expand each keyword into related-term searches (seniority + role variants) to get past Indeed's per-query result ceiling β deduped by job id (off by default) |
| Expand to cities | Fan a country/region search into per-city searches for 2β5Γ more results (default on) |
| Strict keyword match | Keep only jobs whose title/description match your keyword (drops Indeed's sponsored/related padding) |
| Include jobs with no salary | On by default; turn off to keep only jobs that list a stated/estimated salary |
| One job per company | Return at most one job per employer β unique companies only |
| Resolve external apply URL | Follow redirects to the real employer/ATS apply link (off by default) |
| Include company details | Add the full company profile (CEO, revenue, industry, websiteβ¦) |
| Enrich with company emails | Best-effort contact email from the company's own website (experimental) |
| Profile match (resume skills) | Score each job against your resume/CV skills β adds a 0β100 fit score per row (for job seekers) |
| Only external jobs | Keep only jobs that apply on an external site |
| Flatten output | Clean flat top-level fields (default) vs the raw nested API model |
| Max jobs | Hard cap on the number of results returned and charged |
Use cases
- Recruiting & sourcing β live openings with the direct apply URL and company profile.
- Lead generation β companies actively hiring, enriched with industry, size, website, and (optionally) a contact email.
- Salary benchmarking β structured salary ranges with currency and pay period.
- Job boards & aggregators β a fresh, deduplicated feed of postings.
- Market & talent research β hiring demand by role, location, and seniority over time.
How it works
- Your search β built from the keyword fields or your Start URLs (and, with expansion, its per-city variants) β is loaded via Indeed's mobile endpoints.
- The actor pulls the full result set, beyond the first page.
- Each job is opened for full detail β description, salary, company, ratings, location/GPS.
- If enabled, it resolves the external apply URL by following Indeed's redirect chain.
- Results are deduplicated by job key, capped at
maxJobs, and written to the dataset (flat by default, or the raw nested model).
Input configuration
Set inputs in the visual Input tab, or pass JSON via the API.
Search by keyword:
{"position": "registered nurse","country": "United States","location": "Texas","datePosted": "7","jobType": ["FULLTIME"],"sort": "date","maxJobs": 200}
Search by URL:
{"startUrls": [{ "url": "https://www.indeed.com/jobs?q=software+engineer&l=Remote&fromage=3" }],"includeCompanyDetails": true,"expandToCities": true,"maxJobs": 1000}
Output overview
Each row is one job β clean and flat by default (set flattenOutput: false for the raw nested model). You get the job, its parsed salary, the company and its profile, the location with coordinates, and apply links. A live sample is always available on the actor's Output tab after any run.
Key output fields
| Field | Description |
|---|---|
positionName / normTitle | Job title |
company | Employer name |
salary, salaryMin, salaryMax, salaryType, currency | Parsed compensation |
jobType | Full-time / Part-time / Contract / β¦ |
remote | Remote flag |
location, city, countryCode, postalCode, latitude, longitude | Where the job is |
datePublished, dateOnIndeed | When it was posted |
jobDescription, jobDescriptionHtml | Full description (text + HTML) |
requirements, benefits | Parsed requirements & benefits |
companyHeaderRating, reviewsCount | Employer rating & review count |
companyDetailsCeoName, companyDetailsRevenue, companyDetailsIndustry, companyDetailsWebsite, companyDetailsEmployeesCount, companyDetailsFoundedYear | Company profile (with includeCompanyDetails) |
externalApplyUrl, externalApplyLink | Resolved external/ATS apply URL (with resolveExternalApplyUrl) |
resumeMatchScore, resumeMatchedKeywords, resumeMissingKeywords | Profile-match fit 0β100 vs your resume skills (with resumeKeywords) |
url, jobUrl | Canonical Indeed listing URL |
FAQ
Do I need to build a URL? No. Just fill Positions / keywords + Country (Option A) and the actor builds the search for you. Prefer to paste a ready-made Indeed URL? Use Start URLs (Option B). Either works.
How many jobs can I get per search? The full result set the search exposes β this actor is built specifically to get past the ~25-per-page cap.
Do all Indeed filters work? Yes. Whether you use the keyword fields or paste a URL, every filter (date, remote, salary, job type, experience level, posted-by, sortβ¦) is applied exactly as on Indeed.
I searched a whole country/region β will it find more than the first page shows? Yes. With Expand to cities on (default), a region search is fanned out into per-city searches and deduplicated, typically yielding 2β5Γ more unique jobs.
If I set Max jobs, could I be charged for more?
No. maxJobs is a hard cap β the actor stops at exactly that many results and never pushes or charges beyond it, even with region expansion on.
Why do I see a few jobs that don't match my keyword? Indeed injects sponsored and related jobs into every result page. Enable Strict keyword match to drop them.
How do I search several roles at once? Add each keyword to the Keywords (multiple) list β the actor runs one search per keyword and merges + deduplicates the results into a single dataset.
What is Deep search?
Indeed caps a single query at roughly a few hundred results. Deep search expands each keyword into related-term searches (seniority variants like Senior/Junior/Lead plus common role variants) and searches them alongside the original, deduped by job id β so a broad search reaches far more of the market. Max jobs still hard-caps what's returned and charged.
What is Profile match / resumeKeywords?
It is not a search filter β it never changes which jobs are returned. Paste your resume/CV skills and every job is scored 0β100 on how well it fits (with resumeMatchScore, resumeMatchedKeywords, resumeMissingKeywords), so job seekers can sort by best fit instead of reading each posting.
Can I export to CSV / Excel? Yes β via Apify's dataset export (JSON, CSV, Excel) or the API.
Support
- Report an issue
- Request a customization or a private API (no Apify fee, usage only): muhamed.didovic@gmail.com
- Need a different site scraped? Email me: muhamed.didovic@gmail.com
Explore more of my scrapers
- Indeed Jobs Scraper β Search by Keyword (no URL needed)
- Indeed Comprehensive Crawler
- Indeed Company Reviews Scraper
π€ For AI Agents & LLM Apps
Compact reference for AI agents calling this actor via the Apify MCP server or the Apify API (actor: memo23/apify-indeed-cheerio-ppr).
Purpose: Scrapes Indeed job listings (60+ country domains) into one flat row per job β by keyword + country or by pasted Indeed URL β going past Indeed's ~25-jobs-per-page cap and optionally resolving the real external/ATS apply URL.
Minimal input:
{"position": "registered nurse","country": "United States","maxJobs": 50}
URL mode: { "startUrls": [{ "url": "https://www.indeed.com/jobs?q=software+engineer&l=Remote&fromage=3" }], "maxJobs": 50 }
Output: one dataset row per job β positionName, normTitle, company, salary, salaryMin, salaryMax, salaryType, currency, jobType, remote, location, city, countryCode, postalCode, latitude, longitude, datePublished, dateOnIndeed, jobDescription, jobDescriptionHtml, requirements, benefits, companyHeaderRating, reviewsCount, url, jobUrl; with includeCompanyDetails also companyDetailsCeoName, companyDetailsRevenue, companyDetailsIndustry, companyDetailsWebsite, companyDetailsEmployeesCount, companyDetailsFoundedYear; with resolveExternalApplyUrl also externalApplyUrl.
Behaviors an agent should know:
- Keyword mode and URL mode can be used separately or together; every Indeed filter in either is honored.
maxJobsis a hard cap on rows returned and charged (default 20000) β always set it.expandToCities(default true) fans country/region searches into per-city searches deduplicated by job id β expect more rows and requests; set false to scrape only the exact URL given.flattenOutput(default true) gives the flat row above; false returns Indeed's raw nested API model.resolveExternalApplyUrlandenrichEmailsare off by default; each adds extra requests per applicable job.- Pay-per-event billing β see the Pricing tab on the actor page.
β οΈ Disclaimer
This scraper collects only publicly available job data from Indeed. It does not access private, gated, or personal data, and is intended for lawful purposes such as recruitment, market research, and analytics. You are responsible for using the scraped data in compliance with Indeed's terms and applicable laws (including data-protection regulations).
Keywords: indeed scraper, indeed jobs scraper, scrape indeed, search indeed by keyword, indeed keyword scraper, indeed url scraper, bypass 25 job limit, indeed api, job scraper, job listings, salaries, company data, remote jobs, recruitment data, lead generation, ATS apply url, job board feed.