# Telegram Public Channels Scraper (`crawlerbros/telegram-public-channels-scraper`) Actor

Scrape Telegram public channels via the web preview (t.me/s/{channel}) with channel metadata + recent posts with text, media URLs, view counts, and forwarded-from attribution. No login, no Telegram app, no proxy required.

- **URL**: https://apify.com/crawlerbros/telegram-public-channels-scraper.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (community)
- **Categories:** Social media, Developer tools, Automation
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 21 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $3.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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

## Telegram Public Channels Scraper

Scrape any **public Telegram channel** via the web preview at `t.me/s/{channel}`. Pull channel metadata (title, bio, subscriber count, photo/video counts) plus recent posts with text, media URLs, view counts, and forwarded-from attribution. No login, no Telegram app, no proxy — datacenter IPs work fine.

Built for OSINT research, news monitoring, crypto-community tracking, and any analytics workflow that needs structured data from public Telegram channels.

### What you get

#### Channel records (`recordType=channel`)

| Field | Description |
| --- | --- |
| `channel` | Channel handle (without `@`) |
| `id` | Same as `channel` (handle is canonical ID) |
| `url` | Public Telegram URL (`https://t.me/{channel}`) |
| `title` | Channel display name |
| `description` | Channel bio |
| `avatarUrl` | Channel avatar URL |
| `subscribersCount` | Subscriber count (parsed from `1.2M` / `12K` short form) |
| `photosCount` | Total photo count |
| `videosCount` | Total video count |
| `filesCount` | Total file/document count |
| `linksCount` | Total external-link count |
| `verified` | `true` for verified channels |

#### Post records (`recordType=post`)

| Field | Description |
| --- | --- |
| `id` | Post message ID (channel-relative) |
| `channel` | Source channel handle |
| `url` | Direct post URL (`https://t.me/{channel}/{id}`) |
| `publishedAt` | ISO 8601 timestamp |
| `text` | Plain-text post body (newlines preserved) |
| `viewCount` | View count (parsed from `1.2K` / `99M` short form) |
| `mediaAttachments` | Array of `{type, url, [thumbnailUrl, title]}` for photo / video / document |
| `isForwarded` | `true` if the post was forwarded from another channel |
| `forwardedFrom` | Source channel handle (when `isForwarded=true`) |
| `inReplyToUrl` | Permalink of the post being replied to |
| `scrapedAt` | ISO 8601 UTC timestamp |

Empty fields are dropped from every record at every depth.

### Input

| Parameter | Type | Default | Description |
| --- | --- | --- | --- |
| `mode` | Enum | `channels` | `channels` (channel metadata + recent posts) or `singlePost` (one post by URL) |
| `channels` | Array | `["durov"]` | Channel handles (without `@`) or `t.me/{channel}` URLs (mode=channels) |
| `postUrls` | Array | — | `t.me/<channel>/<post_id>` URLs to fetch one-by-one (mode=singlePost) |
| `searchQuery` | String | — | Keyword search within each channel's history (mode=channels) — uses `t.me/s/<channel>?q=…` |
| `since` | String | — | Earliest post date (`YYYY-MM-DD` or ISO 8601). Pagination stops once the page is older than this. |
| `until` | String | — | Latest post date (`YYYY-MM-DD` or ISO 8601). Posts newer than this are dropped. |
| `maxPostsPerChannel` | Integer | `50` | Hard cap on posts per channel (1-1000) |
| `includeChannelMeta` | Boolean | `true` | Emit a separate `channel` record for each channel |
| `mediaOnly` | Boolean | `false` | Drop posts without any media attachment |
| `minViews` | Integer | — | Drop posts with fewer views than this |
| `excludeForwarded` | Boolean | `false` | Drop forwarded posts |
| `maxItems` | Integer | `100` | Hard cap on total emitted records |

**Album / grouped posts**: when a post contains multiple images (a Telegram "album"), the actor emits **all** image URLs in `mediaAttachments`, sets `isAlbum: true`, and (when present) sets `albumId` to Telegram's `data-grouped-id`.

#### Example input — single channel

