ActorStack.dev

Telegram channel data fields and their measured fill rates

Every field the Actor returns, with the rate it was actually filled on across 893 posts in 9 channels — including the two that vary enough by channel type that an average would mislead.

By Oswaldo Carabano8 min read

Short answer

The Telegram Channel Scraper returns post text on 99.6% of rows, datetime and message identity on 100%, view counts on 99.2%, links on 80.7%, t.me handles on 43.2%, hashtags on 37.4%, @mentions on 30.8%, reactions and author on 11.0%, forwarded_from on 8.0% and emails on 3.0% — all measured over 893 posts across 9 channels. Two of those vary enough by channel type that the average misleads: emails run 0% in news channels and 9.0% in job channels, and t.me handles reach 64.2% in job channels against 43.2% overall.

Key points

  • Identity fields — datetime, message id, url, channel username and the internal channel id — are at 100%, so joins and deduplication are safe on every row.
  • Post text is at 99.6% and is never truncated: the preview serves the full body.
  • Emails at 3.0% overall is an average across channel types that differ by an order of magnitude — 0% in news channels, 9.0% in job channels, and 35% in one job channel measured alone.
  • `telegram_channel_id` survives a channel renaming its @username, which is why it and not the handle is the key to build a history on.
  • `is_edited` at 5.3% is declared as an underestimate under re-measurement rather than published as settled.
On this page6 sections

Every rate below was measured over 893 posts across 9 public channels. Fields with no measured rate say so rather than defaulting to a promise.

Identity fields, all at 100%

FieldFill rateNotes
datetime100%ISO 8601, exact to the second.
message_id100%Unique inside the channel.
url100%Permalink to the individual post.
channel_username100%The handle at read time. Editable by the owner.
telegram_channel_id100%Internal id. Survives a rename, which the handle does not.

Content fields

FieldFill rateNotes
text99.6%The full body, never truncated. The 0.4% are media-only posts.
has_photo52.4%Media URLs carry a token and expire.
has_video11.6%Same caveat on the URL.
poll0.2%With has_poll. Verified with a positive case.
buttonsnot measuredInline buttons such as Apply or Contact. Verified present.

Engagement fields

FieldFill rateNotes
views / views_raw99.2%Typed value and the string as displayed.
reactions / reactions_total11.0%Only channels with reactions enabled.
author11.0%Only channels that sign their posts.
is_reply / reply_to_url11.0%Replies inside a discussion-enabled channel.
forwarded_from8.0%The propagation signal.
is_edited5.3%Declared an underestimate; under re-measurement.

Entity fields, and the two that need a split

Entities are extracted from the post text: links, hashtags, mentions, t.me handles, emails and phone numbers. Two of them vary so much by channel type that the overall figure is the wrong number to plan with.

FieldOverallIn job channels
links / link_domains80.7%Read from the link target, not the visible text.
tme_handles43.2%64.2% — and more common than @mentions.
hashtags37.4%—
mentions30.8%53.5%
emails3.0%9.0%, and 35% in one channel measured alone.

Provenance fields

from_cache, fetched_at and data_age_hours are on every row, so a cached row never passes as a fresh one. Cached pages are held for 7 days and archives for 90. Setting maxCacheAgeDays to 0 forces a fresh fetch — why every row carries its own age.

What is not in the output

No attachments of any kind, because the anonymous preview does not render them — 893 posts, zero cases. No member lists, no private channels, no groups. Setting includeContactFields to false additionally empties emails, phone numbers, mentions and t.me handles.

Frequently asked questions

Is the post text ever truncated?
No. The preview serves the full body and the Actor returns it whole, at a 99.6% fill rate over 893 posts. The 0.4% without text are posts that carried only media.
How often do posts contain email addresses?
3.0% overall, but that average spans channel types that differ by an order of magnitude: 0% in news channels, 9.0% in job channels, and 35% in one job channel measured on its own. Plan against the figure for your channel type, not the average.
Which field should I key my dataset on?
`telegram_channel_id` for the channel and `message_id` for the post. The @username can change, and a dataset keyed on a handle silently splits into two histories when a channel renames itself.
Which fields are not measured?
`buttons` is verified present but its rate is not yet measured, and `is_edited` at 5.3% is declared as an underestimate under re-measurement. Both say so rather than being presented as settled.

Sources

Every URL below was requested and returned a page on the date shown.

  1. Operator claimchecked 9 Sept 2026
    Telegram Channel Scraper — Actor README and input schemaActorStack / Apify Store
A white measuring tape curving across a dark background, showing the numbers 15 to 45.
TelegramReference

Exact subscriber counts

Every abbreviated figure Telegram displays is a rounded string. One extra 4 KB request returns the exact integer, and both numbers ship so the rounding stays auditable.

5 min
A person reading on a smartphone in a dark room, their face lit only by the screen.
TelegramGuide

Scrape Telegram channels

A walkthrough of reading public Telegram channels anonymously: the four modes, when search beats reading a history, and what the anonymous preview does and does not render.

9 min
A laptop screen showing a plain text-mode terminal with a command prompt.
TelegramExplainer

The Telegram API question

The Bot API cannot read a channel it is not in. MTProto needs a phone number and an api_id. The public web preview needs neither, and it is what a channel publishes to the open web.

7 min