Telegram Channel Messages Scraper avatar

Telegram Channel Messages Scraper

Pricing

Pay per event

Go to Apify Store
Telegram Channel Messages Scraper

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

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

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?

FieldDescription
channelHandlePublic Telegram channel handle.
channelTitleChannel title shown on the preview page.
channelUrlCanonical public channel URL.
messageIdNumeric Telegram message ID.
messageUrlPublic post URL.
dateMessage datetime when exposed.
textPlain message text.
htmlOptional formatted HTML.
viewsPublic view count.
forwardsForward count when exposed by Telegram.
repliesReply/comment count when exposed by Telegram.
authorNameAuthor name when visible.
authorUrlAuthor URL when visible.
hasMediaWhether media is present.
mediaTypePhoto, video, document, unsupported, or null.
linkPreviewUrlURL in Telegram's link preview.
linkPreviewTitleLink preview title.
linkPreviewSiteNameLink preview site name.
linksAll links found in the message block.
scrapedAtTimestamp 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

  1. Open the actor on Apify.
  2. Add one or more public Telegram channel handles, such as telegram or durov.
  3. Set maxMessages to the number of posts you want.
  4. Keep includeHtml disabled unless you need formatted message HTML.
  5. Run the actor.
  6. Export the dataset as JSON, CSV, Excel, XML, RSS, or HTML.

Input options

channels

Add public channel handles or URLs.

Examples:

  • telegram
  • @telegram
  • https://t.me/telegram
  • https://t.me/s/telegram
  • https://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 maxPagesPerChannel for older messages.
  • ✅ Use includeHtml only 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 ApifyClient
import os
client = 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().items
print(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.

Explore related automation-lab actors on Apify:

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.