Telegram Channel Analytics for Ad Buyers - Reach & Ad Share avatar

Telegram Channel Analytics for Ad Buyers - Reach & Ad Share

Pricing

from $14.50 / 1,000 channel analyzeds

Go to Apify Store
Telegram Channel Analytics for Ad Buyers - Reach & Ad Share

Telegram Channel Analytics for Ad Buyers - Reach & Ad Share

Vet public Telegram channels before buying an ad: exact subscribers, median views per post, reach % (ERR), posts per day, share of labelled ad posts, best hour and weekday, and ranks across the channels you list. Every row states the posts and dates it was measured on.

Pricing

from $14.50 / 1,000 channel analyzeds

Rating

0.0

(0)

Developer

NeverEmpty

NeverEmpty

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Telegram Channel Analytics for Ad Buyers - reach, ad share and the exact subscriber count

Check a Telegram channel before you pay for an ad in it. Give this Actor one channel or a list of them and it returns one row per channel with the numbers an ad buyer asks for: the exact subscriber count, the median views per post, reach % (ERR), posts per day, how many posts were labelled ads and how those ads were read compared with the other posts, the best hour and weekday to post, the advertising contact named in the channel description, and ranks across every channel in the run.

Every number says what it was measured on. Each row carries postsUsed, periodFrom, periodTo and a plain-English basisSummary such as "20 post(s) from 2026-01-09 to 2026-09-03 (the channel has no older posts). View figures use 20 post(s) older than 24 h." An average without its basis is not something you can compare, so this Actor does not return one.

The subscriber count is the exact one. Telegram's preview page shows a rounded figure - Bloomberg's channel reads 172K there - while the channel's own profile page publishes 171,899. Reach % is calculated only against that exact figure; when it cannot be read, reach % is left empty and subscribersNote says why, instead of dividing by a rounded number.

No login, no Telegram API key, no account. Only the pages Telegram serves to anyone without logging in are read. Export as JSON, CSV or Excel.

What one channel row gives you

ColumnWhat it is
channel, channelTitle, channelUrl, verified, descriptionthe channel
adContactHandles@usernames named next to "реклама", "ads", "сотрудничество", "promo" and similar words in the description - who to contact to buy an ad
subscribers, subscribersAreExact, subscribersDisplay, subscribersNotethe exact count from the profile page, the rounded figure the preview shows, and why the exact count is missing when it is
postsUsed, periodRequestedDays, periodFrom, periodTo, daysCovered, postsLimitedBy, basisSummarywhich posts the figures were measured on, and why reading stopped where it did
viewsMedian, viewsMean, viewsMin, viewsMax, postsWithViewsCounted, postsTooNewForViewsviews per post, from posts old enough for their views to have settled
errPct, errMedianPctreach %: mean (and median) views per post divided by the exact subscriber count
reactionsMedian, reactionsPer1kViewshow much readers react
postsPerDay, postsPerWeek, medianHoursBetweenPosts, lastPostAt, daysSinceLastPostposting rhythm, and whether the channel has gone quiet
viewsTrendPct, cadenceTrendPct (with the medians and counts behind them)is the channel growing or fading within the period: newer half against older half
adPosts, adPostsPct, adPostsPerWeek, adMarkersFound, adPostUrlshow many posts carried an ad label, which labels, and links to those posts
adViewsMedian, otherViewsMedian, adViewsVsOtherPcthow ads were read compared with the channel's other posts - the number to look at before you buy
forwardedPosts, forwardedPct, topForwardSources, topMentionedChannelswhich channels it reposts and mentions (useful for finding similar channels)
photoPct, videoPct, linkPreviewPct, textOnlyPctthe content mix
timezone, bestHour, bestWeekday, postingHours[], postingWeekdays[]posts and median views by hour and weekday, in the time zone you choose
topPosts[]the five most-viewed posts with their links
channelsCompared, rankBySubscribers, rankByViewsMedian, rankByErr, rankByPostsPerDay, rankByFewestAdsranks across the channels in the same run (1 = best; ties share a rank)

Turn on includePosts to also get one row per post used (rowType: "post") with its views, reactions, isAd, the ad labels found in it and countedInViewFigures, so any figure in the channel row can be checked post by post.

How ads are recognised

