# Telegram Public Profiles Scraper (`fetch_cat/telegram-public-profiles-scraper`) Actor

Scrape public Telegram usernames, channels, bots, and groups from t.me pages. Export profile metadata to CSV, JSON, Excel, or API.

- **URL**: https://apify.com/fetch\_cat/telegram-public-profiles-scraper.md
- **Developed by:** [Hanna Nosova](https://apify.com/fetch_cat) (community)
- **Categories:** Social media, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.31 / 1,000 item processeds

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 web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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/docs.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.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/integrations/mcp.md).

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

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

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


# README

## Telegram Public Profiles Scraper

Scrape public Telegram profile metadata from usernames, @handles, and `t.me` URLs. The Actor returns structured rows for public users, bots, channels, and groups without requiring a Telegram account or API session.

Use it for lead enrichment, public channel monitoring, influencer research, bot directory checks, and repeatable datasets you can export to CSV, JSON, Excel, API, webhooks, or automation tools.

### Who is this for?

- **Growth and lead teams** checking whether Telegram usernames, channels, groups, or bots are public and usable for outreach research.
- **Researchers and analysts** building repeatable lists of public Telegram entities with stable URLs and metadata.
- **Automation builders** feeding normalized Telegram profile rows into CRMs, monitoring jobs, enrichment pipelines, or AI agents.

### Use cases

- **Bulk public profile lookup**: Normalize a list of Telegram handles and export one row per public entity.
- **Channel monitoring**: Re-run saved inputs to track public channel descriptions, avatars, counters, and latest preview metadata.
- **Data enrichment**: Add Telegram display names, profile URLs, and public descriptions to existing lead or community datasets.
- **Validation workflows**: Separate public, not found, not public, and failed targets before downstream processing.

### At a glance

- **Primary job**: Normalize Telegram targets and export public profile/entity metadata.
- **Input**: Paste public Telegram usernames, @handles, or `t.me` URLs.
- **Output**: One dataset row per unique target with status, profile fields, counters when visible, and diagnostics.
- **Best for**: Bulk public profile lookup, CRM enrichment, monitoring public Telegram entities, and agent workflows.

### Input recipes

- **Public profile lookup**: `targets: ["telegram", "durov"]`, `includeChannelPreview: false`.
- **Channel profile monitor**: `targets: ["telegram"]`, `includeChannelPreview: true`.
- **Mixed input normalization**: `targets: ["@telegram", "https://t.me/durov"]`.

### What data can you extract?

| Field | Description |
| --- | --- |
| `input` | Original input target. |
| `normalizedUsername` | Normalized Telegram username/handle. |
| `entityUrl` | Canonical `https://t.me/<username>` URL. |
| `status` | `success`, `not_found`, `not_public`, or `failed`. |
| `entityType` | Publicly inferred `user`, `bot`, `channel`, `group`, or `unknown`. |
| `title` | Public display name or profile title. |
| `description` | Public bio/channel/group description when available. |
| `avatarUrl` | Public avatar or preview image URL. |
| `subscriberCount`, `memberCount` | Visible public counters when Telegram exposes them. |
| `verified`, `scam`, `fake`, `bot` | Visible public labels only; unavailable values stay empty/false. |
| `latestPreview` | Optional latest public channel/group preview object. |
| `sourceStatus`, `errorCode`, `errorMessage` | Diagnostics for partial failures. |
| `scrapedAt` | ISO timestamp for the row. |

### Input configuration

| Setting | JSON key | Use it for | Example |
| --- | --- | --- | --- |
| Telegram usernames or URLs | `targets` | Public usernames, @handles, or `t.me` URLs. | `["telegram", "@durov"]` |
| Include latest preview | `includeChannelPreview` | Add a small latest-preview object for public channels/groups. | `false` |
| Proxy configuration | `proxyConfiguration` | Optional Apify Proxy if direct requests are blocked. | `{ "useApifyProxy": false }` |
| Runtime limit | `runTimeSecs` | Soft deadline with time reserved for saving output. | `300` |

### Example input

```json
{
  "targets": ["telegram", "durov", "https://t.me/telegram"],
  "includeChannelPreview": false,
  "runTimeSecs": 300
}
````

### Example output

```json
{
  "input": "telegram",
  "normalizedUsername": "telegram",
  "entityUrl": "https://t.me/telegram",
  "sourceUrl": "https://t.me/telegram",
  "sourceStatus": 200,
  "status": "success",
  "entityType": "channel",
  "title": "Telegram News",
  "username": "telegram",
  "description": "The official Telegram on Telegram.",
  "avatarUrl": "https://cdn4.telesco.pe/file/example.jpg",
  "subscriberCount": null,
  "memberCount": null,
  "verified": true,
  "scam": false,
  "fake": false,
  "bot": false,
  "latestPreview": null,
  "errorCode": null,
  "errorMessage": null,
  "scrapedAt": "2026-07-24T00:00:00.000Z"
}
```

### Pricing

| Event | Free | Bronze | Silver | Gold | Platinum | Diamond | Charged when |
| --- | ---: | ---: | ---: | ---: | ---: | ---: | --- |
| Run start | `$0.005` | `$0.005` | `$0.005` | `$0.005` | `$0.005` | `$0.005` | Once when the Actor starts. |
| Successful profile row | `$0.00058963` | `$0.00051272` | `$0.00039993` | `$0.00030763` | `$0.00020509` | `$0.00014356` | Only after a successful public profile row is saved. |

Invalid, not found, not public, and failed rows are saved for diagnostics but are not charged as successful profile rows.

### Tips for best results

- **Start small**: Test 2-3 public targets before uploading long lists.
- **Use public entities**: The Actor cannot access private channels, private groups, hidden members, phone numbers, or account-only data.
- **Avoid duplicate spend**: Duplicate handles are skipped after normalization.
- **Use the right actor for posts**: For full public channel post history, use [Telegram Channel Posts Scraper](https://apify.com/fetch_cat/telegram-channel-posts-scraper).

### API usage

Node.js:

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor("fetch_cat/telegram-public-profiles-scraper").call({
  targets: ["telegram", "durov"],
  includeChannelPreview: false
});
console.log(run.defaultDatasetId);
```

