Telegram Channel Scraper - Full History & Media avatar

Telegram Channel Scraper - Full History & Media

Pricing

$0.20 / 1,000 telegram post returneds

Go to Apify Store
Telegram Channel Scraper - Full History & Media

Telegram Channel Scraper - Full History & Media

Export the complete post history of any public Telegram channel: text, direct media URLs, reactions, polls, replies and forwards. No account, phone number or API key, and no cap on messages per channel.

Pricing

$0.20 / 1,000 telegram post returneds

Rating

0.0

(0)

Developer

Monkey D. Scraping

Monkey D. Scraping

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

5 days ago

Last modified

Share

Telegram Channel Scraper — export a full channel history without an API key

Export everything a public Telegram channel has ever posted, as clean structured data: the text of every message, direct media URLs, view counts, reactions, polls, replies, forwards and link previews, already parsed into one row per post.

No Telegram account. No phone number. No API key. No bot token. Paste a channel name and run it.

$0.20 per 1,000 posts. No start fee, no per-channel fee, no run minimum, platform usage included.


Export a Telegram channel to CSV in four steps

  1. Put the channel name in Channelscointelegraph, @cointelegraph and https://t.me/cointelegraph all work.
  2. Set Max messages per channel, or clear the field to export the channel's entire history.
  3. Run the Actor.
  4. Open the Dataset tab and export as CSV, Excel, JSON, XML or RSS.

For a spreadsheet, set Output format to Compact first: it returns flat columns with no nested objects, which is what Excel and Google Sheets expect.

What you get

  • The complete history. There is no cap on messages per channel. Ask for 100 posts, or for every post a channel has published since its first one.
  • Direct media URLs, including the actual video file rather than only a thumbnail. Photos, videos, round videos, documents with file name and size, voice notes, stickers and GIFs are each typed and listed, and a photo album stays on a single row.
  • Polls with the question, the quiz type, every option and its percentage.
  • Replies and forwards resolved to the source channel and message id, not just a display name.
  • Link previews with site name, title, description and image.
  • Structured reactions — one object per emoji with its count — and view counts as real integers rather than "26.2K" strings.
  • Rich text three ways: plain text, Markdown, and typed entities with offsets, so bold runs, links and code blocks survive into whatever you build next.
  • Channel details — subscribers, verification, description, avatar and the channel's own photo, video, file and link counters — included at no charge.

Every field in the export

FieldWhat it holds
channelUsername, channelName, channelUrlWhich channel the post came from
messageId, messageUrlCanonical identity of the post; also used to deduplicate
publishedAtPublication time in ISO 8601 UTC
text, textLength, textMarkdown, entitiesMessage text as plain, Markdown, and typed offsets
views, viewsTextView count as an integer, plus the abbreviation as shown
reactions, reactionsTotalOne object per emoji with its count, plus the sum
mediaTyped array: photo, video, roundVideo, document, voice, audio, sticker — with URL, thumbnail, file name, size and duration
isAlbumWhether the row carries a multi-photo album
pollQuestion, quiz type, options and percentages
linkPreviewSite name, title, description and image of the linked page
forwardedFrom, replyToSource channel, message id and quoted preview
author, isEdited, isServiceMessagePost signature and status flags
links, hashtags, mentions, cashtagsEverything extracted from the text
channelSubscribers, verification, description, avatar and channel counters
scrapedAtWhen the row was collected

Fields a channel does not publish are returned as null. Nothing is inferred or filled in.

Why runs finish fast

Long histories are collected in parallel rather than one page after another, and every run reports the exact range of message IDs it covered, so you can see the export is complete instead of taking it on trust.

Measured on a public news channel with roughly 340,000 subscribers:

RequestTime
1,000 posts5.9 seconds
10,000 posts38.6 seconds
First row in the datasetunder 1 second

A date cutoff is located directly rather than by paging through everything newer first, so "only posts since January" on a channel with tens of thousands of messages costs a handful of requests instead of thousands.

Typical uses

  • Research and OSINT — pull a channel's full archive into a spreadsheet or a database.
  • Market and crypto monitoring — track what announcement channels publish and how their audience reacts.
  • Brand and reputation — export mentions from the channels that matter to you and narrow them by phrase or regular expression.
  • AI and RAG pipelines — the LLM output format returns one ready-to-embed Markdown document per post, with source URL, date, poll results and media summary already inlined.
  • Content and social analysis — compare posting cadence, reactions and views over time.

Input

Only the channel list is needed. Everything else has a sensible default.

{
"channels": ["cointelegraph", "@durov", "https://t.me/telegram"],
"maxMessagesPerChannel": 500,
"afterDate": "30 days",
"outputPreset": "full",
"includeChannelInfo": true
}

Other options: beforeDate for an exact window, fromMessageId to pull only what is new since your last run, postUrls to export a specific list of posts, includeKeywords, excludeKeywords and regexFilters to narrow the result, sortOrder for chronological output, and downloadMedia to also save the files themselves.

Output

One row per post. In the full format:

