Telegram Channel Messages Scraper
Pricing
Pay per event
Telegram Channel Messages Scraper
Extract public Telegram channel messages, views, links, media flags, and metadata from t.me/s pages without a Telegram login.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Extract public Telegram channel messages from t.me/s web preview pages into clean Apify datasets.
Use this actor when you need scheduled monitoring, social listening, research exports, or compliance-friendly archives of public Telegram channel posts without maintaining Telegram API sessions.
What does Telegram Channel Messages Scraper do?
Telegram Channel Messages Scraper collects posts from public Telegram channels and saves each message as a structured dataset row.
It accepts channel handles, channel URLs, /s/ archive URLs, and direct public post URLs.
The actor normalizes everything to Telegram's public web preview pages, requests the HTML, parses message blocks, and outputs message text, dates, views, links, media flags, link previews, and channel metadata.
Private channels, invite-only groups, /c/ links, DMs, and Telegram login flows are not supported.
Who is it for?
- 🧭 Social listening teams tracking public Telegram narratives.
- 📰 Newsrooms monitoring official or community announcement channels.
- ₿ Crypto researchers following project, exchange, and market channels.
- 🛡️ Compliance teams preserving public communications for review.
- 📊 Data analysts building dashboards from scheduled Telegram exports.
- 🤖 Developers who want Telegram channel data through Apify API, webhooks, or MCP.
Why use this Telegram scraper?
Telegram's official API requires session management and does not fit every no-login monitoring workflow.
Public channel preview pages already expose many posts in server-rendered HTML.
This actor focuses on that reliable public surface and turns it into repeatable datasets.
You get normalized URLs, message IDs, timestamps, text, view counts, link preview metadata, and all message links in one export.
What Telegram data can I extract?
| Field | Description |
|---|---|
channelHandle | Public Telegram channel handle. |
channelTitle | Channel title shown on the preview page. |
channelUrl | Canonical public channel URL. |
messageId | Numeric Telegram message ID. |
messageUrl | Public post URL. |
date | Message datetime when exposed. |
text | Plain message text. |
html | Optional formatted HTML. |
views | Public view count. |
forwards | Forward count when exposed by Telegram. |
replies | Reply/comment count when exposed by Telegram. |
authorName | Author name when visible. |
authorUrl | Author URL when visible. |
hasMedia | Whether media is present. |
mediaType | Photo, video, document, unsupported, or null. |
linkPreviewUrl | URL in Telegram's link preview. |
linkPreviewTitle | Link preview title. |
linkPreviewSiteName | Link preview site name. |
links | All links found in the message block. |
scrapedAt | Timestamp of extraction. |
How much does it cost to scrape Telegram channel messages?
This actor uses pay-per-event pricing.
There is a small run start charge and a per-message charge.
The default price is designed for scheduled monitoring and bulk exports.
Exact live prices are shown on the Apify Store pricing tab.
A small test with 100 messages is inexpensive, and larger recurring jobs receive tiered discounts automatically through Apify's pricing tiers.
Quick start
- Open the actor on Apify.
- Add one or more public Telegram channel handles, such as
telegramordurov. - Set
maxMessagesto the number of posts you want. - Keep
includeHtmldisabled unless you need formatted message HTML. - Run the actor.
- Export the dataset as JSON, CSV, Excel, XML, RSS, or HTML.
Input options
channels
Add public channel handles or URLs.
Examples:
telegram@telegramhttps://t.me/telegramhttps://t.me/s/telegramhttps://t.me/telegram/429
startUrls
Use this if you prefer Apify request-list style input.
These URLs are combined with channels.
maxMessages
Controls the total number of message rows saved across all channels.
Start with 100 for a realistic sample.
Increase it for historical exports.
maxPagesPerChannel
Telegram archive pages usually contain about 20 messages.
Increase this when you need older posts from each channel.
includeHtml
Enable it when you need bold text, inline links, or original Telegram formatting.
Leave it off for smaller CSV and JSON exports.
useProxy
Usually not needed.
Enable it only if your runtime environment cannot reach Telegram directly.
The actor uses low-cost datacenter proxy routing when this option is on.
Example input
{"channels": ["telegram", "durov"],"maxMessages": 100,"maxPagesPerChannel": 10,"includeHtml": false,"useProxy": false}
Example output
{"channelHandle": "telegram","channelTitle": "Telegram News","channelUrl": "https://t.me/telegram","messageId": 429,"messageUrl": "https://t.me/telegram/429","date": "2026-03-02T17:33:34+00:00","text": "Member Tags. Members in group chats can now add a tag next to their name...","views": 1620000,"forwards": null,"replies": null,"authorName": null,"authorUrl": "https://t.me/telegram","hasMedia": true,"mediaType": "unsupported","linkPreviewUrl": null,"linkPreviewTitle": null,"linkPreviewSiteName": null,"links": ["https://t.me/telegram/430"],"scrapedAt": "2026-06-30T03:00:00.000Z"}
Tips for reliable Telegram scraping
- ✅ Use public channel handles, not invite links.
- ✅ Keep first tests small.
- ✅ Increase
maxPagesPerChannelfor older messages. - ✅ Use
includeHtmlonly when formatting matters. - ✅ Schedule regular runs if you need fresh monitoring data.
- ⚠️ Telegram can hide or change fields, so some counts may be null.
- ⚠️ Private channels and restricted communities are outside the actor's scope.
Common workflows
Social listening monitor
Run the actor hourly or daily on a list of public channels.
Send the dataset to a webhook, Google Sheet, database, or BI tool.
Filter by keywords, links, or message dates downstream.
Crypto announcement tracker
Add official project, exchange, and community channels.
Export messages with dates and links for market research or alerting.
Compliance archive
Schedule recurring runs and store dataset exports in your own storage.
Use message URLs and IDs as stable references back to public Telegram posts.
News research export
Collect public channel posts from a topic area and analyze text, links, and link previews.
Integrations
Telegram Channel Messages Scraper works with the full Apify platform:
- Webhooks for new run completion.
- Dataset API for programmatic exports.
- Key-value store input for scheduled jobs.
- Apify integrations for Google Drive, Make, Zapier, and external databases.
- MCP for AI agents that need public Telegram monitoring tools.
API usage with Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/telegram-channel-messages-scraper').call({channels: ['telegram'],maxMessages: 100,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items[0]);
API usage with Python
from apify_client import ApifyClientimport osclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('automation-lab/telegram-channel-messages-scraper').call(run_input={'channels': ['telegram'],'maxMessages': 100,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items[0])
API usage with cURL
curl -X POST "https://api.apify.com/v2/acts/automation-lab~telegram-channel-messages-scraper/runs?token=$APIFY_TOKEN" \-H 'Content-Type: application/json' \-d '{"channels":["telegram"],"maxMessages":100}'
MCP usage
Use Apify MCP when you want Claude Desktop, Claude Code, or another MCP client to run the scraper as a tool.
MCP server URL:
https://mcp.apify.com/?tools=automation-lab/telegram-channel-messages-scraper
Add it to Claude Code:
$claude mcp add apify-telegram https://mcp.apify.com/?tools=automation-lab/telegram-channel-messages-scraper
Claude Desktop JSON config:
{"mcpServers": {"apify-telegram": {"url": "https://mcp.apify.com/?tools=automation-lab/telegram-channel-messages-scraper"}}}
Example prompts:
- "Scrape the latest 100 messages from the Telegram channel
telegram." - "Monitor these public Telegram channels and summarize posts that link to external websites."
- "Export Telegram channel messages with views and message URLs for a compliance review."
Limitations
This actor only uses public Telegram web preview pages.
It does not log in to Telegram.
It does not scrape private groups, invite-only channels, /c/ URLs, DMs, comments hidden behind login, or members lists.
Media files may be represented as flags and preview metadata rather than downloaded files.
Some Telegram pages show unsupported media placeholders; those are reported as mediaType: "unsupported".
FAQ
Can I scrape private Telegram channels?
No. This actor only extracts public t.me/s preview pages.
Do I need a Telegram account or API key?
No. The actor uses public web preview HTML and does not log in.
Can I download Telegram media files?
The MVP records media presence, media type, links, and preview metadata. It does not download original media files.
Troubleshooting
Why did I get no messages?
Check that the channel is public and available at https://t.me/s/<handle> in a browser.
Private channels, deleted channels, blocked channels, and invite links cannot be scraped by this actor.
Why are views or replies null?
Telegram does not expose every metric for every message in the public HTML.
The actor saves counts when they are visible and returns null when they are absent.
Why is media marked unsupported?
Telegram sometimes renders a media placeholder on public preview pages.
The actor records that media exists even when the browser cannot display the original file in the HTML.
Legality and ethics
Only scrape public Telegram content that you are allowed to access.
Respect applicable laws, platform terms, privacy obligations, and downstream data retention rules.
Do not use this actor to bypass access controls or collect private communications.
Related scrapers
Explore related automation-lab actors on Apify:
- https://apify.com/automation-lab/twitter-x-scraper
- https://apify.com/automation-lab/reddit-scraper
- https://apify.com/automation-lab/youtube-channel-scraper
- https://apify.com/automation-lab/linkedin-posts-scraper
Changelog
Initial version extracts public Telegram channel messages from t.me/s pages with HTTP-first parsing.
Support
If a public channel does not parse correctly, include the channel URL, run ID, and whether the page is visible at https://t.me/s/<handle>.
Data freshness
Telegram preview pages show recent and paginated historical messages.
For monitoring, schedule recurring runs and compare message URLs or message IDs to identify new posts.
Performance notes
HTTP parsing keeps runs lightweight.
Most public channels can be scraped with 256 MB memory.
Large historical exports depend on how many archive pages Telegram exposes.
Output stability
The actor keeps field names stable so dashboards and API integrations can depend on them.
New fields may be added later, but existing fields are designed to remain compatible.