How tgadsspy works — public methodology for Telegram ad indexing
Full documentation of how we index Telegram Ads data, what we capture, what we do not, and how researchers can verify our numbers. Open methodology, citable.
Telegram Ads Spy is an independent OSINT project that indexes every advertising campaign running on the official Telegram Ads platform — both TON-billed and EUR-billed cabinets — in real time. This document is the canonical reference for researchers, journalists, and competitive-intelligence teams who want to verify or cite our data.
What we index#
- Sponsored messages from the Telegram Ads platform — ads served via the official
channels.getSponsoredAPI endpoint, which Telegram exposes to any authenticated user viewing a public broadcast channel. - Paid channel placements (TON) — public posts in broadcast channels where the creative is marked with a CTA URL pattern we recognize as paid placement. Detection is based on text patterns + CTA URL structure, not proprietary logic.
- Channel metadata — subscriber count, avatar, description, primary language, category. Pulled via
channels.getFullChannel.
We never index:
- Private channels, invite-only groups, or anything behind a join request screen.
- Private chats or group conversations between identifiable users.
- Content protected by Telegram's flood limits or DMCA flags.
How a channel enters our pool#
Four paths:
- Batch seeds — hand-curated lists in
scripts/batches/, grouped by language and niche. - Auto-discovery — the
Telegram Ads Spy-discovercron polls Telegram'scontacts.searchwith 202 keyword seeds every hour. - User submit — anyone can paste a channel handle at /submit and it enters the queue.
- CTA extraction — when an ad creative links to
t.me/{handle}, we auto-add{handle}to the pool.
Update frequency#
| Component | Cadence |
|---|---|
| Resolver (metadata refresh) | Every 10 minutes |
| Ingest tier S (top channels) | Every 5 minutes |
| Ingest tier A (active channels) | Every 30 minutes |
| Ingest tier B (tail channels) | Every 4 hours |
| Discover (new keyword seeds) | Hourly |
| Media mirror (gramesh → permanent URL) | Every 5 minutes |
Data dictionary#
Each ad creative in our index carries:
id— stable CUID, permanent across rebuilds.text+title— raw creative copy as served by Telegram.paymentSource—TONorEUR_ADS_CABINET.niche— one of 18 classifier buckets (crypto, gambling, trading, dating, health…).geo— ISO alpha-2 code, detected from creative language + CTA domain.lang— detected creative language (ISO 639-1).firstSeenAt+lastSeenAt— UTC timestamps, stable.reachEstimate+spendEstimate— derived from channel audience × market CPM.advertiser— structured entity with{ name, domain, tgUsername, slug }.
Full schema: /api-docs.
How we estimate reach and spend#
For each creative:
- Sum the audience (subscribers) of all channels where we observed the creative.
- Apply average views ratio from our channel stats (
avgViews / members). - Multiply by current market CPM benchmark for the creative's niche + geo.
Spend estimates are benchmarks, not bookkeeping. They reflect a reasonable-case market rate for the displayed volume, not the advertiser's actual cabinet spend. Use them for relative comparison between advertisers, not for exact attribution.
What we will never do#
- Re-sell Telegram cabinet access.
- Claim affiliation with Telegram FZ-LLC.
- Pay for private channel entry or insider data.
- Hide creative content behind a paywall (all ads are public by definition; our paid tiers sell convenience — API volume, alerts, team seats — not access to data).
How to verify our numbers#
- Pick any advertiser on /advertisers.
- Compare the creative count on their page with the
/api/v1/advertisers/{slug}JSON. - For any listed channel, open
t.me/s/{handle}in an incognito browser — you will see the same sponsored messages we indexed. - For disputed data points, contact @dumov on Telegram with the creative ID.
Licensing#
All exported data (CSV, JSON, RSS) is released under CC-BY-4.0. That means you can use it for any purpose — including commercial — provided you credit tgadsspy.com and link to the specific creative or advertiser page.
Example citation:
Source: tgadsspy.com, retrieved on 2026-04-20, https://tgadsspy.com/advertisers/{slug}
Change log#
- 2026-04-20 — initial methodology publication.
Also available in:
Cite this article
tgadsspy team (2026). How tgadsspy works — public methodology for Telegram ad indexing. tgadsspy.com. Retrieved from https://tgadsspy.com/blog/how-telegram-ads-spy-works-methodology
Licensed CC-BY-4.0 — reuse allowed including commercial, attribution required.