# Indeed Job Scraper (`kawsar/indeed-job-scraper`) Actor

Pulls job listings from Indeed by keyword, location, or company name. Run multiple searches at once and get titles, salaries, apply links, and posting dates back as structured data.

- **URL**: https://apify.com/kawsar/indeed-job-scraper.md
- **Developed by:** [Kawsar](https://apify.com/kawsar) (community)
- **Categories:** Jobs, Automation, Developer tools
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 results

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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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: extract job listings from Indeed

Indeed Jobs Scraper fetches job listings from Indeed and returns them as structured data. Point it at a keyword and a location, and you get titles, company names, salaries, job types, apply links, and posting dates. You can feed it a list of keywords and locations to run several searches at once — everything ends up in one dataset.

### What data does this actor extract?

Each job listing in the dataset includes:

| Field | Type | Description |
|-------|------|-------------|
| jobId | String | Unique Indeed job identifier |
| jobTitle | String | Position title as listed by the employer |
| companyName | String | Hiring company name |
| companyRating | Number | Company star rating (e.g. 3.8) |
| jobLocation | String | City, state, or country of the role |
| salary | String | Pay range if listed (e.g. "$80,000-$120,000 a year") |
| jobType | String | Employment type (full-time, contract, etc.) |
| isRemote | Boolean | True if the listing is remote or work-from-home |
| postedAt | String | Relative posting date (e.g. "3 days ago") |
| jobExcerpt | String | Short job description shown on the listing card |
| applyLink | String | Direct URL to the job detail and apply page |
| easyApply | Boolean | True if Indeed Easy Apply is available |
| scrapedAt | String | ISO timestamp of when the data was collected |

### How to use this actor

#### Input parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| searchQuery | String | Single job title or keyword to search |
| searchQueries | Array | Multiple keyword searches. Each entry runs separately. |
| companyName | String | Pull jobs from a specific company page (e.g. "Google"). Uses the /cmp/{company}/jobs URL. |
| location | String | City, state, country, or "Remote". Leave blank for all locations. |
| locations | Array | Multiple locations in one run. |
| datePosted | Select | Filter by recency: any, last 24 hours, last 3 days, last 7 days, last 14 days. |
| jobType | Select | Filter by type: full-time, part-time, contract, temporary, internship. |
| isRemote | Boolean | Show only remote or work-from-home listings. |
| requestTimeoutSecs | Integer | Per-request timeout in seconds (default 90). |

#### Example input

```json
{
    "searchQuery": "software engineer",
    "location": "New York",
    "datePosted": "last7days",
    "jobType": "fulltime",
    "isRemote": false
}
````

Multi-search example:

```json
{
    "searchQueries": ["software engineer", "data analyst", "product manager"],
    "locations": ["New York", "Remote", "San Francisco"],
    "datePosted": "last3days"
}
```

Company search example:

```json
{
    "companyName": "Google",
    "location": "New York"
}
```

#### Example output

```json
{
    "jobId": "abc123def456",
    "jobTitle": "Senior Software Engineer",
    "companyName": "Acme Corp",
    "companyRating": 4.2,
    "jobLocation": "New York, NY",
    "salary": "$130,000 - $160,000 a year",
    "jobType": "full-time",
    "isRemote": false,
    "postedAt": "2 days ago",
    "jobExcerpt": "We are looking for a Senior Software Engineer to join our growing team...",
    "applyLink": "https://www.indeed.com/viewjob?jk=abc123def456",
    "easyApply": true,
    "scrapedAt": "2024-01-15T10:30:00+00:00"
}
```

### Use cases

- Recruiters who want to see what a competitor is hiring for right now, without clicking through 10 pages
- Job market researchers tracking how demand for a skill changes across cities over time
- Anyone building a salary benchmarking sheet from pay ranges that companies actually posted
- Developers who need a feed of new listings to trigger alerts or populate a job board
- Researchers collecting labor market data without manual data entry

### Filtering options

#### By date posted

- Any time
- Last 24 hours
- Last 3 days
- Last 7 days
- Last 14 days

#### By job type

- Full-time
- Part-time
- Contract
- Temporary
- Internship

#### Remote jobs

Check "Remote only" to filter results to remote or work-from-home positions.

### Multiple searches

Put multiple keywords in searchQueries and multiple cities in locations, and the actor runs every combination in one go. If you pass three keywords and three locations, you get nine searches worth of data in a single dataset. Good for comparing the same role across markets or sweeping a few job titles at once.

### Export formats

Results go into an Apify dataset. From the Storage tab you can export to JSON, CSV, Excel, XML, or RSS.

### FAQ

**What fields come back for each job?**
Title, company, rating, location, salary, job type, remote flag, posting date, excerpt, apply link, Easy Apply flag, and a scrape timestamp. Fields that weren't on the listing come back as null.

**Can I search multiple keywords and locations at once?**
Yes — put them in searchQueries and locations. Nine combinations from three keywords and three locations, all in one run.

**Can I pull jobs from a specific company?**
Yes. Put the company name in companyName.

**Does it get the full job description?**
No, just the excerpt on the search results page. The full description is behind the applyLink.

# Actor input Schema

## `searchQuery` (type: `string`):

Single job title or keyword to search (e.g. 'software engineer'). Use 'Search queries' below to run multiple searches at once.

## `searchQueries` (type: `array`):

Run several keyword searches in one go. Each line is a separate search. Combined with 'Search query' if both are filled.

## `companyName` (type: `string`):

Scrape jobs from a specific company's Indeed page (e.g. 'Google', 'Amazon'). When filled, the actor uses the /cmp/{company}/jobs URL format and ignores the general search.

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

Single city, state, country, or 'Remote'. Leave blank to search all locations. Use 'Locations' below to search multiple places.

## `locations` (type: `array`):

Search across several locations in one run. Each line is a separate location. Combined with 'Location' if both are filled.

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

Filter job listings by how recently they were posted.

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

Filter by employment type.

## `isRemote` (type: `boolean`):

If checked, only return remote or work-from-home listings.

## `requestTimeoutSecs` (type: `integer`):

Per-request timeout in seconds. Increase to 120-180 if you see 502 errors on later pages.

## Actor input object example

```json
{
  "searchQuery": "data analyst",
  "searchQueries": [
    "software engineer",
    "data analyst",
    "product manager"
  ],
  "companyName": "Google",
  "location": "Bangladesh",
  "locations": [
    "New York",
    "Bangladesh",
    "Remote"
  ],
  "datePosted": "any",
  "jobType": "any",
  "isRemote": false,
  "requestTimeoutSecs": 90
}
```

# 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 = {
    "searchQuery": "software engineer",
    "location": "New York",
    "datePosted": "any",
    "jobType": "any"
};

// Run the Actor and wait for it to finish
const run = await client.actor("kawsar/indeed-job-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 = {
    "searchQuery": "software engineer",
    "location": "New York",
    "datePosted": "any",
    "jobType": "any",
}

# Run the Actor and wait for it to finish
run = client.actor("kawsar/indeed-job-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 '{
  "searchQuery": "software engineer",
  "location": "New York",
  "datePosted": "any",
  "jobType": "any"
}' |
apify call kawsar/indeed-job-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Indeed Job Scraper",
        "description": "Pulls job listings from Indeed by keyword, location, or company name. Run multiple searches at once and get titles, salaries, apply links, and posting dates back as structured data.",
        "version": "0.0",
        "x-build-id": "sO4cSmezspfHVHDMP"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/kawsar~indeed-job-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-kawsar-indeed-job-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/kawsar~indeed-job-scraper/runs": {
            "post": {
                "operationId": "runs-sync-kawsar-indeed-job-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/kawsar~indeed-job-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-kawsar-indeed-job-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "searchQuery": {
                        "title": "Search query",
                        "type": "string",
                        "description": "Single job title or keyword to search (e.g. 'software engineer'). Use 'Search queries' below to run multiple searches at once."
                    },
                    "searchQueries": {
                        "title": "Search queries (multiple)",
                        "type": "array",
                        "description": "Run several keyword searches in one go. Each line is a separate search. Combined with 'Search query' if both are filled.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "companyName": {
                        "title": "Company name",
                        "type": "string",
                        "description": "Scrape jobs from a specific company's Indeed page (e.g. 'Google', 'Amazon'). When filled, the actor uses the /cmp/{company}/jobs URL format and ignores the general search."
                    },
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "Single city, state, country, or 'Remote'. Leave blank to search all locations. Use 'Locations' below to search multiple places."
                    },
                    "locations": {
                        "title": "Locations (multiple)",
                        "type": "array",
                        "description": "Search across several locations in one run. Each line is a separate location. Combined with 'Location' if both are filled.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "datePosted": {
                        "title": "Date posted",
                        "enum": [
                            "any",
                            "last24h",
                            "last3days",
                            "last7days",
                            "last14days"
                        ],
                        "type": "string",
                        "description": "Filter job listings by how recently they were posted.",
                        "default": "any"
                    },
                    "jobType": {
                        "title": "Job type",
                        "enum": [
                            "any",
                            "fulltime",
                            "parttime",
                            "contract",
                            "temporary",
                            "internship"
                        ],
                        "type": "string",
                        "description": "Filter by employment type.",
                        "default": "any"
                    },
                    "isRemote": {
                        "title": "Remote only",
                        "type": "boolean",
                        "description": "If checked, only return remote or work-from-home listings.",
                        "default": false
                    },
                    "requestTimeoutSecs": {
                        "title": "Request timeout (seconds)",
                        "minimum": 30,
                        "maximum": 300,
                        "type": "integer",
                        "description": "Per-request timeout in seconds. Increase to 120-180 if you see 502 errors on later pages.",
                        "default": 90
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
