# Bulk TikTok Video Transcripts — Captions + AI (`memo23/tiktok-profile-videos-cheerio`) Actor

Bulk TikTok video transcripts from any profile URL. Reads each video's own TikTok caption (free, instant) and optionally falls back to AI Whisper for no-caption clips. One row per video: metadata, engagement stats + full transcript. JSON/CSV, no login.

- **URL**: https://apify.com/memo23/tiktok-profile-videos-cheerio.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Social media, AI, Agents
- **Stats:** 17 total users, 16 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $6.00 / 1,000 caption transcripts

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

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

## What's an Apify Actor?

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

## How to integrate an Actor?

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

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

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

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

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

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

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

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

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

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

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


# README

## Bulk TikTok Video Transcripts — Captions + AI Speech-to-Text

<p align="center">
  <img src="https://muhamed-didovic.github.io/assets/tiktok/how-it-works-tiktok.png" alt="How it works" width="760" />
</p>

**Paste a TikTok profile URL → get every video transcribed to text, in bulk.** The actor reads each video's own TikTok caption track — free, instant, and accurate — and can optionally fall back to on-device AI speech-to-text (Whisper) for videos that have no caption. One clean row per video: full metadata + transcript. JSON or CSV.

> No API keys, no login, no manual cookies. Captions come straight from TikTok's own data, so most talking videos transcribe for a fraction of a cent.

### Why Use This Scraper?

- **Whole profile in one run** — point it at a creator, get transcripts for all their videos. Not one-video-at-a-time.
- **Caption-first = cheap + accurate** — uses TikTok's own caption track (its native speech-to-text) when present, so you pay ~$0.006/video, not AI-compute prices.
- **AI fallback when you need it** — flip on `whisperFallback` to transcribe videos that have *no* caption (music clips, non-English audio) with on-device Whisper. Most competitors can only read captions.
- **Block-resistant discovery** — videos are found via a real stealth browser that intercepts TikTok's own `item_list` requests, so there's no fragile signature/token juggling and no captcha walls.
- **You only pay for transcripts you get** — videos with no caption (when AI is off) come back as metadata-only and are **not** charged.

### Overview

Each input profile is expanded into **one dataset row per video**. A row always carries the video's metadata (id, author, description, duration, engagement stats, URL) and a `transcriptSource` telling you how it was transcribed:

- `caption` — TikTok's own caption track was used (free path, the default).
- `whisper` — no caption existed and you enabled AI fallback, so Whisper transcribed the audio.
- `none` — no caption and AI fallback was off; the row is metadata-only (and not billed).

This is **not** a single-video tool and it is **not** a comments/followers scraper — it is built to turn an entire profile's spoken content into searchable text.

### Supported Inputs

| Input | What you get |
|---|---|
| `https://www.tiktok.com/@gordonramsayofficial` | Every discoverable video on that profile, each transcribed |
| `https://www.tiktok.com/@username` (any handle) | Same — works on large accounts (tested on millions-of-followers profiles) |
| Multiple profile URLs | All of them, processed in turn |

**Not supported:** single video URLs, hashtag/sound/search pages, comments, followers, or live streams. Give it **profile URLs**.

### Use Cases

| Audience | What they pull |
|---|---|
| Content & trend researchers | Searchable text of a creator's whole catalog — find topics, hooks, recurring phrases |
| Marketers & agencies | Transcribe competitor creators to mine messaging, CTAs, and product mentions |
| Lead generation | Surface spoken contact info / offers across a profile's videos |
| Accessibility & repurposing | Captions/transcripts for re-subtitling, blogs, newsletters, show notes |
| AI / dataset builders | Bulk speech-to-text corpora keyed to engagement stats |

1. **Discover** — each profile is opened in a stealth browser (Playwright + stealth). TikTok's own page fires its `item_list` requests with a valid in-browser token; the actor intercepts those while scrolling. No signing, no captcha. Retries with a fresh residential exit IP if a load comes back empty.
2. **Caption-first** — for each video the actor reads TikTok's inline caption track (`claInfo.captionInfos`) and fetches the WebVTT **inside the same browser session** — free, instant, accurate.
3. **AI fallback (optional)** — if a video has no caption and `whisperFallback` is on, the audio is pulled with `yt-dlp` and transcribed on-device with OpenAI Whisper. Off by default.
4. **Emit & bill** — one row per video; you're charged only for videos that actually produced a transcript.

