# Telegram Channel Messages Scraper (`automation-lab/telegram-channel-messages-scraper`) Actor

Extract public Telegram channel messages, views, links, media flags, and metadata from t.me/s pages without a Telegram login.

- **URL**: https://apify.com/automation-lab/telegram-channel-messages-scraper.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** Social media, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 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

## Telegram Channel Messages Scraper

Extract public Telegram channel messages from `t.me/s` web preview pages into clean Apify datasets.

Use this actor when you need scheduled monitoring, social listening, research exports, or compliance-friendly archives of public Telegram channel posts without maintaining Telegram API sessions.

### What does Telegram Channel Messages Scraper do?

Telegram Channel Messages Scraper collects posts from public Telegram channels and saves each message as a structured dataset row.

It accepts channel handles, channel URLs, `/s/` archive URLs, and direct public post URLs.

The actor normalizes everything to Telegram's public web preview pages, requests the HTML, parses message blocks, and outputs message text, dates, views, links, media flags, link previews, and channel metadata.

Private channels, invite-only groups, `/c/` links, DMs, and Telegram login flows are not supported.

### Who is it for?

- 🧭 Social listening teams tracking public Telegram narratives.
- 📰 Newsrooms monitoring official or community announcement channels.
- ₿ Crypto researchers following project, exchange, and market channels.
- 🛡️ Compliance teams preserving public communications for review.
- 📊 Data analysts building dashboards from scheduled Telegram exports.
- 🤖 Developers who want Telegram channel data through Apify API, webhooks, or MCP.

### Why use this Telegram scraper?

Telegram's official API requires session management and does not fit every no-login monitoring workflow.

Public channel preview pages already expose many posts in server-rendered HTML.

This actor focuses on that reliable public surface and turns it into repeatable datasets.

You get normalized URLs, message IDs, timestamps, text, view counts, link preview metadata, and all message links in one export.

### What Telegram data can I extract?

| Field | Description |
| --- | --- |
| `channelHandle` | Public Telegram channel handle. |
| `channelTitle` | Channel title shown on the preview page. |
| `channelUrl` | Canonical public channel URL. |
| `messageId` | Numeric Telegram message ID. |
| `messageUrl` | Public post URL. |
| `date` | Message datetime when exposed. |
| `text` | Plain message text. |
| `html` | Optional formatted HTML. |
| `views` | Public view count. |
| `forwards` | Forward count when exposed by Telegram. |
| `replies` | Reply/comment count when exposed by Telegram. |
| `authorName` | Author name when visible. |
| `authorUrl` | Author URL when visible. |
| `hasMedia` | Whether media is present. |
| `mediaType` | Photo, video, document, unsupported, or null. |
| `linkPreviewUrl` | URL in Telegram's link preview. |
| `linkPreviewTitle` | Link preview title. |
| `linkPreviewSiteName` | Link preview site name. |
| `links` | All links found in the message block. |
| `scrapedAt` | Timestamp of extraction. |

### How much does it cost to scrape Telegram channel messages?

This actor uses pay-per-event pricing.

There is a small run start charge and a per-message charge.

The default price is designed for scheduled monitoring and bulk exports.

Exact live prices are shown on the Apify Store pricing tab.

A small test with 100 messages is inexpensive, and larger recurring jobs receive tiered discounts automatically through Apify's pricing tiers.

### Quick start

1. Open the actor on Apify.
2. Add one or more public Telegram channel handles, such as `telegram` or `durov`.
3. Set `maxMessages` to the number of posts you want.
4. Keep `includeHtml` disabled unless you need formatted message HTML.
5. Run the actor.
6. Export the dataset as JSON, CSV, Excel, XML, RSS, or HTML.

### Input options

#### `channels`

Add public channel handles or URLs.

Examples:

- `telegram`
- `@telegram`
- `https://t.me/telegram`
- `https://t.me/s/telegram`
- `https://t.me/telegram/429`

#### `startUrls`

Use this if you prefer Apify request-list style input.

These URLs are combined with `channels`.

#### `maxMessages`

Controls the total number of message rows saved across all channels.

Start with 100 for a realistic sample.

Increase it for historical exports.

#### `maxPagesPerChannel`

Telegram archive pages usually contain about 20 messages.

Increase this when you need older posts from each channel.

#### `includeHtml`

Enable it when you need bold text, inline links, or original Telegram formatting.

Leave it off for smaller CSV and JSON exports.

#### `useProxy`

Usually not needed.

Enable it only if your runtime environment cannot reach Telegram directly.

The actor uses low-cost datacenter proxy routing when this option is on.

### Example input

