Telegram Chat Scraper avatar

Telegram Chat Scraper

Pricing

from $0.51 / 1,000 messages

Go to Apify Store
Telegram Chat Scraper

Telegram Chat Scraper

Telegram chat scraper for public channels, groups, and forums, returning 55 structured message fields with optional stored media. Export text, senders, timestamps, views, replies, forwards, reactions, topics, service events, URLs, hashtags, and media from a start date.

Pricing

from $0.51 / 1,000 messages

Rating

5.0

(4)

Developer

AgentX

AgentX

Maintained by Community

Actor stats

6

Bookmarked

281

Total users

28

Monthly active users

0.21 hours

Issues response

4 days ago

Last modified

Share

Telegram Chat Scraper is a telegram chat scraper that exports public channel, group, and forum messages as 55-field Dataset rows with optional stored media. It is built for analysts and developers who need ordered Telegram history with source links, sender context, engagement, topics, replies, forwards, and service events.

Apify Users Apify Runs price capability API + MCP ready

  • Public Telegram coverage. Resolve a public channel, group, or forum from a username, @handle, or canonical t.me URL.
  • Structured history. Return message identity, content, sender facts, visible engagement, replies, topics, albums, forwards, and service actions.
  • Selectable media scope. Keep a metadata-only run, store photos, or store supported photos and document-based media.
  • Incremental persistence. Save ordered batches while history is read, so completed batches remain available if a long run ends early.

The smallest useful text-only run costs up to $0.01054 at FREE event prices: one $0.01 Actor Start plus one $0.00054 Result.

Why Choose Telegram Chat Scraper

Telegram Chat Scraper turns message history into rows that can be filtered, joined, exported, scheduled, and reviewed without manual copying.

Conversation context stays attached. reply_to, thread_id, reply_quote, topic_name, and album_id help distinguish a standalone post from a reply, forum thread, quoted response, or media album.

Sender facts stay separate from chat facts. Sender IDs, usernames, names, rank, boost count, and flags are published only when Telegram exposes them; unsigned channel posts do not invent a person.

Engagement remains source-labeled. Views, replies, forwards, and reaction counts are observations from Telegram, not estimates of unique people or sentiment.

Media is optional. text reports media metadata without storing files, image stores photos, and all adds supported video, GIF, audio, voice, document, and sticker files when available.

Source gaps remain gaps. Missing optional values are omitted instead of being filled with request data, guessed labels, zeroes, or current timestamps.

Quick Start Guide

Configure

Open the input form. The prefilled one-result profile uses the public aipost channel, text mode, and the lowest supported result limit.

Run

Start with this bounded request:

{
"telegram_url": "https://t.me/aipost",
"download_medias": "text",
"max_results": 1
}

Set start_date only when you need a history boundary. A value such as 7 days begins at that relative UTC lookback and proceeds toward the present.

Collect

Open the default Dataset and verify the item count, id, date, source_url, and processed_at. Export through Apify's Dataset formats or continue through the API, MCP, schedules, webhooks, or another Actor.

Input Parameters

Four input parameters control the public target, media storage, history boundary, and maximum number of publishable rows.

ParameterTypeRequiredDescriptionExample
telegram_urlstringYesPublic username, @handle, t.me/username, or t.me/s/username; private invite links are rejectedhttps://t.me/aipost
download_mediasenum (3 values)Yestext, image, or alltext
start_datestringNoUTC YYYY-MM-DD or a relative lookback such as 7 days, 2 weeks, 1 month, or 1 year7 days
max_resultsintegerYesMinimum 1; no schema maximum for paying runs; free-plan runs are capped at 101

max_results counts publishable Dataset rows, not raw source objects. Reading begins at the oldest message that matches the optional boundary. When a chat contains fewer matching messages than requested, the Actor returns all available publishable rows.

Output Data Schema

One Dataset row represents one publishable Telegram message or service event, with 55 documented fields and source-absent values omitted.

