Mirror channels are the second-cheapest signal in public Telegram OSINT, and the cheapest to automate. A "mirror" is a channel that republishes another channel near-verbatim, usually minutes later, sometimes with a new logo and a patriotic sign-off. Analysts treat mirrors as independent sources. That's how you get 14 channels "confirming" a rumor that started in one.
Detection is a solved problem if you run it per-language:
Step 1: shingle and hash. For each post, normalize (strip emoji, punctuation, lower-case, transliterate Cyrillic-adjacent noise consistently), cut into 3-word shingles, hash. A mirror's post is a near-subset of the origin's post; Jaccard similarity on shingle sets spikes above 0.7 within minutes of the original.
Step 2: timestamp-lag test. For every high-similarity pair, measure the lag distribution. Mirror: lag is positive, tight, and stable (2-15 minutes, every post). Real independent confirmation of the same event: lag is noisy, wording differs (two journalists never write the same sentence), and the similarity stays below the shingle threshold.
Step 3: watermark the origin. Once a mirror pair is detected, collapse them in the collection set: keep the earliest post, tag the rest mirror_of:<id>. Alerts fire on the origin only. This single collapse kills most duplicate-alert fatigue in warzone monitoring, where a single strike gets 30-50 near-identical posts across mirror families within an hour.
Step 4: use the lag as intelligence. A mirror family that has lagged 10 minutes for months, then suddenly posts 3 minutes before its origin, is not a timing accident. Either the operator moved upstream (they now get the feed earlier) or the "origin" changed hands. Mirror lag is a cheap detector for coordination changes inside a media cluster.
The cheap win: all of this runs on the public t.me/s/ preview layer - text, timestamps, post IDs. No API, no logins. The dedup threshold, the lag-window parameters, and the collapse-and-tag pipeline are in the Telegram & Web OSINT Bundle ($5). Free sample brief shows the output format.
Runs free on GitHub Actions - no server, no paid APIs.
Top comments (0)