Telegram Public Profiles Scraper avatar

Telegram Public Profiles Scraper

Pricing

from $0.31 / 1,000 item processeds

Go to Apify Store
Telegram Public Profiles Scraper

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.

Pricing

from $0.31 / 1,000 item processeds

Rating

0.0

(0)

Developer

Hanna Nosova

Hanna Nosova

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

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?

FieldDescription
inputOriginal input target.
normalizedUsernameNormalized Telegram username/handle.
entityUrlCanonical https://t.me/<username> URL.
statussuccess, not_found, not_public, or failed.
entityTypePublicly inferred user, bot, channel, group, or unknown.
titlePublic display name or profile title.
descriptionPublic bio/channel/group description when available.
avatarUrlPublic avatar or preview image URL.
subscriberCount, memberCountVisible public counters when Telegram exposes them.
verified, scam, fake, botVisible public labels only; unavailable values stay empty/false.
latestPreviewOptional latest public channel/group preview object.
sourceStatus, errorCode, errorMessageDiagnostics for partial failures.
scrapedAtISO timestamp for the row.

Input configuration

SettingJSON keyUse it forExample
Telegram usernames or URLstargetsPublic usernames, @handles, or t.me URLs.["telegram", "@durov"]
Include latest previewincludeChannelPreviewAdd a small latest-preview object for public channels/groups.false
Proxy configurationproxyConfigurationOptional Apify Proxy if direct requests are blocked.{ "useApifyProxy": false }
Runtime limitrunTimeSecsSoft deadline with time reserved for saving output.300

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

Pricing

EventFreeBronzeSilverGoldPlatinumDiamondCharged when
Run start$0.005$0.005$0.005$0.005$0.005$0.005Once when the Actor starts.
Successful profile row$0.00058963$0.00051272$0.00039993$0.00030763$0.00020509$0.00014356Only 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.

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.

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.