Telegram channel scraper for dependable post-history exports, returning 55 structured fields plus optional stored media. Capture text, senders, dates, views, replies, forwards, reactions, topics, service events, links, hashtags, and media from any public username.
At a glance
| Store brand | TrueFetch — apify.com/truefetch |
|---|---|
| Pricing model | pay per event |
| Price per result row | $0.00035 on the Free plan |
| 1,000 rows (Free plan) | $0.36 |
| 1,000 rows (Gold plan) | $0.27 |
| Default / max memory | 128 MB / 256 MB |
| Run timeout | 12 h |
| Public runs, last 30 days | 8,372 · 98.4% succeeded |
| Users | 100 in 30 days · 824 all time |
| First published | August 13, 2025 |
| Last build | 1.0.18 on August 18, 2026 |
What you have to give it
3 of the 4 input fields are required; the rest have defaults and can be left out.
| Field | Type | Required | Accepted values | What it does |
|---|---|---|---|---|
telegram_url | string | yes | https://t.me/telegram | Public Telegram channel username as a bare handle, @username, or canonical t.me URL. Public groups and forums also work; private invite and join links do not. |
download_medias | string | yes | text, image, all | Use text for a metadata-first export, image to store photos, or all to store supported photos, videos, GIFs, audio, voice, documents, and stickers. |
start_date | string | no | — | Optional UTC history boundary as YYYY-MM-DD or a relative lookback such as '7 days', '2 weeks', '1 month', or '1 year'. Posts are read from that point forward. |
max_results | integer (messages) | yes | 2 | Maximum channel posts or other public messages to return. The minimum is 1 with no schema maximum for paying runs; free-plan runs are capped at 10. Results are saved in ordered batches as history is read. |
A run that works
The values below are the Actor's own prefills, so this input is valid as written:
{
"telegram_url": "https://t.me/telegram",
"download_medias": "image",
"max_results": 2
} What comes back
Every dataset row carries the 55 fields below. The examples are the ones declared in the Actor's own output schema.
| Field | Type | Example | Meaning |
|---|---|---|---|
chat_id | integer | null | 1526709058 | Telegram numeric identifier of the chat the message belongs to. |
chat_username | string | null | aipost | Public username of the chat without the @ prefix, or null when the chat has none. |
chat_title | string | null | AI Post - Artificial Intelligence | Display title of the channel or group. |
chat_type | string | null | channel | Chat kind: channel for broadcast, group for a supergroup, forum for a topic-based group. |
chat_description | string | null | A public community for Python developers. | Public description of the chat at processing time. |
chat_member_count | integer | null | 97864 | Source-reported participant or subscriber count at processing time. |
id | integer | null | 7696 | Message identifier, unique within the chat. |
source_url | string | null | https://t.me/aipost/7696 | Canonical t.me link to this message, or null when the chat has no public username. |
type | string | null | regular | Message kind: regular for a posted message, service for a chat event such as a title change. |
date | string | null | 2026-08-01T10:39:00+00:00 | UTC timestamp when the message was sent. |
edit_date | string | null | 2026-08-01T11:02:00+00:00 | UTC timestamp of the last edit, or null when never edited. |
text | string | null | OpenAI Prepares to Unleash Web Crawler | Message body text, or null for a message that carries only media or a service action. |
sender | string | null | @dbsergey | Author label: the signature on a signed channel post, or the @username or name of the group member. Null for unsigned channel posts, whose author is the chat itself. |
sender_id | integer | null | 279058397 | Telegram numeric identifier of the sending account, or null when the sender is the chat itself. |
sender_username | string | null | example_user | Active public username of the sending account without @, when available. |
sender_name | string | null | Example User | Public display name of the sending account, when available. |
sender_flags | array | null | bot | True source labels for the sender, limited to bot, verified, scam and fake; false labels are omitted. |
sender_rank | string | null | admin | Source-provided group rank or role label for the sender. |
sender_boost_count | integer | null | 1 | Boosts Telegram attributes to the sender for this message. |
topic_name | string | null | Basketball | Forum topic the message was posted in. Null in channels and non-forum groups. |
reply_to | integer | null | 2163544 | Message ID this message replies to, or null when it is not a reply. |
thread_id | integer | null | 2262054 | Root message ID of the forum topic containing this message. |
reply_quote | string | null | Quoted source text | Quoted source text included in the reply header, when Telegram provides it. |
album_id | integer | null | 13985746789012344 | Grouping identifier shared by the messages of one multi-item album. |
view_count | integer | null | 55600 | Views recorded by Telegram. Channels only; groups do not count views. |
reply_count | integer | null | 12 | Replies in the linked discussion thread, or null when the chat has none. |
forward_count | integer | null | 47 | Times the message was forwarded. Channels only. |
reactions | object | null | {"👍":42,"🔥":7} | Reaction name to count for this message. Standard reactions are keyed by their emoji, custom ones by 'custom:<emoji document id>', and paid star reactions by 'paid'. |
urls | array | null | https://openai.com/blog | Links carried by the message, both plain and hyperlinked text. |
hashtags | array | null | #AI | Hashtags present in the message text. |
media_type | string | null | video | What the message carries: photo, video, gif, voice, audio, sticker, document, or webpage. Reported for every message regardless of the download setting. |
media_name | string | null | report.pdf | Original file name of the attached document, when the source supplies one. |
media_size | integer | null | 2451920 | Attached file size in bytes. |
media_duration | number | null | 94 | Playback length in seconds. Telegram reports video duration as a fractional value and audio duration as a whole number, so this field accepts both. |
media_mime_type | string | null | video/mp4 | Source-reported MIME type of the attached file. |
media_extension | string | null | .mp4 | File extension inferred by Telethon from source media metadata. |
media_width | integer | null | 1920 | Source-reported media width in pixels. |
media_height | integer | null | 1080 | Source-reported media height in pixels. |
media_emoji | string | null | 🐶 | Emoji associated with sticker media, when present. |
media_streamable | boolean | null | true | Whether Telegram marks the document video as streamable. |
media_round | boolean | null | false | Whether the attached video is a round video message. |
media_has_stickers | boolean | null | false | Whether photo media has stickers or the document is a sticker. |
media_url | string | null | https://api.apify.com/v2/key-value-stores/abc/records/media-7696.jpg | Public URL of the stored file, present only when the run downloaded it. |
link_preview | object | null | {"url":"https://telegram.org/blog/example","site_name":"Telegram","title":"Examp | Compact Telegram link-preview facts such as URL, site, title, description, author, embed dimensions and duration; cached linked-page bodies are excluded. |
poll | object | null | {"question":"Choose one","options":[{"text":"A","voters":10}],"total_voters":10} | Poll question, options, aggregate voter counts and source poll settings; voter identities and viewer-relative choices are excluded. |
location | object | null | {"latitude":40.76719,"longitude":-73.98143,"title":"Magnolia Bakery"} | Public location or venue coordinates and source-provided venue labels. |
forward_info | object | null | {"date":"2026-07-30T08:00:00+00:00","from_id":1006503122,"from_name":"Pavel Duro | Origin of a forwarded message: original date, source id, source name, and source message id. |
via_bot_id | integer | null | 123456789 | Telegram numeric identifier of the bot through which the message was posted. |
restriction_reasons | array | null | [object Object] | Source restriction entries limited to platform, reason and explanatory text. |
service_type | string | null | Channel Create | Chat event this service message records, such as Pin Message or Chat Edit Title. |
service_info | string | null | title=AI Post | Details of the service action as key=value pairs. |
silent | boolean | null | false | Whether the message was posted without a notification. |
pinned | boolean | null | false | Whether the message is pinned in the chat. |
processor | string | null | https://apify.com/username/actor_name | Actor attribution URL recorded on every row. |
processed_at | string | null | 2026-08-03T13:49:29+00:00 | UTC timestamp when this row was produced by the run. |
What it costs
| Charged event | Price | When |
|---|---|---|
| Actor Start | $0.01 | Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). |
| Result | $0.00035 – $0.00026 | Single result in the default dataset. |
| Media | $0.0008 – $0.0006 | Single downloaded media file linked from a dataset message. |
Per 1,000 rows, by Apify plan
| Plan | Per row | 1,000 rows | 10,000 rows |
|---|---|---|---|
| Free | $0.00035 | $0.36 | $3.51 |
| Bronze | $0.00032 | $0.33 | $3.21 |
| Silver | $0.00028 | $0.29 | $2.81 |
| Gold | $0.00026 | $0.27 | $2.61 |
| Platinum | $0.00026 | $0.27 | $2.61 |
| Diamond | $0.00026 | $0.27 | $2.61 |
Every total includes the $0.01 start fee once. Apify charges that fee per gigabyte of memory, so a 128 MB run pays it a single time.
When not to use it
- Memory is capped at 256 MB, so a very large job should be split into several narrower runs rather than scaled up.
- The dataset carries 55 fields and nothing else; if your analysis needs a field that is not in the table above, no input setting will add it.
- It reads what is public at run time. There is no archive behind it, so a question about last quarter has to be answered from data you already collected.
Closest Actors in the catalog
Same categories, ordered by how many people run them. Compare the field tables before choosing.
| Actor | Brand | Fields | 1k rows (Free) | Users / 30 d |
|---|---|---|---|---|
| Telegram Profile | TrueFetch | 41 | $3.01 | 56 |
| Telegram Group Member | TrueFetch | 23 | $0.56 | 21 |
| Reddit Community Profile | TrueFetch | 67 | $50.01 | 16 |
| Reddit User Profile | TrueFetch | 33 | $45.01 | 11 |
| Reddit Usernames Scraper ↗ | TrueFetch | 25 | $7.51 | 1 |
| Reddit Community Post ↗ | TrueFetch | 53 | $5.51 | 1 |
Field guides that use this data
- Reddit Research APIs Compared: Community, Posts, People, or Search — Reddit exposes four distinct research surfaces — community profile, post feeds, people, and keyword search. Which one answers which question, with field counts.
- How to Build a Creator Outreach List from Public Data — A repeatable pipeline for influencer and creator outreach: discovering creators by niche, enriching profiles across YouTube, Instagram, and TikTok, and extracting published business contacts responsibly.
- Instagram and TikTok Trend Research Without Vanity-Metric Traps — A source-aware method for comparing public creator and trend signals across Instagram and TikTok while controlling for time, discovery method, and incomplete metrics.
Prove it on a narrow run
Open the live contract.
Pricing, availability and schema can change between snapshots. The Apify Actor page is the current source of truth.
Catalog snapshot 2026-09-04; Actor contract, pricing and run statistics read 2026-09-04.