Telegram Public Profiles Scraper

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

Data fields

FieldTypeDescription
inputstringValue exported as input.
normalizedUsernamestring | nullValue exported as normalizedUsername.
entityUrlstring | nullValue exported as entityUrl.
sourceUrlstringValue exported as sourceUrl.
sourceStatusinteger | nullValue exported as sourceStatus.
statusstringValue exported as status.
entityTypestringValue exported as entityType.
titlestring | nullValue exported as title.

Input preview

targetsTelegram usernames or URLs *
includeChannelPreviewInclude latest public channel preview
proxyConfigurationProxy configuration
runTimeSecsRuntime limit in seconds

API and agents

This actor can be run through Apify API, datasets, webhooks, schedules, and the official Apify MCP server.

How this actor works

See example inputs, outputs, API usage, and practical limits before running this actor on Apify.

Open Apify page

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.

Example input

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

Example output

{
  "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"
}

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.

API usage

Node.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:

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:

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.

claude mcp add --transport http apify "https://mcp.apify.com?tools=fetch_cat/telegram-public-profiles-scraper"
{
  "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.

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.

Common questions

Questions and answers reused from the canonical actor README.

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.