Telegram Channel Scraper
parseforge/telegram-channel-scraper
Social mediaNews & media
Scrape messages, media, and metadata from public Telegram channels by username or URL. Returns each message as a flat row with text, reactions, and media links. No API key needed.
- Total users
- 24
- Monthly active
- 0
- Total runs
- 628
- Bookmarked
- 0
- Rating
- Not rated yet
- Last modified
- 12 days ago
Overview
Telegram Channel Scraper
Scrape messages, media, and metadata from any public Telegram channel, up to a million per run. Every message comes with its full text, reactions, media links, and channel subscriber count. No Telegram API key or bot token required. Export to CSV, JSON, Excel, or XML.
Telegram's official API requires a developer account, an app registration, and a bot token, and it rate-limits you quickly. This Actor reads the public channel preview pages directly, so you can archive messages from any number of channels at once. Filter by date range, message type, or media presence, and get a flat row for every matching post.
| Who uses it | What they scrape Telegram for |
|---|---|
| OSINT analysts | Archiving a channel's full message history before it is deleted or made private. |
| Market researchers | Tracking product announcements, feature discussions, and sentiment in niche community channels. |
| Journalists | Collecting and verifying public statements and media shared in news and political channels. |
| Data scientists | Building a text corpus from channel discussions for NLP model training or trend analysis. |
What it does
This Actor collects messages from public Telegram channels by username or URL and returns each one as a flat row with text, media links, reactions, and optional channel metadata.
- ๐ Date-range filtering: set a From and To date to capture only messages posted in a specific window.
- ๐ Media-only mode: skip text-only posts and return only messages that contain a photo, video, voice note, document, or sticker.
- ๐ท๏ธ Message-type filtering: restrict results to text, photos, videos, polls, forwarded messages, replies, and more.
- ๐ Channel metadata: optionally attach the channel title, description, subscriber count, and verified flag to every row.
- ๐ Link preview extraction: capture the URL, site name, title, description, and image from any link preview card in a message.
- ๐ Dual text output: get both the plain-text and the HTML-formatted version of every message body.
Results export to CSV, JSON, Excel, or XML, or straight from the API.
What you can do with Telegram data
๐๏ธ Archive a channel before it disappears.
An OSINT investigator feeds a list of at-risk Telegram channels and sets a high maxItems to capture the complete message history for offline storage.
๐ Monitor competitor product launches.
A market analyst scrapes a competitor's announcement channel weekly, filtering for photo and video messages to catch every new product reveal.
๐ฐ Collect public statements for a news story.
A journalist scrapes a political figure's channel with a date filter set to the last 30 days to gather all recent public statements and attached media.
๐ง Build a training dataset for a language model.
A data scientist scrapes several discussion channels, keeping only text messages, to create a clean corpus for fine-tuning a domain-specific NLP model.
Why choose this scraper
| What you get | |
|---|---|
| No API key | Uses the public web preview, so you never register a bot or handle OAuth tokens. |
| Multi-channel | Scrape dozens of channels in a single run, with an optional per-channel message cap. |
| Reactions included | Every message can carry its full reactions array with emoji and counts. |
| Fixed schema | Every row has the same flat structure, ready for CSV, JSON, Excel, or XML export. |
How it compares
This Actor focuses on scraping message content from public Telegram channels, while the alternatives below target member lists or general contact extraction from websites.
| Feature | ParseForge | Telegram Groups and Channel Member Scraper | Contact Details Scraper |
|---|---|---|---|
| Scrapes message text and media from channels | Yes | Not listed | Not listed |
| Filters by message type (photo, video, poll, etc.) | Yes | Not listed | Not listed |
| Includes reactions on messages | Yes | Not listed | Not listed |
| Extracts channel metadata (subscribers, description) | Yes | Not listed | Not listed |
| Scrapes member lists from groups | Not listed | Yes | Not listed |
| Extracts emails and phone numbers from websites | Not listed | Not listed | Yes |
Configure the run
Drive the Actor from a list of channel usernames or URLs, and filters run as each message is read so only matches reach your dataset. The Input tab lists every parameter.
A first run with the defaults:
{
"channels": [
"durov",
"telegram"
],
"maxItems": 10
}
A larger pull:
{
"channels": [
"durov",
"telegram"
],
"maxItems": 200
}
Pricing
Pay-per-result: $0.015 per result collected. You pay only for the results written to your dataset.
| Results collected | Approximate cost |
|---|---|
| 100 results | $1.50 |
| 1,000 results | $15.00 |
| 10,000 results | $150.00 |
New Apify accounts start with $5 in free credit.
Free users
Free-plan runs return up to 10 results as a preview. Upgrade your Apify plan to collect up to 1,000,000 results per run.
Run it
- Create a free Apify account with $5 in credit.
- Open the Telegram Channel Scraper.
- Set your inputs and any filters, then click Start.
- Export the results as CSV, Excel, JSON, or XML from the Dataset tab.
Run it programmatically through the Apify API (run-sync-get-dataset-items) or the ApifyClient for JavaScript and Python.
Use with AI agents (MCP)
Give an AI agent live access to Telegram through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:
claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/telegram-channel-scraper"
Then prompt it in plain language to run the scraper and read back the results.
Troubleshooting
Why am I getting no results for a channel?
Check that the channel has a public preview enabled. Open its URL in an incognito browser window. If you cannot see the messages without logging in, the Actor cannot access them either.
Why are some old messages missing?
Telegram's public preview only shows a limited history for some channels. Very old messages may not be available through the web preview. Try setting a narrower date range to see what is reachable.
The run is taking a long time. Is that normal?
Yes, especially when scraping many channels or a high message count. The Actor respects Telegram's rate limits to avoid being blocked. You can reduce the maxItems or the number of channels to speed it up.
Why do I see fewer messages than my maxItems setting?
The channel may have fewer total messages than your maxItems value, or your date filter and message-type filters may be excluding many posts. Try widening the date range or clearing the message-type filter.
Why are media URLs returning a 404 when I try to download them?
Telegram media URLs can expire after some time. Download the files soon after the scrape completes. The Actor provides the direct URL as it appears at the time of scraping.
FAQ
| Question | Answer |
|---|---|
| Do I need a Telegram API key or bot token? | No. This Actor reads the public web preview of channels, so you do not need to register an app, create a bot, or handle any API credentials. |
| Can I scrape private channels or groups? | No. The Actor can only access channels that have a public preview enabled. Private channels and groups are not accessible without a logged-in session. |
| How do I format the channel input? | You can use a plain username like durov, an @username like @durov, or a full URL such as https://t.me/durov or https://t.me/s/durov. |
| What message types can I filter on? | You can restrict results to text, photo, video, voice, document, sticker, poll, location, service messages, forwarded messages, or replies. |
| Does the Actor download the actual media files? | No. It returns the URLs to the media files. You can download the files separately using the URLs in the dataset. |
| How many messages can I scrape in one run? | You can set the maximum up to 1,000,000 messages per run. You can also set a per-channel cap to limit how many messages are taken from each channel. |
| Can I get the subscriber count of a channel? | Yes. Enable the 'Include Channel Metadata' option, and every message row will include the channel title, description, subscriber count, and verified flag. |
| What output formats are supported? | The Actor can export your dataset as CSV, JSON, Excel, or XML through the standard Apify output options. |
| Does it handle messages with link previews? | Yes. When you enable 'Include Link Preview', the Actor extracts the URL, site name, title, description, and image from any link preview card attached to a message. |
| Can I get both plain text and HTML for each message? | Yes. Set the Text Output Format to 'Both plain text and HTML', and each row will contain a text field and an html field. |
Related actors
Browse the full ParseForge collection for more scrapers.
๐ Need help? Email parseforge@protonmail.com with your run ID, your input, and what you expected.
โ ๏ธ Disclaimer. This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by Telegram Messenger Inc. It collects only publicly available data. You are responsible for using the collected data in compliance with the source's terms of service and applicable data-protection laws, including GDPR, CCPA, and PIPL. Do not use it to collect personal data unlawfully.
Input
| Field | Type | What it does | Default |
|---|---|---|---|
| channels required | array | List of public Telegram channels to scrape. Accepts channel usernames (e.g. `durov`), `@usernames`, or full URLs (`https://t.me/durov` or `https://t.me/s/durov`). The channel must have a public preview enabled. | ["durov","telegram"] |
| maxItems | integer | How many messages to collect per run. | 10 |
| maxItemsPerChannel | integer | Cap on messages scraped from any single channel. Useful when scraping many channels but you only want recent messages from each. Leave empty for no per-channel cap. | not set |
| fromDate | string | Only return messages posted on or after this date (ISO 8601, e.g. `2025-01-01`). Leave empty to include the oldest available messages. | not set |
| toDate | string | Only return messages posted on or before this date (ISO 8601, e.g. `2026-12-31`). Leave empty to include up to the most recent message. | not set |
| messageTypes | array | Restrict to specific message types. Leave empty to include all types. | not set |
| onlyWithMedia | boolean | Skip text-only messages. Returns only messages that include at least one photo, video, voice note, document, sticker, or animated GIF. | false |
| includeChannelMetadata | boolean | Include channel title, description, subscriber count, and verified flag on every message record. Adds one extra request per channel. | true |
| includeReactions | boolean | Include the reactions array (emoji and counts) on each message. Disable to keep records lighter. | true |
| includeLinkPreview | boolean | Include link preview metadata (URL, site name, title, description, image) when a message contains a preview card. | true |
| outputFormat | string (3 options) | How to render the message body. `text` strips formatting; `html` keeps Telegram's HTML; `both` returns both fields. | both |
Pricing
from $11.25 per 1,000 results
| Charged for | What it is | Price each |
|---|---|---|
| Result Item | Charged once per Telegram message extracted. | $0.01125 to $0.015 |
Tiered: the lower figure is the price on a higher Apify plan. Billing and the free credit live on Apify.
API
One POST returns the dataset directly. Same shape for every scraper in the library, so swapping the slug is the only change.
curl -X POST "https://api.apify.com/v2/acts/parseforge~telegram-channel-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"helloWorld": 123
}' Examples
Input that runs as-is.
{
"helloWorld": 123
} Reviews
No reviews yet. Be the first.
Issues
We build and maintain this scraper, so a problem with it comes to us. Report it on the Apify listing and the thread stays attached to the scraper where the next person can find it: open an issue.
Broken and urgent, or you would rather not post in public? Write to parseforge@protonmail.com and it reaches the people who wrote it.
