# Indeed Jobs Scraper - 62 Countries, Full Descriptions (`parseforge/indeed-scraper`) Actor

Indeed jobs from 62 country sites. 44 fields per job, including the full description, salary range, address with coordinates and employer size. Search by keyword, location, job URL or company URL. You pay per job returned, and a run that finds no jobs fails with nothing charged.

- **URL**: https://apify.com/parseforge/indeed-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Jobs, Automation, Developer tools
- **Features:** Limited permissions
- **Stats:** 24 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.33 / 1,000 result items

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

[![ParseForge](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner-v4.webp)](https://apify.com/parseforge?fpr=vmoqkp)

### Indeed Jobs Scraper

**Indeed jobs from 62 country sites for $1.49 per 1,000 results, or $1.43 per 1,000 on the Bronze plan.** Apify's public run stats for the 30 days to 24 September 2026 show 51 of 51 runs succeeded, with none failed, aborted or timed out. Each job has 44 fields, including the full description, the salary range, a street address with coordinates, and employer size.

Search by keyword and location, or paste Indeed URLs: searches, single job pages and company job pages. You can filter by date posted, job type, remote, salary and experience level. Jobs that fail a filter are dropped before they reach your dataset, so you only pay for jobs that match. You do not need an Indeed account or your own proxies. Export to CSV, JSON, Excel or XML.

| Who uses it | What they scrape Indeed for |
|---|---|
| Recruiters | Monitor competitor job postings and salary bands in a specific city. |
| Job boards | Aggregate listings from Indeed alongside other sources for a niche site. |
| Market analysts | Track hiring volume and demanded skills across industries over time. |
| Data scientists | Build a dataset of job descriptions for NLP and salary prediction models. |

### What it does

This Actor collects Indeed job listings by search query, location, or direct URL, and returns each one as a flat row with title, company, location, salary, and description.

- 🔍 **Search filters:** job title, location, country, job type, date posted, remote, salary, experience level, and sort order.
- 🌐 **Multi-country support:** 62 Indeed country sites, including the US, United Kingdom (GB or UK), Canada, Australia, Germany, France, Spain, Italy, Netherlands, Ireland, India, Japan, Brazil, Mexico, and more. An unsupported country fails the run right away, with nothing charged.
- 📅 **Date filtering:** limit results to jobs posted in the last 24 hours, 3 days, 7 days, or 14 days.
- 💰 **Salary filter:** set a minimum annual salary threshold from $30k to $130k+.
- 🔗 **Direct URL input:** paste Indeed search URLs, company jobs URLs, or job detail URLs (viewjob?jk=...), one or many, from any supported country site.

Results export to CSV, JSON, Excel, or XML, or straight from the API.

### What you can do with Indeed data

**📊 Track hiring trends.**

A market analyst runs the Actor weekly for "data engineer" in New York, filtering for the last 7 days, to count listings and track which skills appear most often.

**🏢 Monitor competitor postings.**

A recruiter scrapes a competitor staffing firm's company page on Indeed daily to see which roles they are filling and at what advertised salary.

**🌎 Build a niche job board.**

A developer aggregates remote senior-level software jobs from Indeed US, Canada, and Ireland into a single feed for a curated job board.

**🤖 Train a salary prediction model.**

A data scientist collects 50,000 job listings with salary data across five cities to train a model that estimates market rates for new postings.

### Why choose this scraper

|  | What you get |
|---|---|
| **No API key** | Indeed has no public API. This Actor reads the web pages directly. |
| **Structured output** | Every listing returns the same fields: title, company, location, salary, description, and job type. |
| **Bulk runs** | Collect up to 1,000,000 listings in a single run with automatic pagination. |
| **Proxy included** | Apify's rotating proxies and browser fingerprinting are built in, so you avoid blocks. |

### Common complaints about Indeed scrapers, and what this Actor does

Apart from "it does not work", the 1 and 2 star reviews of Indeed scrapers on Apify name four specific problems. Here is how this Actor handles each one. The numbers come from six test runs on 24 September 2026 (build 1.0.92, 92 jobs in total).

#### UK runs that return US jobs

Set `country` to `GB` or `UK` and the search runs on uk.indeed.com. A start URL keeps its own site, so a uk.indeed.com URL returns UK jobs even if the country field says US. Each row has a `countryCode` you can check. In our test, a search for nurse in London with country GB returned 20 jobs, and all 20 had `countryCode` GB. If you pick a country the Actor does not support, the run stops with an error. It does not fall back to US jobs.

#### Runs that never stop

A run ends when it reaches `maxItems` (10 by default) or when Indeed has no more results. The default timeout is 600 seconds, and you can set a lower one in the run options. Our six test runs collected 10 to 20 jobs each and took between 2.6 and 4.5 seconds.

#### Missing job descriptions

`description` and `descriptionText` hold the full plain-text description, and `descriptionHTML` keeps the original formatting. Every one of the 92 jobs in our test runs had a description. The shortest was 2,455 characters and the average was 5,515.

#### Being billed for nothing

You pay for each job written to your dataset and for nothing else. A run that finds no jobs ends as FAILED and is not charged. An unsupported country or URL fails before the Actor sends a single request, so that is not charged either. In the six test runs, the charged count matched the dataset row count exactly: 92 charged, 92 rows.

### How it compares

This Actor offers search filters, multi-country support, and direct URL input. Here is how it compares to other Indeed scrapers on Apify based on their public listings.

| Feature | ParseForge | Indeed Scraper | 🚀 Indeed jobs scraper \[PPR] | 💡 Indeed Jobs Scraper |
|---|---|---|---|---|
| Search by keyword and location | Yes | Yes | Yes | Yes |
| Filter by job type, date posted, remote, salary, and experience level | Yes | Not listed | Not listed | Not listed |
| Multi-country domain support (62 countries) | Yes | Not listed | Not listed | Not listed |
| Direct URL input for company pages | Yes | Not listed | Not listed | Not listed |
| Full job description extraction | Yes | Yes | Not listed | Not listed |
| Salary extraction and filtering | Yes | Not listed | Not listed | Yes |

### Configure the run

Drive the Actor from a direct Indeed URL or build a search with job title, location, and filters. Filters run as each listing is read so only matches reach your dataset. The Input tab lists every parameter.

Each example below was run on 24 September 2026, and the result is noted under it. `maxItems` counts jobs for the whole run, not per URL.

**1. First run with the prefilled input.** Returned 10 US jobs in 4.2 seconds.

```json
{
  "startUrl": "https://www.indeed.com/jobs?q=software+engineer&l=New+York%2C+NY&sort=date",
  "maxItems": 10,
  "country": "US"
}
```

**2. UK nursing jobs in London from the last 7 days.** Returned 20 jobs, all with `countryCode` GB, in 2.8 seconds.

```json
{
  "searchQuery": "nurse",
  "location": "London",
  "country": "GB",
  "datePosted": "7",
  "maxItems": 20
}
```

**3. Remote full-time customer service jobs in the US, newest first.** Returned 20 jobs, all with `remoteLocation` true, in 4.5 seconds.

```json
{
  "searchQuery": "customer service",
  "country": "US",
  "remoteFilter": "1",
  "jobType": "fulltime",
  "sortBy": "date",
  "maxItems": 20
}
```

**4. Single job pages from different countries, plus a search.** Returned 12 jobs: 1 from the US, 1 from the UK and 10 from Germany, in 2.6 seconds. URLs are read in order, so put single job URLs before searches. Job links stop working when the posting closes, so swap in your own `jk` values.

```json
{
  "startUrls": [
    "https://www.indeed.com/viewjob?jk=b8893114ef03ebc2",
    "https://uk.indeed.com/viewjob?jk=ae8383c8fe759822",
    "https://de.indeed.com/jobs?q=data+analyst&l=Berlin"
  ],
  "maxItems": 12
}
```

**5. Open jobs at one company.** Returned 10 jobs, all from Amazon.com, in 3.7 seconds.

```json
{
  "startUrl": "https://www.indeed.com/cmp/Amazon.com/jobs",
  "maxItems": 10
}
```

### Pricing

Pay-per-result: **$0.00149 per result** ($1.49 per 1,000) collected. Paid Apify plans get lower rates: $0.001433 on Bronze, $0.00138 on Silver, and $0.001326 on Gold, and lower still on the Platinum and Diamond plans. You pay only for the results written to your dataset.

| Results collected | Approximate cost (Free plan rate) |
|---|---|
| 100 results | $0.15 |
| 1,000 results | $1.49 |
| 10,000 results | $14.90 |

New Apify accounts start with $5 in free credit.

### Free users

Free-plan runs return up to 10 results as a preview. [Upgrade your Apify plan](https://console.apify.com/sign-up?fpr=vmoqkp) to collect up to 1,000,000 results per run.

### Run it

1. [Create a free Apify account with $5 in credit](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open the [Indeed Jobs Scraper](https://apify.com/parseforge/indeed-scraper?fpr=vmoqkp).
3. Set your inputs and any filters, then click **Start**.
4. Export the results as CSV, Excel, JSON, or XML from the **Dataset** tab.

Run it programmatically through the [Apify API](https://docs.apify.com/api/v2) (`run-sync-get-dataset-items`) or the [ApifyClient](https://docs.apify.com/api/client/js) for JavaScript and Python.

### Use with AI agents (MCP)

Give an AI agent live access to Indeed through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:

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

Then prompt it in plain language to run the scraper and read back the results.

### Troubleshooting

**Why am I getting no results?**

Check that your search filters are not too restrictive. Try removing the salary, experience level, or date posted filter and run again. Also verify the location spelling matches Indeed's format.

**The Actor is returning fewer results than I expected.**

Indeed sometimes caps the number of pages it shows for a search. Try narrowing your search with more specific keywords or a smaller location radius to get more complete results within the visible range.

**I'm getting an error about the Start URL.**

Make sure the URL is an Indeed search, company jobs, or job detail (viewjob?jk=...) page on a supported country site, such as www.indeed.com, uk.indeed.com, or indeed.de. The run fails with the list of supported countries if the site is not supported, and nothing is charged.

**The run is taking a long time.**

Large maxItems values and broad searches will take longer. Reduce the maxItems or add more filters to speed up the run. The Actor processes listings sequentially to avoid rate limiting.

**Some job descriptions are missing or truncated.**

Indeed occasionally changes its page layout. If you notice missing fields, try re-running the Actor. If the issue persists, report it through Apify support so the parser can be updated.

### FAQ

| Question | Answer |
|---|---|
| Can I scrape Indeed without being blocked? | Yes. The Actor uses Apify's rotating proxies and browser fingerprinting to avoid detection. It also respects polite delays between requests. |
| Does this Actor require an Indeed account or API key? | No. It reads the public job listing pages directly. You do not need an Indeed account, API key, or any authentication. |
| How do I scrape jobs for a specific company? | Paste the company's Indeed jobs URL into the Start URL field, or use the search filters with the company name as the keyword. |
| Can I filter by remote jobs only? | Yes. Set the Remote Filter input to "Remote" and the Actor will only return listings marked as remote on Indeed. |
| What countries does this support? | 62 Indeed country sites: US, GB (UK), CA, AU, DE, FR, IN, SG, NL, IE, NZ, ES, IT, BR, MX, JP, AT, CH, BE, ZA, AE, PL, SE, NO, DK, FI, PT, AR, CL, CO, PE, HK, MY, PH, PK, SA, QA, KW, BH, OM, TW, KR, CN, TH, VN, ID, CZ, HU, RO, GR, TR, IL, EG, MA, NG, UA, LU, CR, EC, PA, UY, and VE. |
| How many job listings can I scrape in one run? | You can set the maximum up to 1,000,000 listings. The Actor will paginate through search results until it hits your limit or runs out of listings. |
| Does it extract the full job description? | Yes. `description` and `descriptionText` hold the complete plain-text description, and `descriptionHTML` keeps the original formatting. |
| Can I get the salary information? | When a listing includes a salary, the Actor extracts it. You can also set a minimum salary filter to only return jobs above a threshold. |
| How do I run this on a schedule? | After creating a task in Apify, you can set it to run on a recurring schedule, such as every day at 8 AM, to collect fresh listings automatically. |
| What output formats are supported? | You can export your dataset to CSV, JSON, Excel, or XML from the Apify console or via the API. |

### Next step

Each row carries the fields that these ParseForge jobs Actors take as input:

- **Every open role at that employer, from its own ATS.** Take `company` (or `corporateWebsite` when present), find the company's careers page (Workday, Greenhouse, Lever, iCIMS, Ashby and 16 more ATS are supported) and paste it into `careerSiteUrls` of [Career Site Jobs Scraper](https://apify.com/parseforge/career-site-jobs-scraper). It returns everything the employer lists on its own site, including roles never posted on Indeed, with salary and a geocoded location.
- **Company rating and salary estimate.** Put `company` into `companyName` of [Glassdoor Jobs Scraper](https://apify.com/parseforge/glassdoor-jobs-scraper) to get that employer's Glassdoor rating, salary estimates and its other open roles.
- **Pay benchmark for the same role.** For tech employers, pass `company` as a Levels.fyi company slug (for example `google`) in `companies` of [Levels.fyi Salary Scraper](https://apify.com/parseforge/levels-fyi-scraper), with the job family that matches `title` (for example `software-engineer`) in `jobFamilies`. You get base, stock and bonus by level to set against the posted salary.

### Related actors

Browse the full [ParseForge collection](https://apify.com/parseforge?fpr=vmoqkp) for more scrapers.

🆘 **Need help?** Email parseforge@protonmail.com with your run ID, your input, and what you expected.

⚠️ **Disclaimer.** This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by Indeed, Inc. It collects only publicly available data. You are responsible for using the collected data in compliance with the source's terms of service and applicable data-protection laws, including GDPR, CCPA, and PIPL. Do not use it to collect personal data unlawfully.

# Actor input Schema

## `startUrl` (type: `string`):

Indeed URL to scrape: a job search URL (for example https://uk.indeed.com/jobs?q=nurse\&l=London), a job detail URL (viewjob?jk=... or rc/clk?jk=...) or a company jobs URL (/cmp/Name/jobs). The URL's Indeed site (www, uk, de, ca, ...) sets the country. Use this OR the search filters below. The prefilled URL returns 10 software engineer jobs in New York.

## `startUrls` (type: `array`):

Optional list of extra Indeed URLs (search, job detail or company jobs URLs, any supported country). They are read in order after Start URL, and Maximum job listings counts for the whole run, so put single job URLs before searches.

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

How many job listings to collect in the whole run. The run stops as soon as it reaches this number. Default 10. Free plan runs are capped at 10.

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

Job title, keyword, or company name.

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

City, state, or ZIP code.

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

Indeed country site used for the search filters. Default US. UK is accepted as an alias of GB. When a Start URL is given, its own domain decides the country for that URL. Unsupported countries fail the run before anything is fetched or charged.

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

Filter by employment type. Default Any.

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

Only show jobs posted within this many days. Default Any time.

## `remoteFilter` (type: `string`):

Filter for remote jobs only. Default Any.

## `sortBy` (type: `string`):

Sort results by relevance or date. Default Relevance, unless the Start URL itself sorts by date.

## `radius` (type: `string`):

Distance around location for jobs. Default 25 miles in the US and UK, 25 km elsewhere.

## `salary` (type: `string`):

Filter by minimum annual salary. Default Any.

## `experienceLevel` (type: `string`):

Filter by experience level. Default Any.

## Actor input object example

```json
{
  "startUrl": "https://www.indeed.com/jobs?q=software+engineer&l=New+York%2C+NY&sort=date",
  "maxItems": 10,
  "country": "US",
  "jobType": "",
  "datePosted": "",
  "remoteFilter": "",
  "radius": "",
  "salary": "",
  "experienceLevel": ""
}
```

# Actor output Schema

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

Table view with key job fields and links.

## `fullData` (type: `string`):

Complete dataset with all extracted fields.

# 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 = {
    "startUrl": "https://www.indeed.com/jobs?q=software+engineer&l=New+York%2C+NY&sort=date",
    "maxItems": 10,
    "country": "US"
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/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 = {
    "startUrl": "https://www.indeed.com/jobs?q=software+engineer&l=New+York%2C+NY&sort=date",
    "maxItems": 10,
    "country": "US",
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/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 '{
  "startUrl": "https://www.indeed.com/jobs?q=software+engineer&l=New+York%2C+NY&sort=date",
  "maxItems": 10,
  "country": "US"
}' |
apify call parseforge/indeed-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parseforge/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/DqvVMrF6oMvf15TeF/builds/migzvqmBmT5WWDTlE/openapi.json
