# Indeed Scraper - Jobs, Salaries & Companies USA (`makework36/indeed-scraper`) Actor

Scrape Indeed.com US jobs: title, company, parsed salary, remote flag, location, skills. 30+ fields per job, HTTP-only. Filter by keyword, location, remote, salary minimum.

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

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

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

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

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

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

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

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

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

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Indeed Scraper API — Jobs, Salaries, Companies & Skills Data USA

A high-performance **Indeed scraper** that extracts complete job listings from [Indeed.com](https://www.indeed.com), the most-visited job portal in the United States with 350M+ monthly visits and 24M+ active postings across every industry — IT, healthcare, finance, manufacturing, retail, hospitality and the public sector. Pull 30+ structured fields per job in seconds, with **salary automatically parsed to numbers**, remote flag detected, posting date normalized to ISO 8601, plus full job description from the [schema.org JobPosting](https://schema.org/JobPosting) block when fetchDetails is enabled.

Built for recruiters tracking talent supply, market analysts comparing US labor demand against portals like [LinkedIn Jobs](https://www.linkedin.com/jobs) and [Glassdoor](https://www.glassdoor.com), compensation consultants enriching benchmarks across [BLS](https://www.bls.gov) data, founders monitoring competitor hiring, and ML teams training resume-to-job matching models. Output is clean JSON suitable for direct ingestion into [Google BigQuery](https://cloud.google.com/bigquery), Snowflake, Postgres, or [Google Sheets](https://workspace.google.com/products/sheets/).

### ✨ Why use this scraper

This actor automates browsing **indeed.com** the way a real visitor does. It hits the public job search pages, walks through pagination, parses Indeed's internal `mosaic-provider-jobcards` JSON blob embedded in the HTML, and (optionally) opens each job's detail page to extract the full description plus the structured [schema.org JobPosting](https://schema.org/JobPosting) baseSalary, hiringOrganization, validThrough, and jobLocation fields.

The pricing logic is automatic: a salary string like `"$55,000 - $179,400 a year"` becomes `salaryMin: 55000`, `salaryMax: 179400`, `salaryType: "YEARLY"`, `salaryCurrency: "USD"`. Hourly rates like `"$44 - $54 an hour"` are kept as hourly and labeled accordingly so downstream code can annualize fairly.

The scraper is HTTP-only (no headless browser) and uses TLS-fingerprint impersonation to look like a real Chrome session. It runs on Apify's residential proxy network out of the box, so you don't need to manage your own proxy pool. Memory footprint is tiny — 512 MB — making it 10× cheaper than browser-based competitors that rent 4 GB instances for the same job.

### 📤 Output fields

Every record contains these fields when present in the data:

#### Identity & links
- `jobkey` — Indeed's unique job identifier
- `title` — Position title
- `displayTitle` — Title as styled on Indeed
- `normalizedTitle` — Indeed's internal normalized title
- `jobUrl` — Direct redirect link to the listing
- `applyUrl` — Third-party application URL when present

#### Company
- `companyName` — Hiring company
- `companyRating` — Indeed's rating out of 5 when known
- `companyReviewCount` — Total employee reviews on Indeed
- `companyReviewLink` — Indeed company reviews page
- `companyOverviewLink` — Indeed company profile page
- `companyLogoUrl` — Logo URL (when fetchDetails=true)
- `companySameAs` — External company URL from JSON-LD (when fetchDetails=true)

#### Location
- `formattedLocation` — Display string ("Strongsville, OH 44136")
- `jobLocationCity` — Parsed city
- `jobLocationState` — US state code or province
- `addressLocality`, `addressRegion`, `addressCountry`, `postalCode` — Full address (when fetchDetails=true)
- `remote` — Boolean: is this a remote job?

#### Salary
- `salaryText` — Raw display string ("$55,000 - $179,400 a year")
- `salaryMin` — Lower bound number
- `salaryMax` — Upper bound number
- `salaryType` — `YEARLY` / `HOURLY` / `MONTHLY` / `WEEKLY`
- `salaryCurrency` — Currency code (typically `"USD"`)
- `salarySource` — Source label: `EXTRACTION` vs employer-stated
- Optional duplicate fields from JSON-LD: `salaryMinLd`, `salaryMaxLd`, `salaryUnitLd`, `salaryCurrencyLd`, `salaryValueLd`

#### Snippet & description
- `snippet` — Clean text preview of the job posting (search result excerpt)
- `snippetHtml` — Original HTML preview
- `jobDescription` — Full description text (only with fetchDetails=true)
- `jobDescriptionHtml` — Original HTML markup (only with fetchDetails=true)

#### Timing
- `postedRelative` — "30+ days ago", "22 days ago", "Just posted"
- `postedDate` — ISO 8601 timestamp derived from Indeed's pubDate
- `createdDate` — Original creation timestamp when Indeed exposes it
- `datePosted` — ISO 8601 from JSON-LD (when fetchDetails=true)
- `validThrough` — Expiration date from JSON-LD when employer set it

#### Posting flags
- `sponsored` — Paid placement?
- `urgentlyHiring` — Highlighted urgent listing?
- `newJob` — Marked as new by Indeed?
- `expired` — Closed posting?
- `featuredEmployer` — Premium employer status
- `isTopRatedEmployer` — Top-rated badge from Indeed
- `indeedApplyEnabled` — Can apply via Indeed?
- `directApply` — Direct apply enabled (JSON-LD)
- `openInterviewsJob` — Indeed "Open Interviews" tagged

#### Job type & taxonomy
- `jobTypes` — Array of types ("Full-time", "Contract", "Part-time", "Internship")
- `employmentType` — Normalized employment type (JSON-LD)
- `industry` — Industry classification (JSON-LD)
- `skills` — Array of skill tags from Indeed's taxonomy

#### Benefits
- `benefits` — Array of ranked benefits ("Health insurance", "401(k)", etc.)

### 🎯 Use cases

1. **Recruitment talent radar** — Build a daily-refreshing stream of new listings matching your hiring niche. Filter by `remote`, `salaryMin`, and `urgentlyHiring` to surface the most actionable opportunities.
2. **US compensation benchmarking** — Aggregate `salaryMin`/`salaryMax` by city + role to produce reliable pay bands. The `salaryType` field lets you cleanly separate hourly vs annual data.
3. **Hiring intelligence** — Track which companies are scaling specific functions (e.g. AI/ML engineers, growth marketers, sales). Combine `companyName` with the `industry` field for clean segmentation.
4. **Resume-to-job ML training corpora** — Pair `title`, `jobDescription`, `skills`, and salary fields to train recommendation or matching models against fresh real-world data.
5. **Lead generation for B2B services** — Cold outreach to companies actively hiring in your niche (e.g. all USA companies hiring a "VP of Engineering"). Use `companyName` + `jobLocationCity` to build geographic outreach lists.
6. **Skill demand tracking** — Weekly cron over the same keyword set, count `skills` occurrences over time. Detect emerging technologies and tooling before they hit industry reports.

### 🚀 How to use

You can drive the scraper in two ways: **keywords mode** (easiest — give one or many search keywords and a location) or **urls mode** (advanced — paste already-filtered Indeed search URLs).

#### Mode 1 — Search by keywords

```json
{
  "mode": "keywords",
  "keywords": ["python developer", "data engineer"],
  "location": "United States",
  "country": "us",
  "maxJobs": 100,
  "fetchDetails": false
}
````

#### Mode 2 — Filtered search by city + remote-only + salary floor

```json
{
  "mode": "keywords",
  "keywords": ["software engineer"],
  "location": "Austin, TX",
  "country": "us",
  "maxJobs": 200,
  "remoteOnly": true,
  "salaryMinUsd": 120000,
  "fetchDetails": true
}
```

#### Mode 3 — Search by URLs

```json
{
  "mode": "urls",
  "searchUrls": [
    { "url": "https://www.indeed.com/jobs?q=devops+engineer&l=San+Francisco%2C+CA&sc=0kf%3Aattr%28DSQF7%29%3B" }
  ],
  "maxJobs": 50,
  "fetchDetails": true
}
```

### 📥 Input

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `mode` | enum | `"keywords"` | `"keywords"` or `"urls"` |
| `keywords` | array | `["python developer"]` | Search keywords |
| `location` | string | `"United States"` | US location filter |
| `country` | enum | `"us"` | Indeed subdomain: us, uk, ca, in, au |
| `searchUrls` | array | `[]` | Pre-built search URLs (urls mode) |
| `maxJobs` | integer | `50` | Cap per keyword/URL (1–5000) |
| `fetchDetails` | boolean | `false` | Open each detail page for full description + JSON-LD |
| `remoteOnly` | boolean | `false` | Keep only remote-tagged jobs |
| `salaryMinUsd` | integer | `0` | Filter jobs by salary floor (hourly auto-annualized) |
| `proxyConfiguration` | object | RESIDENTIAL | Apify proxy. Residential recommended for Indeed |

### 📋 Output example

```json
{
  "jobkey": "36f2876acf50d7da",
  "title": "Software Engineer Lead/Experienced Python Developer",
  "companyName": "PNC Financial Services Group",
  "companyRating": null,
  "companyReviewCount": null,
  "formattedLocation": "Strongsville, OH 44136",
  "jobLocationCity": "Strongsville",
  "jobLocationState": "OH",
  "remote": false,
  "salaryText": "$55,000 - $179,400 a year",
  "salaryMin": 55000,
  "salaryMax": 179400,
  "salaryType": "YEARLY",
  "salaryCurrency": "USD",
  "salarySource": "EXTRACTION",
  "snippet": "We are seeking a highly experienced Python Developer for the Corporate Functions Technology team...",
  "postedRelative": "30+ days ago",
  "postedDate": "2026-04-22T00:00:00+00:00",
  "sponsored": false,
  "urgentlyHiring": false,
  "newJob": false,
  "expired": false,
  "indeedApplyEnabled": false,
  "jobTypes": ["Full-time"],
  "benefits": ["Health insurance", "401(k)", "Paid time off"],
  "skills": ["Python", "PySpark", "REST API"],
  "jobUrl": "https://www.indeed.com/rc/clk?jk=36f2876acf50d7da&...",
  "applyUrl": null
}
```

### 💻 Code examples

#### From the Apify API (curl)

```bash
curl -X POST "https://api.apify.com/v2/acts/makework36~indeed-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "mode": "keywords",
    "keywords": ["data engineer"],
    "location": "New York, NY",
    "maxJobs": 100,
    "fetchDetails": false
  }'
```

#### From Python (apify-client)

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

run = client.actor("makework36/indeed-scraper").call(run_input={
    "mode": "keywords",
    "keywords": ["python developer", "rust developer"],
    "location": "United States",
    "maxJobs": 200,
    "fetchDetails": True,
    "remoteOnly": True,
    "salaryMinUsd": 100000,
})

for job in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(job["title"], job["companyName"], job["salaryMin"], job["salaryMax"])
```

#### From Node.js (apify-client)

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });

