Telegram reach is fake more often than you'd expect, and view counts alone won't catch it. A channel with a healthy 15% view ratio can still be a node in a laundering ring - 40 channels reposting the same 6 items a day, making each other look "alive". I found this the hard way when a source I trusted turned out to share 80% of its content, verbatim, with 7 sibling channels.
Here is the graph method that exposed it, and it runs on public data only.
Step 1: Collect repost edges. Every public post at t.me/s/<channel> that quotes or forwards another channel contains a link of the form t.me/<other_channel>/<post_id>. Parse these. Each link is a directed edge: A reposts from B. No login, no API key - this is in the HTML preview.
Step 2: Normalize the noise out. One-shot citations (a news channel quoting a primary source once) are not laundering. Keep edges that recur: same source pair, many posts, short time window. A real information relationship is sparse and asymmetric; a ring is dense and symmetric.
Step 3: Find the components. On the recurring-edge graph, run connected-components (Leiden/Louvain if you want communities; components are enough). A 9-node component where every node reposts every other node within minutes, and the component has near-zero edges to the outside, is a closed laundering ring - its aggregate "reach" is one channel, not nine.
Step 4: Score channels against ring membership. My collection-set score loses ~80% of a channel's weight if it sits inside a dense, outward-isolated component. The inverse bonus: a channel that is a source of edges pointing outward into many independent components is an origin - these are the channels worth alerting on.
The cheap insight: reach = unique humans reached by unique content. Repost rings multiply the denominator (channels) without touching the numerator (humans). The graph is how you tell them apart, and the graph is public.
This is rule 3 of eleven in my Telegram & Web OSINT Bundle ($5); the free sample brief shows the exact output format.
Runs free on GitHub Actions - no server, no paid APIs.
Top comments (0)