# Telegram Intelligence Pro - Channels, Posts, Monitor (`constructive_calm/telegram-intelligence-pro`) Actor

Scrape Telegram public channels - channel metadata, posts with reactions/forwards/views, keyword search, monitor-mode delta detection. Charges only on NON-EMPTY rows. 302-fallback handles non-channel handles gracefully.

- **URL**: https://apify.com/constructive\_calm/telegram-intelligence-pro.md
- **Developed by:** [Omar Eldeeb](https://apify.com/constructive_calm) (community)
- **Categories:** Social media, Lead generation, News
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 2 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $8.00 / 1,000 post extracted (non-empty only)s

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

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

## What's an Apify Actor?

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

## How to integrate an Actor?

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

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

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

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

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

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

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

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

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

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

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


# README

## Telegram Intelligence Pro — Channels, Posts, Monitor

Scrape Telegram public channels with **empty-row-protection PPE** (you only pay for posts with actual content), 302-fallback for non-channel handles, and complete field extraction (text, views, reactions, forwards, media). Built to fix the most common complaint about competing Telegram scrapers: paying for empty rows when a handle isn't a real channel or a post has no public preview.

### Why use Telegram Intelligence Pro?

- **Empty-row-protection PPE** — most competing actors charge per row even when the row is hollow (empty text, no media, no views). We only charge for posts with at least one meaningful field. Verified non-channel handles are reported but NOT billed.
- **302 fallback for non-channel handles** — when you pass `bbcnews` or `cnn`, Telegram silently redirects (because they're not public channels). We detect this and surface a clear warning instead of returning garbage rows.
- **Complete field extraction** — channel meta (subscribers, photos/videos/links counts, verified badge, description), posts with full text, view counts, reaction emojis + counts, forwarded-from chain (network-intel signal), reply counts, media URLs.
- **4 modes for different workflows** — `channel_snapshot` for one-shot pulls, `posts_history` for deep paginated walks via `?before=`, `search_by_keyword` for filtered cross-channel scans, `monitor_channels` for KV-checkpointed delta detection between runs.
- **No anti-bot drama** — Telegram's `t.me/s/<channel>` SSR endpoint is public, ~50 req/s sustainable per IP, no JS challenge.

### How to use Telegram Intelligence Pro

1. Choose a mode (channel_snapshot is the default — good for first-time exploration).
2. Add public channel handles to the `channels` field (e.g., `durov`, `telegram`, `bitcoin_news`). Plain handles or full URLs both work.
3. Optionally tune `maxPostsPerChannel`, `concurrency`, and `proxyConfiguration`.
4. Run. Export results as JSON, CSV, Excel, or via the Apify API.

### Input examples

**Channel snapshot (most common):**
```json
{
    "mode": "channel_snapshot",
    "channels": ["durov", "telegram"],
    "maxPostsPerChannel": 20,
    "includeReactions": true,
    "includeForwards": true
}
````

**Deep history walk:**

```json
{
    "mode": "posts_history",
    "channels": ["bitcoin_news"],
    "maxPostsPerChannel": 500
}
```

**Search across channels:**

```json
{
    "mode": "search_by_keyword",
    "channels": ["durov", "telegram", "bitcoin_news"],
    "searchKeywords": ["update", "release", "feature"],
    "maxItems": 50
}
```

**Monitor for new posts (run on schedule):**

```json
{
    "mode": "monitor_channels",
    "channels": ["durov", "telegram"],
    "maxItems": 100
}
```

### Output

Each row is one channel or one post. Channel rows have `recordType: "channel"`, post rows `recordType: "post"`.

**Sample channel row:**

```json
{
    "recordType": "channel",
    "channelHandle": "durov",
    "channelTitle": "Pavel Durov",
    "channelDescription": "Founder of Telegram.",
    "isVerified": true,
    "subscriberCount": 11300000,
    "photoCount": 98,
    "videoCount": 45,
    "linkCount": 188,
    "avatarUrl": "https://cdn4.telesco.pe/file/...",
    "fetchedAt": "2026-05-25T19:43:03.384Z",
    "sourceUrl": "https://t.me/durov"
}
```

**Sample post row:**

```json
{
    "recordType": "post",
    "channelHandle": "telegram",
    "postId": "telegram/425",
    "msgId": 425,
    "text": "New Design. Telegram for Android has a fully redesigned interface…",
    "postedAt": "2026-02-10T17:43:45+00:00",
    "viewCount": 1620000,
    "reactionsTotal": 8412,
    "reactions": [{ "emoji": "👍", "count": 5102 }, { "emoji": "🔥", "count": 3310 }],
    "forwardedFromHandle": "telegram",
    "forwardedFromName": "Telegram News",
    "mediaUrls": ["https://cdn1.telesco.pe/file/..."],
    "fetchedAt": "2026-05-25T19:43:03.500Z",
    "sourceUrl": "https://t.me/telegram/425"
}
```

#### Data fields

| Field | Type | Description |
|-------|------|-------------|
| `recordType` | `"channel" \| "post"` | Discriminator |
| `channelHandle` | string | Lowercased canonical handle |
| `channelTitle` | string | Channel display name |
| `channelDescription` | string | Channel bio |
| `isVerified` | boolean | Verified-badge present |
| `subscriberCount` | number | Parsed from "11.3M" / "199K" / "263" |
| `photoCount` / `videoCount` / `linkCount` | number | Media counters |
| `avatarUrl` | string | Channel avatar (cdn4.telesco.pe — expires by Telegram design) |
| `postId` | string | `"<channel>/<msgId>"` |
| `msgId` | number | Numeric post ID |
| `text` | string | Post body (may be empty for media-only posts) |
| `postedAt` | ISO date | UTC timestamp |
| `viewCount` | number | Parsed from "9.95M" / "199K" |
| `reactionsTotal` | number | Sum of all reaction counts |
| `reactions` | array | `[{emoji, count}, ...]` |
| `forwardedFromHandle` / `forwardedFromName` | string | Source channel if post is a forward |
| `mediaUrls` | array | Photo / video / link-preview URLs |
| `fetchedAt` | ISO date | When this row was scraped |
| `sourceUrl` | string | Canonical t.me URL |

### How much does it cost?

| Event | Price | When charged |
|-------|-------|--------------|
| `apify-actor-start` | $0.01 | Auto-fired per GB of memory on run start |
| `channel-resolved` | $0.005 | Only when handle returns 200 OK on `t.me/s/<handle>` with valid metadata |
| `post-extracted` | $0.008 | Only for **non-empty** posts (text OR media OR views OR reactions OR forwards present) |
| `search-result` | $0.01 | Per post matching a `searchKeywords` filter |
| `monitor-delta` | $0.005 | Per NEW post detected since previous monitor run |

**Free trial:** the first 30 chargeable events per run are free.

**Typical cost scenarios:**

- 50 channels × 20 posts each (channel\_snapshot): ~$8.50
- 1 channel deep history × 500 posts (posts\_history): ~$4
- 10 channels × 19 recent posts filtered by keyword (~30 matches): ~$0.30
- 10 channels × monitor weekly (~50 deltas/week): ~$0.25 per run

### Tips & advanced options

- **`includeReactions` and `includeForwards`** are on by default. Disable them to reduce row size if you only need text + views.
- **`concurrency`** defaults to 5. Telegram tolerates ~50 req/s per IP — raise it to 10-20 for bulk channel snapshots.
- **`proxyConfiguration`** defaults to Apify proxy with no group (datacenter). Switch to `RESIDENTIAL` if you hit rate-limits on shared IPs.
- **Monitor mode** — first run is BASELINE (saves state, emits no deltas). Schedule it daily/hourly via Apify schedules — subsequent runs emit only NEW posts since the previous run.
- **`bbcnews`, `cnn`, `reuters`** are NOT public Telegram channels. The actor will warn `"is not a public channel"` and skip them WITHOUT charging. Find the real handle via search at `tgstat.com` or pass verified `t.me/s/` URLs.
- **CDN media URLs** (`cdn4.telesco.pe`) expire by Telegram design. Download media immediately if you need to retain it.

### Legal disclaimer

This actor scrapes only public Telegram channel previews (`t.me/s/<channel>`) — content that Telegram itself surfaces without authentication. Private channels, member lists, and channels without public preview enabled are not accessible via this actor.

You are responsible for ensuring your use complies with Telegram's Terms of Service, your local laws (including GDPR/CCPA), and the rights of the channels and individuals whose public content you scrape.

### FAQ

**Q: Why does the actor say a channel "is not a public channel" when it clearly exists on Telegram?**
A: Telegram silently redirects `t.me/s/<handle>` to `t.me/<handle>` for users, groups, bots, and channels without public preview. Only channels with public preview enabled (most news/crypto/public channels) are scrapable via SSR. For private channels with member lists, you would need MTProto with phone-number auth — that tier is on the roadmap.

**Q: Why does my reactions array sometimes come back empty even though the channel has reactions?**
A: Some channels disable reactions at the channel level. This is a Telegram feature, not a scraping limitation.

**Q: What's the difference between `posts_history` and `monitor_channels`?**
A: `posts_history` walks BACKWARDS from the latest post (paginated via `?before=`) — use it to bulk-pull a channel's archive. `monitor_channels` walks FORWARDS from the last-seen msgId stored in the actor's KV checkpoint — use it for ongoing monitoring.

**Q: Can I scrape a private channel?**
A: Not in this version. v1.5 will add an optional MTProto tier for member lists + private channels via invite link.

**Q: Why is the leader incumbent (`tri_angle/telegram-scraper`) rated 1.4★?**
A: Per buyer reviews, the main complaints are (1) paying for empty rows when handles aren't public channels (302 silent failures), and (2) missing fields like reactions and forwards. This actor specifically addresses both — empty rows are not charged, and the full field set is extracted.

For issues or feature requests, open a thread on the Apify Actor issues page.

# Actor input Schema

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

What to scrape. <b>channel\_snapshot</b>: meta + recent posts for each channel. <b>posts\_history</b>: paginated deep history of a channel. <b>search\_by\_keyword</b>: find posts across known channels matching keywords. <b>monitor\_channels</b>: incremental delta detection vs last run (emit only new posts since previous checkpoint).

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

Public Telegram channel handles. Examples: <code>durov</code>, <code>telegram</code>, <code>bitcoin\_news</code>. Plain handles (without @) or full URLs (<code>https://t.me/durov</code>) both work. If a handle isn't a public channel (user/group/bot/deleted), the actor will warn and skip without charging.

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

Limit posts fetched per channel. Telegram returns ~19 posts per page; we paginate via <code>?before=</code>. Cap protects from runaway runs on million-post channels.

## `searchKeywords` (type: `array`):

Keywords to search across the provided <b>channels</b>. Filter is case-insensitive substring match against post text.

## `includeReactions` (type: `boolean`):

Extract per-post reaction emojis + counts. Some channels disable reactions entirely — these will return empty <code>reactions: \[]</code> without failing the run.

## `includeForwards` (type: `boolean`):

Extract <code>forwarded\_from</code> source channel per post (network-intel signal — shows which channels boost which). Adds a minor latency cost per post.

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

Hard cap across all output rows. Prevents runaway billing on broad scans.

## `concurrency` (type: `integer`):

Parallel channel fetches. Telegram SSR is permissive (~50 req/s sustainable); default 5 is conservative for shared proxies.

## `proxyConfiguration` (type: `object`):

Apify proxy. Datacenter is sufficient for Telegram's open SSR; residential is overkill unless concurrent runs from same IP range get rate-limited.

## Actor input object example

```json
{
  "mode": "channel_snapshot",
  "channels": [
    "durov",
    "telegram"
  ],
  "maxPostsPerChannel": 30,
  "includeReactions": true,
  "includeForwards": true,
  "maxItems": 100,
  "concurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": []
  }
}
```

# Actor output Schema

## `results` (type: `string`):

All extracted channel-meta + post rows in one dataset.

# 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": "channel_snapshot",
    "channels": [
        "durov",
        "telegram"
    ],
    "maxPostsPerChannel": 30,
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("constructive_calm/telegram-intelligence-pro").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": "channel_snapshot",
    "channels": [
        "durov",
        "telegram",
    ],
    "maxPostsPerChannel": 30,
    "maxItems": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("constructive_calm/telegram-intelligence-pro").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": "channel_snapshot",
  "channels": [
    "durov",
    "telegram"
  ],
  "maxPostsPerChannel": 30,
  "maxItems": 100
}' |
apify call constructive_calm/telegram-intelligence-pro --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Telegram Intelligence Pro - Channels, Posts, Monitor",
        "description": "Scrape Telegram public channels - channel metadata, posts with reactions/forwards/views, keyword search, monitor-mode delta detection. Charges only on NON-EMPTY rows. 302-fallback handles non-channel handles gracefully.",
        "version": "0.1",
        "x-build-id": "eiZrTLgVgOF9B7ac8"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/constructive_calm~telegram-intelligence-pro/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-constructive_calm-telegram-intelligence-pro",
                "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/constructive_calm~telegram-intelligence-pro/runs": {
            "post": {
                "operationId": "runs-sync-constructive_calm-telegram-intelligence-pro",
                "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/constructive_calm~telegram-intelligence-pro/run-sync": {
            "post": {
                "operationId": "run-sync-constructive_calm-telegram-intelligence-pro",
                "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": [
                            "channel_snapshot",
                            "posts_history",
                            "search_by_keyword",
                            "monitor_channels"
                        ],
                        "type": "string",
                        "description": "What to scrape. <b>channel_snapshot</b>: meta + recent posts for each channel. <b>posts_history</b>: paginated deep history of a channel. <b>search_by_keyword</b>: find posts across known channels matching keywords. <b>monitor_channels</b>: incremental delta detection vs last run (emit only new posts since previous checkpoint).",
                        "default": "channel_snapshot"
                    },
                    "channels": {
                        "title": "Channels",
                        "type": "array",
                        "description": "Public Telegram channel handles. Examples: <code>durov</code>, <code>telegram</code>, <code>bitcoin_news</code>. Plain handles (without @) or full URLs (<code>https://t.me/durov</code>) both work. If a handle isn't a public channel (user/group/bot/deleted), the actor will warn and skip without charging.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxPostsPerChannel": {
                        "title": "Max posts per channel",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Limit posts fetched per channel. Telegram returns ~19 posts per page; we paginate via <code>?before=</code>. Cap protects from runaway runs on million-post channels.",
                        "default": 50
                    },
                    "searchKeywords": {
                        "title": "Search keywords (search_by_keyword mode only)",
                        "type": "array",
                        "description": "Keywords to search across the provided <b>channels</b>. Filter is case-insensitive substring match against post text.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "includeReactions": {
                        "title": "Include reactions",
                        "type": "boolean",
                        "description": "Extract per-post reaction emojis + counts. Some channels disable reactions entirely — these will return empty <code>reactions: []</code> without failing the run.",
                        "default": true
                    },
                    "includeForwards": {
                        "title": "Include forwarded-from chain",
                        "type": "boolean",
                        "description": "Extract <code>forwarded_from</code> source channel per post (network-intel signal — shows which channels boost which). Adds a minor latency cost per post.",
                        "default": true
                    },
                    "maxItems": {
                        "title": "Max items overall",
                        "minimum": 1,
                        "maximum": 50000,
                        "type": "integer",
                        "description": "Hard cap across all output rows. Prevents runaway billing on broad scans.",
                        "default": 500
                    },
                    "concurrency": {
                        "title": "Concurrency",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Parallel channel fetches. Telegram SSR is permissive (~50 req/s sustainable); default 5 is conservative for shared proxies.",
                        "default": 5
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Apify proxy. Datacenter is sufficient for Telegram's open SSR; residential is overkill unless concurrent runs from same IP range get rate-limited.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": []
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
