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

Scrape Indeed job listings across 20+ country domains: job title, company, structured salary (min/max/period/currency), city, state, posted date, snippet, apply URL, and the full job description. Pay per job. No login required.

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

## Pricing

from $2.99 / 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.

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

### What does Indeed Jobs Scraper do?

Indeed Jobs Scraper extracts public job listings from Indeed across 20+ country domains (US, UK, Canada, Australia, Germany, France, India, Japan, Singapore, Brazil, Mexico, and more). For every job it returns the title, company, structured salary, location (city/state), posted date, snippet, apply URL, and the full job description — ready to drop into your ATS, your job-board build, or your salary benchmarking pipeline.

Search by keyword and location, filter by job type / posted-within-N-days / remote-only / radius, or paste fully-formed Indeed search URLs. Indeed Jobs Scraper handles session rotation and fingerprinting automatically, so you don't manage cookies or logins.

### What data can you extract from Indeed?

- **Job essentials** — `jobKey`, `title`, `viewJobUrl`, `postedRelative`, `postedAt`, `scrapedAt`
- **Company info** — `company`, `companyIndeedUrl`, `companyRating`, `companyReviewCount`
- **Compensation** — `salary.min`, `salary.max`, `salary.type` (HOURLY/DAILY/WEEKLY/MONTHLY/YEARLY), `salary.currency`, `salary.text`
- **Location** — `location`, `city`, `state`, `country`, `remote`, `remoteWorkType` (REMOTE_ALWAYS / HYBRID / IN_PERSON / UNKNOWN)
- **Description** — `description` (plain text), `descriptionHTML` (formatted), `snippet`
- **Hiring signals** — `sponsored`, `urgentlyHiring`, `expired`, `indeedApplyable`, `thirdPartyApplyUrl`, `jobTypes`

