Telegram Public Profiles Scraper
Pricing
from $0.31 / 1,000 item processeds
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
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.meURLs. - 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
{"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
| 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.
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 ApifyClientclient = 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:
latestPreviewis 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
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.