Only by the labels written in the post - nothing is guessed from the topic or the wording:

  • the Russian ad registration id erid, written in the text or carried in a link (?erid=...)
  • the legal label line "Реклама." / "Реклама," at the start of a line, "на правах рекламы", "партнёрский материал" / "партнерский пост"
  • "sponsored post", "paid partnership", a line that says only "Sponsored" or "Advertisement"
  • the hashtags #реклама, #ad, #ads, #sponsored, #advertising, #promo, #промо, #партнер, #partner, #спонсор
  • any words you add in extraAdMarkers

Checked on a real feed: on the vc.ru news channel, 2 of 19 posts on one page carried an erid link and both were found, and none of the other 17 were marked. A news post that merely mentions advertising ("Зрителей достала реклама в телевизоре") and a description line that names the ad contact ("Реклама: @name") are not counted as ads.

Input

FieldWhat it does
channelsthe public channels to analyze, as @durov, durov, https://t.me/durov or a link to a single post
periodDaysmeasure the posts of the last N days (default 30; 0 = the most recent posts up to the maximum)
maxPostsPerChannelhow far back each channel is read at most (default 300; Telegram serves 20 posts per page)
settleHoursleave posts younger than this out of the view figures (default 24)
timezonethe IANA time zone for the hour and weekday tables (default UTC)
includePostsalso return one row per post used
extraAdMarkersextra words that mark a post as an ad on a particular channel
useProxyretry through a proxy if Telegram ever answers with a bot check

Rows that are never charged

When there is nothing to sell, you get a row that says why, and it is free:

statusWhat happened
no-such-channelnobody has taken the name. Telegram answers a free name with its generic download page instead of a profile
not-a-public-channelthe name exists, but has no public post preview: Telegram answers the preview URL with a 302. It does that for a bot, a personal account, a group, and a channel whose owner turned the preview off, so this row does not claim which
no-resultsthe channel page loaded and Telegram published no posts on it
blockedTelegram answered with a bot check instead of the page
unreadablethe page could not be read, or the input was not a public channel name; nothing is guessed
duplicate-channelthe same channel is listed twice, or the name is another username for a channel already analyzed in this run (t.me/techmeme and t.me/arstechnica once led to the same channel), so it is not charged twice
budget-reachedthe run hit the maximum total charge you set and stopped; the row says how many rows were left behind

A channel that exists but posted nothing in the period does get its analysis row: subscribers, lastPostAt and daysSinceLastPost tell you it has gone quiet, which is worth knowing before buying.

Limitations

  • View counts are rounded by Telegram to three significant figures (24.2M, 53.1K) on the public pages, and there is no exact view count published anywhere without logging in. Median views and reach % are therefore close approximations (the rounding is at most about 0.5% of a value); every row says so in viewsAreRounded.
  • Ads without a label are not detected. A native post written as ordinary content with no erid, legal label or ad hashtag counts as a normal post. adPostsPct is the share of labelled ads.
  • Share counts and the list of who forwarded a post are not public, so they are not returned. topForwardSources counts the other way round: which channels this channel reposts.
  • Subscriber history (growth over months) is not on the public pages; trends here are measured from the posts in the period you choose.
  • subscribers is filled only when Telegram labels the figure "subscribers". A group that reports "members" leaves it empty rather than passing off a different number as subscribers.
  • Very active channels can post more than maxPostsPerChannel within the period. The row then says postsLimitedBy: "max-posts", and the figures cover the dates in periodFrom to periodTo.
  • bestHour and bestWeekday are filled only when at least two hours (or weekdays) each have three or more settled posts and one is strictly ahead; a tie is left empty rather than picking the earlier one.
  • Invite links (t.me/+..., t.me/joinchat/...) and t.me/c/... are private entrances. They are rejected rather than read.
  • Email addresses and phone numbers in descriptions and post text are replaced with [email removed] / [phone removed].

Connection

Measured on 2026-10-19: t.me/robots.txt answers 404 - nothing is declared as disallowed - and the public preview pages answered directly from Apify, so no proxy is used by default. Each page is requested with a pause between requests, and only as many pages as the period needs.

Thanks for using this Actor

We build these tools for people who run them every day, and we improve them from what users tell us.

  • Missing a number you check before buying an ad? Tell us in the Issues tab. If the data is public, we add it.
  • Found a wrong value? Post the run ID in the Issues tab. Wrong data is the thing we fix first.

If this Actor saved you time, a short review helps other people find it.