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

Scrape Indeed.com job listings with salaries, company ratings, descriptions, and remote work info. Full JSON output, fast, residential-proxy-ready.

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

## Pricing

from $3.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.

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 this actor do?

The Indeed Jobs Scraper extracts job listings, salaries, company ratings, full job descriptions, and remote work info from Indeed.com without needing an account, an API key, or any setup. Give it a position keyword and a location (or paste full Indeed search URLs) and it pushes one structured JSON record per job into your dataset.

Built for production scraping: residential proxy rotation, Chrome TLS impersonation, automatic session refresh, and a clean output schema that drops straight into a database. Use it for job market research, salary benchmarking, hiring trend monitoring, automated job alerts, competitive intelligence, or building your own Indeed data API.

### What data does it extract?

Per job:

- **Identifiers**: Indeed job key (`id`), canonical job URL, scrape timestamp
- **Position**: title, company name, full Indeed company URL, company logo
- **Location**: formatted location string, plus city / state / postal code as separate fields
- **Salary**: original text (`$70 - $80 an hour`) plus parsed min, max, currency, and pay frequency (HOURLY, YEARLY, etc.)
- **Job type**: array of employment types (Fulltime, Contract, Part-time, etc.)
- **Remote work**: FULLY_REMOTE, HYBRID, or null
- **Posted**: relative time (`3 days ago`) and parsed ISO timestamp
- **Company signals**: rating out of 5, review count, featured-employer flag, employer activity
- **Description**: full HTML body and a plain-text version (typical 5,000+ characters, the entire job posting)
- **Benefits**: array of highlighted employer benefits (Health insurance, 401(k), Paid time off, ...)
- **Flags**: sponsored (ad), urgently hiring, high-volume hiring, Indeed Apply eligibility
- **Apply links**: external ATS URL when present, plus the canonical Indeed apply URL
- **Echoes**: the original `position`/`location`/`country` you searched for, and the start URL if applicable

### How to use this actor

1. Set `position` to your search keyword and `location` to a city, state, ZIP, or `remote`. Pick a country.
2. Set `maxItemsPerSearch` to cap your run (the actor stops at this count to keep costs predictable).
3. Click **Start**. Wait for the dataset to fill and export as JSON, CSV, Excel, or HTML.

For more advanced runs you can paste full Indeed search URLs (or single job URLs) into `startUrls` instead of using `position` / `location`. Filters supported: max age in days (`fromage`), employment type (`jobType`), experience level, remote-only mode, and search radius.

### Input parameters

| Field | Type | Description |
|---|---|---|
| `position` | string | Search keywords, e.g. `python developer`. |
| `location` | string | City, state, ZIP, or `remote`. Leave blank for nationwide. |
| `country` | enum | Two-letter country code; picks the right Indeed regional site. |
| `maxItemsPerSearch` | int | Hard cap per search. Default 100. |
| `startUrls` | array | Optional. Full Indeed search URLs or job URLs. |
| `parseCompanyDetails` | bool | When ON, fetches the detail page for each job to get the full description and company info. Default ON. Turn OFF for ~3x cheaper search-only runs. |
| `saveOnlyUniqueItems` | bool | Deduplicate by Indeed job key. Default ON. |
| `fromage` | int | Max job age in days (1, 3, 7, 14, ...). |
| `sort` | enum | `date` for newest first, blank for relevance. |
| `jobType` | enum | Filter to fulltime / parttime / contract / temporary / internship. |
| `experienceLevel` | enum | entry_level / mid_level / senior_level. |
| `remoteOnly` | bool | Return only fully-remote jobs. |
| `radius` | int | Search radius in miles around `location`. |
| `maxConcurrency` | int | Parallel request count. Default 5. |
| `proxyConfiguration` | object | Apify proxy. Residential is recommended. |

### Output format

Each record looks like this:

```json
{
    "id": "e011635426a565cb",
    "positionName": "Sr. System Analyst, Python Developer",
    "company": "Esolvit Inc.",
    "location": "Austin, TX 78751",
    "jobLocationCity": "Austin",
    "jobLocationState": "TX",
    "jobLocationPostal": "78751",
    "url": "https://www.indeed.com/viewjob?jk=e011635426a565cb",
    "salary": "$70 - $80 an hour",
    "salaryMin": 70,
    "salaryMax": 80,
    "salaryType": "HOURLY",
    "salaryCurrency": "USD",
    "salarySource": "EXTRACTION",
    "jobType": ["Contract"],
    "remoteWorkModel": "HYBRID",
    "rating": 4.6,
    "reviewsCount": 12,
    "postedAt": "3 days ago",
    "postingDateParsed": "2026-05-13T05:00:00.000Z",
    "isExpired": false,
    "sponsored": false,
    "urgentlyHiring": false,
    "featuredEmployer": false,
    "highVolumeHiring": false,
    "indeedApplyable": false,
    "externalApplyLink": null,
    "companyIndeedUrl": "https://www.indeed.com/cmp/Esolvit-Inc",
    "companyLogo": "https://d2q79iu7y748jz.cloudfront.net/s/_squarelogo/256x256/accdc390b31c4333972dc79b3e09723e",
    "benefits": ["Health insurance", "401(k)", "Paid time off"],
    "description": "Job title: Sr. System Analyst, Python Developer ... full job description ...",
    "descriptionHTML": "<div><p><b>The Company</b></p> ... </div>",
    "companyInfo": {
        "indeedUrl": "https://www.indeed.com/cmp/Esolvit-Inc",
        "reviewsUrl": "https://www.indeed.com/cmp/Esolvit-Inc/reviews",
        "rating": 4.6,
        "reviewsCount": 12,
        "headerImageUrl": "https://...",
        "employerActivity": null
    },
    "searchInput": { "position": "python developer", "location": "Austin, TX", "country": "US" },
    "scrapedAt": "2026-05-16T16:30:00.000Z"
}
````

### Pricing

This actor uses pay-per-event pricing on the Apify platform:

| Event | Price |
|-------|-------|
| Per job result | $0.003 |

Apify's standard subscription tiers (Bronze, Silver, Gold, Platinum, Diamond) apply automatic discounts on top.

Approximate run cost:

- 100 jobs: ~$0.30
- 500 jobs: ~$1.50
- 1,000 jobs (single search cap): ~$3.00

Set `maxItemsPerSearch` to control spend per run, and configure `maxTotalChargeUsd` on the run options for a hard ceiling.

### Frequently asked questions

#### Does this actor require an Indeed account or API key?

No. The actor uses Indeed's public mobile search pages. It mints its own Cloudflare session cookies automatically on each run and refreshes them as they expire. You do not paste any cookies, sessionids, or login credentials.

#### How fresh is the data?

Real-time. Every run hits Indeed live; there is no internal cache. Job postings appear in results within minutes of being posted on Indeed.

#### Why mobile pages?

Indeed soft-blocks unauthenticated pagination on desktop search results beyond the first page, redirecting to a sign-in challenge. The mobile search path (`/m/jobs`) paginates cleanly through the full result set without any sign-in prompt, so we use it. The data is identical to what desktop shows.

#### What is the per-search ceiling?

Indeed caps any single search at about 1,000 results, regardless of scraper. For very large pulls, split your query by date freshness (`fromage=1`, then `=3`, `=7`, ...), by location, or by sub-keyword, then deduplicate on `id`. The actor's `saveOnlyUniqueItems` flag handles dedup automatically across the same run.

#### Can I scrape company reviews or salaries pages?

This actor focuses on job listings (with company rating + review count attached to each job). Standalone company reviews and salary aggregation are separate use cases; consider building them as follow-up actors that consume this one's output.

#### Do I need residential proxies?

Residential is strongly recommended. Indeed sits behind Cloudflare, which TLS-fingerprints clients. The actor uses Chrome impersonation (BoringSSL via `impit`) to pass the TLS gate, but datacenter IP reputation can still trigger challenges under sustained load. Apify's RESIDENTIAL proxy group is the default proxy setting and is sufficient for most runs.

#### What happens if a request gets blocked?

The actor detects Cloudflare 403s, soft-block sign-in redirects, and 429 rate limits, retires the affected proxy session, and retries with a fresh session. After 5 failed retries on a single page, that page is logged and skipped; the run continues with the rest.

### Other actors you might like

More Apify scrapers built by Cirkit are listed at [apify.com/cirkit](https://apify.com/cirkit).

# Actor input Schema

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

What to search for on Indeed. Example: 'python developer', 'senior data scientist', 'registered nurse'. Combine multiple terms with a space. Used together with `location` and `country` to build the search. If you only provide `startUrls`, leave this empty.

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

City, state, ZIP, or 'remote'. Example: 'Austin, TX', '94103', 'remote'. Leave blank to search the whole country.

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

Two-letter country code. Indeed has dedicated country sites; this picks the right one. Defaults to US.

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

Maximum number of jobs to scrape for each `position` keyword and each `startUrls` entry. Indeed itself caps any single search at about 1000 results; set this lower for cheaper runs, higher (with date splitting handled by Indeed automatically) for larger pulls.

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

Alternative to `position` + `location`. Paste full Indeed search URLs (https://www.indeed.com/jobs?q=...\&l=...) or individual job URLs (https://www.indeed.com/viewjob?jk=...). Each entry is scraped independently and capped by `maxItemsPerSearch`.

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

When ON, the scraper fetches each job's detail page to get the full HTML description, company logo, employer activity, and richer company info. When OFF, only the search results are returned (faster, ~3x cheaper). Default ON.

## `saveOnlyUniqueItems` (type: `boolean`):

Deduplicate by Indeed job key. Recommended ON. The same job often appears as both a sponsored and an organic listing on the same page.

## `fromage` (type: `integer`):

Only return jobs posted in the last N days. Common values: 1, 3, 7, 14. Leave blank for any age.

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

Sort by `date` (newest first) or omit for Indeed's relevance ranking.

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

How far from `location` to expand the search. Default 25.

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

Limit to one employment type.

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

Filter to a specific seniority level.

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

When ON, only fully remote jobs are returned.

## `maxConcurrency` (type: `integer`):

Number of parallel requests. Default 5 is safe; higher values speed up large runs but increase the chance of soft-blocks. Cap 20.

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

Apify proxy configuration. Residential proxies are strongly recommended; datacenter IPs get challenged faster.

## Actor input object example

```json
{
  "position": "python developer",
  "location": "Austin, TX",
  "country": "US",
  "maxItemsPerSearch": 25,
  "startUrls": [],
  "parseCompanyDetails": true,
  "saveOnlyUniqueItems": true,
  "sort": "",
  "jobType": "",
  "experienceLevel": "",
  "remoteOnly": false,
  "maxConcurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

Raw JSON of every scraped Indeed job (and any zero-result warning rows).

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

Pre-formatted table view: position, company, location, salary, remote model, rating, posted date, sponsored flag, URL.

## `csv` (type: `string`):

All job records as CSV (one row per job).

# 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 = {
    "position": "python developer",
    "location": "Austin, TX",
    "country": "US",
    "maxItemsPerSearch": 25,
    "parseCompanyDetails": true,
    "saveOnlyUniqueItems": true,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("cirkit/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 = {
    "position": "python developer",
    "location": "Austin, TX",
    "country": "US",
    "maxItemsPerSearch": 25,
    "parseCompanyDetails": True,
    "saveOnlyUniqueItems": True,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("cirkit/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 '{
  "position": "python developer",
  "location": "Austin, TX",
  "country": "US",
  "maxItemsPerSearch": 25,
  "parseCompanyDetails": true,
  "saveOnlyUniqueItems": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call cirkit/indeed-jobs-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Indeed Jobs Scraper",
        "description": "Scrape Indeed.com job listings with salaries, company ratings, descriptions, and remote work info. Full JSON output, fast, residential-proxy-ready.",
        "version": "0.1",
        "x-build-id": "1RuCnvS6DySeiY9cE"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/cirkit~indeed-jobs-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-cirkit-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/cirkit~indeed-jobs-scraper/runs": {
            "post": {
                "operationId": "runs-sync-cirkit-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/cirkit~indeed-jobs-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-cirkit-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": {
                    "position": {
                        "title": "Search keywords or position",
                        "type": "string",
                        "description": "What to search for on Indeed. Example: 'python developer', 'senior data scientist', 'registered nurse'. Combine multiple terms with a space. Used together with `location` and `country` to build the search. If you only provide `startUrls`, leave this empty."
                    },
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "City, state, ZIP, or 'remote'. Example: 'Austin, TX', '94103', 'remote'. Leave blank to search the whole country."
                    },
                    "country": {
                        "title": "Country",
                        "enum": [
                            "US",
                            "CA",
                            "GB",
                            "AU",
                            "DE",
                            "FR",
                            "NL",
                            "IT",
                            "ES",
                            "BR",
                            "MX",
                            "IN",
                            "IE",
                            "SG",
                            "HK",
                            "NZ",
                            "PL",
                            "SE",
                            "AT",
                            "BE",
                            "CH",
                            "DK",
                            "FI",
                            "GR",
                            "HU",
                            "JP",
                            "KR",
                            "NO",
                            "PT",
                            "RO",
                            "ZA",
                            "TH",
                            "TR",
                            "AE",
                            "AR",
                            "CL",
                            "CO",
                            "CR",
                            "EC",
                            "PE",
                            "UY",
                            "VE",
                            "BH",
                            "EG",
                            "IL",
                            "KW",
                            "LU",
                            "MA",
                            "NG",
                            "OM",
                            "PA",
                            "PH",
                            "PK",
                            "QA",
                            "SA",
                            "TW",
                            "UA",
                            "VN",
                            "ID",
                            "CZ",
                            "CN"
                        ],
                        "type": "string",
                        "description": "Two-letter country code. Indeed has dedicated country sites; this picks the right one. Defaults to US.",
                        "default": "US"
                    },
                    "maxItemsPerSearch": {
                        "title": "Max jobs per search",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Maximum number of jobs to scrape for each `position` keyword and each `startUrls` entry. Indeed itself caps any single search at about 1000 results; set this lower for cheaper runs, higher (with date splitting handled by Indeed automatically) for larger pulls.",
                        "default": 100
                    },
                    "startUrls": {
                        "title": "Start URLs (optional)",
                        "type": "array",
                        "description": "Alternative to `position` + `location`. Paste full Indeed search URLs (https://www.indeed.com/jobs?q=...&l=...) or individual job URLs (https://www.indeed.com/viewjob?jk=...). Each entry is scraped independently and capped by `maxItemsPerSearch`.",
                        "default": [],
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "parseCompanyDetails": {
                        "title": "Parse company details and full descriptions",
                        "type": "boolean",
                        "description": "When ON, the scraper fetches each job's detail page to get the full HTML description, company logo, employer activity, and richer company info. When OFF, only the search results are returned (faster, ~3x cheaper). Default ON.",
                        "default": true
                    },
                    "saveOnlyUniqueItems": {
                        "title": "Save only unique jobs",
                        "type": "boolean",
                        "description": "Deduplicate by Indeed job key. Recommended ON. The same job often appears as both a sponsored and an organic listing on the same page.",
                        "default": true
                    },
                    "fromage": {
                        "title": "Max job age in days",
                        "minimum": 1,
                        "maximum": 60,
                        "type": "integer",
                        "description": "Only return jobs posted in the last N days. Common values: 1, 3, 7, 14. Leave blank for any age."
                    },
                    "sort": {
                        "title": "Sort order",
                        "enum": [
                            "",
                            "date"
                        ],
                        "type": "string",
                        "description": "Sort by `date` (newest first) or omit for Indeed's relevance ranking.",
                        "default": ""
                    },
                    "radius": {
                        "title": "Search radius (miles)",
                        "minimum": 0,
                        "maximum": 100,
                        "type": "integer",
                        "description": "How far from `location` to expand the search. Default 25."
                    },
                    "jobType": {
                        "title": "Job type filter",
                        "enum": [
                            "",
                            "fulltime",
                            "parttime",
                            "contract",
                            "temporary",
                            "internship"
                        ],
                        "type": "string",
                        "description": "Limit to one employment type.",
                        "default": ""
                    },
                    "experienceLevel": {
                        "title": "Experience level filter",
                        "enum": [
                            "",
                            "entry_level",
                            "mid_level",
                            "senior_level"
                        ],
                        "type": "string",
                        "description": "Filter to a specific seniority level.",
                        "default": ""
                    },
                    "remoteOnly": {
                        "title": "Remote jobs only",
                        "type": "boolean",
                        "description": "When ON, only fully remote jobs are returned.",
                        "default": false
                    },
                    "maxConcurrency": {
                        "title": "Max concurrency",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Number of parallel requests. Default 5 is safe; higher values speed up large runs but increase the chance of soft-blocks. Cap 20.",
                        "default": 5
                    },
                    "proxyConfiguration": {
                        "title": "Proxy",
                        "type": "object",
                        "description": "Apify proxy configuration. Residential proxies are strongly recommended; datacenter IPs get challenged faster.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