{
"channelUsername": "cointelegraph",
"channelName": "Cointelegraph",
"messageId": 71830,
"messageUrl": "https://t.me/cointelegraph/71830",
"publishedAt": "2026-08-28T16:41:01.000Z",
"text": "Bitcoin reclaims its weekly range after the latest ETF inflows",
"textMarkdown": "**Bitcoin reclaims its weekly range** after the latest [ETF inflows](https://example.com/etf)",
"entities": [{ "type": "bold", "offset": 0, "length": 29, "url": null }],
"views": 26200,
"reactions": [{ "emoji": "🔥", "count": 184, "countText": "184" }],
"reactionsTotal": 512,
"media": [{ "type": "video", "url": "https://cdn4.telesco.pe/file/...mp4", "durationSeconds": 30 }],
"poll": null,
"linkPreview": { "siteName": "Cointelegraph", "title": "ETF inflows hit a record" },
"forwardedFrom": null,
"replyTo": null,
"hashtags": ["#bitcoin"],
"channel": { "subscribers": 339000, "isVerified": true }
}

Three output formats over the same underlying data:

  • Full — every field, nested objects. Best for APIs and pipelines.
  • Compact — flat columns only. Best for Excel, Google Sheets and CSV export.
  • LLM — one Markdown document per post. Best for vector databases and AI agents.

Every run also writes a run summary and a per-channel coverage report: how many posts came back, the message-ID range actually read, whether the beginning of the channel was reached, and any range that could not be read.

Pricing

EventPrice
Post returned$0.0002 — that is $0.20 per 1,000 posts
Channel details recordFree
Starting the runFree

You pay for results and nothing else. A run that returns no posts costs nothing. Platform usage is included in that price rather than billed separately, and you can cap the maximum spend of a single run — the Actor stops when that cap is reached instead of running up costs.

Integrations

The dataset is available over the Apify REST API in JSON, CSV, Excel, XML and RSS, and works with n8n, Make, Zapier, LangChain and any HTTP client. Schedule the Actor to run daily and use fromMessageId to fetch only what has appeared since the previous run, or attach a webhook to push each finished run into your own system.

Frequently asked questions

Do I need a Telegram account, phone number or API key?

No. The Actor reads publicly available channel pages. There is nothing to authorise, no bot token to create, and no phone number to hand over.

How many messages can I export from a single channel?

There is no cap. Clear Max messages per channel and the Actor walks the channel back to its first post. A verified run has exported a channel's entire history from message 1.

How long does a large export take?

10,000 posts from one channel completes in about 39 seconds, and 1,000 posts in about 6 seconds. The first row reaches the dataset in under a second, so you can start consuming results while the run is still going.

Can it read private channels or groups?

No. Private channels, invite-only channels, groups and anything behind a login cannot be read — not by this Actor, and not by any tool that does not sign in as you. A channel with no public preview is reported as unreadable rather than silently skipped.

How do I export Telegram messages to Excel or CSV?

Set Output format to Compact, run the Actor, then use the Export button on the Dataset tab and pick CSV or Excel. The compact format has no nested objects, so every field becomes one column.

How do I fetch only new posts since my last run?

Keep the highest messageId you have already stored and pass it as fromMessageId on the next run. Only newer posts are returned, and you are billed only for those.

Does it download photos and videos?

Direct media URLs are always included, including the real video file rather than only a thumbnail. Turn on Download media files and the files themselves are also saved to the run's key-value store. It is off by default because the URLs are usually enough and keep runs fast.

Can I export only a specific date range?

Yes. Published after and Published before accept an absolute date or a relative expression such as 7 days, 1 month or 1 year. A deep cutoff is located directly, so restricting a long history to a recent window does not cost a full crawl.

What does it cost to export 10,000 messages?

$2.00, at $0.20 per 1,000 posts. There is no start fee, no per-channel fee and no run minimum.

This Actor accesses only pages that Telegram publishes openly, without signing in or circumventing any access control, which is why it needs no credentials. What you may then do with the data is a separate question: personal data is regulated in the EU by the GDPR and elsewhere by comparable laws, so collect only what you have a legitimate reason to collect, and take your own legal advice for your specific use. This is not legal advice.

What to check when comparing Telegram scrapers

Question to askWhy it matters
Is there a cap on messages per channel?Many tools stop at 5,000 or 10,000, which silently truncates an archive
Does it return media, polls, replies and forwards?The cheapest tools return text and links only
Is the video URL the real file or a thumbnail?A thumbnail cannot be analysed, transcribed or archived
Does it tell you what it actually covered?Without a coverage report you cannot tell a complete export from a partial one
Is platform usage included in the quoted price?A low headline price can hide separately billed compute
Does it respect your maximum spend per run?If it does not, an unlucky run keeps costing after it stops earning
What is the published success rate?A rich field set is worth little if a run in seven fails

Limitations, stated plainly

  • Public channels only. Private channels, invite-only channels and groups are out of reach.
  • A channel that has disabled its public preview is reported as unreadable, with the reason.
  • Fields a channel does not publish stay null. Nothing is inferred.
  • Comment threads under posts live in a separate discussion group and are not part of this export.
  • View and reaction counts are exactly what the channel shows publicly, including abbreviations, which are also kept in their original text form.
  • Telegram Keyword Search & Channel Scraper — when you do not yet know which channels to read, and want to find posts by keyword across public channels.
  • Telegram New Posts Monitor & Channel Discovery — when you want a scheduled run that returns only what is new since last time.