# YouTube Channel Email Scraper (`automation-lab/youtube-channel-email-scraper`) Actor

Extract contact emails and social links from YouTube channel About pages. Input channel URLs or @handles, get email addresses, subscriber counts, video counts, and all linked social profiles. No proxy needed.

- **URL**: https://apify.com/automation-lab/youtube-channel-email-scraper.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** Social media, Lead generation
- **Stats:** 3 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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

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

## What's an Apify Actor?

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

## How to integrate an Actor?

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

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

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

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

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

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

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

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

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

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

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


# README

## 📧 YouTube Channel Email Scraper

Extract **contact emails** and **social links** from YouTube channel About pages in bulk. Input a list of YouTube channels (URLs, @handles, or channel IDs) and get back email addresses, subscriber counts, video counts, social profiles, and full channel descriptions — with **no proxy needed** and **no browser required**.

### 🎯 What does it do?

YouTube Channel Email Scraper reads each channel's About page via the YouTube InnerTube API and extracts:

- 📧 **Business contact email** (the email listed in the channel's About section)
- 📋 All emails found across description, links, and social profiles
- 📺 Channel name, @handle, and channel ID
- 👥 Subscriber count and video count
- 📝 Full channel description
- 🔗 All linked social profiles and external URLs
- 🌍 Country / location
- ✅ Verified channel status
- 📅 Channel join date

It works by calling the official YouTube InnerTube JSON API (the same API YouTube uses internally) — no browser automation, no proxy, just a fast HTTP request per channel.

---

### 👥 Who is it for?

**Influencer marketers & brand managers** — Build a outreach list of YouTubers in your niche. Filter to only channels with emails so you can contact them directly without going through agents.

**Talent agencies & MCNs** — Scout potential talent at scale. Download emails and social links for hundreds of channels in minutes instead of manually visiting each About page.

**PR agencies** — Find journalists, reviewers, and content creators in specific niches for product seeding campaigns. Export directly to your CRM.

**Recruiting / HR teams** — Identify and contact YouTube educators, trainers, or specialists in technical fields who may be open to consulting or full-time roles.

**SaaS & tool builders** — Enrich your database of creator profiles with verified contact info for creator economy platforms, sponsor marketplaces, or outreach tools.

**Researchers** — Collect channel metadata and contact info for academic studies on the creator economy, content strategy, or platform analysis.

---

### 💡 Why use this actor?

- ✅ **No proxy needed** — YouTube About pages are fully public. No anti-bot, no captcha, no IP blocks.
- ⚡ **Fast** — Processes 100+ channels per minute using parallel requests.
- 💰 **Low per-email pricing** — Many alternatives charge higher per-email rates. This actor charges $0.02/email on the Bronze tier, with lower unit prices on higher plans.
- 🔍 **Multiple email sources** — Scans description text, About section, and linked social profiles for all email addresses.
- 🎯 **Email-only filter** — Use `onlyWithEmail: true` to skip channels without emails and save only leads.
- 📊 **Clean, flat output** — No nested objects. Every field is a primitive ready for spreadsheet export.

---

### 📊 What data does it extract?

| Field | Type | Description |
|-------|------|-------------|
| `channelId` | String | YouTube channel ID (UCxxxxxxxxx) |
| `channelName` | String | Display name of the channel |
| `channelHandle` | String | @handle (e.g. @mkbhd) |
| `channelUrl` | String | Full channel URL |
| `email` | String / null | Primary contact email found |
| `emails` | Array | All emails found (may include multiple) |
| `subscriberCount` | Number / null | Total subscriber count |
| `videoCount` | Number / null | Total published videos |
| `description` | String | Full channel description text |
| `socialLinks` | Array | List of `{title, url}` external links |
| `avatarUrl` | String | Channel profile image URL |
| `isVerified` | Boolean | Whether channel has verified badge |
| `country` | String | Channel's listed country |
| `joinedDate` | String | When the channel joined YouTube |
| `scrapedAt` | String | ISO 8601 timestamp of when data was collected |

---

### 💵 How much does it cost to scrape YouTube channel emails?

This actor uses **pay-per-event (PPE) pricing** — you pay only for results:

| Event | Price |
|-------|-------|
| Actor start | $0.005 (one-time) |
| Per channel processed | $0.002 |
| Per email found | $0.02 |

**Example costs:**
- Scrape 100 channels, 30 have emails: `$0.005 + 100 × $0.002 + 30 × $0.02 = $0.805`
- Scrape 500 channels, 150 have emails: `$0.005 + 500 × $0.002 + 150 × $0.02 = $4.005`
- Scrape 50 channels with `onlyWithEmail=true`, 20 emails found: `$0.005 + 50 × $0.002 + 20 × $0.02 = $0.505`

> 💡 **Competitor comparison:** Many YouTube email scrapers charge higher per-email rates. This actor starts at $0.02 per email found on the Bronze tier, with volume discounts on higher plans.

**Free plan estimate:** The Apify free tier includes $5/month of compute credit. That's enough to find approximately **200+ emails** per month at no cost.

---

### 🚀 How to scrape YouTube channel emails — step by step

1. **Create a free Apify account** at [apify.com](https://apify.com)
2. Open the **YouTube Channel Email Scraper** actor page
3. In the **Channels** field, paste your list of YouTube channel URLs, @handles, or channel IDs
4. Optionally enable **Only output channels with email** to get a clean lead list
5. Click **Start** and wait for results (usually under 30 seconds for 50 channels)
6. Download results as **JSON**, **CSV**, or **Excel** — or push directly to your CRM via the API

---

### ⚙️ Input parameters

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `channels` | Array of strings | Required | List of YouTube channels. Accepts URLs, @handles, or channel IDs. |
| `onlyWithEmail` | Boolean | `false` | Skip channels without emails. Only saves channels where at least one email was found. |
| `maxConcurrency` | Integer | `5` | Max parallel requests (1–20). Higher = faster but may rate-limit. |

#### Supported input formats

All of the following are valid entries in the `channels` list:

- `@mkbhd` — @handle
- `https://www.youtube.com/@mkbhd` — full channel URL
- `https://www.youtube.com/channel/UCBJycsmduvYEL83R_U4JriQ` — /channel/ URL
- `UCBJycsmduvYEL83R_U4JriQ` — raw channel ID

---

### 📦 Output examples

#### Channel with email found

```json
{
  "channelId": "UCBJycsmduvYEL83R_U4JriQ",
  "channelName": "Marques Brownlee",
  "channelHandle": "@mkbhd",
  "channelUrl": "https://www.youtube.com/channel/UCBJycsmduvYEL83R_U4JriQ",
  "email": "business@mkbhd.com",
  "emails": ["business@mkbhd.com"],
  "subscriberCount": 20900000,
  "videoCount": 1800,
  "description": "MKBHD: Quality Tech Videos | YouTuber | Geek | Consumer Electronics | Tech Head | Internet Personality!\n\nbusiness@MKBHD.com\n\nNYC",
  "socialLinks": [
    { "title": "twitter.com/MKBHD", "url": "http://twitter.com/MKBHD" }
  ],
  "avatarUrl": "https://yt3.googleusercontent.com/...",
  "isVerified": false,
  "country": "",
  "joinedDate": "",
  "scrapedAt": "2026-04-04T10:17:23.243Z"
}
````

#### Channel without email

```json
{
  "channelId": "UCVjgV3uCgdAbllTqnCgSb-g",
  "channelName": "NASA",
  "channelHandle": "@NASA",
  "channelUrl": "https://www.youtube.com/channel/UCVjgV3uCgdAbllTqnCgSb-g",
  "email": null,
  "emails": [],
  "subscriberCount": 13700000,
  "videoCount": 2100,
  "description": "Welcome to NASA's official YouTube channel...",
  "socialLinks": [
    { "title": "nasa.gov", "url": "https://www.nasa.gov" }
  ],
  "avatarUrl": "https://yt3.googleusercontent.com/...",
  "isVerified": true,
  "country": "United States",
  "joinedDate": "Sep 19, 2005",
  "scrapedAt": "2026-04-04T10:17:22.123Z"
}
```

***

### 💡 Tips for best results

#### Building targeted lead lists

Use the `onlyWithEmail: true` option when you want a clean list of actionable contacts. This filters out channels with no public email so your dataset only contains channels you can actually reach.

#### Finding emails that aren't in the About section

Some creators include their business email in the channel **description text** rather than the "contact" field. This actor scans both locations, so you don't miss those.

#### Bulk processing large lists

Set `maxConcurrency` to 10–15 for faster processing of large channel lists. The default of 5 is conservative — YouTube's InnerTube API has no strict rate limits for reasonable volumes.

#### Identifying channels to skip

Channels that have no email tend to be: large corporate brands, news channels, government accounts, and very large creators who route all business through management. Small to mid-size creators (1K–500K subscribers) have the highest rate of public business emails.

#### Exporting to Google Sheets

Use the Apify → Google Sheets integration or download as CSV. Each field maps cleanly to a column since all fields are flat primitives.

***

### 🔗 Integrations

#### CRM enrichment

Push scraped emails directly into your CRM using the [Apify → Zapier integration](https://zapier.com/apps/apify/integrations) or [Apify → Make (Integromat)](https://www.make.com/en/integrations/apify):

1. Run this actor via the API with your channel list
2. Use a Zap/scenario to watch for new dataset items
3. Automatically create new contacts or update existing records in HubSpot, Salesforce, or Pipedrive

#### Email outreach automation

Connect with email platforms like Instantly.ai or Lemlist:

1. Export results as CSV
2. Import into your email sequences tool
3. Filter on `email != null` to ensure all contacts are reachable

#### Influencer marketing platforms

Enrich your influencer database by running this actor on a list of channels from your existing database, then pushing the email data back via the Apify dataset API.

#### Google Sheets live dashboard

Use the [Apify Google Sheets Actor](https://apify.com/lukaskrivka/google-sheets) to stream results directly into a spreadsheet as they're scraped. Great for team collaboration on influencer outreach.

***

### 🛠️ API usage

#### Node.js (JavaScript)

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

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

const run = await client.actor('automation-lab/youtube-channel-email-scraper').call({
    channels: ['@mkbhd', '@LinusTechTips', '@veritasium'],
    onlyWithEmail: true,
    maxConcurrency: 10,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Found ${items.filter(i => i.email).length} channels with emails`);
for (const item of items) {
    if (item.email) console.log(`${item.channelName}: ${item.email}`);
}
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

run = client.actor("automation-lab/youtube-channel-email-scraper").call(run_input={
    "channels": ["@mkbhd", "@LinusTechTips", "@veritasium"],
    "onlyWithEmail": True,
    "maxConcurrency": 10,
})

items = client.dataset(run["defaultDatasetId"]).list_items().items
for item in items:
    if item.get("email"):
        print(f"{item['channelName']}: {item['email']}")
```

#### cURL

```bash
curl -X POST "https://api.apify.com/v2/acts/automation-lab~youtube-channel-email-scraper/runs?token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "channels": ["@mkbhd", "@LinusTechTips", "@veritasium"],
    "onlyWithEmail": true,
    "maxConcurrency": 10
  }'
