Indeed Jobs Scraper
Pricing
from $1.00 / 1,000 results
Indeed Jobs Scraper
Search Indeed jobs by keyword and location with structured job data, salary, workplace type, benefits, requirements, and pagination.
Pricing
from $1.00 / 1,000 results
Rating
0.0
(0)
Developer
SearchShark Tools
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
0
Monthly active users
6 days ago
Last modified
Categories
Share
💼 Indeed Jobs Scraper
Indeed Jobs Scraper lets you extract structured job listings from Indeed using job keywords and a location.
Find hiring companies, research open roles, analyze salaries, track job-search visibility, and collect structured employment data without manually searching Indeed.
- 🔎 Find job opportunities: search Indeed using one or more job titles, keywords, or role categories
- 🏢 Discover hiring companies: collect company names, locations, ratings, and review counts
- 💰 Analyze salaries: extract structured minimum and maximum salary values when available
- 🏠 Identify remote work: distinguish remote, hybrid, and unknown workplace types from source-backed Indeed data
- 🏆 Track search ranking: preserve the observed Indeed search position for every unique job
- 📋 Collect requirements: extract source-backed job requirements separately from other fields
- 🎁 Capture benefits: collect benefits exposed in Indeed's structured search data
- ⚡ Automate workflows: export structured results to Apify Dataset, API, integrations, or downstream applications
📦 What data does Indeed Jobs Scraper extract?
| 🆔 Job ID | 💼 Job title |
| 🏷 Normalized title | 🏢 Company name |
| 📍 Location | 🏙 City |
| 🗺 State | 📮 Postal code |
| 🏠 Workplace type | 💰 Salary text |
| 💵 Minimum salary | 💵 Maximum salary |
| 💱 Salary currency | ⏱ Salary period |
| 🧑💼 Job types | 📅 Posting date |
| 🕒 Posting age | 📝 Job snippet |
| 🎁 Benefits | 📋 Requirements |
| ⭐ Company rating | 💬 Company review count |
| 📢 Sponsored status | 🔗 Indeed job URL |
| 🔍 Search term | 🌍 Search location |
| 🏆 Search rank | 🕒 Scrape timestamp |
Missing fields are returned as
nullor empty arrays. The Actor does not invent job data that Indeed does not expose.
🚀 Features
Indeed Jobs Scraper is designed for job-market research, hiring intelligence, and structured job-data collection.
- Multiple search terms: search multiple job titles or keywords in one Actor run
- Independent searches: every search term is processed separately
- One location per run: apply the same location to all search terms
- Up to 100 unique jobs per search term
- Automatic pagination: follows the next-page link returned by Indeed
- Job ID deduplication: duplicate jobs are removed using Indeed's canonical
jobkey - Continuous search ranking: new unique jobs receive sequential
searchRankvalues - Structured salary parsing: minimum, maximum, currency, and salary period are normalized
- Open-ended salary support: values such as From $40 an hour and Up to $100 an hour are handled correctly
- Source-backed workplace type: only confirmed remote or hybrid signals are classified
- No artificial onsite classification: physical location alone does not mean a job is onsite
- Benefits and requirements kept separate
- Skills kept clean: V1 does not populate skills from mixed qualification data
- Partial failure protection: results already collected remain available if a later search fails
- API-friendly output: every Dataset row follows a predictable structure
- HTTP-first architecture: standard searches do not require browser automation
⬇️ Input
You can configure Indeed Jobs Scraper directly from the Apify Console or send input programmatically through the Apify API.
🔎 Search terms
Add one or more job titles, keywords, or role categories.
Example:
software engineersales managerdata analyst
Each search term is processed independently.
For example:
software engineerdata analyst
creates two separate Indeed searches using the same selected location.
Exact duplicate search terms are removed case-insensitively.
For example:
Software Engineersoftware engineerSOFTWARE ENGINEER
are treated as one search.
📍 Location
Enter the location that should be applied to every search term.
Example:
Los Angeles, California
Other examples:
New York, New YorkAustin, TexasMiami, FloridaSeattle, Washington
The current V1 uses one location per Actor run.
🔢 Maximum results per search
Set the maximum number of unique jobs to collect for each search term.
Minimum: 1Default: 100Maximum: 100
The requested number is a maximum, not a guarantee.
If Indeed stops returning new unique jobs before the requested limit is reached, the Actor stops that search naturally.
🧪 Example input
{"searchTerms": ["software engineer","data analyst"],"location": "Los Angeles, California","maxResultsPerSearch": 50}
⬆️ Output
Results are stored in the Actor's default Apify Dataset.
You can access the results from:
OutputStorageApify APIIntegrations
Each Dataset row represents one unique Indeed job for one search term.
📊 Example result
{"jobId": "5254d0ba423085ae","title": "Software Engineer","normalizedTitle": "Software Engineer","companyName": "Example Company","companyDomain": null,"location": "Los Angeles, CA","city": "Los Angeles","state": "CA","postalCode": "90001","workplaceType": "hybrid","salaryRaw": "$120,000 - $145,000 a year","salaryMin": 120000,"salaryMax": 145000,"salaryCurrency": "USD","salaryPeriod": "year","jobTypes": ["Full-time"],"postingDate": "2026-09-10T00:00:00.000Z","postingAge": "1 day ago","snippet": "Example job description snippet returned by the Indeed search page.","benefits": ["Health insurance","Paid time off"],"skills": [],"requirements": ["Bachelor's degree","Software development: 3 years"],"companyRating": 4.1,"companyReviewCount": 1200,"sponsored": false,"indeedUrl": "https://www.indeed.com/viewjob?jk=5254d0ba423085ae","applyUrl": null,"query": "software engineer","searchLocation": "Los Angeles, California","searchRank": 1,"scrapedAt": "2026-09-11T08:00:00.000Z"}
The example above demonstrates the output structure. Actual field availability depends on what Indeed exposes for each search result.
🏆 Indeed search rank
One of the useful fields returned by the Actor is:
searchRank
This represents:
The position of the unique job within the collected results for that search term.
For example:
Job A → searchRank 1Job B → searchRank 2Job C → searchRank 3
Jobs are processed in the structured order returned by Indeed.
If a job appears again on a later page with the same Indeed jobkey, the duplicate is ignored and does not create another Dataset row.
New unique jobs continue the sequence.
Example:
Page 1:Ranks 1–41Page 2:Ranks 42–56
Indeed search results can change over time.
searchRankrepresents the result order observed during that Actor run and should not be interpreted as a permanent ranking.
🧹 Job deduplication
Jobs are deduplicated within each search term.
The canonical identity is:
Indeed jobkey
which is exposed as:
jobId
For example:
jobId: 5254d0ba423085ae
If the same jobId appears again while paginating the same search, the Actor keeps the first appearance and ignores the duplicate.
🔍 Separate search terms remain separate
The same job may appear for:
Query: software engineer
and:
Query: backend engineer
Those represent different search contexts.
Each search term is processed independently.
💰 Salary normalization
Indeed Jobs Scraper uses structured salary information first when Indeed provides it.
Returned salary fields include:
salaryRawsalaryMinsalaryMaxsalaryCurrencysalaryPeriod
Supported salary periods are:
hourdayweekmonthyearunknown
Open-ended salaries
The Actor correctly handles open-ended salary ranges.
For example:
Up to $100 an hour
becomes:
{"salaryMin": null,"salaryMax": 100,"salaryCurrency": "USD","salaryPeriod": "hour"}
And:
From $40 an hour
becomes:
{"salaryMin": 40,"salaryMax": null,"salaryCurrency": "USD","salaryPeriod": "hour"}
Indeed may internally expose values such as:
0-1
for missing or open-ended salary boundaries.
The Actor does not expose these sentinel values as real salary amounts.
🏠 Workplace type
The workplaceType field can contain:
remotehybridunknown
The Actor only classifies a job as remote or hybrid when Indeed provides an appropriate structured signal.
It does not infer onsite work from a physical location.
For example:
Location: Los Angeles, CA
does not automatically mean:
onsite
If Indeed does not expose a reliable workplace signal, the Actor returns:
unknown
This prevents unsupported classifications.
🎁 Benefits
When Indeed exposes structured job benefits, the Actor returns them as an array.
Example:
{"benefits": ["Health insurance","Dental insurance","Paid time off"]}
If no reliable benefits are available:
{"benefits": []}
📋 Requirements
Job requirements are kept separate from other categories.
Example:
{"requirements": ["Bachelor's degree","CNC programming: 3 years","Mechanical knowledge"]}
Requirements may include source-backed qualifications such as:
ExperienceDegreesCertificationsTechnical requirementsLanguage requirementsTools or technologies
The Actor does not intentionally mix benefits or job types into this field.
🧠 Skills
For V1:
{"skills": []}
This is intentional.
Indeed search-card data can contain mixed arrays combining:
SkillsDegreesAcademic disciplinesCertificationsExperienceOther qualifications
Rather than incorrectly labeling all of those values as skills, V1 leaves skills empty.
A dedicated skills classifier can be added later when a reliable source-backed classification method is available.
🔗 Job URLs
Every result receives a clean Indeed job URL:
https://www.indeed.com/viewjob?jk={jobId}
For example:
https://www.indeed.com/viewjob?jk=5254d0ba423085ae
The Actor deliberately removes unnecessary search and tracking parameters from the exported Indeed URL.
🌐 Company domain and apply URL
For V1:
{"companyDomain": null,"applyUrl": null}
These fields are reserved for future enrichment.
The Actor does not guess company domains and does not expose an Indeed redirect as if it were a verified external company application URL.
📄 Pagination
Indeed Jobs Scraper automatically follows the next-page URL returned by Indeed.
It does not assume that every page contains the same number of jobs.
The search stops when:
- 🎯 Maximum requested unique jobs reached
- 📭 Indeed returns no next page
- 📦 Zero structured job results are returned
- 🆕 Zero new job IDs are found
- 🔁 A previously seen page or job-ID set repeats
- ⚠️ The Indeed request fails
This helps prevent unnecessary requests and pagination loops.
⚡ Performance
The Actor uses an HTTP-first architecture.
Standard job searches do not launch Playwright or a browser.
Instead, the workflow is:
Indeed search page↓Structured search data↓Normalization↓Deduplication↓Apify Dataset
This avoids unnecessary:
Browser startupChromium memory usageBrowser rendering overheadJob-detail requests
V1 focuses on search-result data only to keep the workflow efficient.
🛡 Failure handling
Each search term is processed independently.
For example, if you search:
software engineerdata analystsales manager
and one search fails after the others have already produced results, successfully collected Dataset rows remain available.
If every search fails before producing a successful structured response, the Actor run fails instead of silently reporting a successful empty run.
🔌 API & integrations
Indeed Jobs Scraper can be started programmatically through the Apify API.
Results can be connected to workflows such as:
- Google Sheets
- Make
- Zapier
- CRMs
- Internal APIs
- Data warehouses
- Recruiting systems
- Hiring-intelligence platforms
- AI agents
- MCP workflows
Each Actor run stores structured job records in the default Dataset, making the results easy to consume from another application.
💡 Example use cases
🏢 Hiring intelligence
Search roles such as:
software engineersales managermarketing manager
and analyze:
Which companies are hiringHow many matching roles appearWhere jobs are locatedWhich jobs are remote or hybridSalary rangesCompany ratings
💰 Salary research
Compare salary information across roles such as:
software engineerdata analystproduct manager
Use:
salaryMinsalaryMaxsalaryCurrencysalaryPeriod
to build structured compensation datasets.
🔎 Job discovery
Search:
CNC programmerHVAC controls programmersoftware engineer
for a selected market and receive structured listings without manually reviewing each Indeed search page.
📊 Market research
Compare hiring activity across job categories within the same location.
For example:
Location:Los Angeles, CaliforniaSearches:software engineerdata analystsales manager
The resulting Dataset can help analyze:
Hiring demandRole availabilitySalary rangesRemote-work availabilityCompanies recruiting in the market
🧲 Lead generation
Job openings can act as hiring-intent signals.
Companies actively recruiting may represent prospects for:
Recruiting servicesStaffingSoftwareHR technologyTrainingConsultingB2B services
Use companyName, job titles, locations, and hiring volume as inputs for downstream lead-generation workflows.
⚠️ Current V1 limitations
The current release focuses on reliable Indeed keyword + location search data.
It does not currently perform:
Full job-detail page requestsFull job descriptionsVerified external apply URLsCompany-domain enrichmentCompany website crawlingEmail/contact enrichmentTrue skills classificationSalary annualizationGlobal company aggregationHiring Leads aggregation
These features can be added separately without changing the core Search Mode workflow.
❓ FAQ
How does Indeed Jobs Scraper work?
The Actor combines each search term with your selected location and requests Indeed search results.
It then:
Fetches the Indeed search pageReads structured job-card dataExtracts job fieldsNormalizes salary valuesClassifies supported workplace typesDeduplicates jobs by Indeed jobkeyAssigns search rankingFollows Indeed paginationStores results in an Apify Dataset
How many jobs can I scrape?
The current maximum is:
100 unique jobs per search term
Indeed may return fewer jobs.
Can I search multiple job titles?
Yes.
You can provide multiple search terms in a single Actor run.
Each search term is processed independently.
Can I search multiple locations in one run?
Not in V1.
One location is applied to all search terms.
For separate markets, start separate Actor runs.
Does the Actor scrape full job descriptions?
Not in V1 Search Mode.
The Actor returns the job snippet exposed in the Indeed search response.
It does not make an additional request to every job-detail page.
Why is workplace type sometimes unknown?
Because the Actor only returns remote or hybrid when Indeed exposes a reliable structured signal.
If that signal is unavailable, the result remains:
unknown
The Actor does not guess.
Why is skills always empty?
Because V1 deliberately avoids mixing skills with degrees, certifications, experience, and other qualification data.
The field remains:
"skills": []
until a reliable skill-only classification method is available.
Why are some salary fields null?
Some listings have:
No salaryOnly a minimumOnly a maximum
For example:
From $40 an hour
produces:
salaryMin: 40salaryMax: null
while:
Up to $100 an hour
produces:
salaryMin: nullsalaryMax: 100
Why are companyDomain and applyUrl null?
V1 does not guess external destinations.
Until a verified external company website or application URL is available, these fields remain:
companyDomain: nullapplyUrl: null
Can I use Indeed Jobs Scraper through an API?
Yes.
Every Actor can be started through the Apify API, and its Dataset can be consumed programmatically.
Can I export the results?
Yes.
Apify Dataset results can be exported in supported formats such as:
JSONCSVExcelXMLHTML
Is a browser required?
No.
The normal V1 search workflow uses an HTTP-first transport and does not launch Playwright.
🧭 Recommended workflow
For stronger job-market coverage, use meaningfully different job searches rather than many capitalization variants.
Good:
software engineerdata analystproduct managerDevOps engineer
Duplicate variants such as:
Software Engineersoftware engineerSOFTWARE ENGINEER
are automatically treated as the same search.
💬 Feedback & support
Found a bug or have a feature request?
Use the Actor's Issues tab on Apify.
Potential future additions include:
Full job-detail modeFull descriptionsVerified external apply URLsCompany domainsCompany enrichmentSkills classificationSalary annualizationMultiple locationsHiring Leads aggregationCompany-level hiring intelligence
🚀 Indeed job data without the manual searching
Enter your job keywords, choose a location, set the number of results, and run the Actor.
Receive structured Indeed job data ready for job research, hiring intelligence, salary analysis, APIs, lead generation, and automation.