Telegram Channel Scraper Goat
Pricing
from $1.00 / 1,000 messages
Telegram Channel Scraper Goat
Scrape messages from public Telegram channels in bulk. Returns one clean row per message with id, date, text, views, media flags, media URLs, forwards, and links, plus an optional channel info summary.
Pricing
from $1.00 / 1,000 messages
Rating
5.0
(1)
Developer
Goutam Soni
Maintained by CommunityActor stats
0
Bookmarked
12
Total users
2
Monthly active users
13 days
Issues response
4 days ago
Last modified
Categories
Share
Telegram Channel Scraper
Scrape messages from public Telegram channels in bulk. Give it a list of channel handles or links and it returns one clean row per message, newest first, with the text, date, view count, media flags, media URLs, forwards, and links. It can also return a short channel info summary (title, subscriber count, description, photo).
No login. No API key. No cookies. Public channels only.
What you get
For every message:
channelandmessageIdurl(direct link to the message)datetime(ISO 8601, with timezone)views(parsed to a number)text(cleaned, line breaks preserved)hasPhoto,hasVideo,hasDocument,hasVoiceflagsphotoUrls,videoUrls(media URLs where the channel exposes them)forwardedFrom,forwardedFromUrl(when the message is a forward)links(outbound links found in the message text)
When channel info is enabled, you also get one summary row per channel:
title,subscribers,description,photoUrlphotoCount,videoCount,fileCount,linkCount
Export members (optional)
Turn on exportMembers to also export a channel's visible members. These are the people who publicly take part in the channel's discussion. To take part, a user has to be a member of the channel's linked discussion group, so each one is a real, identifiable member.
Each member row gives you:
type("member")channelusername(the member's public handle, without the@)profileUrl(direct link to their public profile)displayNameavatarUrl
The scraper pages through the discussion and returns distinct members, deduplicated, up to maxMembersPerChannel.
What this returns, and what it does not. Telegram does not show a channel's full subscriber list to anyone who is not signed in, so no scraper can hand you the entire subscriber roster of a public channel. What is public is the set of members who take part in the discussion. That is what this option returns: the members who are publicly visible, not the whole subscriber count.
A channel only has visible members when it has discussion (comments) turned on and people have commented. When a channel has no public discussion, you get one row per channel instead:
{ "type": "member_export", "channel": "example-community", "result": "not_available" }
Member export runs in addition to the normal message scrape. If you only want members, set maxMessagesPerChannel to 1 to keep the message rows to a minimum.
Example member row
{"type": "member","channel": "example-community","username": "example_user","profileUrl": "https://t.me/example_user","displayName": "Example User","avatarUrl": "https://example.com/avatar.jpg"}
Input
| Field | Type | Description |
|---|---|---|
channels | array | Channel handles or URLs. Accepts example_channel, @example_channel, or https://t.me/example_channel. |
maxMessagesPerChannel | integer | Cap on messages returned per channel, newest first. Default 50. |
includeChannelInfo | boolean | Also return a channel info summary row per channel. Default true. |
exportMembers | boolean | Also export the channel's visible members (people who take part in the discussion). Default false. |
maxMembersPerChannel | integer | Cap on distinct members returned per channel when exportMembers is on. Default 200. |
concurrency | integer | Channels processed in parallel. Default 4. |
delayBetweenRequests | number | Seconds to wait between page fetches inside one channel. Default 1.0. |
proxyConfiguration | object | Optional proxy. Works without a proxy by default. |
Example input
{"channels": ["example_channel","@another_example","https://t.me/one_more_example"],"maxMessagesPerChannel": 100,"includeChannelInfo": true,"concurrency": 4}
Example output row
{"channel": "example_channel","messageId": 1234,"url": "https://t.me/example_channel/1234","datetime": "2026-02-10T17:43:45+00:00","views": 1740000,"text": "Big news today. Read the full post here.","hasPhoto": false,"hasVideo": true,"hasDocument": false,"hasVoice": false,"photoUrls": [],"videoUrls": ["https://example.com/video.mp4"],"forwardedFrom": null,"forwardedFromUrl": null,"links": ["https://example.com/full-post"]}
Use cases
- Track announcements and news from public channels.
- Archive a channel's message history with dates and view counts.
- Build a dataset of posts for analysis, alerting, or reporting.
- Track channels in your space.
Notes
- Only public channels are supported. Private channels and ones that hide their message preview return no messages.
- View counts and media availability depend on what the channel exposes publicly.
- The scraper pages backwards through a channel's history until your limit is reached or the channel runs out of messages.
FAQ
Do I need a Telegram account or API key?
No. This actor reads public Telegram channels without any login, account, or API key.
Can it scrape private channels or groups?
No. Only public channels that are viewable without joining are supported.
Can it export a channel's members or subscribers?
It exports the members who are publicly visible: the people who take part in the channel's discussion. Turn on exportMembers for this. Telegram never exposes a channel's full subscriber list to anyone who is not signed in, so the complete subscriber roster is not available to any scraper. Channels with no public discussion return a not_available result.
How many messages can I get per channel?
You set the limit with maxMessagesPerChannel. The actor walks the channel history page by page up to your chosen maximum.
What data does each message include?
Message text, timestamp, view count, the channel name and metadata, and any media or link references the message exposes.
Can I export to CSV, Excel, or Google Sheets?
Yes. Every Apify dataset exports to JSON, CSV, Excel, or pushes to your own storage and integrations.
To improve our actors we collect anonymized usage telemetry (run stats and input patterns). No personal account data is collected.