```

***

### 🤖 MCP — Use with Claude AI

This actor works as an MCP (Model Context Protocol) server, letting you run it directly from Claude Code, Claude Desktop, or any MCP-compatible AI tool.

#### Setup — Claude Code / Cursor / VS Code

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=automation-lab/youtube-channel-email-scraper"
```

#### Setup — Claude Desktop / Cursor / VS Code

Add to your `claude_desktop_config.json` (or equivalent MCP config):

```json
{
    "mcpServers": {
        "youtube-email-scraper": {
            "type": "http",
            "url": "https://mcp.apify.com?tools=automation-lab/youtube-channel-email-scraper",
            "env": {
                "APIFY_TOKEN": "YOUR_API_TOKEN"
            }
        }
    }
}
```

#### Example prompts for Claude

- *"Scrape the contact emails for these 20 tech YouTube channels: \[list]"*
- *"Find business emails for fitness YouTubers with over 100K subscribers: \[channel list]"*
- *"Get contact info for all channels in this list and filter to only those with emails"*
- *"What's the contact email for @mkbhd?"*

***

### ⚖️ Legality: is it legal to scrape YouTube channel emails?

Yes. The email addresses extracted by this actor are **publicly posted** by channel owners in their About section. They choose to make their contact information visible to anyone who visits their YouTube channel page. Collecting publicly available contact information for legitimate business outreach is lawful in most jurisdictions.

