
Telegram-OSINT, Scraping und Archivierung als lokale Web-App. Multi-Account-Sammlung, Profil-Lookup mit historischen Fotos und Änderungs-Diffs, zehn Exportformate.
Telegram-OSINT, Scraping und Archivierung.
Eine lokale Web-App, die vollständig auf deiner Maschine läuft und ausschließlich mit Telegram kommuniziert.
npm install
npm start
Öffne dann http://127.0.0.1:5173. Der erste Start führt dich durch API-Zugangsdaten, eine QR-Anmeldung und das Laden deiner Dialoge. Telegram ist der einzige Server, mit dem es kommuniziert. Es gibt kein Konto zum Anlegen, keine Telemetrie und keinen Dienst dazwischen: Was du sammelst, bleibt in einer SQLite-Datei, die dir gehört.
Nachfolger von telegram-scraper, telescope und Harrier, gebaut auf Telethon 1.44.
| Sammeln | Kanäle, Gruppen und Forum-Themen über mehrere Konten hinweg, mit Medien, Deduplizierung und Fortsetzung |
| Untersuchen | Telefonnummer, @username, ID oder t.me-Link zu einem Profil, jedes historische Foto und ein Diff seit dem letzten Mal |
| Exportieren | Zehn Formate, von einer einfachen CSV bis zu einem gehashten Beweispaket |
| Läuft auf | Node 18+, Python 3.12+, SQLite. Eine Datenbank, ein Ordner, keine Dienste |
Sammeln
-100-ID neben dem Namen und einem Badge für das Konto, das ihn siehtUntersuchen
@username, einer Benutzer-ID oder eines t.me-LinksExportieren
| Format | Was du bekommst |
|---|---|
csv | Eine Datei pro Dialog |
json / jsonl | Vollständige Metadaten; JSONL streamt Zeile für Zeile |
xlsx | Tabellenblätter für Nachrichten, Medien, Teilnehmer und Reaktionen |
html | Eigenständiger Bericht: Statistiken, Aktivität, Top-Absender, Weiterleitungsquellen, durchsuchbare Tabelle |
markdown | Derselbe Bericht als Text |
gexf / edges | Weiterleitungsgraph für Gephi und Maltego |
sqlite | Eine eigenständige Datenbank nur der ausgewählten Dialoge |
bundle | ZIP mit Daten, Medien, einem Manifest aus SHA-256-Hashes und dem Sammlungsprotokoll |
npm install erstellt die Python-Umgebung unter server/.venv und installiert beide Seiten.
| Was | Wo |
|---|---|
| Konfiguration | ~/.config/tgscope/config.json (Modus 600) |
| Datenbank | ~/.local/share/tgscope/tgscope.db (WAL, FTS5) |
| Medien | ~/.local/share/tgscope/media/ |
| Exporte | ~/.local/share/tgscope/exports/<timestamp>-<label>/ |
Eine Datenbank enthält alles, was quersuchende Dialogsuchen, die gemeinsame Benutzertabelle, Medien-Deduplizierung und den Forward-Graphen ermöglicht.
Dateien werden nach Dialogtyp, dann Dialog, dann Forumsthema, dann Medienart abgelegt:
media/
├── channels/technews_-1001234567890/
│ ├── photos/00004711-8001-conference-slides.jpg
│ └── documents/00004802-8210-quarterly-report.pdf
├── groups/pythondev_-1009876543210/
│ ├── general/photos/…
│ └── help/voice/00000004-9004-voice.ogg
└── profiles/123456789/000-5544332211.jpg
Verzeichnisnamen kombinieren den Handle mit der vollständigen ID, nicht-ASCII-Titel werden transliteriert, und Dateinamen werden mit führenden Nullen aufgefüllt, damit sie chronologisch sortiert werden.
Jeder Telegram-Aufruf durchläuft einen Governor pro Konto mit einem Token-Bucket und FloodWait-
Backoff, und jeder seitenweise Lesevorgang – Nachrichten, Dialoge, Mitglieder, Profilfotos – wartet
einen Flood ab und setzt fort, anstatt den Lauf fehlschlagen zu lassen. Drei Profile:
| Profil | Medien-Worker | Anforderungsabstand | Still absorbierte Wartezeiten |
|---|---|---|---|
stealth | 1 | 1,6 s | bis zu 180 s |
balanced | 4 | 0,35 s | bis zu 90 s |
fast | 8 | keine | bis zu 45 s |
Längere Wartezeiten werden im Aktivitätsprotokoll angekündigt und abgewartet; zwölf in Folge bei einem Lesevorgang führen zum Abbruch und werden gemeldet.
Mehrere Konten werden unterstützt. Markiere eines in den Einstellungen als Burner, und Telefonnummern-Abfragen laufen automatisch darüber, denn das ist der einzige riskante Vorgang:
Eine Telefonnummern-Abfrage importiert die Nummer für einen Moment als Kontakt und löscht sie wieder. Wenn der Eigentümer deine Nummer bereits gespeichert hat, sieht er möglicherweise eine „joined Telegram"-Benachrichtigung. tgscope fragt jedes Mal zuerst nach, und die Profilkarte zeichnet auf, welches Konto verwendet wurde.
npm test # 92 backend and 42 frontend tests, no network needed
npm run build # production bundle of the client
Das Backend ist FastAPI über einem Telethon-Kern, getestet gegen einen Fake-Telethon-Client: der Scraper, die Exporter, das Medien-Layout und jede Schema-Migration. Die Frontend-Tests decken die reine Logik hinter dem Browser ab, Perioden-Arithmetik, Histogramm-Bucketing und die Zahlen- und Zeitstempel-Formatierung, und rendern jeden Bildschirm zweimal, einmal leer und einmal befüllt.
scripts/demo/ generiert docs/preview.gif aus vorbelegten Fake-Daten neu. Es benötigt chromium und
ffmpeg, berührt nichts in deinem echten Workspace und ist nicht Teil der App.