# TikTok Hashtag Scraper - Video Analytics (`khadinakbar/tiktok-hashtag-scraper`) Actor

Scrape public TikTok videos from one or more hashtags and get views, likes, comments, shares, saves, engagement rate, creator data, music metadata, captions, timestamps, thumbnails, and quality filters. Cookieless, provider-backed, MCP-ready.

- **URL**: https://apify.com/khadinakbar/tiktok-hashtag-scraper.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** Social media, Automation, MCP servers
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 hashtag video founds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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/docs.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.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/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

## TikTok Hashtag Scraper - Video Analytics

Scrape public TikTok hashtag videos and export clean engagement data for social listening, creator research, trend tracking, and campaign analysis. Enter one or more hashtags and get one structured row per TikTok video with views, likes, comments, shares, saves, captions, creator metadata, music metadata, timestamps, thumbnails, and engagement rate.

This actor is provider-backed with ScrapeCreators as the primary source and SociaVault as fallback. It does not require a TikTok account, cookies, browser sessions, or user-supplied API keys. It is designed for Apify MCP and AI agents: flat output fields, predictable pricing, compact rows, and a `RUN_SUMMARY` key with provider and per-hashtag diagnostics.

### What It Extracts

| Field | Example |
| --- | --- |
| `hashtag` | `fitness` |
| `videoUrl` | `https://www.tiktok.com/@runner/video/7412345678901234567` |
| `caption` | `Best running shoes #running #fitness` |
| `createdAt` | `2024-06-01T00:00:00.000Z` |
| `playCount` | `250000` |
| `likeCount` | `12000` |
| `commentCount` | `340` |
| `shareCount` | `210` |
| `collectCount` | `90` |
| `engagementRate` | `0.0502` |
| `authorUsername` | `runner` |
| `authorNickname` | `Runner` |
| `authorVerified` | `true` |
| `durationSeconds` | `32` |
| `coverUrl` | TikTok thumbnail URL |
| `hashtags` | `["running", "fitness"]` |
| `musicTitle` | `Original sound` |
| `musicAuthor` | `runner` |

The default dataset is built for analysis in spreadsheets, BI tools, notebooks, and AI-agent workflows. `OUTPUT` and `RUN_SUMMARY` include counts by hashtag, provider attempts, provider status codes, filtered-out rows, duplicate skips, charge count, and estimated PPE cost.

### When To Use

Use this actor when you need to collect videos attached to specific public TikTok hashtags. It is a good fit for social listening, campaign tracking, influencer discovery, content strategy, competitor monitoring, UGC research, and building a dataset of posts around a niche.

Use the quality filters when you want only meaningful rows. For example, set `minViews` to `100000` to collect viral hashtag videos, `minLikes` to `5000` to focus on proven engagement, or `includePhotoPosts` to `false` to keep video posts only. Filtered-out videos are not saved and are not charged as result events.

Do not use this actor for trending hashtag discovery. Use `tiktok-trending-hashtags-scraper` for "what hashtags are trending right now?" workflows. Do not use it for comments, transcripts, media downloads, creator profile scraping, or broad keyword search. Use the related actors listed below for those jobs.

### Input

```json
{
  "hashtags": ["fitness", "booktok"],
  "maxVideosPerHashtag": 50,
  "region": "US",
  "minViews": 10000,
  "includePhotoPosts": true,
  "providerOrder": "scrapecreators-first",
  "includeRawData": false
}
````

| Input | Description |
| --- | --- |
| `hashtags` | Hashtag names with or without `#`, such as `fitness` or `#booktok`. |
| `hashtagUrls` | TikTok `/tag/` URLs, such as `https://www.tiktok.com/tag/skincare`. |
| `maxVideosPerHashtag` | Max saved and charged rows per hashtag. Default `50`, max `10000`. |
| `region` | Two-letter region code used to localize results. Default `US`. |
| `minViews` | Keep only rows with at least this many plays/views. |
| `minLikes` | Keep only rows with at least this many likes. |
| `minComments` | Keep only rows with at least this many comments. |
| `minShares` | Keep only rows with at least this many shares. |
| `minDurationSeconds` | Keep only videos at least this long. |
| `maxDurationSeconds` | Keep only videos no longer than this. |
| `includePhotoPosts` | Include TikTok image carousel posts. Default `true`. |
| `maxPagesPerHashtag` | Safety cap for provider pagination. Default `20`. |
| `providerOrder` | Provider route: ScrapeCreators first, SociaVault first, or force one provider. |
| `includeRawData` | Attach raw provider payload to each row for debugging. Default `false`. |