This actor only reads data that is publicly accessible — it does not access private data, bypass authentication, or collect data from restricted sections. The [YouTube Terms of Service](https://www.youtube.com/static?template=terms) permit automated access to public data for personal and non-commercial use. For commercial use at scale, review YouTube's API Terms of Service.

**Important:** Always use scraped contact data responsibly. Do not use it for spam. Comply with anti-spam laws (CAN-SPAM, GDPR, CASL) when sending commercial emails.

***

### ❓ FAQ

**Q: Why is the `email` field null for some channels?**
A: Not all YouTube creators list a public business email. Large brands, news organizations, government channels, and many of the biggest creators don't expose an email on their About page. Creators in the 1K–500K subscriber range tend to have the highest rate of public emails (~30–40%).

**Q: How accurate are the emails?**
A: Very high — the actor extracts emails exactly as written by the channel owner in their About section or description. It doesn't guess, generate, or construct emails. If an email is shown, it was posted by the creator.

**Q: Can I scrape thousands of channels?**
A: Yes. The actor can process any number of channels. For very large lists (1000+), consider splitting into batches and running multiple times, or increase `maxConcurrency` to 15–20.

**Q: Will this work on channels with custom URLs like `/c/channelname`?**
A: Yes. The actor uses YouTube's URL resolution API, which handles all URL formats: `/c/`, `/channel/`, `/@handle`, and bare handles.

**Q: The actor processed a channel but found no email — could the email be there?**
A: If the creator has the "View email address" button on their About page (which requires a YouTube account login to see), the email is intentionally hidden from unauthenticated viewers and cannot be extracted without logging in. The actor only finds emails that are publicly visible without authentication.

**Q: I'm getting fewer results than expected. What should I check?**
A: Verify your input handles/URLs are correct. Invalid or deleted channel handles will be silently skipped with a warning in the logs. You can view run logs in the Apify console under the Runs tab.

***

### 🔗 Related scrapers

- 📺 [YouTube Channel Scraper](https://apify.com/automation-lab/youtube-channel-scraper) — Full channel metadata, video listings, subscriber counts. No email focus.
- 🎬 [YouTube Scraper](https://apify.com/automation-lab/youtube-scraper) — Search-based YouTube video and channel scraping at scale.
- 💬 [YouTube Comments Research](https://apify.com/automation-lab/youtube-comments-scraper) — Extract and analyze video comment threads.

# Actor input Schema

## `channels` (type: `array`):

List of YouTube channels to scrape for contact emails. Accepts: @handles (e.g. @MrBeast), full channel URLs (https://www.youtube.com/@MrBeast), or channel IDs (UCxxxxxxxx).

## `onlyWithEmail` (type: `boolean`):

When enabled, only channels that have a discoverable email address are included in the dataset. Channels without emails are silently skipped.

## `maxConcurrency` (type: `integer`):

Maximum number of channels scraped in parallel. Higher values are faster but may hit rate limits. Recommended: 3–10.

## Actor input object example

```json
{
  "channels": [
    "@MrBeast",
    "https://www.youtube.com/@veritasium"
  ],
  "onlyWithEmail": false,
  "maxConcurrency": 5
}
```

# Actor output Schema

## `overview` (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 = {
    "channels": [
        "@MrBeast",
        "https://www.youtube.com/@veritasium"
    ],
    "maxConcurrency": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/youtube-channel-email-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 = {
    "channels": [
        "@MrBeast",
        "https://www.youtube.com/@veritasium",
    ],
    "maxConcurrency": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/youtube-channel-email-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 '{
  "channels": [
    "@MrBeast",
    "https://www.youtube.com/@veritasium"
  ],
  "maxConcurrency": 5
}' |
apify call automation-lab/youtube-channel-email-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "YouTube Channel Email Scraper",
        "description": "Extract contact emails and social links from YouTube channel About pages. Input channel URLs or @handles, get email addresses, subscriber counts, video counts, and all linked social profiles. No proxy needed.",
        "version": "0.1",
        "x-build-id": "Rqt7PVI39NmIqDRUB"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/automation-lab~youtube-channel-email-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-automation-lab-youtube-channel-email-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/automation-lab~youtube-channel-email-scraper/runs": {
            "post": {
                "operationId": "runs-sync-automation-lab-youtube-channel-email-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/automation-lab~youtube-channel-email-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-automation-lab-youtube-channel-email-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": [
                    "channels"
                ],
                "properties": {
                    "channels": {
                        "title": "📺 Channel URLs or @handles",
                        "type": "array",
                        "description": "List of YouTube channels to scrape for contact emails. Accepts: @handles (e.g. @MrBeast), full channel URLs (https://www.youtube.com/@MrBeast), or channel IDs (UCxxxxxxxx).",
                        "items": {
                            "type": "string"
                        }
                    },
                    "onlyWithEmail": {
                        "title": "Only output channels with email",
                        "type": "boolean",
                        "description": "When enabled, only channels that have a discoverable email address are included in the dataset. Channels without emails are silently skipped.",
                        "default": false
                    },
                    "maxConcurrency": {
                        "title": "Max concurrent requests",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Maximum number of channels scraped in parallel. Higher values are faster but may hit rate limits. Recommended: 3–10.",
                        "default": 5
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
