Indeed Jobs Scraper avatar

Indeed Jobs Scraper

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Indeed Jobs Scraper

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

SearchShark Tools

Maintained by Community

Actor 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 currencySalary 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 null or 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 searchRank values
  • 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 engineer
sales manager
data analyst

Each search term is processed independently.

For example:

software engineer
data analyst

creates two separate Indeed searches using the same selected location.

Exact duplicate search terms are removed case-insensitively.

For example:

Software Engineer
software engineer
SOFTWARE 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 York
Austin, Texas
Miami, Florida
Seattle, Washington

The current V1 uses one location per Actor run.


Set the maximum number of unique jobs to collect for each search term.

Minimum: 1
Default: 100
Maximum: 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:

Output
Storage
Apify API
Integrations

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 1
Job B → searchRank 2
Job 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–41
Page 2:
Ranks 42–56

Indeed search results can change over time. searchRank represents 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:

salaryRaw
salaryMin
salaryMax
salaryCurrency
salaryPeriod

Supported salary periods are:

hour
day
week
month
year
unknown

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:

remote
hybrid
unknown

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:

Experience
Degrees
Certifications
Technical requirements
Language requirements
Tools 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:

Skills
Degrees
Academic disciplines
Certifications
Experience
Other 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 startup
Chromium memory usage
Browser rendering overhead
Job-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 engineer
data analyst
sales 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 engineer
sales manager
marketing manager

and analyze:

Which companies are hiring
How many matching roles appear
Where jobs are located
Which jobs are remote or hybrid
Salary ranges
Company ratings

💰 Salary research

Compare salary information across roles such as:

software engineer
data analyst
product manager

Use:

salaryMin
salaryMax
salaryCurrency
salaryPeriod

to build structured compensation datasets.


🔎 Job discovery

Search:

CNC programmer
HVAC controls programmer
software 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, California
Searches:
software engineer
data analyst
sales manager

The resulting Dataset can help analyze:

Hiring demand
Role availability
Salary ranges
Remote-work availability
Companies recruiting in the market

🧲 Lead generation

Job openings can act as hiring-intent signals.

Companies actively recruiting may represent prospects for:

Recruiting services
Staffing
Software
HR technology
Training
Consulting
B2B 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 requests
Full job descriptions
Verified external apply URLs
Company-domain enrichment
Company website crawling
Email/contact enrichment
True skills classification
Salary annualization
Global company aggregation
Hiring 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 page
Reads structured job-card data
Extracts job fields
Normalizes salary values
Classifies supported workplace types
Deduplicates jobs by Indeed jobkey
Assigns search ranking
Follows Indeed pagination
Stores 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 salary
Only a minimum
Only a maximum

For example:

From $40 an hour

produces:

salaryMin: 40
salaryMax: null

while:

Up to $100 an hour

produces:

salaryMin: null
salaryMax: 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: null
applyUrl: 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:

JSON
CSV
Excel
XML
HTML

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 engineer
data analyst
product manager
DevOps engineer

Duplicate variants such as:

Software Engineer
software engineer
SOFTWARE 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 mode
Full descriptions
Verified external apply URLs
Company domains
Company enrichment
Skills classification
Salary annualization
Multiple locations
Hiring Leads aggregation
Company-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.