```json
{
  "channels": ["telegram", "durov"],
  "maxMessages": 100,
  "maxPagesPerChannel": 10,
  "includeHtml": false,
  "useProxy": false
}
````

### Example output

```json
{
  "channelHandle": "telegram",
  "channelTitle": "Telegram News",
  "channelUrl": "https://t.me/telegram",
  "messageId": 429,
  "messageUrl": "https://t.me/telegram/429",
  "date": "2026-03-02T17:33:34+00:00",
  "text": "Member Tags. Members in group chats can now add a tag next to their name...",
  "views": 1620000,
  "forwards": null,
  "replies": null,
  "authorName": null,
  "authorUrl": "https://t.me/telegram",
  "hasMedia": true,
  "mediaType": "unsupported",
  "linkPreviewUrl": null,
  "linkPreviewTitle": null,
  "linkPreviewSiteName": null,
  "links": ["https://t.me/telegram/430"],
  "scrapedAt": "2026-06-30T03:00:00.000Z"
}
```

### Tips for reliable Telegram scraping

- ✅ Use public channel handles, not invite links.
- ✅ Keep first tests small.
- ✅ Increase `maxPagesPerChannel` for older messages.
- ✅ Use `includeHtml` only when formatting matters.
- ✅ Schedule regular runs if you need fresh monitoring data.
- ⚠️ Telegram can hide or change fields, so some counts may be null.
- ⚠️ Private channels and restricted communities are outside the actor's scope.

### Common workflows

#### Social listening monitor

Run the actor hourly or daily on a list of public channels.

Send the dataset to a webhook, Google Sheet, database, or BI tool.

Filter by keywords, links, or message dates downstream.

#### Crypto announcement tracker

Add official project, exchange, and community channels.

Export messages with dates and links for market research or alerting.

#### Compliance archive

Schedule recurring runs and store dataset exports in your own storage.

Use message URLs and IDs as stable references back to public Telegram posts.

#### News research export

Collect public channel posts from a topic area and analyze text, links, and link previews.

### Integrations

Telegram Channel Messages Scraper works with the full Apify platform:

- Webhooks for new run completion.
- Dataset API for programmatic exports.
- Key-value store input for scheduled jobs.
- Apify integrations for Google Drive, Make, Zapier, and external databases.
- MCP for AI agents that need public Telegram monitoring tools.

### API usage with Node.js

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/telegram-channel-messages-scraper').call({
  channels: ['telegram'],
  maxMessages: 100,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0]);
```

### API usage with Python

```python
from apify_client import ApifyClient
import os

client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/telegram-channel-messages-scraper').call(run_input={
    'channels': ['telegram'],
    'maxMessages': 100,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items[0])
```

### API usage with cURL

```bash
curl -X POST "https://api.apify.com/v2/acts/automation-lab~telegram-channel-messages-scraper/runs?token=$APIFY_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"channels":["telegram"],"maxMessages":100}'
```

### MCP usage

Use Apify MCP when you want Claude Desktop, Claude Code, or another MCP client to run the scraper as a tool.

MCP server URL:

```text
https://mcp.apify.com/?tools=automation-lab/telegram-channel-messages-scraper
```

Add it to Claude Code:

```bash
claude mcp add apify-telegram https://mcp.apify.com/?tools=automation-lab/telegram-channel-messages-scraper
```

Claude Desktop JSON config:

```json
{
  "mcpServers": {
    "apify-telegram": {
      "url": "https://mcp.apify.com/?tools=automation-lab/telegram-channel-messages-scraper"
    }
  }
}
```

Example prompts:

- "Scrape the latest 100 messages from the Telegram channel `telegram`."
- "Monitor these public Telegram channels and summarize posts that link to external websites."
- "Export Telegram channel messages with views and message URLs for a compliance review."

### Limitations

This actor only uses public Telegram web preview pages.

It does not log in to Telegram.

It does not scrape private groups, invite-only channels, `/c/` URLs, DMs, comments hidden behind login, or members lists.

Media files may be represented as flags and preview metadata rather than downloaded files.

Some Telegram pages show unsupported media placeholders; those are reported as `mediaType: "unsupported"`.

### FAQ

#### Can I scrape private Telegram channels?

No. This actor only extracts public `t.me/s` preview pages.

#### Do I need a Telegram account or API key?

No. The actor uses public web preview HTML and does not log in.

#### Can I download Telegram media files?

The MVP records media presence, media type, links, and preview metadata. It does not download original media files.

### Troubleshooting

#### Why did I get no messages?

Check that the channel is public and available at `https://t.me/s/<handle>` in a browser.

Private channels, deleted channels, blocked channels, and invite links cannot be scraped by this actor.

#### Why are views or replies null?

Telegram does not expose every metric for every message in the public HTML.

The actor saves counts when they are visible and returns `null` when they are absent.

#### Why is media marked unsupported?

Telegram sometimes renders a media placeholder on public preview pages.

The actor records that media exists even when the browser cannot display the original file in the HTML.

### Legality and ethics

Only scrape public Telegram content that you are allowed to access.

Respect applicable laws, platform terms, privacy obligations, and downstream data retention rules.