```json
{
  "mode": "channels",
  "channels": ["durov"],
  "maxPostsPerChannel": 50
}
````

#### Example input — keyword search within channels

```json
{
  "mode": "channels",
  "channels": ["telegram", "tginfo"],
  "searchQuery": "feature",
  "maxPostsPerChannel": 100
}
```

#### Example input — date window

```json
{
  "mode": "channels",
  "channels": ["durov"],
  "since": "2026-01-01",
  "until": "2026-04-30",
  "maxPostsPerChannel": 500
}
```

#### Example input — single post by URL

```json
{
  "mode": "singlePost",
  "postUrls": [
    "https://t.me/durov/100",
    "https://t.me/telegram/300"
  ]
}
```

#### Example input — multiple channels, posts only

```json
{
  "channels": ["durov", "telegram", "tginfo"],
  "includeChannelMeta": false,
  "maxPostsPerChannel": 30
}
```

#### Example input — high-engagement filter

```json
{
  "channels": ["breakingnews"],
  "minViews": 10000,
  "excludeForwarded": true,
  "maxPostsPerChannel": 200
}
```

#### Example input — media tracking

```json
{
  "channels": ["spacepictures"],
  "mediaOnly": true,
  "maxPostsPerChannel": 100
}
```

### Example output

```json
{
  "recordType": "channel",
  "channel": "durov",
  "id": "durov",
  "url": "https://t.me/durov",
  "title": "Pavel Durov",
  "description": "Founder of Telegram. Building a platform for free communication.",
  "avatarUrl": "https://cdn.telegram.org/photo/durov.jpg",
  "subscribersCount": 12600000,
  "photosCount": 523,
  "videosCount": 42,
  "scrapedAt": "2026-05-06T06:42:18Z"
}
```

```json
{
  "recordType": "post",
  "id": "100",
  "channel": "durov",
  "url": "https://t.me/durov/100",
  "publishedAt": "2026-04-15T14:32:00+00:00",
  "text": "Big announcement coming next week.",
  "viewCount": 1200000,
  "mediaAttachments": [
    { "type": "photo", "url": "https://cdn.telegram.org/photo/abc.jpg" }
  ],
  "scrapedAt": "2026-05-06T06:42:18Z"
}
```

### Use cases

- **OSINT / intelligence research** — Snapshot public Telegram channels of interest (geopolitical, journalism, dissident communities).
- **Crypto / market monitoring** — Many trading communities publish first on Telegram; monitor for signals.
- **News monitoring** — Track breaking-news channels for headlines as they post.
- **Brand monitoring** — Track mentions of your brand or product in Telegram channels.
- **Compliance / regulatory** — Monitor channels for misuse of trademarks or copyrighted material.
- **Academic research** — Bulk-collect public discourse on Telegram for sociological / linguistic analysis.

### FAQ

**Do I need a Telegram account or the Telegram app?**
No. The actor uses Telegram's official **web preview** at `t.me/s/{channel}` — fully public, no login. Works against any "public" channel (the kind that has a `t.me/` URL).

**What about private / invite-only channels?**
Private channels (those joined via invite links and without a public `t.me/` handle) are **not accessible** without a logged-in Telegram account, and this actor doesn't support that.

**How many posts can I get per channel?**
Up to 1000 per channel via `maxPostsPerChannel`. The web preview returns ~16-20 posts per page; the actor paginates via `?before=N` cursors to reach further back. Performance: ~1-2 seconds per page.

**How does pagination work?**
The actor reads the smallest message ID on each page and uses it as `?before=` cursor for the next page. This is the standard `t.me/s/` pagination pattern.

**How current is the data?**
Live — every run hits Telegram's web preview at request time. Schedule the actor for hourly / daily refreshes on watchlist channels.

**Do I need a proxy?**
Usually no — `t.me/s/` works from datacenter IPs out of the box. If you scrape from a region where Telegram is blocked at the network level (e.g. some corporate networks), enable proxy via Apify's platform-level config.

**Are comments / reactions included?**
Comments and reaction counts aren't exposed on the public web preview (Telegram surfaces them only inside the app or via the Bot API). The actor returns post text, view count, and media — these are everything `t.me/s/` publishes.

**What about NSFW / sensitive channels?**
The actor returns whatever `t.me/s/` serves. Telegram itself flags certain channels as sensitive; in those cases the page renders a warning shell with no posts, and the actor returns an empty result with a clear status message.

### Limitations

- Comments, reactions, and detailed engagement metrics aren't on the web preview (Telegram exposes those only in-app or via the Bot API with admin auth).
- Voice/video notes don't have direct download URLs in the web preview.
- Some country-blocked channels may not render outside their target region.
- Telegram's `t.me/s/` only shows the latest few thousand messages; very old archives are not paginatable indefinitely.

# Actor input Schema

## `mode` (type: `string`):

What to fetch.

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

Channel handles (without `@`) or `t.me/{channel}` URLs. Examples: `durov`, `telegram`, `breakingnews`. Handles must be 5-32 chars, start with a letter, contain only A-Z/a-z/0-9/underscore.

## `postUrls` (type: `array`):

Public Telegram post URLs to fetch individually, e.g. `https://t.me/durov/100`. Used when `mode=singlePost`.

## `searchQuery` (type: `string`):

Keyword to search within each channel's post history. Uses Telegram's built-in `t.me/s/<channel>?q=<query>` preview search.

## `since` (type: `string`):

Earliest post date as `YYYY-MM-DD` or ISO 8601. Pagination stops once the oldest post on a page is older than this bound.

## `until` (type: `string`):

Latest post date as `YYYY-MM-DD` or ISO 8601. Posts published after this date are dropped.

## `maxPostsPerChannel` (type: `integer`):

Hard cap on posts emitted per channel. The web preview returns ~16-20 posts per page; pagination reaches further back via the `?before=N` cursor.

## `includeChannelMeta` (type: `boolean`):

