Telegram Channel Posts Scraper – Comments & Media
Pricing
from $0.02 / 1,000 post extracteds
Telegram Channel Posts Scraper – Comments & Media
Export public Telegram channel posts, comment counts and optional public comments with text, authors, dates, media, views, filters, and monitoring fields.
Pricing
from $0.02 / 1,000 post extracteds
Rating
0.0
(0)
Developer
Hanna Nosova
Maintained by CommunityActor stats
0
Bookmarked
15
Total users
10
Monthly active users
11 minutes ago
Last modified
Categories
Share
Telegram Channel Posts Scraper
Export posts and optional public comments from Telegram channels with comment counts, text, authors, timestamps, views, channel metadata, media URLs, filters, and incremental checkpoints.
Use this Actor to collect public Telegram channel posts for social listening, news monitoring, crypto and market research, media analysis, brand tracking, and recurring channel dashboards. Results can be downloaded as CSV, JSON, Excel, XML, RSS, or used through the Apify Dataset API.
At a glance
- Public channel export: Enter Telegram channel handles, usernames, or public channel URLs.
- Post data rows: Export post IDs, URLs, dates, text, views, links, media types, previews, and public engagement fields when Telegram exposes them.
- Channel context: Add public title, description, verification, photo URL, and subscriber count to each post.
- Date filtering: Limit posts with
sinceDateanduntilDate. - Public comments: Optionally add recent public discussion comments and accurate comment counts to each post row.
- Engagement filtering: Keep only posts meeting a
minCommentsthreshold. - Monitoring ready: Schedule recurring checks with
afterPostIdor per-channelafterPostIdscheckpoints. - API export: Send Telegram post rows to spreadsheets, BI tools, alerting systems, databases, or AI agents.
Ready-to-run examples
Use these saved Store examples as starting points. Open any example to prefill the Actor input, then adjust URLs, keywords, limits, or filters for your own run.
- Monitor a public Telegram channel
- Build a Telegram social listening sample
- Export Telegram channel posts with media
- Export Telegram channel text posts
- Compare public Telegram channel posts
- Scrape Durov Telegram channel posts
- View all ready-to-run examples (7 examples)
What can it do?
Telegram Channel Posts Scraper extracts posts from public Telegram channels and saves one dataset row per post.
- Scrape public channels: Use channel handles, public usernames,
t.melinks, or public channel URLs. - Collect post metadata: Save post text, date, URL, views, replies, forwards, reactions, and links.
- Collect public discussion comments: Save comment text, author, public username, date, URL, and reply-to ID when Telegram exposes the discussion publicly.
- Include media URLs: Add public media URLs when available and requested.
- Capture link previews: Extract preview URL, site, title, description, and image when Telegram publishes a card.
- Identify content types: Distinguish photo, video, document, voice, poll, and sticker markup when visible.
- Filter history: Use date inputs to keep runs focused.
- Export repeatable datasets: Use Apify downloads, API calls, schedules, webhooks, and integrations.
Common workflows
- Social listening: Monitor public Telegram channels for brand, topic, or market mentions.
- News monitoring: Track public posts from media, research, and announcement channels.
- Crypto research: Export public channel posts for project, token, or community analysis.
- Market intelligence: Watch competitor, vendor, industry, or regional channels.
- Content archiving: Store public post rows for later review and analysis.
- AI summaries: Feed post text and links into summarization, classification, or alerting workflows.
What data can you extract?
The Actor returns one dataset row per public Telegram channel post.
| Field | Description |
|---|---|
channelHandle | Input channel handle or URL |
channelUsername | Public Telegram channel username |
channelTitle | Channel title when available |
channelDescription | Public channel description |
channelPhotoUrl | Public channel image URL |
channelVerified | Whether Telegram displays a verified badge |
subscriberCount | Public subscriber count when shown |
postId | Telegram post ID |
postUrl | Public post URL |
date | Post date |
postedAt | Normalized post timestamp when available |
text | Public post text |
edited | Whether the public preview labels the post as edited |
authorName / authorSignature | Public author/signature fields when shown |
forwardedFrom | Public forwarded-source label when shown |
views | Public view count when available |
forwards | Forward count when Telegram exposes it; normally null in public web previews |
replyCount | Accurate public discussion comment count when includeCommentCount is enabled |
replies | Legacy numeric alias for replyCount |
comments | Most recent public comments when includeComments is enabled |
commentsScraped | Number of comment records included in the row |
commentsStatus | Whether comments were available, disabled, or failed to load |
reactions | Public reactions when available |
reactionCount | Sum of all visible public reaction counts |
links | Links found in the post |
hashtags / mentions | Hashtags and public username mentions found in the text |
linkPreview | Public link-card URL, site, title, description, and image |
mediaUrls | Public media URLs when included and available |
mediaTypes | Detected photo, video, document, voice, poll, or sticker types |
hasPhoto / hasVideo / hasDocument / hasVoice | Convenient media flags |
rawHtmlSnippet | Optional raw HTML snippet |
scrapedAt | Timestamp when the row was saved |
Pricing
This Actor uses Apify pay-per-event pricing. The prices below come from the current Actor pricing configuration. Apify public plans map to Store discount tiers, so the table shows both the user-facing plan context and the pricing tier name. The final price shown in Apify depends on the user account plan and any custom agreement.
| Event | What is charged | Free / no discount | Starter / Bronze | Scale / Silver | Business / Gold | Custom / Platinum | Custom / Diamond |
|---|---|---|---|---|---|---|---|
start | Once, after channel and filter inputs are validated | $0.005 | $0.005 | $0.005 | $0.005 | $0.005 | $0.005 |
post | Per public post successfully saved | $0.000042251 | $0.000036740 | $0.000028657 | $0.000022044 | $0.000014696 | $0.000010287 |
Invalid input fails before the start event. Missing/private channels and filtered-out posts do not create post charges.
Apify may also charge platform usage for compute, storage, proxies, or data transfer outside this Actor pricing. Check the Actor run and the Apify Pricing tab for the exact cost shown to your account.
Input configuration
| Setting | JSON key | Use it for | Example |
|---|---|---|---|
| Channels | channels | Public Telegram handles, usernames, or channel URLs. | ["telegram"] |
| Maximum posts | maxPosts | Cap saved post rows and spend. | 25 |
| Maximum posts per channel | maxPostsPerChannel | Balance output across multiple channels while preserving the overall cap. | 10 |
| Maximum history pages per channel | maxPagesPerChannel | Bound how far the public history is paginated. | 100 |
| Only posts since date | sinceDate | Keep posts on or after this date. | 2026-07-01 |
| Only posts until date | untilDate | Keep posts on or before this date. | 2026-07-03 |
| Only posts after ID | afterPostId | Incremental exclusive message-ID checkpoint shared by all channels. | 430 |
| Per-channel checkpoints | afterPostIds | Last-seen exclusive IDs for each channel. | {"telegram":430} |
| Include media URLs | includeMedia | Save public media URLs when available. | true |
| Include raw HTML snippet | includeRawHtmlSnippet | Save a small raw HTML snippet for debugging or custom parsing. | false |
| Include comment count | includeCommentCount | Fetch an accurate public discussion count for every post. | true |
| Include public comments | includeComments | Add public discussion comments to each saved post. | false |
| Maximum comments per post | maxCommentsPerPost | Cap recent public comments included in each post row. | 20 |
| Minimum comments | minComments | Keep only posts with at least this many public comments. | 0 |
| Proxy configuration | proxyConfiguration | Optional Apify Proxy settings. | {"useApifyProxy":true} |
| Safe run-time limit | runTimeSecs | Preserve saved posts and write RUN_SUMMARY before the platform timeout. | 270 |
Example input
{"channels": ["nexta_live"],"maxPosts": 10,"includeComments": true,"maxCommentsPerPost": 20,"minComments": 5}
Example output
{"channelUsername": "telegram","channelTitle": "Telegram News","postId": "123","postUrl": "https://t.me/telegram/123","date": "2026-07-03","postedAt": "2026-07-03T10:00:00.000Z","text": "Example public channel post","views": 12000,"forwards": null,"replyCount": 10,"commentsScraped": 2,"commentsStatus": "AVAILABLE","comments": [{"commentId": "98765","commentUrl": "https://t.me/example/123?comment=98765","authorName": "Public Author","authorUsername": "public_author","authorUrl": "https://t.me/public_author","text": "Example public comment","postedAt": "2026-07-03T10:15:00.000Z","replyToCommentId": null}],"channelVerified": true,"subscriberCount": 10100000,"reactions": {"❤": 56, "🔥": 35},"reactionCount": 91,"links": ["https://example.com"],"mediaUrls": ["https://..."],"scrapedAt": "2026-07-03T12:00:00.000Z"}
How to run it
- Open the Actor on Apify.
- Add one or more public Telegram channels.
- Set
maxPosts. - Add optional date filters.
- Choose whether to include media URLs, comment counts, public comments, or raw HTML snippets.
- Start the run and export the dataset.
Search tips
- Use public channels only: Private channels and groups are not supported.
- Start with one channel: Confirm output shape before adding a large channel list.
- Use date filters: Keep recurring runs focused with
sinceDate. - Enable media only when needed: Media URLs can make rows larger.
- Bound comment enrichment: Start with a small
maxPostsandmaxCommentsPerPost; comment collection adds requests for each inspected post. - Schedule monitoring: Reuse the same channel list for daily or weekly snapshots.
- Store checkpoints: Save the highest numeric
postIdper channel and pass it inafterPostIdson the next run.
Limits and caveats
- The Actor extracts public Telegram channel posts only.
- It does not access private channels, private groups, user chats, or login-gated data.
- Reaction and media fields contain only values visible in Telegram's public post preview.
- Very large channels may require focused limits and date windows.
- Telegram CDN media URLs are signed and can expire. Download them during the run or soon afterward if you need durable media files.
- Only comments exposed by Telegram's public discussion widget are available. Private, deleted, disabled, login-gated, or app-only discussions are not accessed.
- Comment enrichment returns the most recent comments up to
maxCommentsPerPost, ordered oldest to newest within the returned slice. - Telegram's public web previews do not currently expose forward totals, so
forwardsis normallynull. The Actor does not fabricate this value.
API usage
cURL
curl -X POST 'https://api.apify.com/v2/acts/fetch_cat~telegram-channel-posts-scraper/runs?token=YOUR_APIFY_TOKEN' \-H 'Content-Type: application/json' \-d '{"channels":["nexta_live"],"maxPosts":10,"includeComments":true,"maxCommentsPerPost":20,"minComments":5}'
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('fetch_cat/telegram-channel-posts-scraper').call({channels: ['nexta_live'],maxPosts: 10,includeComments: true,maxCommentsPerPost: 20,minComments: 5,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
from apify_client import ApifyClientimport osclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('fetch_cat/telegram-channel-posts-scraper').call(run_input={'channels': ['nexta_live'],'maxPosts': 10,'includeComments': True,'maxCommentsPerPost': 20,'minComments': 5,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
MCP and AI agents
This Actor can be used through the official Apify MCP server at https://mcp.apify.com.
Claude CLI setup
$claude mcp add apify --transport http https://mcp.apify.com?tools=fetch_cat/telegram-channel-posts-scraper
JSON config
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=fetch_cat/telegram-channel-posts-scraper"}}}
Example prompts
- "Scrape the latest 25 posts from the public Telegram channel
telegram." - "Export public Telegram posts from
durovsince 2026-07-01 and include media URLs." - "Compare recent public posts from
telegramanddurovfor social listening." - "Export posts from
nexta_livewith at least 10 comments and include up to 20 recent public comments per post."
Use the same JSON keys shown in the input configuration table, such as channels, maxPosts, sinceDate, untilDate, includeComments, maxCommentsPerPost, and minComments.
FAQ
Can it scrape private Telegram channels?
No. It extracts public channel pages only.
Can it scrape Telegram groups?
No. This Actor is for public Telegram channels.
Can I scrape multiple channels in one run?
Yes. Add multiple values to channels.
Can it scrape Telegram comments?
Yes, when a public channel post has a publicly accessible linked discussion. Enable includeComments and choose maxCommentsPerPost. The Actor does not log in or access private or app-only comments.
Can I filter posts by comment count?
Yes. Set minComments above 0. The Actor checks Telegram's public discussion count and saves only posts meeting the threshold.
Why did a channel return no posts?
Open the channel at https://t.me/s/<username> in a logged-out browser. Private/deleted channels, groups, bots, sensitive-content shells, and channels with public previews disabled cannot be exported. Check RUN_SUMMARY for per-channel status, pages fetched, posts seen, saved counts, and upstream errors.
Why did an older untilDate run return no posts before this update?
Older builds could stop after the newest page when every post there was newer than untilDate. The Actor now keeps paginating backward until it reaches the requested window, the history ends, a checkpoint is reached, or a configured safety limit stops the run.
Can I keep media URLs permanently?
No guarantee. Telegram's public CDN URLs can expire. Download media promptly when durable storage is required.
Can I export to CSV or Excel?
Yes. Apify datasets can be downloaded as CSV, JSON, Excel, XML, RSS, HTML, or accessed through the API.
Related Actors
Support
If a run fails, returns no data, or a field looks wrong, open an issue from the Actor page.
Please include the Apify run ID or run URL, input JSON, one reproducible public URL, the expected output, and the actual output returned in the dataset or RUN_SUMMARY. Small reproducible inputs make source issues much faster to fix.
Privacy and data handling
This Actor runs with Apify limited permissions and only processes data needed for the documented run. It uses content lookup inputs and public posts, profiles, videos, comments, or channel metadata needed for the requested output to produce the output dataset and sends requests to public Telegram Channel Posts pages/endpoints; results are stored in Apify run storage for your account. FetchCat does not use your inputs or outputs for advertising, does not use them for model training, and does not retain them outside the Apify run except for transient support debugging when you explicitly share run details. You are responsible for using the Actor lawfully, respecting the target site's terms, and avoiding unnecessary personal or sensitive data in inputs.