Python:

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("fetch_cat/telegram-public-profiles-scraper").call(run_input={
    "targets": ["telegram", "durov"],
    "includeChannelPreview": False,
})
print(run["defaultDatasetId"])
```

cURL:

```bash
curl -X POST "https://api.apify.com/v2/acts/fetch_cat~telegram-public-profiles-scraper/runs?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"targets":["telegram","durov"],"includeChannelPreview":false}'
```

### MCP and AI agents

Use this Actor from MCP-compatible tools through the official Apify MCP Server.

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=fetch_cat/telegram-public-profiles-scraper"
```

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=fetch_cat/telegram-public-profiles-scraper"
    }
  }
}
```

Example prompt: "Look up these Telegram public profiles and summarize which ones are channels, bots, or users."

### Limits and caveats

- **Public data only**: The Actor reads anonymous public Telegram web previews. It does not log in or use Telegram API credentials.
- **Sparse profiles**: Some public targets expose only title/image metadata. Missing fields stay empty instead of being guessed.
- **No member lists or phone enrichment**: Hidden members, phone numbers, contacts, and private data are out of scope.
- **No post-history export**: `latestPreview` is a small optional preview, not a replacement for a channel posts scraper.

### Legality and responsible use

Process only public data you are allowed to access. Follow Telegram terms, Apify terms, privacy laws, and your own compliance requirements.

### Related actors

- [Telegram Channel Posts Scraper](https://apify.com/fetch_cat/telegram-channel-posts-scraper)
- [Website Contact Finder](https://apify.com/fetch_cat/website-contact-finder)
- [Bing Search Results Scraper](https://apify.com/fetch_cat/bing-search-results-scraper)

### FAQ

#### Can this scrape private Telegram channels or groups?

No. It only returns data visible on public `t.me` preview pages.

#### Why did I get a `not_found` or `not_public` row?

The username may not exist, may have changed, or may not expose a public preview. The diagnostic fields show the source status and error code.

#### Can I export results?

Yes. Apify datasets support JSON, CSV, Excel, XML, RSS, and API access.

### Support

Open an issue from the Actor page if a run fails or output looks wrong. Include the run ID or run URL, input JSON, expected output, actual output, and at least one reproducible public URL such as a public `https://t.me/<username>` target.

# Actor input Schema

## `targets` (type: `array`):

Public Telegram usernames, @handles, or t.me URLs to normalize and enrich. Duplicates are skipped after normalization.

## `includeChannelPreview` (type: `boolean`):

Fetch the public t.me/s preview page for channels/groups when available. This returns only a small latest-preview object, not full post history.

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

Optional Apify Proxy settings. Leave disabled unless Telegram blocks direct requests from your run environment.

## `runTimeSecs` (type: `integer`):

Soft runtime limit. The actor reserves time for saving partial results and a run summary.

## Actor input object example

```json
{
  "targets": [
    "telegram",
    "durov",
    "https://t.me/telegram"
  ],
  "includeChannelPreview": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  },
  "runTimeSecs": 300
}
```

# Actor output Schema

## `runSummary` (type: `string`):

No description

## `profiles` (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 = {
    "targets": [
        "telegram",
        "durov",
        "https://t.me/telegram"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("fetch_cat/telegram-public-profiles-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 = { "targets": [
        "telegram",
        "durov",
        "https://t.me/telegram",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("fetch_cat/telegram-public-profiles-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 '{
  "targets": [
    "telegram",
    "durov",
    "https://t.me/telegram"
  ]
}' |
apify call fetch_cat/telegram-public-profiles-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Telegram Public Profiles Scraper",
        "description": "Scrape public Telegram usernames, channels, bots, and groups from t.me pages. Export profile metadata to CSV, JSON, Excel, or API.",
        "version": "0.1",
        "x-build-id": "bhlAguRyAfLoK2D4z"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/fetch_cat~telegram-public-profiles-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-fetch_cat-telegram-public-profiles-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/fetch_cat~telegram-public-profiles-scraper/runs": {
            "post": {
                "operationId": "runs-sync-fetch_cat-telegram-public-profiles-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/fetch_cat~telegram-public-profiles-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-fetch_cat-telegram-public-profiles-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": [
                    "targets"
                ],
                "properties": {
                    "targets": {
                        "title": "Telegram usernames or URLs",
                        "minItems": 1,
                        "maxItems": 1000,
                        "type": "array",
                        "description": "Public Telegram usernames, @handles, or t.me URLs to normalize and enrich. Duplicates are skipped after normalization.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "includeChannelPreview": {
                        "title": "Include latest public channel preview",
                        "type": "boolean",
                        "description": "Fetch the public t.me/s preview page for channels/groups when available. This returns only a small latest-preview object, not full post history.",
                        "default": false
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Optional Apify Proxy settings. Leave disabled unless Telegram blocks direct requests from your run environment.",
                        "default": {
                            "useApifyProxy": false
                        }
                    },
                    "runTimeSecs": {
                        "title": "Runtime limit in seconds",
                        "minimum": 60,
                        "maximum": 300,
                        "type": "integer",
                        "description": "Soft runtime limit. The actor reserves time for saving partial results and a run summary.",
                        "default": 300
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