GroupFields
Chatchat_id, chat_username, chat_title, chat_type, chat_description, chat_member_count
Messageid, source_url, type, date, edit_date, text
Sendersender, sender_id, sender_username, sender_name, sender_flags, sender_rank, sender_boost_count
Conversationtopic_name, reply_to, thread_id, reply_quote, album_id
Engagementview_count, reply_count, forward_count, reactions
Referencesurls, hashtags, link_preview, poll, location, forward_info, via_bot_id
Mediamedia_type, media_name, media_size, media_duration, media_mime_type, media_extension, media_width, media_height, media_emoji, media_streamable, media_round, media_has_stickers, media_url
State and servicerestriction_reasons, service_type, service_info, silent, pinned
Processingprocessor, processed_at

This abbreviated item uses the shared aipost scenario; real rows expose only the applicable subset of the 55 fields:

{
"chat_id": 1526709058,
"chat_username": "aipost",
"chat_title": "AI Post — Artificial Intelligence",
"chat_type": "channel",
"id": 101,
"source_url": "https://t.me/aipost/101",
"type": "regular",
"date": "2024-01-15T12:00:00+00:00",
"text": "Example public post with #ai",
"view_count": 2500,
"hashtags": ["#ai"],
"media_type": "photo",
"processor": "https://apify.com/username/actor_name",
"processed_at": "2026-08-12T12:00:00+00:00"
}

Dataset items can be downloaded as JSON, JSONL, CSV, Excel, XML, or RSS, or read through the Dataset API.

Integration Examples

Use Actor ID CTS2Fv7KyZuiQeSJ8 or the name form agentx/telegram-chat-scraper with the same aipost text-only scenario.

Actor ID

CTS2Fv7KyZuiQeSJ8

HTTP

