# Indeed Jobs Scraper (`fetch_cat/indeed-jobs-scraper`) Actor

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

- **URL**: https://apify.com/fetch\_cat/indeed-jobs-scraper.md
- **Developed by:** [Hanna Nosova](https://apify.com/fetch_cat) (community)
- **Categories:** Jobs, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.31 / 1,000 item extracteds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Indeed Jobs Scraper

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

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

### Output example

```json
{
  "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"
}
```

### Ready-to-run examples

Start with a published task, open its input, and run it as-is or adapt the query and location:

- [Remote software engineer jobs](https://apify.com/fetch_cat/indeed-jobs-scraper/examples/remote-software-engineer-jobs)
- [Data analyst jobs in New York](https://apify.com/fetch_cat/indeed-jobs-scraper/examples/data-analyst-jobs-new-york)
- [Registered nurse jobs in Chicago](https://apify.com/fetch_cat/indeed-jobs-scraper/examples/registered-nurse-jobs-chicago)
- [Machine learning jobs in London](https://apify.com/fetch_cat/indeed-jobs-scraper/examples/machine-learning-jobs-london)
- [Warehouse jobs in Sydney](https://apify.com/fetch_cat/indeed-jobs-scraper/examples/warehouse-jobs-sydney)
- [Software engineering internships](https://apify.com/fetch_cat/indeed-jobs-scraper/examples/software-engineering-internships)

[View all ready-to-run Indeed Jobs Scraper examples](https://apify.com/fetch_cat/indeed-jobs-scraper/examples).

### 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**

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

**Local healthcare hiring**

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

### Pricing

The Actor uses pay-per-event pricing with a small run-start event and a per-job result event. Platform tier eligibility determines the applicable rate. Failed pages and jobs that are not saved are not charged as results. See the live [Apify Pricing tab](https://apify.com/fetch_cat/indeed-jobs-scraper/pricing) for current rates.

### 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:

```bash
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**

```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**

```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:

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

Or run the Actors MCP server directly:

```bash
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:

```json
{
  "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.

### FAQ

**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.

**How much does it cost to use Indeed Jobs Scraper?**\
The Actor uses a small start event and a per-item event for saved public jobs. Check the live Pricing tab for current rates before large runs.

### Related actors

- [LinkedIn Jobs Scraper](https://apify.com/fetch_cat/linkedin-jobs-scraper)
- [ATS Jobs Scraper](https://apify.com/fetch_cat/ats-jobs-scraper)
- [Remote.com Jobs Scraper](https://apify.com/fetch_cat/remote-dot-com-jobs-scraper)

### 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.

# Actor input Schema

## `query` (type: `string`):

Role, skill, keyword, or employer to find.

## `location` (type: `string`):

City, region, postal code, or Remote.

## `country` (type: `string`):

Country/locale to use for the Indeed search.

## `datePosted` (type: `string`):

Only jobs first seen by Indeed within this time window.

## `radius` (type: `integer`):

Distance around the location in miles.

## `jobType` (type: `string`):

Optional employment type filter supported by Indeed attributes.

## `maxItems` (type: `integer`):

Hard maximum number of unique job records to save.

## Actor input object example

```json
{
  "query": "software engineer",
  "location": "Austin, TX",
  "country": "US",
  "datePosted": "7",
  "radius": 25,
  "maxItems": 5
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "query": "software engineer",
    "location": "Austin, TX",
    "country": "US",
    "datePosted": "7",
    "radius": 25,
    "maxItems": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("fetch_cat/indeed-jobs-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "query": "software engineer",
    "location": "Austin, TX",
    "country": "US",
    "datePosted": "7",
    "radius": 25,
    "maxItems": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("fetch_cat/indeed-jobs-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "query": "software engineer",
  "location": "Austin, TX",
  "country": "US",
  "datePosted": "7",
  "radius": 25,
  "maxItems": 5
}' |
apify call fetch_cat/indeed-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=fetch_cat/indeed-jobs-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/KCgfjwgBhJ77GlMWh/builds/JiKYiNlKwEJfVjMFq/openapi.json
