Telegram is the only major messenger that hands you a genuinely structured export - a single result.json file with message IDs, exact timestamps, and sender identity baked in. That makes it one of the best starting points for a chat record you can actually work with. The catch: the export tool lives in exactly one place, and most people spend twenty minutes looking for it everywhere else first.
This guide covers the one route that works - the per-chat export from Telegram Desktop - plus the traps that are specific to Telegram: the missing mobile export, the macOS App Store decoy, the 24-hour lock on new sessions, and the format choice that quietly decides whether your export is usable at all.
Before you touch the export button: three Telegram-specific traps
JSON export is desktop-only. Neither the iOS nor the Android Telegram app has any export feature - not hidden in a submenu, not anywhere. If your chats only exist on your phone, you still need to sign in to Telegram Desktop on a computer; because Telegram syncs regular chats through the cloud, they will all be there waiting. The only phone-native workaround, forwarding messages to Saved Messages, destroys original timestamps and sender metadata and is useless for evidence.
Mac users: the App Store 'Telegram' app cannot export. The macOS App Store version is a separate native app with no export menu at all. You need Telegram Desktop from telegram.org/dl/desktop - a different program that happens to share the name. If you are on a Mac and cannot find 'Export chat history', this is almost certainly why.
New login = up to a 24-hour wait. If you just installed Telegram Desktop and signed in, Telegram blocks data exports from that fresh session as an anti-theft measure ('data export is temporarily unavailable'). You can skip the wait: when the confirmation prompt appears on another device where you were already logged in - usually your phone - approve it there and the export proceeds immediately.
Exporting one chat as JSON, step by step
This is the per-chat route. Telegram also has an account-wide export (covered further down), but for a single conversation - which is what most legal and record-keeping situations need - the per-chat export is faster and produces one clean file scoped to exactly that conversation.
- Install Telegram Desktop from telegram.org/dl/desktop on Windows, macOS, or Linux and sign in with your phone number. On a Mac, double-check you installed Telegram Desktop, not the App Store app.
- If this is a brand-new login, expect the 24-hour export hold described above - or approve the export request from your phone when prompted to bypass it.
- Open the specific chat, group, or channel you want to preserve.
- Click the three-dot menu in the top-right corner of the chat and choose 'Export chat history'. If the option is not there, the group or channel has 'Restrict saving content' enabled by an admin, and there is no native workaround.
- Tick the media types to include: Photos, Videos, Voice messages, Video messages, Stickers, GIFs, Files. For an evidence record, photos and files are usually worth including - they are saved alongside the JSON and referenced from it.
- Set the 'Size limit' slider for individual media files. It defaults to a few megabytes and can go up to 4 GB. Higher limits mean a bigger and slower export; only raise it if specific large files matter.
- Set the date range ('From ... to ...') if you only need a specific period. Otherwise leave it covering everything.
- Under Format, choose 'Machine-readable JSON'. This is the step that decides everything. 'Human-readable HTML' looks nicer in a browser but produces files no importer can reliably parse.
- Confirm the download path (defaults to Downloads/Telegram Desktop) and click Export. A text-only chat finishes in seconds. A media-heavy group can take minutes to hours, because Telegram re-downloads every file from its cloud.
- Open the resulting ChatExport folder and confirm result.json is there, alongside media subfolders if you included media.
Nobody in the chat is notified when you export. Telegram exports are silent - the other participants see nothing. If you are preserving evidence discreetly, this matters.
What lands in the ChatExport folder
A successful export produces a folder, by default at Downloads/Telegram Desktop/ChatExport_YYYY-MM-DD, containing:
- result.json - one structured file where every message is an object with an id, date, sender ("from"), text, and references to any attached media. This is the file wachattopdf.com imports.
- Media subfolders - photos, video_files, voice_messages, files, stickers - if you ticked those media types during export. The JSON references these by relative path.
- Nothing else. No HTML, no PDF. Telegram's job ends at structured raw data - making it readable is a separate step, covered at the end of this guide.
One file matters here: result.json. Not the folder, not a media subfolder, not a messages.html file. If your export contains messages.html instead of result.json, you picked the wrong format and need to redo it - it is the single most common mistake, and there is no way to convert HTML back into the structured form.
The account-wide export, and when it is the wrong tool
Telegram has a second export route: Settings > Advanced > 'Export Telegram data'. It is a wizard that can export your account info, contact list, and any selection of chats - individual ones, or 'All private chats' and 'All channels' in bulk - with the same JSON-vs-HTML format choice and size-limit slider.
It works, and it also produces a result.json. But that file bundles your account details, contacts, and every selected conversation into one blob, and on an active account it can run to multiple gigabytes and take hours. For a record about one conversation, that is the wrong shape: you want a file scoped to the dispute, not your entire digital life. Use the account-wide route when you genuinely need to preserve many conversations at once; use the per-chat route for everything else.
There are also third-party scripts built on Telegram's Bot API or MTProto (Telethon-based exporters on GitHub, for example). They are programmatic and flexible, but they require API credentials, technical setup, and carry a real risk of Telegram flagging your account for aggressive scraping. For evidence work, where you may need to explain exactly how the record was produced, the official in-app export is the defensible choice - the chain of custody is simply 'Telegram's own export feature', which is easy to articulate and hard to attack.
What Telegram will never export
Two categories of content are simply out of reach, and it is better to know now than after a wasted hour:
- Secret Chats. These are end-to-end encrypted and stored only on the device that participated in them. They do not sync to Telegram Desktop and are excluded from every export, per-chat and account-wide alike. If critical evidence lives in a Secret Chat, your options narrow to on-device capture, and you should get legal advice on how to do that defensibly.
- Content-restricted groups and channels. When an admin enables 'Restrict saving content', the 'Export chat history' option disappears entirely. There is no setting, workaround, or alternate menu that brings it back.
Mistakes that force a redo
- Choosing 'Human-readable HTML' instead of 'Machine-readable JSON'. The most common error by far. HTML exports produce messages.html pages meant for human reading, and the export has to be redone from scratch in JSON.
- Running the full account-wide export when one chat was needed - hours of downloading for a multi-gigabyte file, when the per-chat export takes minutes.
- Uploading the whole ChatExport folder, or a photos subfolder, instead of the result.json file itself.
- Falling back to screenshots or forwarded messages when the export feels like too much work - neither carries the message IDs, exact timestamps, or sender fields that make result.json worth having in the first place.
- Maxing out the media size limit 'to be safe' on a busy group, then watching an export sit apparently frozen for hours. Exports can also stall on individual broken or undownloadable media files - a known Telegram Desktop issue. If an export hangs, lower the size limit or exclude a media type and rerun.
The last mile: a wall of JSON is not a document
Open result.json in a text editor and you will see the problem immediately: thousands of lines of nested braces, numeric sender IDs, and machine-formatted date fields. Everything is there - and none of it is readable. Nobody reviewing a dispute is going to scroll raw JSON, and copy-pasting fragments into a document throws away the structure that made the export valuable. The real job, once Telegram's part is done, is pagination and formatting: every message rendered with its sender name and timestamp, in order, laid out on numbered pages that can be referenced, printed, and filed.
That is exactly what wachattopdf.com does with a Telegram export. Upload result.json and it is rendered into a clean, paginated PDF that reads the way the conversation actually happened - so if you need to prepare it as a court record, it holds up better than raw data or ad-hoc copy-paste. Telegram's JSON is the easiest input we handle: unlike WhatsApp's loosely structured .txt files (see /blog/whatsapp-json-export for that comparison), every field is already unambiguous, so nothing has to be guessed during parsing. The full pipeline is described at /how-it-works, and if you are cautious about uploading a private conversation at all, /blog/process-whatsapp-export-browser-vs-server explains the browser-versus-server processing tradeoff - the same logic applies to Telegram files.
Drag your result.json into the converter and get back a paginated PDF with every sender name and timestamp in place - readable in minutes, ready to file.
Convert Your Chat Free