### Input Configuration

| Field | Type | Required | Notes |
|---|---|---|---|
| `startUrls` | array | ✅ | One or more TikTok profile URLs |
| `maxItems` | integer | — | Max videos to process per profile (default 10) |
| `transcribe` | boolean | — | Add transcripts (default `true`). `false` = metadata only |
| `whisperFallback` | boolean | — | Transcribe **no-caption** videos with AI Whisper (default `false`) |
| `whisperModel` | string | — | `tiny` (default) / `base` / `small` — only used when AI fallback is on |
| `maxDurationSec` | integer | — | Skip no-caption videos longer than this for Whisper (default 120; `0` = no cap) |
| `proxy` | object | — | Proxy for the stealth browser; residential strongly recommended |

#### Example input

```json
{
  "startUrls": [
    { "url": "https://www.tiktok.com/@gordonramsayofficial" }
  ],
  "maxItems": 25,
  "transcribe": true,
  "whisperFallback": false
}
````

### Output Overview

One row per video. The `transcript` object holds the text plus its `source` and detected `language`; `transcriptSource` and `captionAvailable` let you filter quickly (e.g. keep only `caption` rows, or find which videos lack captions).

### Output Samples

#### `transcriptSource: "caption"` (the default, free path)

```jsonc
{
  "id": "7341108653442829601",
  "author": "gordonramsayofficial",
  "createTime": 1709235062,
  "desc": "Its curry in a hurry from #NextLevelKitchen !",
  "durationSec": 87,
  "stats": {
    "playCount": 27300000,
    "diggCount": 1900000,
    "commentCount": 14900,
    "shareCount": 102500,
    "collectCount": 477800
  },
  "videoUrl": "https://www.tiktok.com/@gordonramsayofficial/video/7341108653442829601",
  "transcriptSource": "caption",
  "captionAvailable": true,
  "transcript": {
    "source": "caption",
    "language": "en",
    "text": "For my favourite dishes, butter chicken. Let's go get that chicken. Touch of salt, some pepper, fresh turmeric, cumin as well, ground coriander, cayenne…"
  }
}
```

#### `transcriptSource: "none"` (no caption, AI fallback off — metadata only, not charged)

```jsonc
{
  "id": "7229884545150061851",
  "author": "gordonramsayofficial",
  "durationSec": 88,
  "videoUrl": "https://www.tiktok.com/@gordonramsayofficial/video/7229884545150061851",
  "transcriptSource": "none",
  "captionAvailable": false
}
```

### Key Output Fields

**Identity & link**

- `id` — video id
- `author` — profile handle
- `videoUrl` — canonical link
- `createTime` — Unix seconds

**Content**

- `desc` — caption/description text
- `durationSec` — length in seconds

**Engagement** (`stats`)

- `playCount`, `diggCount` (likes), `commentCount`, `shareCount`, `collectCount`

**Transcript**

- `transcriptSource` — `caption` | `whisper` | `none`
- `captionAvailable` — was a TikTok caption used
- `transcript.text` — the transcript
- `transcript.source` — `caption` | `whisper`
- `transcript.language` — detected language (e.g. `en`)

### FAQ

**Is this AI transcription or TikTok's captions?** Both — caption-first. It uses TikTok's own caption track (its native speech-to-text) whenever a video has one, which is the default and the cheap path. Real AI (Whisper) only runs if you turn on `whisperFallback` for videos that have no caption.

**Why are some videos returned with no transcript?** Music clips, no-speech skits, and some ads have no TikTok caption. With AI fallback off (the default) those come back as `transcriptSource: "none"` — metadata only, and you are **not** charged for them.

**How good are the transcripts?** TikTok's captions are accurate on clear speech and even capture short non-English phrases. The optional Whisper fallback handles audio TikTok never captioned.

**Does it need cookies or a login?** No. Discovery runs in a stealth browser against public profile pages.

**Why a residential proxy?** TikTok rate-limits datacenter IPs. Paying runs are routed through a residential exit automatically; free runs can configure Apify Proxy.

**How many videos can it do?** It's built for bulk whole-profile runs. Caption extraction is fast; the AI Whisper fallback is CPU-heavy, so keep `maxItems` modest when `whisperFallback` is on.

**Can I get only captioned videos?** Yes — leave `whisperFallback` off and filter rows where `transcriptSource === "caption"`.

### Support

Found a bug or need a field added? Open an issue on the actor's **Issues** tab, or email **muhamed.didovic@gmail.com**. Include the input you ran and a run ID.

### Additional Services

Need a custom TikTok or social pipeline — comments, followers, sound/hashtag feeds, scheduled monitoring, or delivery straight to a database/sheet? I build bespoke scrapers and enrichment flows. Reach out via the email above.

### Explore More Scrapers

- **TikTok Search Suggestions** — autocomplete/keyword expansion with popularity scoring
- **Instagram, YouTube & social profile scrapers** — metadata + media at scale
- **Tours & Activities (GetYourGuide / Viator / Klook / Tiqets)** — listings + reviews
- **Google Play / App Store** — app metadata, reviews, ASO
- Browse all actors on the **memo23** Apify Store profile

### ⚠️ Disclaimer

This Actor accesses publicly available data on TikTok for legitimate research, market-intelligence, accessibility, and business-analysis purposes. Use of this Actor must comply with TikTok's Terms of Service and all applicable laws including data-protection regulations (GDPR, CCPA, etc.). The Actor's authors are not responsible for any misuse. Users must:

- Respect rate limits and avoid overloading TikTok's infrastructure
- Not use scraped data to violate user privacy or TikTok's terms
- Use the data in compliance with applicable jurisdictions
- Not republish scraped content in violation of copyright

TikTok is a trademark of ByteDance Ltd.; this Actor is not affiliated with, endorsed by, or sponsored by TikTok or ByteDance. We do not store any scraped data; the Actor returns it directly to your Apify dataset for your authorized use.

### SEO Keywords

tiktok scraper, tiktok transcript scraper, tiktok video transcription, tiktok captions scraper, tiktok subtitles export, tiktok speech to text, tiktok profile scraper, bulk tiktok transcripts, tiktok whisper transcription, tiktok video to text, tiktok content research, tiktok api alternative, tiktok data extraction, tiktok json export, tiktok csv export, social media transcription, video transcription api, creator content analysis, tiktok bulk export, no-code tiktok scraper

# Actor input Schema

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

One or more TikTok profile URLs, e.g. <code>https://www.tiktok.com/@bogus\_tat2</code>. The actor loads each profile in a stealth browser, collects all its videos, and processes up to <b>Max items</b> of them.

## `maxItems` (type: `integer`):

Maximum number of videos to process (download + transcribe) per profile. Transcription is the slow/costly step, so start small.

## `transcribe` (type: `boolean`):

When enabled (default), each video gets a <code>transcript</code> field. The actor first uses <b>TikTok's own caption track</b> — free, instant, and accurate — whenever the video has one (most talking videos do). Disable to return video metadata only.

## `whisperFallback` (type: `boolean`):

Most talking videos already carry a TikTok caption, which the actor uses for free. Enable this to ALSO run on-device AI speech-to-text (Whisper) on videos that have <b>no caption</b> (e.g. music clips, non-English audio). This downloads each such video's audio and is much slower and more compute-heavy — leave OFF unless you truly need every video transcribed. When OFF, no-caption videos are returned as metadata-only.

## `whisperModel` (type: `string`):

Applies only when <b>Transcribe no-caption videos with AI</b> is enabled. <b>tiny</b> (default) is ~5× faster and reliable on Apify's CPU. <b>base</b>/<b>small</b> are more accurate but much slower and can time out on longer videos.

## `maxDurationSec` (type: `integer`):

Applies only to the AI Whisper fallback: no-caption videos longer than this are not AI-transcribed (a guard so one long video can't burn minutes of compute). Caption videos are never skipped. Default 120 (2 min); set 0 to disable.

## `proxy` (type: `object`):

Proxy used by the stealth browser. Paying users are automatically routed through a residential exit; free users can configure Apify Proxy here. A residential proxy is strongly recommended — TikTok rate-limits/blocks datacenter IPs.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.tiktok.com/@bogus_tat2"
    }
  ],
  "maxItems": 10,
  "transcribe": true,
  "whisperFallback": false,
  "whisperModel": "tiny",
  "maxDurationSec": 120,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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 = {
    "startUrls": [
        {
            "url": "https://www.tiktok.com/@bogus_tat2"
        }
    ],
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/tiktok-profile-videos-cheerio").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 = {
    "startUrls": [{ "url": "https://www.tiktok.com/@bogus_tat2" }],
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("memo23/tiktok-profile-videos-cheerio").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 '{
  "startUrls": [
    {
      "url": "https://www.tiktok.com/@bogus_tat2"
    }
  ],
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call memo23/tiktok-profile-videos-cheerio --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Bulk TikTok Video Transcripts — Captions + AI",
        "description": "Bulk TikTok video transcripts from any profile URL. Reads each video's own TikTok caption (free, instant) and optionally falls back to AI Whisper for no-caption clips. One row per video: metadata, engagement stats + full transcript. JSON/CSV, no login.",
        "version": "0.0",
        "x-build-id": "xbzpqAerKpLpcjcqq"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/memo23~tiktok-profile-videos-cheerio/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-memo23-tiktok-profile-videos-cheerio",
                "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/memo23~tiktok-profile-videos-cheerio/runs": {
            "post": {
                "operationId": "runs-sync-memo23-tiktok-profile-videos-cheerio",
                "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/memo23~tiktok-profile-videos-cheerio/run-sync": {
            "post": {
                "operationId": "run-sync-memo23-tiktok-profile-videos-cheerio",
                "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": [
                    "startUrls"
                ],
                "properties": {
                    "startUrls": {
                        "title": "TikTok profile URLs",
                        "type": "array",
                        "description": "One or more TikTok profile URLs, e.g. <code>https://www.tiktok.com/@bogus_tat2</code>. The actor loads each profile in a stealth browser, collects all its videos, and processes up to <b>Max items</b> of them.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxItems": {
                        "title": "Max videos per profile",
                        "type": "integer",
                        "description": "Maximum number of videos to process (download + transcribe) per profile. Transcription is the slow/costly step, so start small.",
                        "default": 10
                    },
                    "transcribe": {
                        "title": "Add transcripts",
                        "type": "boolean",
                        "description": "When enabled (default), each video gets a <code>transcript</code> field. The actor first uses <b>TikTok's own caption track</b> — free, instant, and accurate — whenever the video has one (most talking videos do). Disable to return video metadata only.",
                        "default": true
                    },
                    "whisperFallback": {
                        "title": "Transcribe no-caption videos with AI (Whisper)",
                        "type": "boolean",
                        "description": "Most talking videos already carry a TikTok caption, which the actor uses for free. Enable this to ALSO run on-device AI speech-to-text (Whisper) on videos that have <b>no caption</b> (e.g. music clips, non-English audio). This downloads each such video's audio and is much slower and more compute-heavy — leave OFF unless you truly need every video transcribed. When OFF, no-caption videos are returned as metadata-only.",
                        "default": false
                    },
                    "whisperModel": {
                        "title": "Whisper model (only used when AI fallback is on)",
                        "enum": [
                            "tiny",
                            "base",
                            "small"
                        ],
                        "type": "string",
                        "description": "Applies only when <b>Transcribe no-caption videos with AI</b> is enabled. <b>tiny</b> (default) is ~5× faster and reliable on Apify's CPU. <b>base</b>/<b>small</b> are more accurate but much slower and can time out on longer videos.",
                        "default": "tiny"
                    },
                    "maxDurationSec": {
                        "title": "Skip no-caption videos longer than (seconds)",
                        "type": "integer",
                        "description": "Applies only to the AI Whisper fallback: no-caption videos longer than this are not AI-transcribed (a guard so one long video can't burn minutes of compute). Caption videos are never skipped. Default 120 (2 min); set 0 to disable.",
                        "default": 120
                    },
                    "proxy": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy used by the stealth browser. Paying users are automatically routed through a residential exit; free users can configure Apify Proxy here. A residential proxy is strongly recommended — TikTok rate-limits/blocks datacenter IPs.",
                        "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
