# Multi Job Board Scraper — LinkedIn, Indeed, Glassdoor & More (`iskoren/multi-job-board-scraper`) Actor

Scrape job listings from LinkedIn, Indeed, Glassdoor, Google Jobs, ZipRecruiter, Bayt, BDJobs & Naukri in a single run. Structured, deduplicated results with salary, company info & full descriptions.

- **URL**: https://apify.com/iskoren/multi-job-board-scraper.md
- **Developed by:** [Is Koren](https://apify.com/iskoren) (community)
- **Categories:** Jobs, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

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

## 🧲 Multi Job Board Scraper — LinkedIn, Indeed & Glassdoor in One Run

Collect job postings from **LinkedIn, Indeed, and Glassdoor** — plus Google Jobs, ZipRecruiter, Bayt, BDJobs, and Naukri — from a single search. This **job board scraper** queries every site you choose at the same time, combines everything into one dataset, strips out duplicates, and returns tidy structured data complete with salaries, company profiles, and full descriptions.

No accounts. No cookies. No per-site wiring. Enter a role, choose your boards, and run.

---

### 🚀 Run it in 30 seconds

Drop this into the input and press **Start**:

```json
{
  "searchTerm": "software engineer",
  "location": "New York, NY",
  "sites": ["linkedin", "indeed", "glassdoor"],
  "maxResults": 25
}
````

Around 75 postings come back (25 per board), each deduplicated and tagged with the board it came from.

***

### 👥 Who it's for

- **Talent & sourcing teams** — map where roles are advertised and feed candidate pipelines.
- **Career platforms & job seekers** — merge openings from many boards into one clean feed.
- **Compensation & labour-market analysts** — study salary bands, hiring volume, and skill demand by region.
- **Sales & lead generation** — surface companies that are actively hiring, a clear growth signal.
- **Data & analytics engineers** — stream fresh, normalized job data into dashboards or models.

***

### ⚖️ How it compares

| | This actor | Single-board scrapers |
|---|---|---|
| Boards per run | **8, simultaneously** | 1 |
| Duplicate removal | **Automatic** | Manual |
| Salary normalization | **Built in** (hourly/monthly → annual) | Rare |
| Company enrichment | Size, revenue, rating, industry, logo | Limited |
| Setup needed | None | Per board |

***

### 📦 What each result contains

A single row, trimmed for readability:

```json
{
  "title": "Senior Software Engineer",
  "company": "JPMorganChase",
  "location": "New York, NY",
  "site": "indeed",
  "job_url": "https://www.indeed.com/viewjob?jk=...",
  "job_url_direct": "https://jpmorganchase.contacthr.com/...",
  "date_posted": "2026-06-17",
  "is_remote": false,
  "salary_min": 152000,
  "salary_max": 215000,
  "salary_currency": "USD",
  "salary_interval": "yearly",
  "company_num_employees": "10,000+",
  "company_revenue": "more than $10B (USD)",
  "company_industry": "Finance",
  "description": "JOB DESCRIPTION ..."
}
```

Each posting carries up to 35 fields: title, company, location, listing and direct-apply URLs, posting date, remote flag, employment type, seniority, salary (min/max/currency/interval), a full company profile, extracted emails and skills, and the complete description in Markdown or HTML.

***

### 🎛️ Key inputs

| Input | What it does |
|-------|--------------|
| `searchTerm` | The role or keyword to search (required). |
| `searchTerms` | Up to 5 queries in one run — merged and tagged by source query. |
| `location` | City, state, or country. Empty = global. |
| `sites` | Boards to scrape. All 8 by default. |
| `maxResults` | Postings per board (1–100). |
| `isRemote` / `jobType` / `hoursOld` | Filter by remote, employment type, or recency. |
| `countryIndeed` | Country targeting for Indeed & Glassdoor. |
| `enforceAnnualSalary` | Convert every wage to an annual figure. |
| `descriptionFormat` | `markdown` (default) or `html`. |
| `proxyConfiguration` | Residential proxies advised for LinkedIn. |

The input form carries a full description for every field, including LinkedIn company targeting and Google Jobs query tips.

***

### 🌐 Boards covered

| Board | Strongest for | Good to know |
|-------|---------------|--------------|
| **Indeed** | High-volume, reliable runs | No rate limiting — best starting point. |
| **LinkedIn** | Seniority & company detail | Use residential proxies; ~100 results per IP. |
| **Glassdoor** | Salaries & ratings | Set `countryIndeed` for the right market. |
| **Google Jobs** | Broad aggregation | Best with a custom `googleSearchTerm`. |
| **ZipRecruiter** | US & Canada roles | Region-limited. |
| **Naukri** | India market | Adds skills, experience range, ratings. |
| **Bayt** | Middle East market | `searchTerm` filter only. |
| **BDJobs** | Bangladesh market | Local coverage. |

***

### ❓ Common questions

**What's the pricing?**
You pay only for jobs actually returned. Zero results means zero charge.

**Do I need accounts or proxies?**
No accounts. Apify residential proxies are included and recommended for LinkedIn; Indeed and Google run fine on datacenter proxies.

**How current is the data?**
It's live — each run hits the boards in real time. Use `hoursOld` to limit to recent postings (e.g. last 24 or 168 hours).

**Can I search several terms at once?**
Yes — pass up to 5 in `searchTerms`, and every result is labelled with the query that surfaced it.

**How do I pull more than ~100 results from one board?**
LinkedIn limits roughly 100 per IP. Pair residential proxies with `offset` to paginate, or break the search up by location.

**Which description format do I get?**
Clean Markdown by default, or raw HTML when `descriptionFormat` is set to `html`.

***

### 💡 Getting the best results

- **Lead with Indeed** for the biggest, steadiest result sets, then add LinkedIn and Glassdoor.
- **Always set `countryIndeed`** for Indeed or Glassdoor searches outside the US.
- **Switch on `linkedinFetchDescription`** when you need full LinkedIn text and direct apply links (slower, more requests).
- **Use `enforceAnnualSalary`** to line up hourly, monthly, and yearly pay on one comparable scale.
- **Paste your Google Jobs query from the browser** into `googleSearchTerm` for the sharpest Google results.

***

### 🔌 Exports & integrations

Everything lands in a standard Apify dataset — download as **JSON, CSV, Excel, or XML**, sync to **Google Sheets**, or fetch through the **API** and webhooks straight into your apps, ATS, or data pipeline.

***

*Actively maintained — check the changelog on the Store listing for the newest fixes across all 8 boards.*

# Actor input Schema

## `searchTerm` (type: `string`):

The role, keyword, or skill to search for. Examples: 'software engineer', 'data analyst', 'python developer'. To run several queries at once, use the Multiple Searches field below.

## `searchTerms` (type: `array`):

Optional. Run several queries in a single pass — the results are merged and deduplicated, and every row gets a 'matched\_search\_term' field showing which query found it. Example: \['AI consultant', 'AI help', 'GenAI advisor']. ⚠️ Cost scales linearly: 2 terms ≈ 2× the jobs = 2× the cost. Max 5 terms. Leave empty to use the single Job Title field above.

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

City, state, or country to search in. Examples: 'New York', 'London', 'San Francisco, CA', 'Remote'. Leave empty to search globally.

## `sites` (type: `array`):

Which job boards to pull from. Choose any of: linkedin, indeed, glassdoor, google, zip\_recruiter, bayt, bdjobs, naukri. Defaults to all 8 boards.

## `maxResults` (type: `integer`):

Maximum number of postings to scrape from each board (1–100). Total results = this number × number of boards selected.

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

Return only remote postings. Cannot be combined with Posted Within on Indeed.

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

Filter by employment type. Leave as 'Any' to return everything. Note: cannot be combined with Posted Within on Indeed.

## `hoursOld` (type: `integer`):

Only return postings from the last N hours. Examples: 24 = last day, 72 = last 3 days, 168 = last week. Leave empty for all time. ⚠️ Cannot be combined with Easy Apply on LinkedIn or Indeed.

## `countryIndeed` (type: `string`):

Country code for Indeed and Glassdoor searches. Examples: usa, uk, canada, australia, germany, france, india, singapore, uae. Most country names and 2-letter ISO codes are supported.

## `googleSearchTerm` (type: `string`):

Custom query for Google Jobs only. For best results: open Google Jobs in your browser → apply your filters → copy the exact query shown. Leave empty to reuse the main Job Title above.

## `distance` (type: `integer`):

How far from the location to search, in miles. Use 0 for the exact location only.

## `offset` (type: `integer`):

Skip the first N results — handy for paging through large result sets. Example: set 20 on the second run to fetch the next page.

## `easyApply` (type: `boolean`):

Only return jobs you can apply to directly on the board (one-click / quick apply). ⚠️ Cannot be combined with Posted Within on LinkedIn or Indeed.

## `linkedinFetchDescription` (type: `boolean`):

Fetch complete descriptions and direct apply URLs from LinkedIn. Richer data, but it makes more requests (slower and more proxy usage).

## `linkedinCompanyIds` (type: `array`):

Limit the LinkedIn search to specific companies by their LinkedIn company ID. Find the ID in the company's LinkedIn URL. Example: \["1441", "2382910"]. Leave empty to search all companies.

## `descriptionFormat` (type: `string`):

Format for the job description text. Markdown is cleaner to read; HTML keeps the original styling.

## `enforceAnnualSalary` (type: `boolean`):

Convert all salary figures to yearly equivalents. Hourly → × 2080, monthly → × 12. Makes pay easy to compare across postings.

## `userAgent` (type: `string`):

Override the default browser User-Agent header. Useful when a specific board blocks the default. Leave empty to use the built-in default.

## `caCert` (type: `string`):

Path to a CA certificate for proxy authentication. Only needed for enterprise proxies requiring certificate-based auth. Leave empty if not required.

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

Proxy configuration. ⚠️ Residential proxies are strongly recommended for LinkedIn (rate-limited after ~100 results per IP). Datacenter proxies work for Indeed and Google Jobs.

## Actor input object example

```json
{
  "searchTerm": "software engineer",
  "location": "New York, NY",
  "sites": [
    "linkedin",
    "indeed",
    "glassdoor",
    "google",
    "zip_recruiter",
    "bayt",
    "bdjobs",
    "naukri"
  ],
  "maxResults": 20,
  "isRemote": false,
  "jobType": "",
  "countryIndeed": "usa",
  "googleSearchTerm": "software engineer jobs near New York, NY since last week",
  "distance": 50,
  "easyApply": false,
  "linkedinFetchDescription": false,
  "descriptionFormat": "markdown",
  "enforceAnnualSalary": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

No 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 = {
    "searchTerm": "software engineer",
    "location": "New York, NY"
};

// Run the Actor and wait for it to finish
const run = await client.actor("iskoren/multi-job-board-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 = {
    "searchTerm": "software engineer",
    "location": "New York, NY",
}

# Run the Actor and wait for it to finish
run = client.actor("iskoren/multi-job-board-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 '{
  "searchTerm": "software engineer",
  "location": "New York, NY"
}' |
apify call iskoren/multi-job-board-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Multi Job Board Scraper — LinkedIn, Indeed, Glassdoor & More",
        "description": "Scrape job listings from LinkedIn, Indeed, Glassdoor, Google Jobs, ZipRecruiter, Bayt, BDJobs & Naukri in a single run. Structured, deduplicated results with salary, company info & full descriptions.",
        "version": "1.0",
        "x-build-id": "E7qOPlDCwF9h0e1aU"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/iskoren~multi-job-board-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-iskoren-multi-job-board-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/iskoren~multi-job-board-scraper/runs": {
            "post": {
                "operationId": "runs-sync-iskoren-multi-job-board-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/iskoren~multi-job-board-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-iskoren-multi-job-board-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": {
                    "searchTerm": {
                        "title": "💼 Job Title or Keyword",
                        "type": "string",
                        "description": "The role, keyword, or skill to search for. Examples: 'software engineer', 'data analyst', 'python developer'. To run several queries at once, use the Multiple Searches field below."
                    },
                    "searchTerms": {
                        "title": "🗂️ Multiple Searches (run several at once)",
                        "maxItems": 5,
                        "type": "array",
                        "description": "Optional. Run several queries in a single pass — the results are merged and deduplicated, and every row gets a 'matched_search_term' field showing which query found it. Example: ['AI consultant', 'AI help', 'GenAI advisor']. ⚠️ Cost scales linearly: 2 terms ≈ 2× the jobs = 2× the cost. Max 5 terms. Leave empty to use the single Job Title field above.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "location": {
                        "title": "🗺️ Location",
                        "type": "string",
                        "description": "City, state, or country to search in. Examples: 'New York', 'London', 'San Francisco, CA', 'Remote'. Leave empty to search globally."
                    },
                    "sites": {
                        "title": "🌐 Job Boards to Scrape",
                        "type": "array",
                        "description": "Which job boards to pull from. Choose any of: linkedin, indeed, glassdoor, google, zip_recruiter, bayt, bdjobs, naukri. Defaults to all 8 boards.",
                        "items": {
                            "type": "string"
                        },
                        "default": [
                            "linkedin",
                            "indeed",
                            "glassdoor",
                            "google",
                            "zip_recruiter",
                            "bayt",
                            "bdjobs",
                            "naukri"
                        ]
                    },
                    "maxResults": {
                        "title": "🔢 Results Per Board",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Maximum number of postings to scrape from each board (1–100). Total results = this number × number of boards selected.",
                        "default": 20
                    },
                    "isRemote": {
                        "title": "🏡 Remote Only",
                        "type": "boolean",
                        "description": "Return only remote postings. Cannot be combined with Posted Within on Indeed.",
                        "default": false
                    },
                    "jobType": {
                        "title": "📋 Employment Type",
                        "enum": [
                            "",
                            "fulltime",
                            "parttime",
                            "contract",
                            "internship",
                            "temporary"
                        ],
                        "type": "string",
                        "description": "Filter by employment type. Leave as 'Any' to return everything. Note: cannot be combined with Posted Within on Indeed.",
                        "default": ""
                    },
                    "hoursOld": {
                        "title": "🕒 Posted Within (hours)",
                        "minimum": 1,
                        "maximum": 8760,
                        "type": "integer",
                        "description": "Only return postings from the last N hours. Examples: 24 = last day, 72 = last 3 days, 168 = last week. Leave empty for all time. ⚠️ Cannot be combined with Easy Apply on LinkedIn or Indeed."
                    },
                    "countryIndeed": {
                        "title": "🚩 Country (Indeed & Glassdoor)",
                        "type": "string",
                        "description": "Country code for Indeed and Glassdoor searches. Examples: usa, uk, canada, australia, germany, france, india, singapore, uae. Most country names and 2-letter ISO codes are supported.",
                        "default": "usa"
                    },
                    "googleSearchTerm": {
                        "title": "🔍 Google Jobs Query",
                        "type": "string",
                        "description": "Custom query for Google Jobs only. For best results: open Google Jobs in your browser → apply your filters → copy the exact query shown. Leave empty to reuse the main Job Title above."
                    },
                    "distance": {
                        "title": "🎯 Search Radius (miles)",
                        "minimum": 0,
                        "maximum": 200,
                        "type": "integer",
                        "description": "How far from the location to search, in miles. Use 0 for the exact location only.",
                        "default": 50
                    },
                    "offset": {
                        "title": "📑 Skip Results (pagination)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Skip the first N results — handy for paging through large result sets. Example: set 20 on the second run to fetch the next page."
                    },
                    "easyApply": {
                        "title": "⚡ Easy Apply Only",
                        "type": "boolean",
                        "description": "Only return jobs you can apply to directly on the board (one-click / quick apply). ⚠️ Cannot be combined with Posted Within on LinkedIn or Indeed.",
                        "default": false
                    },
                    "linkedinFetchDescription": {
                        "title": "📄 LinkedIn: Full Descriptions",
                        "type": "boolean",
                        "description": "Fetch complete descriptions and direct apply URLs from LinkedIn. Richer data, but it makes more requests (slower and more proxy usage).",
                        "default": false
                    },
                    "linkedinCompanyIds": {
                        "title": "🏢 LinkedIn: Target Companies",
                        "type": "array",
                        "description": "Limit the LinkedIn search to specific companies by their LinkedIn company ID. Find the ID in the company's LinkedIn URL. Example: [\"1441\", \"2382910\"]. Leave empty to search all companies.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "descriptionFormat": {
                        "title": "✍️ Description Format",
                        "enum": [
                            "markdown",
                            "html"
                        ],
                        "type": "string",
                        "description": "Format for the job description text. Markdown is cleaner to read; HTML keeps the original styling.",
                        "default": "markdown"
                    },
                    "enforceAnnualSalary": {
                        "title": "💵 Normalize to Annual Salary",
                        "type": "boolean",
                        "description": "Convert all salary figures to yearly equivalents. Hourly → × 2080, monthly → × 12. Makes pay easy to compare across postings.",
                        "default": false
                    },
                    "userAgent": {
                        "title": "🧭 Custom User Agent",
                        "type": "string",
                        "description": "Override the default browser User-Agent header. Useful when a specific board blocks the default. Leave empty to use the built-in default."
                    },
                    "caCert": {
                        "title": "📜 CA Certificate (Proxy Auth)",
                        "type": "string",
                        "description": "Path to a CA certificate for proxy authentication. Only needed for enterprise proxies requiring certificate-based auth. Leave empty if not required."
                    },
                    "proxyConfiguration": {
                        "title": "🔒 Proxy Settings",
                        "type": "object",
                        "description": "Proxy configuration. ⚠️ Residential proxies are strongly recommended for LinkedIn (rate-limited after ~100 results per IP). Datacenter proxies work for Indeed and Google Jobs.",
                        "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