Emit a separate `recordType=channel` record per channel with title, description, subscriber count, etc.

## `mediaOnly` (type: `boolean`):

Drop posts that don't have any image / video / document attached.

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

Drop posts with fewer than this many views (Telegram's published view count).

## `excludeForwarded` (type: `boolean`):

Drop posts that are forwards from another channel.

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

Hard cap on total emitted records across all channels.

## Actor input object example

```json
{
  "mode": "channels",
  "channels": [
    "durov"
  ],
  "maxPostsPerChannel": 50,
  "includeChannelMeta": true,
  "mediaOnly": false,
  "excludeForwarded": false,
  "maxItems": 100
}
```

# Actor output Schema

## `records` (type: `string`):

Dataset containing scraped channel metadata and posts.

# 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 = {
    "mode": "channels",
    "channels": [
        "durov"
    ],
    "maxPostsPerChannel": 50,
    "includeChannelMeta": true,
    "mediaOnly": false,
    "excludeForwarded": false,
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/telegram-public-channels-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 = {
    "mode": "channels",
    "channels": ["durov"],
    "maxPostsPerChannel": 50,
    "includeChannelMeta": True,
    "mediaOnly": False,
    "excludeForwarded": False,
    "maxItems": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/telegram-public-channels-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 '{
  "mode": "channels",
  "channels": [
    "durov"
  ],
  "maxPostsPerChannel": 50,
  "includeChannelMeta": true,
  "mediaOnly": false,
  "excludeForwarded": false,
  "maxItems": 100
}' |
apify call crawlerbros/telegram-public-channels-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Telegram Public Channels Scraper",
        "description": "Scrape Telegram public channels via the web preview (t.me/s/{channel}) with channel metadata + recent posts with text, media URLs, view counts, and forwarded-from attribution. No login, no Telegram app, no proxy required.",
        "version": "1.0",
        "x-build-id": "AzOkKad6ds8YhIhca"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/crawlerbros~telegram-public-channels-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-crawlerbros-telegram-public-channels-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/crawlerbros~telegram-public-channels-scraper/runs": {
            "post": {
                "operationId": "runs-sync-crawlerbros-telegram-public-channels-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/crawlerbros~telegram-public-channels-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-crawlerbros-telegram-public-channels-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": {
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "channels",
                            "singlePost"
                        ],
                        "type": "string",
                        "description": "What to fetch.",
                        "default": "channels"
                    },
                    "channels": {
                        "title": "Channel handles (mode=channels)",
                        "maxItems": 50,
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Channel handles (without `@`) or `t.me/{channel}` URLs. Examples: `durov`, `telegram`, `breakingnews`. Handles must be 5-32 chars, start with a letter, contain only A-Z/a-z/0-9/underscore.",
                        "default": [
                            "durov"
                        ],
                        "items": {
                            "type": "string"
                        }
                    },
                    "postUrls": {
                        "title": "Post URLs (mode=singlePost)",
                        "maxItems": 200,
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Public Telegram post URLs to fetch individually, e.g. `https://t.me/durov/100`. Used when `mode=singlePost`.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "searchQuery": {
                        "title": "Search query (mode=channels)",
                        "type": "string",
                        "description": "Keyword to search within each channel's post history. Uses Telegram's built-in `t.me/s/<channel>?q=<query>` preview search."
                    },
                    "since": {
                        "title": "Since (mode=channels)",
                        "type": "string",
                        "description": "Earliest post date as `YYYY-MM-DD` or ISO 8601. Pagination stops once the oldest post on a page is older than this bound."
                    },
                    "until": {
                        "title": "Until (mode=channels)",
                        "type": "string",
                        "description": "Latest post date as `YYYY-MM-DD` or ISO 8601. Posts published after this date are dropped."
                    },
                    "maxPostsPerChannel": {
                        "title": "Max posts per channel",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Hard cap on posts emitted per channel. The web preview returns ~16-20 posts per page; pagination reaches further back via the `?before=N` cursor.",
                        "default": 50
                    },
                    "includeChannelMeta": {
                        "title": "Include channel metadata record",
                        "type": "boolean",
                        "description": "Emit a separate `recordType=channel` record per channel with title, description, subscriber count, etc.",
                        "default": true
                    },
                    "mediaOnly": {
                        "title": "Posts with media only",
                        "type": "boolean",
                        "description": "Drop posts that don't have any image / video / document attached.",
                        "default": false
                    },
                    "minViews": {
                        "title": "Min views",
                        "minimum": 0,
                        "maximum": 10000000000,
                        "type": "integer",
                        "description": "Drop posts with fewer than this many views (Telegram's published view count)."
                    },
                    "excludeForwarded": {
                        "title": "Exclude forwarded posts",
                        "type": "boolean",
                        "description": "Drop posts that are forwards from another channel.",
                        "default": false
                    },
                    "maxItems": {
                        "title": "Max items (total)",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Hard cap on total emitted records across all channels.",
                        "default": 100
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