const run = await client.actor('makework36/indeed-scraper').call({
    mode: 'keywords',
    keywords: ['software engineer'],
    location: 'Seattle, WA',
    maxJobs: 100,
    fetchDetails: false,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} jobs`);
```

#### Export to CSV

```bash
curl "https://api.apify.com/v2/acts/makework36~indeed-scraper/runs/last/dataset/items?format=csv&token=$APIFY_TOKEN" \
  -o indeed_jobs.csv
```

### ⚡ Performance

The scraper is fully HTTP — no headless browser. Memory footprint is 512 MB, dramatically lower than the 4 GB needed by browser-based competitors.

| Mode | Time per page (≈24 jobs) | Time per detail | 100 jobs ETA |
|---|---:|---:|---:|
| Search only (fast) | ~1–2 s | — | ~10 s |
| With `fetchDetails=true` | ~1–2 s + ~3 s/job | ~3 s | ~3–4 min |

For 1,000 jobs in search-only mode, expect 6–8 minutes including proxy rotation overhead. Detailed runs are slower but still 5× faster than browser scrapers.

### 📊 Comparison

| Feature | This actor | Browser-based with proxy | Headless w/ captcha solver |
|---|:---:|:---:|:---:|
| Output fields | 30+ structured | 20–25 | 20 |
| Salary parsed (Min/Max/Type) | ✅ | ❌ | partial |
| Hourly vs Yearly auto-detected | ✅ | ❌ | ❌ |
| Memory footprint | 512 MB | 4 GB | 4 GB |
| Pure HTTP (no browser) | ✅ | ❌ | ❌ |
| Captcha solver required | ❌ | ❌ | ✅ |
| Pricing model | PAY\_PER\_EVENT tiered | flat or rental | flat |

### 💵 Pricing

This actor uses **PAY\_PER\_EVENT** pricing with tiered volume discounts.

| Tier | Standard job (search only) | Detailed job (with fetchDetails) |
|:-----|---:|---:|
| FREE | $3.00 / 1K | $7.50 / 1K |
| BRONZE | $2.20 / 1K | $5.50 / 1K |
| SILVER | $1.60 / 1K | $4.00 / 1K |
| GOLD | $1.10 / 1K | $2.80 / 1K |
| PLATINUM | $0.85 / 1K | $2.20 / 1K |
| DIAMOND | $0.60 / 1K | $1.80 / 1K |

Plus a one-time **$0.001 per actor run**. A typical 200-job standard run costs $0.60 (FREE) or as little as $0.12 (DIAMOND).

### ❓ FAQ

**Why is this Indeed scraper cheaper than other actors?**
It's pure HTTP — no browser, no GPU rendering, no XVFB. That's a 10× memory saving versus browser-based competitors, which the pricing passes back to you.

**Is scraping Indeed.com legal?**
This actor accesses publicly available search and listing pages — no login, no paywall bypass, no PII extraction beyond what employers post publicly. Always check Indeed's terms of service and consult counsel for your jurisdiction.

**How fresh is the data?**
The scraper fetches in real time when you start a run. Indeed updates listings continuously throughout the day. Schedule the actor as often as your use case demands.

**Can I scrape Indeed without writing code?**
Yes — use the input form on this page, click Start, then download the dataset as CSV or Excel. No Python or Node required.

**Does this support Indeed Canada / UK / Australia / India?**
Yes. Set `country` to `ca`, `uk`, `au`, or `in` and the scraper hits the matching Indeed subdomain (`ca.indeed.com`, `uk.indeed.com`, etc.).

**Why does the actor need Residential proxies?**
Indeed blocks datacenter IPs aggressively. Residential proxies have IP addresses from real households, which Indeed accepts. Apify includes residential proxy access in most paid plans.

**What if Indeed changes its data format?**
The scraper uses defensive parsing with both the embedded `mosaic-provider-jobcards` blob and the [schema.org JobPosting](https://schema.org/JobPosting) JSON-LD on detail pages. When Indeed changes one, the other usually still works. Fixes typically land within 24–48 hours.

**Does the scraper deduplicate jobs?**
Yes. Each `jobkey` is unique; the scraper tracks seen keys across pages and won't push duplicates.

**Is there a rate limit?**
The actor inserts a small jitter between pages and rotates proxy sessions automatically. For very large runs (>5,000 jobs) consider splitting across multiple Apify Tasks scheduled minutes apart.

**Can I scrape jobs from a specific company on Indeed?**
Yes — use `mode: urls` and pass an Indeed company jobs URL (e.g. `https://www.indeed.com/cmp/Google/jobs`). The scraper treats it like any search page.

### 📝 Changelog

- **0.1** (2026-05) — Initial release. Keywords + URLs modes. Search + detail JSON-LD. 30+ fields. Residential proxy default.

### 🔗 Related actors

- [`makework36/naukri-scraper`](https://apify.com/makework36/naukri-scraper) — Naukri.com India jobs
- [`makework36/trustpilot-reviews-scraper`](https://apify.com/makework36/trustpilot-reviews-scraper) — Trustpilot business reviews
- [`makework36/google-maps-scraper-full`](https://apify.com/makework36/google-maps-scraper-full) — Google Maps places + contact info
- [`makework36/flight-price-scraper`](https://apify.com/makework36/flight-price-scraper) — Multi-source flight prices

# Actor input Schema

## `mode` (type: `string`):

'keywords' searches Indeed by keyword + location. 'urls' takes pre-built Indeed search URLs.

## `keywords` (type: `array`):

Job titles or keywords to search (e.g. 'python developer', 'data engineer').

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

US location filter (city, state, or 'United States'). Used with keywords mode.

## `searchUrls` (type: `array`):

Pre-built Indeed search URLs (advanced).

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

Indeed country subdomain to search on.

## `maxJobs` (type: `integer`):

Maximum jobs per keyword/URL. Indeed shows 10–15 jobs per page; the scraper paginates until this cap.

## `fetchDetails` (type: `boolean`):

Opens each job's detail page to extract full description + structured JSON-LD JobPosting. Slower but richer.

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

Keep only jobs flagged as remote.

## `salaryMinUsd` (type: `integer`):

Filter jobs whose salary minimum (or single value) is below this. 0 = no filter.

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

Apify proxy. Datacenter (default) is enough for Indeed's rate-limiting. Use RESIDENTIAL only if you hit blocks.

## Actor input object example

```json
{
  "mode": "keywords",
  "keywords": [
    "python developer"
  ],
  "location": "United States",
  "searchUrls": [],
  "country": "us",
  "maxJobs": 50,
  "fetchDetails": false,
  "remoteOnly": false,
  "salaryMinUsd": 0,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": []
  }
}
```

# 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 = {
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": []
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("makework36/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 = { "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": [],
    } }

# Run the Actor and wait for it to finish
run = client.actor("makework36/indeed-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 '{
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": []
  }
}' |
apify call makework36/indeed-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Indeed Scraper - Jobs, Salaries & Companies USA",
        "description": "Scrape Indeed.com US jobs: title, company, parsed salary, remote flag, location, skills. 30+ fields per job, HTTP-only. Filter by keyword, location, remote, salary minimum.",
        "version": "0.1",
        "x-build-id": "m1vtxoJi4LomhShsl"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/makework36~indeed-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-makework36-indeed-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/makework36~indeed-scraper/runs": {
            "post": {
                "operationId": "runs-sync-makework36-indeed-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/makework36~indeed-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-makework36-indeed-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",
                "required": [
                    "mode"
                ],
                "properties": {
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "keywords",
                            "urls"
                        ],
                        "type": "string",
                        "description": "'keywords' searches Indeed by keyword + location. 'urls' takes pre-built Indeed search URLs.",
                        "default": "keywords"
                    },
                    "keywords": {
                        "title": "Keywords",
                        "type": "array",
                        "description": "Job titles or keywords to search (e.g. 'python developer', 'data engineer').",
                        "default": [
                            "python developer"
                        ],
                        "items": {
                            "type": "string"
                        }
                    },
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "US location filter (city, state, or 'United States'). Used with keywords mode.",
                        "default": "United States"
                    },
                    "searchUrls": {
                        "title": "Search URLs",
                        "type": "array",
                        "description": "Pre-built Indeed search URLs (advanced).",
                        "default": [],
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "country": {
                        "title": "Indeed country domain",
                        "enum": [
                            "us",
                            "uk",
                            "ca",
                            "in",
                            "au"
                        ],
                        "type": "string",
                        "description": "Indeed country subdomain to search on.",
                        "default": "us"
                    },
                    "maxJobs": {
                        "title": "Max jobs",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Maximum jobs per keyword/URL. Indeed shows 10–15 jobs per page; the scraper paginates until this cap.",
                        "default": 50
                    },
                    "fetchDetails": {
                        "title": "Fetch detailed job info",
                        "type": "boolean",
                        "description": "Opens each job's detail page to extract full description + structured JSON-LD JobPosting. Slower but richer.",
                        "default": false
                    },
                    "remoteOnly": {
                        "title": "Remote jobs only",
                        "type": "boolean",
                        "description": "Keep only jobs flagged as remote.",
                        "default": false
                    },
                    "salaryMinUsd": {
                        "title": "Minimum salary (USD)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Filter jobs whose salary minimum (or single value) is below this. 0 = no filter.",
                        "default": 0
                    },
                    "proxyConfiguration": {
                        "title": "Proxy",
                        "type": "object",
                        "description": "Apify proxy. Datacenter (default) is enough for Indeed's rate-limiting. Use RESIDENTIAL only if you hit blocks.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": []
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
