Indeed Jobs Scraper

Export public Indeed job listings with salaries, descriptions, benefits, company details, and apply URLs for recruiting and labor-market analysis.

Data fields

FieldTypeDescription
jobKeytextJob key exported in the dataset view.
trackingKeytextTracking key exported in the dataset view.
titletextTitle exported in the dataset view.
companyNametextCompany exported in the dataset view.
locationShorttextLocation exported in the dataset view.
datePublisheddatePublished exported in the dataset view.
dateOnIndeeddateFirst seen exported in the dataset view.
salaryTexttextSalary text exported in the dataset view.

Input preview

queryJob title or keywords
locationLocation
countryIndeed country
datePostedDate posted
radiusSearch radius
jobTypeJob type

API and agents

This actor can be run through Apify API, datasets, webhooks, schedules, and the official Apify MCP server.

How this actor works

See example inputs, outputs, API usage, and practical limits before running this actor on Apify.

Open Apify page

Collect public Indeed job listings as structured records for recruiting, labor-market research, lead generation, and job-board ingestion. Search by role and location, set a hard result limit, and export job titles, employers, locations, stable job keys, source URLs, and collection timestamps.

Input example

{
  "query": "software engineer",
  "location": "Austin, TX",
  "maxItems": 5
}

Output example

{
  "jobKey": "099517afcda05290",
  "jobTitle": "Software Engineer",
  "company": "Example Company",
  "location": "Austin, TX",
  "url": "https://www.indeed.com/viewjob?jk=099517afcda05290",
  "sourceUrl": "https://www.indeed.com/jobs?q=software%20engineer&l=Austin%2C%20TX",
  "scrapedAt": "2026-07-10T13:20:00.000Z"
}

What data it exports

Each dataset row represents one public job listing. It includes:

  • Identity: jobKey, jobTitle, company, location, url.
  • Pay: salaryText, salaryMin, salaryMax, salaryCurrency, salaryPeriod.
  • Job details: jobDescription, benefits, schedule, postedAt, ageText.
  • Workplace: remote and hybrid flags.
  • Company: companyRating and companyReviews when displayed.
  • Application: applyUrl and applySource when available.
  • Provenance: query, rank, sourceUrl, scrapedAt, and diagnostics.

Results can be downloaded as JSON, CSV, Excel, XML, or RSS from the Dataset tab.

Use cases

  • Build a focused recruiting pipeline for a role and market.
  • Track hiring demand across cities and job families.
  • Feed fresh public vacancies into a job board or internal dashboard.
  • Create repeatable labor-market datasets with stable provenance.
  • Monitor employer hiring activity over time.

Who is it for?

  • Recruiters sourcing candidates for defined roles and markets.
  • Labor-market analysts comparing hiring demand, pay, and work arrangements.
  • Job aggregators maintaining structured, refreshable vacancy feeds.
  • Sales and research teams monitoring employer hiring activity.

Input settings

Field Type Description
query string Role, skill, keyword, or company to find.
location string City, region, postal code, or Remote.
country string Indeed country site and matching proxy geography.
startUrls string[] Optional Indeed search or public job URLs.
datePosted string Any date or the past 1, 3, 7, or 14 days.
remote boolean Return remote jobs only.
jobType string Full-time, part-time, contract, temporary, or internship.
salaryMin integer Optional minimum annual salary.
maxItems integer Hard maximum of 1–1,000 unique jobs.

Input recipes

These input recipes show how to export Indeed jobs data for common recruiting and labor-market monitoring workflows.

Remote engineering roles

{ "query": "backend engineer", "location": "Remote", "maxItems": 5 }

Local healthcare hiring

{ "query": "registered nurse", "location": "Chicago, IL", "maxItems": 10 }

API usage and Indeed jobs API

Use this Actor when you need an Indeed jobs API-style workflow for repeatable exports without maintaining your own parser.

Start a run with the Apify API:

curl -X POST "https://api.apify.com/v2/acts/fetch_cat~indeed-jobs-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"query":"data analyst","location":"New York, NY","maxItems":5}'

Use the returned run's defaultDatasetId to fetch items.

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/indeed-jobs-scraper').call({
  query: 'data engineer', location: 'Boston, MA', maxItems: 25,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Python

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('fetch_cat/indeed-jobs-scraper').call(run_input={
    'query': 'data engineer', 'location': 'Boston, MA', 'maxItems': 25,
})
items = client.dataset(run['defaultDatasetId']).list_items().items

MCP and AI agents

Connect compatible AI clients through https://mcp.apify.com?tools=fetch_cat/indeed-jobs-scraper.

Add the hosted MCP server to Claude Code:

claude mcp add --transport http apify "https://mcp.apify.com?tools=fetch_cat/indeed-jobs-scraper"

Or run the Actors MCP server directly:

npx -y @apify/actors-mcp-server --actors fetch_cat/indeed-jobs-scraper

Example prompts: “Find five data analyst jobs in Austin posted this week and return each company, salary, and apply URL.” “Export 20 remote software engineer jobs from Indeed with posting dates and benefits.”

Example MCP client configuration:

{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=fetch_cat/indeed-jobs-scraper"
    }
  }
}

Try prompts such as “Find 25 remote data-engineering jobs posted this week” or “Compare salary ranges for registered nurses in Chicago.”

Tips

  • Use a specific role plus a real city for focused results.
  • Keep the first run small, inspect the output, then increase the limit.
  • Schedule repeated runs with the same input to monitor new vacancies.
  • Deduplicate historical exports by jobKey.

Limits and data availability

The Actor reads public job pages without a login. Listing availability and field completeness vary by country, query, and the details each employer publishes. Search-card records can have partial salary, benefits, description, or application fields; the diagnostics field identifies partial-detail results. Indeed can change page availability or pagination, and maxItems remains a hard ceiling rather than a guarantee that every query has that many public jobs.

Support

If a valid search fails or output fields look incorrect, open an issue on the Actor page. Include the run ID or run URL, the complete input JSON, expected and actual output, and one public Indeed URL that reproduces the problem.

Common questions

Questions and answers reused from the canonical actor README.

What data can I export with indeed jobs scraper?

You can export public job titles, employer names, locations, descriptions, salary fields when available, job type, benefits, apply URLs, Indeed URLs, rank, source URL, and scrape timestamps.

Why can a search return fewer jobs than requested?

The requested market may have fewer public listings, or Indeed may change availability while the run is active.

How do I update an existing dataset?

Run the Actor on a schedule and merge by jobKey, retaining scrapedAt for freshness.

Can I export to a spreadsheet?

Yes. Open the Dataset tab and choose CSV or Excel.

Can I run Indeed Jobs Scraper through an API, schedule, or MCP client?

Yes. Run it through the Apify API, SDK, CLI, scheduler, webhooks, or MCP-compatible clients using the same JSON input.