# Telegram Group Scraper (`opportunity-biz/telegram-group-scraper`) Actor

Extract all members from any Telegram supergroup. Get username, phone, bio, premium status, last seen and more. Built on User API — not Bot API. Pay-per-result, no monthly fee. MCP/AI Agent compatible.

- **URL**: https://apify.com/opportunity-biz/telegram-group-scraper.md
- **Developed by:** [opportunity-biz](https://apify.com/opportunity-biz) (community)
- **Categories:** Social media, Lead generation, Developer tools
- **Stats:** 1 total users, 1 monthly users, 0.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.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.

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 Group Members Scraper — Bio, Phone, Premium & More

Extract **all members** from any Telegram supergroup, including **bio, phone number, premium status, last seen, language code, and more**.

This is an **actively maintained** alternative to abandoned Telegram scrapers on the Apify Store. Built with [Telethon](https://github.com/LonamiWebs/Telethon) using the **Telegram User API** — the only API that gives you full access to group members and their complete profiles.

> **Pay-per-result pricing** — no monthly subscription.

> ⚠️ **Important:** This Actor works only with **supergroups** — groups where you can see the member list inside the Telegram app. It does **not** work with broadcast channels (like @telegram or news channels). If you can tap "Members" in the group info screen, it will work.

---

### 📊 Output Example

![Telegram Group Scraper — real output sample](https://i.imgur.com/4wzl4Ib.jpeg)

*Real output from a live run — 500+ members extracted with username, phone, bio, premium status and last seen.*

---

### 🔑 Why User API — Not Bot API

Most Telegram scrapers on the market (including popular ones on this Store) are built on the **Telegram Bot API**. This Actor is fundamentally different: it uses the **Telegram User API** (MTProto), the same protocol used by the official Telegram app.

This is not a minor technical detail — it determines what data you can access:

| Capability | **Bot API** (other scrapers) | **User API** (this Actor) |
|---|---|---|
| List all group members | ❌ Bots cannot see the member list | ✅ Full member list |
| `bio` / profile description | ❌ Not accessible | ✅ Available with `fetchBio: true` |
| `phone` number | ❌ Not accessible | ✅ When visible by the user |
| `lastSeenStatus` | ❌ Not accessible | ✅ 5 distinct statuses |
| `isPremium` | ❌ Not accessible | ✅ |
| `isVerified`, `isScam`, `isFake` | ❌ Not accessible | ✅ |
| `langCode` | ❌ Not accessible | ✅ |
| `accessHash` (for direct messaging) | ❌ Not accessible | ✅ |
| `groupMembersCount` (accurate) | ❌ | ✅ via GetFullChannelRequest |

The Bot API was designed for building chatbots, not for data extraction. Telegram intentionally restricts bots from reading member lists to protect user privacy. The User API, used by the official Telegram clients, has no such restriction — it's how the app itself works.

**The practical result:** with this Actor you get a complete, enriched member dataset. With a bot-based scraper, you get a partial list with almost no profile data.

---

### ✨ What Makes This Different

| Feature | This Actor | Other scrapers |
|---|---|---|
| Based on User API (not Bot API) | ✅ | ❌ Usually Bot API |
| `bio` field (profile description) | ✅ `fetchBio: true` | ❌ Never available |
| `groupTitle` + `groupMembersCount` | ✅ | ❌ Usually missing |
| `lastSeenStatus` | ✅ | ❌ Usually missing |
| `isPremium` / `isVerified` / `isScam` | ✅ | ❌ Usually missing |
| `accessHash` (for direct contact) | ✅ | ❌ Usually missing |
| `scrapedAt` timestamp | ✅ | ❌ Usually missing |
| Exclude bots / deleted accounts | ✅ | ❌ |
| Resume from page (`startPage`) | ✅ | ❌ |
| SOCKS5 proxy support | ✅ | ❌ |
| MCP / AI Agent compatible | ✅ | ❌ |
| Clear error for broadcast channels | ✅ | ❌ |
| Actively maintained (2026) | ✅ | ❌ Last updated 7+ months ago |

---

### 🚀 Use Cases

- **Lead generation** — export members of niche crypto, trading, or marketing groups
- **Community analysis** — understand group demographics and activity levels
- **Sales outreach** — find premium members and verified accounts in your industry
- **AI Agent workflows** — MCP-compatible for use in LangChain, n8n, and similar tools
- **Research** — track group growth over time using `groupMembersCount` + `scrapedAt`

---

### 📋 Input

| Field | Type | Required | Description |
|---|---|---|---|
| `groupUrl` | string | ✅ | Group @username or t.me/... link (**supergroup only**) |
| `sessionString` | string | ✅ | Telethon StringSession (generate locally, see below) |
| `maxMembers` | integer | — | Max members to extract (default: 1000, max: 50000) |
| `startPage` | integer | — | Start page to resume interrupted runs (default: 1) |
| `fetchBio` | boolean | — | Fetch each member's bio. ⚠️ Slow: ~8 min per 500 members. Default: false |
| `excludeBots` | boolean | — | Skip bot accounts (default: false) |
| `excludeDeleted` | boolean | — | Skip deleted accounts (default: true) |
| `proxyIp` | string | — | SOCKS5 proxy IP |
| `proxyPort` | integer | — | SOCKS5 proxy port |
| `proxyUsername` | string | — | Proxy username |
| `proxyPassword` | string | — | Proxy password |

#### fetchBio: performance trade-off

| | `fetchBio: false` (default) | `fetchBio: true` |
|---|---|---|
| Speed (500 members) | ~30 seconds | ~8 minutes |
| Extra API calls | 0 | 500 |
| `bio` field in output | `""` (empty) | text or `""` |
| Ban risk | minimal | low but present |

Enable `fetchBio` only when you specifically need profile descriptions (e.g. for lead qualification or persona analysis).

---

### 🔐 How to Get Your Credentials (5 minutes, one time only)

This Actor requires three values: `api_id`, `api_hash`, and `sessionString`. You only need to do this **once** — the session string never expires unless you explicitly log out.

#### Step 1 — Get your API ID and API Hash (2 minutes)

1. Open [my.telegram.org](https://my.telegram.org) in your browser
2. Log in with your Telegram phone number (you'll receive a confirmation code in the Telegram app)
3. Click **"API development tools"**
4. Fill in the form — App title and Short name can be anything (e.g. `MyApp` / `myapp`)
5. Click **"Create application"**
6. You will see your **`api_id`** (a number like `12345678`) and **`api_hash`** (a string like `a1b2c3d4e5f6...`)

Copy both values and keep them safe. You'll paste them into the script below.

> ⚠️ Do not share your `api_id` and `api_hash` publicly. They are tied to your Telegram account.

#### Step 2 — Generate your Session String (2 minutes)

You need Python installed on your machine. If you don't have it, download it from [python.org](https://www.python.org/downloads/) — the installer takes about 2 minutes.

**Install Telethon** (run once in your terminal / command prompt):

```bash
pip install telethon
````

**Create a file** called `gen_session.py` and paste this code:

```python
import asyncio
from telethon import TelegramClient
from telethon.sessions import StringSession

API_ID   = 12345678      ## ← replace with your api_id
API_HASH = 'your_hash'   ## ← replace with your api_hash

async def main():
    async with TelegramClient(StringSession(), API_ID, API_HASH) as client:
        print("\n" + "="*60)
        print("✅ Your session string (copy everything between the lines):")
        print("="*60)
        print(client.session.save())
        print("="*60 + "\n")

asyncio.run(main())
```

**Run it:**

```bash
python gen_session.py
```

Telegram will ask for your phone number and then send a confirmation code to your Telegram app. After you enter it, the script prints your session string — a long string starting with `1BV...` or similar.

**Copy the entire session string** and paste it into the `sessionString` field in the Actor input.

#### Step 3 — Paste into Actor input

- `sessionString` → paste the long string from Step 2
- `groupUrl` → paste the @username or t.me/... link of the group you want to scrape
- All other fields are optional

That's it. Click **Run** and your dataset will be ready in seconds.

> ✅ **The session string never expires.** You generate it once and reuse it for every future run. It only becomes invalid if you manually log out from that session in Telegram Settings → Devices.

#### How to check if a group is a supergroup

Open the group in the Telegram app → tap the group name → if you see a **"Members"** section with a list of users, it's a supergroup and this Actor will work. If you only see a subscriber count with no member list, it's a broadcast channel and this Actor cannot scrape it.

***

### 📦 Output Fields

Each item in the dataset contains:

```json
{
  "id": "202577853",
  "accessHash": "-2127225199806290195",
  "firstName": "Pavel",
  "lastName": "Tsyganov",
  "username": "Tsyganov_pro",
  "usernames": [],
  "phone": null,
  "langCode": null,
  "lastSeenStatus": "UserStatusRecently",
  "bio": "Crypto trader | Telegram signals",
  "isBot": false,
  "isPremium": false,
  "isVerified": false,
  "isDeleted": false,
  "isScam": false,
  "isFake": false,
  "isRestricted": false,
  "photoId": "870065253985134518",
  "photoDcId": 2,
  "groupTitle": "Crypto Live Feed",
  "groupMembersCount": 4821,
  "scrapedAt": "2026-03-12T09:42:00Z"
}
```

> **Note:** `bio` is only populated when `fetchBio: true`. All other fields are always present.

***

### ⚙️ Technical Notes

- Built with **Python 3.11** and **Telethon** — no Apify SDK (avoids SDK conflicts)
- Uses **User API** (MTProto + StringSession), not a bot token — required to read group members and profile data
- `groupMembersCount` fetched via `GetFullChannelRequest` — accurate even as a non-admin member
- Works only on **supergroups**, not broadcast channels
- `bio` is fetched via a separate `GetFullUser` call per member — enable with `fetchBio: true`
- Rate limiting: 1 second delay between batches and between bio calls to avoid Telegram flood errors
- Supports **SOCKS5 proxy** for IP rotation or geo-restricted access
- If a group has privacy restrictions, some members may not be visible — this is a Telegram limitation

***

### 💳 Pricing

- **Model:** Pay-per-result (PAY\_PER\_EVENT)
- **Price:** $1.00 per 1,000 members extracted
- **Example:** Scraping 10,000 members costs ~$9.00

> Much cheaper than flat-rate competitors charging $25/month regardless of usage.

***

### 🤝 Support & Maintenance

This Actor is **actively maintained** by [opportunity-biz](https://apify.com/opportunity-biz). Issues are answered within 24 hours. If you find a bug or need a feature, open an issue on GitHub.

# Actor input Schema

## `groupUrl` (type: `string`):

The URL or @username of the Telegram group. Examples: @mygroup, t.me/mygroup.

⚠️ Works only with SUPERGROUPS (where you can see the member list in the Telegram app). Does NOT work with broadcast channels.

## `sessionString` (type: `string`):

Your Telethon StringSession. Generate it locally by running the script in the README. Required for every run.

## `maxMembers` (type: `integer`):

Maximum number of members to extract. Default: 1000. Max: 50000.

## `startPage` (type: `integer`):

Page number to start scraping from (each page = 200 members). Useful to resume interrupted runs.

## `fetchBio` (type: `boolean`):

Enable to fetch each member's bio (profile description).

⚠️ Significantly slower: ~8 minutes for 500 members vs ~30 seconds without. Increases API calls and flood-wait risk. Only enable if bio data is required for your use case.

## `excludeBots` (type: `boolean`):

If true, bot accounts are excluded from results.

## `excludeDeleted` (type: `boolean`):

If true, deleted/deactivated accounts are excluded from results.

## `proxyIp` (type: `string`):

Optional SOCKS5 proxy IP address.

## `proxyPort` (type: `integer`):

Optional SOCKS5 proxy port.

## `proxyUsername` (type: `string`):

Optional proxy authentication username.

## `proxyPassword` (type: `string`):

Optional proxy authentication password.

## `webhookNotificationUrl` (type: `string`):

\[AGENT MODE] Optional. If set, the Actor will POST a structured JSON payload to this URL at the end of every run. Use with n8n, Make, or Zapier to trigger automations based on new members or signals.

Payload includes: run\_id, dataset\_id, stats, signals, new\_members\_preview.

## `previousRunId` (type: `string`):

\[AGENT MODE] Optional. The Apify run ID of a previous scrape of the same group. When set, the Actor computes a diff and includes only NEW members (not seen in the previous run) in the webhook payload.

Use this in scheduled runs to detect group growth over time.

## `alertRules` (type: `array`):

\[AGENT MODE] Optional. List of conditions that trigger signals in the webhook payload.

Each rule is an object with:

- field: the member field to check (e.g. 'bio', 'username', 'member\_count\_delta')
- contains: keyword to look for (string match, case-insensitive)
- gt: numeric threshold for 'member\_count\_delta'

Examples:
\[{"field": "bio", "contains": "investor"}]
\[{"field": "member\_count\_delta", "gt": 50}]

## Actor input object example

```json
{
  "maxMembers": 1000,
  "startPage": 1,
  "fetchBio": false,
  "excludeBots": false,
  "excludeDeleted": true
}
```

# Actor output Schema

## `members` (type: `string`):

Full list of scraped members with username, phone, bio, premium status, last seen and more.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("opportunity-biz/telegram-group-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("opportunity-biz/telegram-group-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 '{}' |
apify call opportunity-biz/telegram-group-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Telegram Group Scraper",
        "description": "Extract all members from any Telegram supergroup. Get username, phone, bio, premium status, last seen and more. Built on User API — not Bot API. Pay-per-result, no monthly fee. MCP/AI Agent compatible.",
        "version": "0.0",
        "x-build-id": "yNstzHFGpQ9AQoFvd"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/opportunity-biz~telegram-group-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-opportunity-biz-telegram-group-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/opportunity-biz~telegram-group-scraper/runs": {
            "post": {
                "operationId": "runs-sync-opportunity-biz-telegram-group-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/opportunity-biz~telegram-group-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-opportunity-biz-telegram-group-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": [
                    "groupUrl",
                    "sessionString"
                ],
                "properties": {
                    "groupUrl": {
                        "title": "Telegram Group URL or Username",
                        "type": "string",
                        "description": "The URL or @username of the Telegram group. Examples: @mygroup, t.me/mygroup.\n\n⚠️ Works only with SUPERGROUPS (where you can see the member list in the Telegram app). Does NOT work with broadcast channels."
                    },
                    "sessionString": {
                        "title": "Session String (Telethon StringSession)",
                        "type": "string",
                        "description": "Your Telethon StringSession. Generate it locally by running the script in the README. Required for every run."
                    },
                    "maxMembers": {
                        "title": "Max Members to Scrape",
                        "minimum": 1,
                        "maximum": 50000,
                        "type": "integer",
                        "description": "Maximum number of members to extract. Default: 1000. Max: 50000.",
                        "default": 1000
                    },
                    "startPage": {
                        "title": "Start Page",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Page number to start scraping from (each page = 200 members). Useful to resume interrupted runs.",
                        "default": 1
                    },
                    "fetchBio": {
                        "title": "Fetch Bio",
                        "type": "boolean",
                        "description": "Enable to fetch each member's bio (profile description).\n\n⚠️ Significantly slower: ~8 minutes for 500 members vs ~30 seconds without. Increases API calls and flood-wait risk. Only enable if bio data is required for your use case.",
                        "default": false
                    },
                    "excludeBots": {
                        "title": "Exclude Bots",
                        "type": "boolean",
                        "description": "If true, bot accounts are excluded from results.",
                        "default": false
                    },
                    "excludeDeleted": {
                        "title": "Exclude Deleted Accounts",
                        "type": "boolean",
                        "description": "If true, deleted/deactivated accounts are excluded from results.",
                        "default": true
                    },
                    "proxyIp": {
                        "title": "Proxy IP",
                        "type": "string",
                        "description": "Optional SOCKS5 proxy IP address."
                    },
                    "proxyPort": {
                        "title": "Proxy Port",
                        "type": "integer",
                        "description": "Optional SOCKS5 proxy port."
                    },
                    "proxyUsername": {
                        "title": "Proxy Username",
                        "type": "string",
                        "description": "Optional proxy authentication username."
                    },
                    "proxyPassword": {
                        "title": "Proxy Password",
                        "type": "string",
                        "description": "Optional proxy authentication password."
                    },
                    "webhookNotificationUrl": {
                        "title": "Webhook Notification URL (Agent Mode)",
                        "type": "string",
                        "description": "[AGENT MODE] Optional. If set, the Actor will POST a structured JSON payload to this URL at the end of every run. Use with n8n, Make, or Zapier to trigger automations based on new members or signals.\n\nPayload includes: run_id, dataset_id, stats, signals, new_members_preview."
                    },
                    "previousRunId": {
                        "title": "Previous Run ID (Agent Mode — Diff)",
                        "type": "string",
                        "description": "[AGENT MODE] Optional. The Apify run ID of a previous scrape of the same group. When set, the Actor computes a diff and includes only NEW members (not seen in the previous run) in the webhook payload.\n\nUse this in scheduled runs to detect group growth over time."
                    },
                    "alertRules": {
                        "title": "Alert Rules (Agent Mode)",
                        "type": "array",
                        "description": "[AGENT MODE] Optional. List of conditions that trigger signals in the webhook payload.\n\nEach rule is an object with:\n- field: the member field to check (e.g. 'bio', 'username', 'member_count_delta')\n- contains: keyword to look for (string match, case-insensitive)\n- gt: numeric threshold for 'member_count_delta'\n\nExamples:\n[{\"field\": \"bio\", \"contains\": \"investor\"}]\n[{\"field\": \"member_count_delta\", \"gt\": 50}]"
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
