Indeed Job Scrapper
Pricing
$0.15 / actor start
Indeed Job Scrapper
crape job listings from Indeed.com and Indeed India (in.indeed.com) by role, skill, and location. Returns deduplicated, capped results ready to pipe into spreadsheets, databases, ATS systems, or AI workflows. Built for developers, recruiters, and data teams who need structured Indeed job data .
Pricing
$0.15 / actor start
Rating
0.0
(0)
Developer
Dinesh Kumar Wadhwani
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
2
Monthly active users
20 days ago
Last modified
Categories
Share
Indeed Jobs Scraper — Multi-Role, Multi-Location, Global + India
Scrape job listings from Indeed.com and Indeed India (in.indeed.com) by role, skill, and location. Returns deduplicated, capped results ready to pipe into spreadsheets, databases, ATS systems, or AI workflows.
Built for developers, recruiters, and data teams who need structured Indeed job data without managing browser automation themselves. Supports multiple roles, multiple skills, and multiple locations in a single run — with role normalization built in so you get consistent results even when job titles are written differently across companies.
Why this Actor
- Multi-role search — search up to 3 job titles in one run, combined with up to 3 supporting skills
- Role normalization — automatically expands common abbreviations (
VP→Vice President,Snr→Senior,dev→Developer) so you reach the right jobs regardless of how companies write titles - Global + India — works on both
indeed.comandin.indeed.com - Hard deduplication — uses Indeed's internal job key (
jk) to deduplicate across search terms, locations, and pages. The same job never appears twice - 100-job cap — stops cleanly at 100 unique results per run, no runaway pagination
- No proxy required — works without residential proxies on standard Apify infrastructure
What it does
This Actor searches Indeed job listings using:
- Up to 3 roles — each normalized and combined with skills to form targeted search queries
- Up to 3 skills — appended to each role to narrow results
- Multiple locations — searches each location independently, results pooled and deduplicated globally
- One time frame — filter by how recently jobs were posted
For each role + skill combination, the Actor builds a targeted search URL, loads the results page, extracts all job cards, deduplicates by job key, and paginates until the 100-job global cap is reached.
Role normalization
Before searching, the Actor expands common abbreviations:
| Input | Normalized |
|---|---|
VP Engineering | Vice President Engineering |
SVP Product | Senior Vice President Product |
Snr Developer | Senior Developer |
Tech Lead | Technical Lead |
Java Dev | Java Developer |
JS Dev | JavaScript Developer |
Head of Engg | Head of Engineering |
Input
| Field | Type | Required | Limit | Description |
|---|---|---|---|---|
roles | string[] | ✅ Yes | 3 | Job titles to search for |
skills | string[] | No | 3 | Supporting keywords appended to each role |
locations | string[] | ✅ Yes | — | Cities, regions, or countries to search in |
timeFrame | string | No | — | Days since posting: 1, 3, 7, 14 or "" for any time |
maxJobs | number | No | 100 | Max results to collect (hard cap at 100) |
Example — Senior engineering leadership roles across India
{"roles": ["VP Engineering", "Head of Engineering"],"skills": ["SaaS", "Platform"],"locations": ["Bangalore", "Pune", "Hyderabad"],"timeFrame": "7","maxJobs": 100}
This produces search queries including:
Vice President Engineeringin each locationVice President Engineering SaaSin each locationVice President Engineering Platformin each locationHead of Engineeringin each location- (and so on for each role × skill combination)
All results are deduplicated globally — if the same job appears in multiple searches, it is saved only once.
Example — Full-stack developer roles globally
{"roles": ["Full Stack Developer", "Software Engineer"],"skills": ["React", "Node.js"],"locations": ["London", "Berlin", "Remote"],"timeFrame": "3","maxJobs": 50}
Output
Each result is saved as a flat JSON record to the Apify dataset:
{"matchedSearchTerm": "Vice President Engineering SaaS","title": "Vice President of Engineering","company": "Acme Corp","location": "Bengaluru, Karnataka","url": "https://in.indeed.com/rc/clk?jk=fcc1e677b4ff9df1...","jobKey": "fcc1e677b4ff9df1"}
| Field | Description |
|---|---|
matchedSearchTerm | The exact search query that produced this result |
title | Job title as listed on Indeed |
company | Hiring company name |
location | Location as shown on the job card |
url | Direct link to the job listing on Indeed |
jobKey | Indeed's internal job ID — used for deduplication |
Results are ready to export as CSV, JSON, or connect directly to Google Sheets, Airtable, or a webhook.
How it works
The Actor uses Crawlee's PlaywrightCrawler with browser fingerprinting enabled to render Indeed's JavaScript-heavy search results pages. For each search term and location combination:
- Builds a targeted Indeed search URL with role, skill, location, and time frame
- Loads the page in a headless Chromium browser
- Waits for job cards to render, then scrolls to load lazy content
- Extracts job title, company, location, and URL from each card
- Deduplicates using Indeed's
jkjob key parameter - Paginates (10 results per page) until the global cap is reached or no more results exist
- Stops cleanly — no runaway requests, no duplicate entries
Performance
| Input | Results | Notes |
|---|---|---|
| 2 roles × 2 skills × 2 locations, last 7 days | Up to 100 unique jobs | Typical run |
| 1 role × no skills × 1 location, any time | Up to 100 unique jobs | Fastest run |
Runtime and cost depend on how many search term × location combinations are generated and how many pages need to be visited to reach 100 unique results. Runs with high overlap between search terms (same jobs appearing across multiple queries) complete faster due to early deduplication.
💡 Tip: Set memory to 1024 MB in your Apify actor settings. Indeed's pages are JavaScript-heavy and require a full browser render — 512 MB is insufficient and will cause instability.
Use cases
- Recruiters & talent teams — monitor competitor job postings or track hiring velocity by role and location
- Job seekers — run daily searches across multiple cities and pipe results to a spreadsheet or notification system
- HR analytics — benchmark job title conventions, required skills, and hiring demand across geographies
- Market research — track which companies are hiring for specific roles and skills
- ATS integrations — pull and deduplicate job listings before importing into applicant tracking systems
- AI pipelines — feed structured job data into LLM workflows for summarisation, matching, or classification
Scheduling & automation
This Actor works well on a schedule. To run it daily:
- Open the Actor and click Schedule
- Set your preferred cron (e.g.
0 8 * * *for 8am daily) - Use
timeFrame: "1"(last 24 hours) on daily schedules to only collect fresh listings - Connect the output dataset to Google Sheets, a webhook, or a downstream Apify Actor
Limitations
- Returns up to 100 unique jobs per run. For higher volumes, split searches across multiple runs with different role or location sets.
- Job descriptions are not included — only the data visible on the search results card (title, company, location, URL). Use the output URL to fetch full descriptions in a separate step.
- Indeed's page structure can change without notice. If results drop to 0 unexpectedly, check the run log — screenshot debugging files are saved automatically to help diagnose layout changes.
- Performance varies by search specificity. Very narrow searches (rare role + specific skill) may return fewer than 100 results even across multiple pages — this is expected behavior, not an error.
FAQ
Does this work for both India and global Indeed?
Yes — works on both in.indeed.com and indeed.com. Use Indian city names for India-specific searches, or global cities and "Remote" for worldwide searches.
Does it require residential proxies? No — this Actor works on standard Apify infrastructure without residential proxies.
How does deduplication work?
Each job is identified by Indeed's internal jk job key, extracted from the job URL. If the same job appears across multiple search terms, locations, or pages, it is saved only once.
Can I search for remote jobs?
Yes — add "Remote" as one of your locations.
What does role normalization do?
Before searching, the Actor expands common abbreviations and variants into full titles — so VP Eng becomes Vice President Engineer, ensuring you reach listings regardless of how companies write the title.
Is this Actor maintained? Yes — actively maintained. If Indeed changes its HTML structure and selectors break, an update ships promptly.
Input schema reference
{"roles": ["VP Engineering", "Head of Engineering"],"skills": ["SaaS", "B2B"],"locations": ["Bangalore", "Remote"],"timeFrame": "7","maxJobs": 100}
timeFrame values:
| Value | Meaning |
|---|---|
1 | Last 24 hours |
3 | Last 3 days |
7 | Last 7 days |
14 | Last 14 days |
"" (empty) | Any time |
