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%
| Field | Fill rate | Notes |
|---|---|---|
datetime | 100% | ISO 8601, exact to the second. |
message_id | 100% | Unique inside the channel. |
url | 100% | Permalink to the individual post. |
channel_username | 100% | The handle at read time. Editable by the owner. |
telegram_channel_id | 100% | Internal id. Survives a rename, which the handle does not. |
Content fields
| Field | Fill rate | Notes |
|---|---|---|
text | 99.6% | The full body, never truncated. The 0.4% are media-only posts. |
has_photo | 52.4% | Media URLs carry a token and expire. |
has_video | 11.6% | Same caveat on the URL. |
poll | 0.2% | With has_poll. Verified with a positive case. |
buttons | not measured | Inline buttons such as Apply or Contact. Verified present. |
Engagement fields
| Field | Fill rate | Notes |
|---|---|---|
views / views_raw | 99.2% | Typed value and the string as displayed. |
reactions / reactions_total | 11.0% | Only channels with reactions enabled. |
author | 11.0% | Only channels that sign their posts. |
is_reply / reply_to_url | 11.0% | Replies inside a discussion-enabled channel. |
forwarded_from | 8.0% | The propagation signal. |
is_edited | 5.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.
| Field | Overall | In job channels |
|---|---|---|
links / link_domains | 80.7% | Read from the link target, not the visible text. |
tme_handles | 43.2% | 64.2% — and more common than @mentions. |
hashtags | 37.4% | — |
mentions | 30.8% | 53.5% |
emails | 3.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.


