The data layer for
Telegram intelligence.
tgdata.ai crawls billions of public Telegram messages, channels, and entities — normalized into clean, training-ready JSONL. Buy the corpus, or pull any public channel in real time with our on-demand crawling API.
Raw Telegram in — training-ready intelligence out
A purpose-built pipeline turns noisy public channels into a stable, versioned corpus, delivered as bulk JSONL or a live API.
Crawl
Distributed collectors sweep public channels 24/7.
Normalize
Every message maps to one stable schema.
Enrich
Language tags, entities, de-dup, safety filters.
Deliver
JSONL / Parquet — snapshot, feed, or API.
LLM fine-tuning
Teach models Telegram-native slang, multi-script chat, and high-entropy finance / geo-political discourse.
- Domain adapters & chat models
- Safety & toxicity classifiers
- RLHF & ranking bootstraps
OSINT & risk
Preserve the temporal and structural graph of Telegram for investigations and threat-intel pipelines.
- Channel / group graph exploration
- Entity clustering & tracking
- Narrative & sentiment monitoring
Search & ranking
Build discovery and relevance systems on a cleaned corpus of public channels and bots.
- Channel discovery & scoring
- Trend detection by topic / region
- Language-aware relevance
One schema. Bulk dataset or on-demand crawl.
Newline-delimited JSONL, one line per message. Whatever you pull from the API matches the bulk dataset field-for-field — prototypes graduate to production without a rewrite.
| Field | Type | Description |
|---|---|---|
| message_id | int64 | Message id (per chat) |
| chat_id | int64 | Channel / group id |
| channel_username | string | Public handle |
| timestamp_utc | iso-8601 | Creation time (UTC) |
| lang | string | Language tag |
| text | string | Message body (UTF-8) |
| entities | array | Hashtags, mentions, URLs + offsets |
| views | int32 | View counter |
| forwards | int32 | Forward count |
| source | enum | public_channel · supergroup · bot |
curl -X POST https://api.tgdata.ai/v1/crawl \
-H "Authorization: Bearer $TGDATA_KEY" \
-H "Content-Type: application/json" \
-d '{ "channel": "durov", "since": "2026-08-01T00:00:00Z", "limit": 5000, "format": "jsonl" }'
import json, requests
resp = requests.post(
"https://api.tgdata.ai/v1/crawl",
headers={"Authorization": f"Bearer {TGDATA_KEY}"},
json={"channel": "durov", "since": "2026-08-01", "limit": 5000},
stream=True,
)
for line in resp.iter_lines():
msg = json.loads(line)
print(msg["message_id"], msg["lang"], msg["text"][:60])
const res = await fetch("https://api.tgdata.ai/v1/crawl", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.TGDATA_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ channel: "durov", since: "2026-08-01", limit: 5000 }),
});
for await (const line of res.body) process.stdout.write(line);
/v1/crawl/v1/channel/{user}/v1/search/v1/streamStart with a slice. Scale to the whole corpus.
Transparent tiers for evaluation, bulk licensing, and live crawling. Custom verticals and exclusivity on request.
Pilot
- 1 language slice
- Up to 100K messages
- Full schema + JSONL sample
Dataset license
- 100% current snapshot
- 18+ languages · JSONL + Parquet
- Quarterly refresh option
- PII / CSAM filtering + support
API & Crawling
- On-demand
/v1/crawl - Live WebSocket stream
- Key auth + per-plan rate limits
Enterprise — exclusivity, custom filters, on-prem / air-gapped delivery, and per-jurisdiction legal review.
Contact enterprise →Ready to see a sample?
Share your work email and use-case — we respond within 1–2 business days with a schema map and a language-specific preview.
Prefer email? [email protected] · Public data only — no private chats, contacts, or non-consensual content.