The full output field reference is in the [Output](#output) section.

### How to use Indeed Jobs Scraper

1. Click **Try for free** above (or open the actor in your Apify console).
2. In the **Searches** input, add one or more searches — each takes a `query`, `location`, and `country`. Or paste fully-formed Indeed search URLs into **Start URLs**.
3. Set **Maximum records** and **Maximum pages per search** to cap the run.
4. Leave **Proxy configuration** on the default `RESIDENTIAL` group. Indeed blocks datacenter IPs.
5. Click **Save & Start**.
6. When the run finishes, download the dataset as JSON, CSV, Excel, XML, or HTML, or pull it from the Apify API.

### How much does it cost?

Pay per job. Every job record emitted to the dataset costs one billable event — **$2.99 per 1,000 jobs** (final pricing is set on the actor's pricing tab). That matches the volume-leading Indeed scraper on the Store.

Apify's free tier includes $5 of platform credit each month, so you can scrape roughly 1,600 jobs/month at no cost. A 100-job default-settings run finishes in under a minute.

**Want full job descriptions?** Turn on the **Include full job description** toggle in the input form. The actor will visit each posting's detail page to pull the full text (~5,000–10,000 chars per job) into the `description` and `descriptionHTML` fields. Runs take ~5× longer in this mode; the per-job price is unchanged.

### Input

Indeed Jobs Scraper accepts an array of `searches` (each with `query`, `location`, `country`, and optional `jobType` / `remoteOnly` / `postedWithinDays` / `radius` / `sort`), or an array of fully-formed Indeed `startUrls`. Single-search shortcuts at the top level (`query`, `location`, `country`, `jobType`, `radius`, `sort`, `fromDays`, `remoteOnly`) are accepted for convenience when there's only one search.

```json
{
  "searches": [
    { "query": "data engineer", "location": "Berlin", "country": "de", "postedWithinDays": 7 },
    { "query": "registered nurse", "location": "Remote", "country": "us", "remoteOnly": true }
  ],
  "maxItems": 200,
  "maxPagesPerSearch": 10,
  "includeFullDescription": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
````

### Output

Every record is a single Indeed job posting. The dataset is flat and stable — same shape for every record. Example:

```json
{
  "jobKey": "ae28a64386e2b84e",
  "title": "Application Engineer - AI Trainer",
  "company": "DataAnnotation",
  "companyIndeedUrl": "https://www.indeed.com/cmp/Dataannotation",
  "companyRating": 4.1,
  "companyReviewCount": 1634,
  "location": "Boston, MA",
  "city": "Boston",
  "state": "MA",
  "country": "US",
  "remote": false,
  "remoteWorkType": "REMOTE_ALWAYS",
  "salary": {
    "min": 50,
    "max": 100,
    "type": "HOURLY",
    "currency": "USD",
    "text": "$50 - $100 an hour"
  },
  "jobTypes": ["Contract"],
  "postedRelative": "30+ days ago",
  "postedAt": "2026-01-16T06:00:00.000Z",
  "snippet": "If you pass that assessment, you'll receive an email confirmation, and paid work will become available to you through our platform.",
  "sponsored": true,
  "urgentlyHiring": false,
  "expired": false,
  "indeedApplyable": false,
  "thirdPartyApplyUrl": "https://www.indeed.com/applystart?jk=ae28a64386e2b84e...",
  "viewJobUrl": "https://www.indeed.com/viewjob?jk=ae28a64386e2b84e",
  "description": "About the role\n\nWe are looking for...",
  "descriptionHTML": "<p>About the role</p><p>We are looking for...</p>",
  "scrapedFromUrl": "https://www.indeed.com/jobs?q=software+engineer&l=Remote",
  "scrapedAt": "2026-05-20T01:38:28.000Z",
  "searchInput": { "query": "software engineer", "location": "Remote", "country": "us" }
}
```

Field aliases (`id`, `positionName`, `url`, `postingDateParsed`, `rating`, `reviewsCount`, `isExpired`, `externalApplyLink`, `jobType`, `urlInput`) mirror the canonical fields so migration from other Indeed scrapers is a rename, not a rewrite.

### Integrations

Pipe Indeed Jobs Scraper into [Make](https://apify.com/integrations/make), [n8n](https://apify.com/integrations/n8n), or [Zapier](https://apify.com/integrations/zapier); push records straight into Google Sheets, Airtable, BigQuery, or a webhook; call the dataset from Python or Node via the `apify-client`; or chain it into your ATS or CRM. Schedule it as a recurring run for daily / weekly job-market sweeps.

### Related actors

- [Hacker News Search Scraper](https://apify.com/nlsch04/hn-algolia-search) — same pay-per-result shape for Hacker News stories, comments, and Show HN. Useful for sourcing engineers from Who-is-hiring threads.
- [Scholarly Articles Scraper (Crossref)](https://apify.com/nlsch04/crossref-works) — same no-login model for 150M+ scholarly articles, journal papers, and preprints.

### FAQ

#### How does Indeed Jobs Scraper work?

The actor opens Indeed search pages in a fingerprinted headless browser, reads the in-page job-cards data structure that Indeed renders for its own UI, then optionally visits each job's detail page to capture the full description and the company's Indeed profile URL. Sessions rotate aggressively to keep blocking rates low.

#### Can I use Indeed Jobs Scraper as an API?

Yes. Start a run via `POST https://api.apify.com/v2/acts/<your-username>~indeed-jobs-scraper/runs?token=<APIFY_TOKEN>` with the input JSON in the body, then read results from `GET https://api.apify.com/v2/datasets/<dataset-id>/items`. Full reference: [Apify API docs](https://docs.apify.com/api/v2).

#### Can I use Indeed Jobs Scraper in Python or Node.js?

Yes.

```python
from apify_client import ApifyClient
client = ApifyClient("<APIFY_TOKEN>")
run = client.actor("<your-username>/indeed-jobs-scraper").call(run_input={
    "searches": [{"query": "data engineer", "location": "Berlin", "country": "de"}],
    "maxItems": 100,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["title"], item["company"], item["salary"]["text"])
```

#### Which Indeed country domains are supported?

US, UK, Ireland, Canada, Australia, New Zealand, Germany, France, Spain, Italy, Netherlands, Poland, India, Singapore, Japan, Brazil, Mexico — set the `country` field to the two-letter code (`us`, `uk`, `de`, …) and the actor routes to the right domain automatically.

#### Why is a residential proxy required?

Indeed blocks datacenter IPs aggressively. Without a residential proxy you'll hit a security check within a couple of requests and the run will return empty. The default proxy group on this actor is `RESIDENTIAL` for that reason — leave it on.

#### Is it legal to scrape Indeed?

Scraping publicly accessible job listings is generally legal in the US, UK, and EU under cases like *hiQ v. LinkedIn*. Indeed Jobs Scraper only fetches data that Indeed serves to anonymous visitors — no login, no paywall bypass. You are responsible for respecting Indeed's Terms of Service in your jurisdiction and for handling any personal data you extract in line with GDPR / CCPA. Don't use scraped data to discriminate against applicants or to spam employers.

### Your feedback

Found a missing field, a country that doesn't route correctly, or a job-card layout the parser doesn't handle? Open an issue on the actor's **Issues** tab — bug reports and feature requests are answered.

# Actor input Schema

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

List of Indeed searches to run. Each entry accepts: `query`, `location`, `country` (us, uk, de, ca, au, fr, in, br, mx, jp and more), `remoteOnly` (bool), `postedWithinDays` (number), `jobType` (fulltime/parttime/contract/temporary/internship), `radius` (miles in US, km elsewhere), `sort` (`date` or `relevance`). Leave a field blank to broaden the search.

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

Optional: paste fully-formed Indeed search URLs (e.g. `https://www.indeed.com/jobs?q=...&l=...`). Used in addition to `searches`.

## `position` (type: `string`):

Convenience shortcut: when `searches` and `startUrls` are empty, this becomes the single search keyword. Equivalent to `query`.

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

Alias of `position`.

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

City, ZIP, locality, or `Remote`. Pairs with `position`/`query`.

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

Two-letter country code (us, uk, de, ca, au, fr, in, br, mx, jp and more). Selects the Indeed country domain to query.

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

Restrict the single-search shortcut to one job type. One of fulltime / parttime / contract / temporary / internship / permanent.

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

Distance from `location` in miles (US) or km (most other countries).

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

Order results by `date` (newest first) or `relevance` (Indeed default).

## `fromDays` (type: `integer`):

Filter to listings posted within the last N days (e.g. `7` for the last week).

## `remoteOnly` (type: `boolean`):

Restrict the single-search shortcut to remote listings.

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

Hard cap on emitted job records across all searches. Indeed returns ~15 jobs per page; set generously and let the per-page limit decide when to stop.

## `maxItemsPerSearch` (type: `integer`):

When only one search is provided, this is treated as `maxItems`. Provided as an alias for migration from other Indeed scrapers.

## `maxPagesPerSearch` (type: `integer`):

Cap on pages fetched per search. Indeed returns ~15 jobs per page, so `5` pages ≈ 75 jobs.

## `includeFullDescription` (type: `boolean`):

Optional enrichment: when on, the actor visits each job's detail page to populate `description` and `descriptionHTML` with the full posting body (~5,000–10,000 chars per job). Off by default — most lead-gen and ATS workflows only need the search-card `snippet` (~200–300 chars) and run roughly 5× faster without the detail-page fetch.

## `parseCompanyDetails` (type: `boolean`):

When on, backfills `companyIndeedUrl` from each job's detail page for listings whose search payload didn't include a company page link (raises coverage from ~75% to ~95%). Requires the detail page to be visited; if `includeFullDescription` is off, it is auto-enabled for this run.

## `proxyConfiguration` (type: `object`):

**Residential proxy is required.** Indeed blocks plain HTTPS and datacenter IPs within a few requests. The default group is `RESIDENTIAL` on Apify Proxy.

## `dryRun` (type: `boolean`):

When on, the actor parses pages and logs counts but does not write to the dataset. Useful for verifying input shape and selectors before paying for a full run.

## Actor input object example

```json
{
  "searches": [
    {
      "query": "software engineer",
      "location": "Remote",
      "country": "us"
    }
  ],
  "startUrls": [],
  "country": "us",
  "sort": "relevance",
  "remoteOnly": false,
  "maxItems": 100,
  "maxPagesPerSearch": 5,
  "includeFullDescription": false,
  "parseCompanyDetails": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  },
  "dryRun": false
}
```

# Actor output Schema

## `jobs` (type: `string`):

Flat list of Indeed job records — one record per job. Fields: jobKey, title, company, structured salary, location, posted date, snippet, apply URL, full 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 = {
    "searches": [
        {
            "query": "software engineer",
            "location": "Remote",
            "country": "us"
        }
    ],
    "startUrls": [],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("nlsch04/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 = {
    "searches": [{
            "query": "software engineer",
            "location": "Remote",
            "country": "us",
        }],
    "startUrls": [],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("nlsch04/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 '{
  "searches": [
    {
      "query": "software engineer",
      "location": "Remote",
      "country": "us"
    }
  ],
  "startUrls": [],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call nlsch04/indeed-jobs-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Indeed Jobs Scraper",
        "description": "Scrape Indeed job listings across 20+ country domains: job title, company, structured salary (min/max/period/currency), city, state, posted date, snippet, apply URL, and the full job description. Pay per job. No login required.",
        "version": "0.1",
        "x-build-id": "iK2zRcuxzO9pes3W8"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/nlsch04~indeed-jobs-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-nlsch04-indeed-jobs-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/nlsch04~indeed-jobs-scraper/runs": {
            "post": {
                "operationId": "runs-sync-nlsch04-indeed-jobs-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/nlsch04~indeed-jobs-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-nlsch04-indeed-jobs-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": {
                    "searches": {
                        "title": "Searches",
                        "type": "array",
                        "description": "List of Indeed searches to run. Each entry accepts: `query`, `location`, `country` (us, uk, de, ca, au, fr, in, br, mx, jp and more), `remoteOnly` (bool), `postedWithinDays` (number), `jobType` (fulltime/parttime/contract/temporary/internship), `radius` (miles in US, km elsewhere), `sort` (`date` or `relevance`). Leave a field blank to broaden the search."
                    },
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Optional: paste fully-formed Indeed search URLs (e.g. `https://www.indeed.com/jobs?q=...&l=...`). Used in addition to `searches`.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "position": {
                        "title": "Search keyword",
                        "type": "string",
                        "description": "Convenience shortcut: when `searches` and `startUrls` are empty, this becomes the single search keyword. Equivalent to `query`."
                    },
                    "query": {
                        "title": "Query",
                        "type": "string",
                        "description": "Alias of `position`."
                    },
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "City, ZIP, locality, or `Remote`. Pairs with `position`/`query`."
                    },
                    "country": {
                        "title": "Country",
                        "type": "string",
                        "description": "Two-letter country code (us, uk, de, ca, au, fr, in, br, mx, jp and more). Selects the Indeed country domain to query.",
                        "default": "us"
                    },
                    "jobType": {
                        "title": "Job type filter",
                        "enum": [
                            "fulltime",
                            "parttime",
                            "contract",
                            "temporary",
                            "internship",
                            "permanent"
                        ],
                        "type": "string",
                        "description": "Restrict the single-search shortcut to one job type. One of fulltime / parttime / contract / temporary / internship / permanent."
                    },
                    "radius": {
                        "title": "Search radius",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Distance from `location` in miles (US) or km (most other countries)."
                    },
                    "sort": {
                        "title": "Sort order",
                        "enum": [
                            "date",
                            "relevance"
                        ],
                        "type": "string",
                        "description": "Order results by `date` (newest first) or `relevance` (Indeed default).",
                        "default": "relevance"
                    },
                    "fromDays": {
                        "title": "Posted within last N days",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Filter to listings posted within the last N days (e.g. `7` for the last week)."
                    },
                    "remoteOnly": {
                        "title": "Remote only",
                        "type": "boolean",
                        "description": "Restrict the single-search shortcut to remote listings.",
                        "default": false
                    },
                    "maxItems": {
                        "title": "Maximum records",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Hard cap on emitted job records across all searches. Indeed returns ~15 jobs per page; set generously and let the per-page limit decide when to stop.",
                        "default": 100
                    },
                    "maxItemsPerSearch": {
                        "title": "Maximum records per search",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "When only one search is provided, this is treated as `maxItems`. Provided as an alias for migration from other Indeed scrapers."
                    },
                    "maxPagesPerSearch": {
                        "title": "Maximum pages per search",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Cap on pages fetched per search. Indeed returns ~15 jobs per page, so `5` pages ≈ 75 jobs.",
                        "default": 5
                    },
                    "includeFullDescription": {
                        "title": "Include full job description",
                        "type": "boolean",
                        "description": "Optional enrichment: when on, the actor visits each job's detail page to populate `description` and `descriptionHTML` with the full posting body (~5,000–10,000 chars per job). Off by default — most lead-gen and ATS workflows only need the search-card `snippet` (~200–300 chars) and run roughly 5× faster without the detail-page fetch.",
                        "default": false
                    },
                    "parseCompanyDetails": {
                        "title": "Backfill company Indeed URL",
                        "type": "boolean",
                        "description": "When on, backfills `companyIndeedUrl` from each job's detail page for listings whose search payload didn't include a company page link (raises coverage from ~75% to ~95%). Requires the detail page to be visited; if `includeFullDescription` is off, it is auto-enabled for this run.",
                        "default": false
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "**Residential proxy is required.** Indeed blocks plain HTTPS and datacenter IPs within a few requests. The default group is `RESIDENTIAL` on Apify Proxy.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    },
                    "dryRun": {
                        "title": "Dry run",
                        "type": "boolean",
                        "description": "When on, the actor parses pages and logs counts but does not write to the dataset. Useful for verifying input shape and selectors before paying for a full run.",
                        "default": false
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
