# Indeed Scraper & Indeed API: Jobs, Salaries, Descriptions (`crustapi/indeed-scraper`) Actor

Extract Indeed job listings in bulk, no login. Search any role and location, or paste an Indeed link. Every job with the full record: title, company, location, salary, the full description, job type, posted date, company rating, and apply link. Filter by date, job type, level, and remote.

- **URL**: https://apify.com/crustapi/indeed-scraper.md
- **Developed by:** [CrustAPI](https://apify.com/crustapi) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$3.70 / 1,000 jobs

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#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 Scraper & Indeed API: Jobs, Salaries, Descriptions

### What is Indeed Scraper?

Extract Indeed job listings in bulk, with no login and no cookies you have to supply. Type a job title to get every matching job, or paste an Indeed job link for a single one. **Every job comes back with the full description**, not just a snippet, plus salary, company, and location. Search any country. Export it any way you like.

- 🔎 Any job title or keywords, in any city, state, ZIP, or **country** (the country filter actually works)
- 💼 Every job: title, company, location, salary, job type, posted date, company rating, remote flag, and apply link
- 📄 **The full job description on every job**: the thing most Indeed scrapers leave out
- 🧹 **Deduplicated by default**: you never get (or pay for) the same job twice
- ✅ **You only pay for jobs we actually return.** No charge for empty searches, failures, or duplicates
- 🔑 No Indeed account, nothing to log into
- 📦 Export as JSON, CSV, Excel, HTML, or XML

### What data do I get?

**Every job returns this, on every run:**

| Field | Example |
|---|---|
| Title | Registered Nurse |
| Company + rating | Westlake Dermatology · 3.9 (128 reviews) |
| Location | Austin, TX 78746 |
| Salary | $32 - $35 an hour (when Indeed shows it) |
| Job type | Full-time, Part-time |
| Remote | true / false |
| Posted | 2026-09-01 · "2 days ago" |
| **Full description** | The complete job description text |
| Apply link + Indeed URL + Job ID | The links and the permanent job id |

Anything Indeed does not publish comes back blank rather than guessed.

### Pricing

**$3.70 per 1,000 jobs.** You pay only for jobs we actually return, with the full description each time. No start fee, no monthly rental, and **never a charge for a duplicate or an empty search**.

| Run | Actor cost |
|---|---|
| 1,000 jobs | $3.70 |
| 10,000 jobs | $37 |
| 100,000 jobs | $370 |

### How it works

1. In **Job titles or links**, add one per line: a job title (like `software engineer`) or an Indeed job link.
2. Set a **Location** and **Country**, and a **Max jobs** per search.
3. Optionally filter by **date posted**, **job type**, **experience level**, or **remote only**.
4. Run it. Export to CSV, Excel, JSON, or Google Sheets, or pull it from the API.

### Output sample

```json
{
  "jobId": "c1d27e0c4a6e8585",
  "title": "Registered Nurse",
  "company": "Westlake Dermatology",
  "location": "Austin, TX 78746",
  "city": "Austin",
  "state": "TX",
  "country": "US",
  "salary": "$32 - $35 an hour",
  "remote": false,
  "jobType": "Full-time, Part-time",
  "companyRating": 3.9,
  "companyReviewCount": 128,
  "postedDate": "2026-09-01",
  "postedRelative": "2 days ago",
  "description": "Westlake Dermatology has an immediate opening for a Registered Nurse to assist...",
  "applyUrl": "https://www.indeed.com/applystart?jk=c1d27e0c4a6e8585",
  "jobUrl": "https://www.indeed.com/viewjob?jk=c1d27e0c4a6e8585"
}
```

### Indeed Jobs API

Need this outside Apify, or inside your own app? The same Indeed data is available as a plain web API at [crustapi.com](https://crustapi.com), alongside LinkedIn, Google, and other public data, with never-expiring credits and one price per result.

### Who uses it

- 🧑‍💼 Recruiters and staffing firms building fresh job pipelines
- 📊 Labor-market and salary researchers
- 🏢 Employers tracking competitor postings and pay
- 🤖 Builders feeding live job data into apps, sheets, and agents

### FAQ

#### Is this legal?

This collects public job listings that anyone can see on Indeed without logging in. You are responsible for how you use the data.

#### Do I need an Indeed account?

No. There is no login and nothing to sign into.

#### Do I really get the full description?

Yes. The complete description on every job, not just the preview snippet. That is the main thing this scraper does that most others don't.

#### Does the country filter actually work?

Yes. It searches the correct Indeed country site, so a UK search returns UK jobs (a common bug in other scrapers is returning US results no matter the country).

#### How fresh is the data?

Every run is a live pull, current as of the moment you run it. Use the "date posted" filter (down to the last 1 day) to get only fresh listings.

#### Can I schedule it?

Yes. Use Apify Schedules to run it hourly, daily, or weekly and send the results wherever you need them.

### More from CrustAPI

| Actor | What it does |
|---|---|
| Walmart Scraper | Product data in bulk, with the marketplace seller and reviews |
| Zillow Scraper | Every property in an area or one link, with the listing agent |
| Google Maps Scraper | Local business data with hours, ratings, and reviews |

Need this data as a managed feed or a large one-time dataset? See [crustapi.com/wholesale](https://crustapi.com/wholesale).

### Support and feedback

Found a bug or want a field added? Open an issue on the Issues tab, or email support@crustapi.com. We read every one.

***

*This is an independent tool for collecting public data. It is not affiliated with, endorsed by, or sponsored by Indeed. Indeed is a trademark of its respective owner.*

# Actor input Schema

## `searches` (type: `array`):

One per line. Type a job title or keywords (like software engineer) to get matching jobs, or paste an Indeed job link to get that one job. You can mix them.

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

City, state, or ZIP. Leave blank to search the whole country.

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

Which Indeed country site to search.

## `maxResults` (type: `integer`):

The most jobs to return per search term. A single job link is not affected.

## `fromDays` (type: `string`):

Only jobs posted within this window.

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

Only jobs of this type.

## `level` (type: `string`):

Only jobs at this level.

## `remote` (type: `boolean`):

Only remote jobs.

## `sort` (type: `string`):

Order of results.

## Actor input object example

```json
{
  "searches": [
    "software engineer"
  ],
  "country": "us",
  "maxResults": 100,
  "fromDays": "0",
  "remote": false,
  "sort": "relevance"
}
```

# Actor output Schema

## `results` (type: `string`):

One row per job returned from your searches and links.

# 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 = {
    "searches": [
        "software engineer"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("crustapi/indeed-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 = { "searches": ["software engineer"] }

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

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

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

```

## CLI example

```bash
echo '{
  "searches": [
    "software engineer"
  ]
}' |
apify call crustapi/indeed-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,crustapi/indeed-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/6uxLBC7Oe9Yfc9XEW/builds/uknYvurw4CXhGFnkY/openapi.json