Do not use this actor to bypass access controls or collect private communications.

### Related scrapers

Explore related automation-lab actors on Apify:

- https://apify.com/automation-lab/twitter-x-scraper
- https://apify.com/automation-lab/reddit-scraper
- https://apify.com/automation-lab/youtube-channel-scraper
- https://apify.com/automation-lab/linkedin-posts-scraper

### Changelog

Initial version extracts public Telegram channel messages from `t.me/s` pages with HTTP-first parsing.

### Support

If a public channel does not parse correctly, include the channel URL, run ID, and whether the page is visible at `https://t.me/s/<handle>`.

### Data freshness

Telegram preview pages show recent and paginated historical messages.

For monitoring, schedule recurring runs and compare message URLs or message IDs to identify new posts.

### Performance notes

HTTP parsing keeps runs lightweight.

Most public channels can be scraped with 256 MB memory.

Large historical exports depend on how many archive pages Telegram exposes.

### Output stability

The actor keeps field names stable so dashboards and API integrations can depend on them.

New fields may be added later, but existing fields are designed to remain compatible.

# Actor input Schema

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

Public Telegram channel handles or URLs. Accepts @telegram, telegram, https://t.me/telegram, https://t.me/s/telegram, or direct public post URLs.

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

Optional Apify request-list input for public Telegram channel URLs. These are combined with the channel handles above.

## `maxMessages` (type: `integer`):

Maximum Telegram messages to save across all channels.

## `maxPagesPerChannel` (type: `integer`):

Each Telegram archive page usually contains about 20 messages. Increase this to go further back in history.

## `includeHtml` (type: `boolean`):

Adds the raw Telegram message HTML for formatting-sensitive workflows. Leave off for smaller datasets.

## `useProxy` (type: `boolean`):

Usually not needed. Enables low-cost datacenter proxy routing if your environment cannot reach Telegram directly.

## Actor input object example

```json
{
  "channels": [
    "telegram",
    "durov"
  ],
  "startUrls": [
    {
      "url": "https://t.me/s/telegram"
    }
  ],
  "maxMessages": 20,
  "maxPagesPerChannel": 10,
  "includeHtml": false,
  "useProxy": false
}
```

# 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": [
        "telegram",
        "durov"
    ],
    "startUrls": [
        {
            "url": "https://t.me/s/telegram"
        }
    ],
    "maxMessages": 20,
    "maxPagesPerChannel": 10,
    "includeHtml": false,
    "useProxy": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/telegram-channel-messages-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": [
        "telegram",
        "durov",
    ],
    "startUrls": [{ "url": "https://t.me/s/telegram" }],
    "maxMessages": 20,
    "maxPagesPerChannel": 10,
    "includeHtml": False,
    "useProxy": False,
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/telegram-channel-messages-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": [
    "telegram",
    "durov"
  ],
  "startUrls": [
    {
      "url": "https://t.me/s/telegram"
    }
  ],
  "maxMessages": 20,
  "maxPagesPerChannel": 10,
  "includeHtml": false,
  "useProxy": false
}' |
apify call automation-lab/telegram-channel-messages-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Telegram Channel Messages Scraper",
        "description": "Extract public Telegram channel messages, views, links, media flags, and metadata from t.me/s pages without a Telegram login.",
        "version": "0.1",
        "x-build-id": "Sjabk4fAVIxAX2O5l"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/automation-lab~telegram-channel-messages-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-automation-lab-telegram-channel-messages-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~telegram-channel-messages-scraper/runs": {
            "post": {
                "operationId": "runs-sync-automation-lab-telegram-channel-messages-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~telegram-channel-messages-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-automation-lab-telegram-channel-messages-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 handles or URLs",
                        "type": "array",
                        "description": "Public Telegram channel handles or URLs. Accepts @telegram, telegram, https://t.me/telegram, https://t.me/s/telegram, or direct public post URLs.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Optional Apify request-list input for public Telegram channel URLs. These are combined with the channel handles above.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxMessages": {
                        "title": "Maximum messages",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Maximum Telegram messages to save across all channels.",
                        "default": 20
                    },
                    "maxPagesPerChannel": {
                        "title": "Maximum archive pages per channel",
                        "minimum": 1,
                        "maximum": 250,
                        "type": "integer",
                        "description": "Each Telegram archive page usually contains about 20 messages. Increase this to go further back in history.",
                        "default": 10
                    },
                    "includeHtml": {
                        "title": "Include message HTML",
                        "type": "boolean",
                        "description": "Adds the raw Telegram message HTML for formatting-sensitive workflows. Leave off for smaller datasets.",
                        "default": false
                    },
                    "useProxy": {
                        "title": "Use Apify Proxy",
                        "type": "boolean",
                        "description": "Usually not needed. Enables low-cost datacenter proxy routing if your environment cannot reach Telegram directly.",
                        "default": false
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