curl -X POST "https://api.apify.com/v2/acts/CTS2Fv7KyZuiQeSJ8/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"telegram_url":"https://t.me/aipost","download_medias":"text","max_results":1}'

Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("CTS2Fv7KyZuiQeSJ8").call(run_input={
"telegram_url": "https://t.me/aipost",
"download_medias": "text",
"max_results": 1,
})
items = list(client.dataset(run["defaultDatasetId"]).iterate_items())

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('CTS2Fv7KyZuiQeSJ8').call({
telegram_url: 'https://t.me/aipost',
download_medias: 'text',
max_results: 1,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Make.com and n8n

In Make.com, choose the Apify Run an Actor module, paste CTS2Fv7KyZuiQeSJ8, and map the three JSON inputs from the shared scenario. In n8n, use the Apify node or an HTTP Request node with the same Actor ID and payload, then read the run's default Dataset.

MCP

Follow the official Apify MCP guide, connect https://mcp.apify.com/?token=YOUR_TOKEN, and call:

{
"actor": "agentx/telegram-chat-scraper",
"input": {
"telegram_url": "https://t.me/aipost",
"download_medias": "text",
"max_results": 1
}
}

Pricing

At FREE prices, each Result is $0.00054, Actor Start is $0.01, and the smallest one-result text run totals $0.01054 before platform usage outside event pricing.

EventFREEBRONZESILVERGOLDPLATINUMDIAMOND
Actor Start (once per run)$0.01000$0.01000$0.01000$0.01000$0.01000$0.01000
Result (per Dataset row)$0.00054$0.00049$0.00043$0.00041$0.00041$0.00041
Media (per stored file)$0.00100$0.00090$0.00080$0.00075$0.00075$0.00075

Smallest useful run: $0.01000 + 1 × $0.00054 = $0.01054. A 100-result run with 10 stored files is $0.01000 + 100 × $0.00054 + 10 × $0.00100 = $0.07400 at FREE event prices.

Actor Start is one platform event per GB with a minimum of one event; the default 128 MiB run therefore incurs the minimum one start event. Prices can change, so confirm the live pricing page before budgeting.

Use Cases

Public community research: combine date, sender_name, topic_name, reply_to, and reactions to review how a bounded discussion unfolded.

Channel monitoring: schedule a recent start_date, retain source_url and id, and compare views, forwards, links, and hashtags in a downstream table.

Content archives: export text, date, urls, forward_info, and stored media_url values for an authorized reference collection.

Forum analysis: use thread_id, topic_name, reply_quote, and album_id to preserve the structure that a flat text export loses.

Media review: choose image or all, then apply your own retention, access-control, and malware-scanning policy to stored files.

Alternatives

Manual Telegram review is best for a few posts when a person needs immediate context and no repeatable Dataset. Telegram Desktop's official export is better when you control the account and need an offline personal archive; Telegram documents that export workflow in its Chat Export Tool.

Telegram Chat Scraper is the better fit when a public username must feed an Apify Dataset, API, schedule, webhook, or MCP workflow. A custom client offers deeper control over credentials and recovery, but it also requires ownership of authentication, rate-limit handling, storage, and ongoing maintenance.

Choose something else for private invite links, member-list extraction, real-time moderation, identity verification, sentiment scoring, or cross-platform discovery. Those are different data contracts.

Limits and Troubleshooting

  • Target rejected → the value is blank, private, or not a supported username form → use a bare username, @username, t.me/username, or t.me/s/username.
  • No rows → the date window is empty or the target is unavailable → remove start_date, select text, request 1, and verify the public username in Telegram.
  • Fewer rows than requested → the chat has fewer publishable messages, the free cap applied, or some source objects were not publishable → compare the requested boundary with returned IDs and dates.
  • Media URL absent → media was not selected, not available, too large, unsupported, or failed to store → rerun a one-result image test on a known photo post and inspect the Key-Value Store.
  • Views changed → Telegram's counters are source observations and may evolve → preserve processed_at and compare like-for-like timestamps.
  • Long history interrupted → source or runtime limits ended the run → use a later start_date; already pushed batches remain in the Dataset.

For a reproducible defect, open Issues with the run ID, exact sanitized input, expected rows, actual rows, and whether media storage was enabled.

Trust and Reliability

The Actor runs on Apify, publishes a 55-field Dataset contract, and bills only Actor Start, successful Dataset Results, and successfully stored media files under the configured event pricing.

Telegram remains the source of chat identity, timestamps, sender facts, counters, reactions, message relationships, service actions, and media availability. The official Telegram channel documentation explains that channels, supergroups, and forums share related message structures while retaining different roles.

Rows use source values or deterministic links built from source usernames and message IDs. Request values do not backfill missing source facts, and processed_at is separate from Telegram's message date.

Public scope. Use public username-addressable chats you are authorized to process; private invite links are not supported.

Responsible handling. Follow Telegram's terms, applicable law, privacy duties, copyright, and your retention policy. Sender labels and flags can be personal data even in a public chat.

No harmful use. Do not use exports for harassment, surveillance, spam, sensitive profiling, credential collection, or unauthorized redistribution. Scan downloaded files and restrict access before opening or forwarding them.

Frequently Asked Questions

How do I scrape telegram group messages?

Use the group's public username or t.me URL, choose a media mode, and set max_results; private invite links cannot be opened by this Actor.

How does telegram message history export work?

The Actor starts at the oldest message or the optional start_date, moves toward the present, and writes each publishable message or service event as an ordered Dataset row.

Is there a free Telegram data API?

You can test the Actor on Apify's available free platform allowance, but event pricing still applies: the smallest FREE-price one-result run is $0.01054.

Can I schedule runs to monitor Telegram chats over time?

Yes. Use Apify schedules with a recent relative start_date, then deduplicate downstream by chat identity and message id because the Actor does not maintain a cross-run checkpoint input.

Are Telegram views unique people?

No. view_count preserves Telegram's visible counter; Telegram's Channels FAQ notes that channel view counts are approximate.

What does all media include?

all stores supported photos, videos, GIFs, audio, voice, documents, and stickers when available, while each row still reports media metadata even when no file is stored.

Does max_results guarantee that many rows?

No. The target may have fewer publishable messages, a date boundary may narrow history, the free-plan cap may apply, or source failures may reduce output.

AgentX publishes 77 Actors — the three closest Telegram tools first, then the full catalog by category.

Closest to this Actor:

Business and Market Intelligence

Jobs and Hiring

Social Media

Video, Transcripts and Downloads

E-Commerce and Retail

Classifieds and Automotive

Real Estate

Support and Community

Ask about public Telegram history, media exports, fields, pricing, or integrations in the AgentX community on Telegram; for a reproducible bug, open an Issue with the run ID and exact sanitized input.

AgentX is an Arcyton brand — arcyton.com.

Last Updated: August 15, 2026