# YouTube Search Scraper - Videos & Shorts (`chronometrica/youtube-search-scraper`) Actor

Scrape YouTube search results by keyword. Discover videos and Shorts, then export URLs, video IDs, titles, channels, thumbnails, parsed views, durations, and metric status. No YouTube API key required.

- **URL**: https://apify.com/chronometrica/youtube-search-scraper.md
- **Developed by:** [Chronometrica](https://apify.com/chronometrica) (community)
- **Categories:** Social media, Videos
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 youtube discovery results

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

## YouTube Search Scraper

### 🔎 What does YouTube Search Scraper do?

YouTube Search Scraper finds public YouTube videos and Shorts from keyword
searches, then exports clean discovery rows with video URLs, YouTube IDs,
titles, descriptions, publish dates, thumbnails, channel identity, views,
likes, comments, subscriber context, durations, and query provenance.

Use it for content research, concept discovery, creator discovery, competitor
research, SEO research, social listening, trend analysis, and lead generation
workflows where you need a list of relevant YouTube videos or Shorts before
doing deeper analysis.

With YouTube Search Scraper, you can:

- 🔍 Search YouTube by one keyword or many keywords.
- 🎬 Discover both regular YouTube videos and Shorts.
- 📎 Export canonical YouTube URLs and stable `postId` values.
- 📊 Collect public views, likes, comments, durations, and metric status when
  YouTube exposes them.
- 👤 Get channel IDs, handles, names, URLs, verification, and subscriber counts
  when available publicly.
- 🧭 Preserve query context with `rootQuery`, `query`, `querySource`,
  `pageIndex`, and `pageRank`.
- 🧪 Run broad concept panels with balanced distribution across query families.
- 📦 Download results as JSON, JSONL, CSV, Excel, XML, RSS, or HTML.

This Actor uses logged-out public YouTube surfaces. It does not use search
engines, YouTube API keys, user cookies, logged-in accounts, private analytics,
YouTube Studio, transcript scraping, comment text scraping, or video downloads.

### ✨ What You Get

Each dataset row represents one discovered public YouTube video or Short.

| Data group         | Example fields                                                                  |
| ------------------ | ------------------------------------------------------------------------------- |
| 🔍 Query context   | `rootQuery`, `query`, `querySource`, `pageIndex`, `pageRank`                    |
| 🔗 Video identity  | `postUrl`, `postId`, `postType`, `isShort`                                      |
| 🧾 Video metadata  | `title`, `description`, `publishedAt`, `thumbnailUrl`, `videoDurationSeconds`   |
| 👤 Channel details | `channelId`, `channelHandle`, `channelName`, `channelUrl`, `channelVerified`    |
| 📊 Post metrics    | `views`, `likes`, `comments`, `postMetricStatus`                                |
| 👥 Channel metrics | `channelSubscribersCount`, `channelMetricStatus`                                |
| 🚦 Row status      | `status`, `statusReason`, `observedAt`                                          |

Metric availability depends on what YouTube exposes publicly for each result at
run time. Missing counts stay missing; they are not guessed and they are not
replaced with fake zeroes.

Rows are streamed to the dataset as soon as they are terminal: search discovery,
dedupe, metadata fill, and public metric enrichment have finished for that row.

### ⚙️ Can I use this Actor through an API?

Yes. You can run YouTube Search Scraper manually in Apify Console or use it
through:

- Apify API
- Python SDK
- Node.js SDK
- Webhooks
- Scheduled runs
- Apify integrations

This makes it useful for research pipelines, creator databases, trend monitors,
content intelligence dashboards, enrichment queues, and automated market
research workflows.

### 🎯 Why scrape YouTube search results?

YouTube search results show what videos and Shorts YouTube currently surfaces
for a topic. This is useful when you need to understand which concepts,
formats, creators, keywords, and content angles are visible in a market.

| Use case                    | How YouTube search data helps                                                     |
| --------------------------- | --------------------------------------------------------------------------------- |
| 🔥 Concept research         | Find videos and Shorts ranking for a topic before deciding what to analyze next.  |
| 📈 Trend discovery          | Compare topics by visible videos, views, comments, and channel context.           |
| 🧑‍🎨 Creator discovery      | Build lists of creators publishing around a niche or keyword family.              |
| 🕵️ Competitor monitoring    | See what content appears for competitor, category, or product keywords.           |
| 🧱 Data pipeline seeding    | Feed discovered URLs into downstream metrics, databases, or review workflows.     |
| 🧭 SEO and content planning | Study titles, descriptions, ranks, Shorts mix, and topic language.                |

### 💵 Pricing Event

YouTube Search Scraper uses pay-per-result pricing. One result means one unique
YouTube video or Short row written to the default dataset.

Use `maxResults` to control result volume before a run. Start with 10 to 25
results when testing a keyword, then increase the cap for broader concept
research.

### 🚀 How do I use YouTube Search Scraper?

1. Create or log in to your Apify account.
2. Open **YouTube Search Scraper**.
3. Enter one or more YouTube search queries.
4. Set the maximum number of unique videos to collect.
5. Choose whether to include Shorts.
6. Optionally enable YouTube suggestion expansion for broader topic discovery.
7. Click **Start**.
8. Open the **Output** tab to inspect the dataset and run summary.
9. Download your data in JSON, JSONL, CSV, Excel, XML, RSS, or HTML.

### ⬇️ Input

The main input is `queries`. Enter one or more YouTube keyword searches.

```json
{
    "queries": ["ai tools for small business"],
    "maxResults": 25,
    "searchDistribution": "balanced",
    "includeShorts": true,
    "enableQueryExpansion": false
}
````

For broader concept discovery, enter multiple related queries:

```json
{
    "queries": [
        "ai tools for small business",
        "small business marketing ideas",
        "ugc ad examples",
        "productivity tools for entrepreneurs"
    ],
    "maxResults": 100,
    "maxPagesPerQuery": 3,
    "searchDistribution": "balanced",
    "includeShorts": true,
    "enableQueryExpansion": true
}
```

For low-cost URL discovery before passing results to a transcript actor, disable
both enrichment stages:

```json
{
    "queries": ["ai news", "machine learning tutorial", "creator economy"],
    "maxResults": 120,
    "searchDistribution": "balanced",
    "includeShorts": true,
    "enableQueryExpansion": false,
    "enrichWithVideoMetrics": false,
    "enrichMissingChannelFields": false
}
```

#### 🎛️ Settings

| Option                 | What it does                                                                                   |
| ---------------------- | ---------------------------------------------------------------------------------------------- |
| `queries`              | YouTube keyword queries to search.                                                             |
| `maxResults`           | Maximum unique videos or Shorts to save across the whole run.                                  |
| `resultsPerQuery`      | Per-query saved-row cap for sequential mode.                                                    |
| `maxPagesPerQuery`     | Maximum YouTube search continuation pages to attempt for each query.                           |
| `searchDistribution`   | `balanced` rotates across queries; `sequential` fills from earlier queries first.              |
| `includeShorts`        | Include Shorts-style search results when YouTube exposes them.                                 |
| `enableQueryExpansion` | Add native YouTube autocomplete suggestions as additional searches.                            |
| `enrichWithVideoMetrics` | Fetch each saved video/Short as a second stage to fill richer public metrics.                |
| `enrichMissingChannelFields` | When video metrics are off, optionally fetch lightweight details for missing channel/duration fields. |
| `maxChannelEnrichmentRequests` | Cap lightweight detail requests when video metrics are off.                            |

Balanced mode is best for broad concept panels because it gives each query a
turn before going deeper. Sequential mode is best when earlier queries should
take priority.

### ⬆️ Output sample

Results are stored in the default dataset. Each result is one discovered
YouTube video or Short.

```json
{
    "platform": "youtube",
    "rootQuery": "ai tools for small business",
    "query": "ai tools for small business",
    "querySource": "input",
    "pageIndex": 0,
    "pageRank": 1,
    "postUrl": "https://www.youtube.com/watch?v=-y4swMaeJeI",
    "postId": "-y4swMaeJeI",
    "postType": "video",
    "isShort": false,
    "title": "AI Tools for Small Business - 7 Ways Small Business Can Use AI Today",
    "description": "Learn practical ways small businesses can use AI tools today...",
    "publishedAt": "2024-03-26T07:00:00-07:00",
    "thumbnailUrl": "https://i.ytimg.com/vi/-y4swMaeJeI/hq720.jpg",
    "videoDurationSeconds": 778,
    "channelId": "UCd2J-PizcFDxWHBBfRkp38Q",
    "channelHandle": "@PhilipVanDusen",
    "channelName": "Philip VanDusen",
    "channelUrl": "https://www.youtube.com/@PhilipVanDusen",
    "channelVerified": true,
    "views": 232202,
    "likes": 3800,
    "comments": 179,
    "postMetricStatus": [
        {
            "metric": "views",
            "status": "present",
            "precision": "exact"
        },
        {
            "metric": "duration",
            "status": "present",
            "precision": "exact"
        },
        {
            "metric": "likes",
            "status": "present",
            "precision": "exact"
        },
        {
            "metric": "comments",
            "status": "present",
            "precision": "exact"
        }
    ],
    "channelSubscribersCount": 310000,
    "channelMetricStatus": [
        {
            "metric": "channelSubscribersCount",
            "status": "present",
            "precision": "exact"
        }
    ],
    "status": "ok",
    "statusReason": null,
    "observedAt": "2026-07-01T21:50:45.735Z"
}
```

### 🧭 Query fields explained

`rootQuery` is the original query you entered.

`query` is the exact query searched on YouTube. When query expansion is off,
`query` usually matches `rootQuery`. When expansion is on, `query` may be a
YouTube-suggested related search.

`querySource` explains where the searched query came from:

- `input` means the query was entered directly by the user.
- `youtube_suggest` means the query came from native YouTube autocomplete
  expansion.

### 🧾 Run Summary

The `OUTPUT` key-value-store record includes:

- `urls`: discovered YouTube video and Short URLs;
- candidate, duplicate, page, and stop-reason counters;
- per-query accounting;
- query expansion accounting;
- metric enrichment accounting;
- field coverage for public metrics and channel context.

If no videos are found, the Actor does not fail the run. It returns a successful
run summary with `status: "no_results"` and a `statusReason` explaining the
outcome.

### 🔒 Source Boundary

YouTube Search Scraper uses logged-out public YouTube web surfaces only.

It does not use:

- YouTube API keys;
- user cookies;
- private sessions;
- logged-in account automation;
- search engines;
- YouTube Studio analytics;
- challenge solving;
- video downloads;
- transcript scraping;
- comment text scraping.

### ⚠️ Limits and interpretation

YouTube search ranking and result availability are live public YouTube behavior
and can change between runs.

`maxResults` is a saved-row cap, not a guarantee that YouTube has that many
public candidates for every query. Narrow queries may source-exhaust below the
requested cap.

Query expansion can broaden intent. Use `rootQuery`, `query`, and `querySource`
to decide which rows to keep downstream.

Public counts can be exact, rounded, hidden, delayed, or unavailable depending
on the video, channel, and public YouTube surface. Check `postMetricStatus` and
`channelMetricStatus` when metric precision matters.

### ❓ FAQ

#### Does this Actor need a YouTube API key?

No. It uses public YouTube web surfaces and does not require a YouTube API key.

#### Does this Actor scrape private YouTube data?

No. It only returns data available from logged-out public YouTube surfaces.

#### Does this Actor download videos or scrape transcripts?

No. It discovers videos and Shorts and returns public metadata and metrics.

#### What happens when no videos are found?

The run succeeds and the summary reports `status: "no_results"` with a
`statusReason`. Empty search results are treated as a data outcome, not a run
failure.

# Actor input Schema

## `queries` (type: `array`):

YouTube keyword queries to search.

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

Maximum unique YouTube video/Short candidates to save across all queries.

## `resultsPerQuery` (type: `integer`):

Maximum unique video/Short candidates to save per query in sequential mode. Balanced mode rotates across queries until the global cap or source/page limits are reached.

## `maxPagesPerQuery` (type: `integer`):

Maximum YouTube search continuation pages to attempt for each query.

## `searchDistribution` (type: `string`):

Balanced rotates fairly across queries until maxResults or source/page limits are reached. Sequential fills from earlier queries first.

## `includeShorts` (type: `boolean`):

Include Shorts-style search cards when YouTube exposes them in public search payloads.

## `enableQueryExpansion` (type: `boolean`):

Expand each input query with native YouTube autocomplete suggestions. Existing input queries always run first.

## `enrichWithVideoMetrics` (type: `boolean`):

Fetch each saved video/Short as a second stage to fill richer public metrics such as likes, comments, and channel subscriber status. Disable this for low-cost URL discovery before transcript replay.

## `enrichMissingChannelFields` (type: `boolean`):

When video metrics enrichment is disabled, optionally fetch lightweight public video details for rows missing channel, duration, or publish-date fields.

## `maxChannelEnrichmentRequests` (type: `integer`):

Maximum lightweight public video-detail enrichment requests when video metrics enrichment is disabled.

## Actor input object example

```json
{
  "queries": [
    "ai tools for small business"
  ],
  "maxResults": 25,
  "resultsPerQuery": 25,
  "maxPagesPerQuery": 1,
  "searchDistribution": "balanced",
  "includeShorts": true,
  "enableQueryExpansion": false,
  "enrichWithVideoMetrics": true,
  "enrichMissingChannelFields": true,
  "maxChannelEnrichmentRequests": 100
}
```

# Actor output Schema

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

No description

## `output` (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 = {
    "queries": [
        "ai tools for small business"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("chronometrica/youtube-search-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 = { "queries": ["ai tools for small business"] }

# Run the Actor and wait for it to finish
run = client.actor("chronometrica/youtube-search-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 '{
  "queries": [
    "ai tools for small business"
  ]
}' |
apify call chronometrica/youtube-search-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "YouTube Search Scraper - Videos & Shorts",
        "description": "Scrape YouTube search results by keyword. Discover videos and Shorts, then export URLs, video IDs, titles, channels, thumbnails, parsed views, durations, and metric status. No YouTube API key required.",
        "version": "1.0",
        "x-build-id": "HcQ8EClcWld8Feylb"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/chronometrica~youtube-search-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-chronometrica-youtube-search-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/chronometrica~youtube-search-scraper/runs": {
            "post": {
                "operationId": "runs-sync-chronometrica-youtube-search-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/chronometrica~youtube-search-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-chronometrica-youtube-search-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": [
                    "queries"
                ],
                "properties": {
                    "queries": {
                        "title": "Search queries",
                        "minItems": 1,
                        "type": "array",
                        "description": "YouTube keyword queries to search.",
                        "items": {
                            "type": "string",
                            "minLength": 1
                        },
                        "default": [
                            "ai tools for small business"
                        ]
                    },
                    "maxResults": {
                        "title": "Max unique videos",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Maximum unique YouTube video/Short candidates to save across all queries.",
                        "default": 25
                    },
                    "resultsPerQuery": {
                        "title": "Results per query",
                        "minimum": 1,
                        "maximum": 250,
                        "type": "integer",
                        "description": "Maximum unique video/Short candidates to save per query in sequential mode. Balanced mode rotates across queries until the global cap or source/page limits are reached.",
                        "default": 25
                    },
                    "maxPagesPerQuery": {
                        "title": "Max pages per query",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Maximum YouTube search continuation pages to attempt for each query.",
                        "default": 1
                    },
                    "searchDistribution": {
                        "title": "Search distribution",
                        "enum": [
                            "balanced",
                            "sequential"
                        ],
                        "type": "string",
                        "description": "Balanced rotates fairly across queries until maxResults or source/page limits are reached. Sequential fills from earlier queries first.",
                        "default": "balanced"
                    },
                    "includeShorts": {
                        "title": "Include Shorts",
                        "type": "boolean",
                        "description": "Include Shorts-style search cards when YouTube exposes them in public search payloads.",
                        "default": true
                    },
                    "enableQueryExpansion": {
                        "title": "Use YouTube suggestions",
                        "type": "boolean",
                        "description": "Expand each input query with native YouTube autocomplete suggestions. Existing input queries always run first.",
                        "default": false
                    },
                    "enrichWithVideoMetrics": {
                        "title": "Enrich with video metrics",
                        "type": "boolean",
                        "description": "Fetch each saved video/Short as a second stage to fill richer public metrics such as likes, comments, and channel subscriber status. Disable this for low-cost URL discovery before transcript replay.",
                        "default": true
                    },
                    "enrichMissingChannelFields": {
                        "title": "Enrich missing channel fields",
                        "type": "boolean",
                        "description": "When video metrics enrichment is disabled, optionally fetch lightweight public video details for rows missing channel, duration, or publish-date fields.",
                        "default": true
                    },
                    "maxChannelEnrichmentRequests": {
                        "title": "Max channel enrichment requests",
                        "minimum": 0,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Maximum lightweight public video-detail enrichment requests when video metrics enrichment is disabled.",
                        "default": 100
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