### Pricing

| Event | Price |
| --- | --- |
| Actor start | `$0.00005` per run |
| Hashtag video found | `$0.003` per saved video on the free tier, lower on higher Apify tiers |

Only saved, filter-passing rows are charged as `hashtag-video-found`. If a video is fetched but fails `minViews`, `minLikes`, duration, or photo-post filters, it is dropped before charging. The actor logs a cost cap before collecting data and reports actual charged rows in `RUN_SUMMARY`.

Example: two hashtags with `maxVideosPerHashtag: 50` can save at most 100 charged rows. At `$0.003` per video plus the start event, the maximum PPE cost is about `$0.30005` before higher-tier discounts.

### API Examples

#### JavaScript

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('khadinakbar/tiktok-hashtag-scraper').call({
  hashtags: ['fitness', 'booktok'],
  maxVideosPerHashtag: 25,
  minViews: 10000,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.slice(0, 3));
```

#### Python

```python
from apify_client import ApifyClient
import os

client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("khadinakbar/tiktok-hashtag-scraper").call(run_input={
    "hashtags": ["fitness", "booktok"],
    "maxVideosPerHashtag": 25,
    "minViews": 10000,
})

items = list(client.dataset(run["defaultDatasetId"]).iterate_items())
print(items[:3])
```

### Reliability Notes

This actor uses public-data provider APIs rather than browser scraping. That keeps it cookieless and avoids the most common TikTok browser-blocking issues. ScrapeCreators is tried first by default because it usually returns rich TikTok hashtag objects. SociaVault is available as a fallback or as the primary path for provider comparison.

Provider errors, empty hashtags, and invalid inputs are surfaced in `RUN_SUMMARY` with actionable diagnostics. Empty valid hashtags finish successfully with zero rows instead of pretending data exists. True upstream provider outages are marked clearly so you can retry later or switch provider order.

### Related Actors

- `tiktok-trending-hashtags-scraper` - discover trending hashtags by country or industry.
- `tiktok-video-search-scraper` - search TikTok videos by keyword or hashtag with broader search controls.
- `tiktok-video-comments-scraper` - extract comments from known TikTok video URLs.
- `tiktok-profile-scraper` - extract public creator profile data.
- `tiktok-ads-scraper` - analyze TikTok Creative Center top ads.

### Legal And Compliance

This actor extracts publicly available TikTok hashtag data through provider APIs. It does not bypass authentication, collect private account data, or require user cookies. TikTok content belongs to its respective creators and rights holders. Use the exported data responsibly and comply with TikTok's Terms of Service, privacy laws, copyright rules, and your local regulations. This actor is not affiliated with, endorsed by, or sponsored by TikTok or ByteDance.

# Actor input Schema

## `hashtags` (type: `array`):

Use this when you want videos from one or more public TikTok hashtag feeds. Enter names with or without '#', for example 'fitness' or '#booktok'. Defaults to the prefill if you run the example task. Not for TikTok profiles, comments, or keyword search.

## `hashtagUrls` (type: `array`):

Use this when you already have TikTok /tag/ URLs instead of plain hashtag names. Accepts URLs like 'https://www.tiktok.com/tag/skincare'. Empty by default. Not for video URLs or profile URLs.

## `maxVideosPerHashtag` (type: `integer`):

Maximum filter-passing videos to save and charge for per hashtag. Accepts 1 to 10000, for example 50. Defaults to 50. This is a per-hashtag cap, not the total cap across all hashtags.

## `region` (type: `string`):

Two-letter ISO country code used to localize TikTok hashtag results. Use values like 'US', 'GB', or 'DE'. Defaults to 'US'. Not a language filter or city-level location.

## `minViews` (type: `integer`):

Keep only videos with at least this many plays/views. Use 100000 to focus on viral posts. Defaults to 0, which keeps all view counts. Filtered-out videos are not saved or charged.

## `minLikes` (type: `integer`):

Keep only videos with at least this many likes. Use 5000 to focus on posts with proven engagement. Defaults to 0. Not a sort option; it removes rows below the threshold.

## `minComments` (type: `integer`):

Keep only videos with at least this many comments. Use 100 to find discussion-heavy hashtag posts. Defaults to 0. Not for downloading comments; use a TikTok comments actor for comment text.

## `minShares` (type: `integer`):

Keep only videos with at least this many shares. Use 100 to find posts spreading beyond the original audience. Defaults to 0. Not a share-export option.

## `minDurationSeconds` (type: `integer`):

Keep only videos at least this many seconds long. Use 15 to skip very short clips. Defaults to 0. Videos missing duration are dropped only when this filter is set.

## `maxDurationSeconds` (type: `integer`):

Keep only videos no longer than this many seconds. Use 60 to focus on short-form clips. Defaults to 0, meaning no upper limit. Videos missing duration are dropped only when this filter is set.

## `includePhotoPosts` (type: `boolean`):

TikTok hashtag feeds can include image carousel posts. Keep true to include them, or set false to keep video posts only. Defaults to true. Not a media download option.

## `maxPagesPerHashtag` (type: `integer`):

Safety cap for provider pagination per hashtag. Accepts 1 to 500, for example 20. Defaults to 20. Raise it only when maxVideosPerHashtag is high or filters are strict.

## `providerOrder` (type: `string`):

Controls provider routing for public TikTok hashtag data. 'scrapecreators-first' uses ScrapeCreators then SociaVault, for example. Defaults to ScrapeCreators first. Not a user API key field; provider keys are owner secrets.

## `includeRawData` (type: `boolean`):

Attach the raw provider payload to each dataset row under rawResult. Use this for debugging or custom downstream parsing. Defaults to false to keep rows compact. Not recommended for AI-agent previews.

## Actor input object example

```json
{
  "hashtags": [
    "fitness",
    "booktok"
  ],
  "hashtagUrls": [
    "https://www.tiktok.com/tag/skincare"
  ],
  "maxVideosPerHashtag": 50,
  "region": "US",
  "minViews": 0,
  "minLikes": 0,
  "minComments": 0,
  "minShares": 0,
  "minDurationSeconds": 0,
  "maxDurationSeconds": 0,
  "includePhotoPosts": true,
  "maxPagesPerHashtag": 20,
  "providerOrder": "scrapecreators-first",
  "includeRawData": false
}
```

# Actor output Schema

## `videos` (type: `string`):

Videos with engagement metrics, creator info, hashtags, music metadata, and URLs.

## `runSummary` (type: `string`):

Run diagnostics, provider telemetry, and filter stats.

# 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 = {
    "hashtags": [
        "fitness",
        "booktok"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/tiktok-hashtag-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 = { "hashtags": [
        "fitness",
        "booktok",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("khadinakbar/tiktok-hashtag-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 '{
  "hashtags": [
    "fitness",
    "booktok"
  ]
}' |
apify call khadinakbar/tiktok-hashtag-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "TikTok Hashtag Scraper - Video Analytics",
        "description": "Scrape public TikTok videos from one or more hashtags and get views, likes, comments, shares, saves, engagement rate, creator data, music metadata, captions, timestamps, thumbnails, and quality filters. Cookieless, provider-backed, MCP-ready.",
        "version": "0.1",
        "x-build-id": "jIAFR9TPZQaiChIu4"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/khadinakbar~tiktok-hashtag-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-khadinakbar-tiktok-hashtag-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/khadinakbar~tiktok-hashtag-scraper/runs": {
            "post": {
                "operationId": "runs-sync-khadinakbar-tiktok-hashtag-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/khadinakbar~tiktok-hashtag-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-khadinakbar-tiktok-hashtag-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": {
                    "hashtags": {
                        "title": "Hashtags",
                        "type": "array",
                        "description": "Use this when you want videos from one or more public TikTok hashtag feeds. Enter names with or without '#', for example 'fitness' or '#booktok'. Defaults to the prefill if you run the example task. Not for TikTok profiles, comments, or keyword search.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "hashtagUrls": {
                        "title": "Hashtag URLs",
                        "type": "array",
                        "description": "Use this when you already have TikTok /tag/ URLs instead of plain hashtag names. Accepts URLs like 'https://www.tiktok.com/tag/skincare'. Empty by default. Not for video URLs or profile URLs.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxVideosPerHashtag": {
                        "title": "Max videos per hashtag",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Maximum filter-passing videos to save and charge for per hashtag. Accepts 1 to 10000, for example 50. Defaults to 50. This is a per-hashtag cap, not the total cap across all hashtags.",
                        "default": 50
                    },
                    "region": {
                        "title": "Region",
                        "type": "string",
                        "description": "Two-letter ISO country code used to localize TikTok hashtag results. Use values like 'US', 'GB', or 'DE'. Defaults to 'US'. Not a language filter or city-level location.",
                        "default": "US"
                    },
                    "minViews": {
                        "title": "Minimum views",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Keep only videos with at least this many plays/views. Use 100000 to focus on viral posts. Defaults to 0, which keeps all view counts. Filtered-out videos are not saved or charged.",
                        "default": 0
                    },
                    "minLikes": {
                        "title": "Minimum likes",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Keep only videos with at least this many likes. Use 5000 to focus on posts with proven engagement. Defaults to 0. Not a sort option; it removes rows below the threshold.",
                        "default": 0
                    },
                    "minComments": {
                        "title": "Minimum comments",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Keep only videos with at least this many comments. Use 100 to find discussion-heavy hashtag posts. Defaults to 0. Not for downloading comments; use a TikTok comments actor for comment text.",
                        "default": 0
                    },
                    "minShares": {
                        "title": "Minimum shares",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Keep only videos with at least this many shares. Use 100 to find posts spreading beyond the original audience. Defaults to 0. Not a share-export option.",
                        "default": 0
                    },
                    "minDurationSeconds": {
                        "title": "Minimum duration",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Keep only videos at least this many seconds long. Use 15 to skip very short clips. Defaults to 0. Videos missing duration are dropped only when this filter is set.",
                        "default": 0
                    },
                    "maxDurationSeconds": {
                        "title": "Maximum duration",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Keep only videos no longer than this many seconds. Use 60 to focus on short-form clips. Defaults to 0, meaning no upper limit. Videos missing duration are dropped only when this filter is set.",
                        "default": 0
                    },
                    "includePhotoPosts": {
                        "title": "Include photo posts",
                        "type": "boolean",
                        "description": "TikTok hashtag feeds can include image carousel posts. Keep true to include them, or set false to keep video posts only. Defaults to true. Not a media download option.",
                        "default": true
                    },
                    "maxPagesPerHashtag": {
                        "title": "Max pages per hashtag",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Safety cap for provider pagination per hashtag. Accepts 1 to 500, for example 20. Defaults to 20. Raise it only when maxVideosPerHashtag is high or filters are strict.",
                        "default": 20
                    },
                    "providerOrder": {
                        "title": "Data provider",
                        "enum": [
                            "scrapecreators-first",
                            "sociavault-first",
                            "scrapecreators-only",
                            "sociavault-only"
                        ],
                        "type": "string",
                        "description": "Controls provider routing for public TikTok hashtag data. 'scrapecreators-first' uses ScrapeCreators then SociaVault, for example. Defaults to ScrapeCreators first. Not a user API key field; provider keys are owner secrets.",
                        "default": "scrapecreators-first"
                    },
                    "includeRawData": {
                        "title": "Include raw provider data",
                        "type": "boolean",
                        "description": "Attach the raw provider payload to each dataset row under rawResult. Use this for debugging or custom downstream parsing. Defaults to false to keep rows compact. Not recommended for AI-agent previews.",
                        "default": false
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
