Chat Export to Text Converter — WhatsApp, ChatGPT, Slack

Convert a WhatsApp, ChatGPT, Claude, Slack or Discord export into a readable transcript. The format is detected automatically and nothing leaves your browser.

Chat Exports: Five Platforms, Five Incompatible Ideas of the Same Thing

Every messaging platform lets you export your data, and every one of them has decided independently how a conversation should be represented on disk. The underlying content is identical — who said what, when — but the shapes have nothing in common. One is a text log whose timestamp format depends on your phone's region. One is a tree of nodes keyed by identifier where the conversation is a single path through the graph. One is a folder of files organised by channel and date, with the names stored somewhere else entirely.

This page reads all of them and produces a readable transcript. The platform is worked out from the file's own structure rather than its name, so you can drop an export in without telling it what you have. Everything runs in this browser tab.

How Detection Works

Filenames are useless for this. Half these platforms name their export conversations.json, and files get renamed on the way through email and cloud storage anyway. So detection reads structure: a chat_messages array alongside a sender field, a mapping object paired with create_time, a ts field holding a Unix timestamp as a string. Each is a fingerprint that only one platform produces.

There is one ordering subtlety that matters. An iPhone WhatsApp export opens with [12/03/2024, 14:23:01] — a square bracket, which is also how a JSON array starts. Testing for JSON first would hand every iPhone chat log to the JSON parser and fail on it. The WhatsApp line pattern is therefore checked before the bracket test, not after.

The Five Shapes

  • WhatsApp writes a plain text log, one message per line, with a timestamp format that varies by platform and locale. Multi-line messages continue on bare lines with no marker, so a parser has to treat any line without a timestamp as a continuation of the one above.
  • ChatGPT stores each conversation as a node map. Every regenerated response and edited prompt is preserved as a branch, so reconstructing what you actually saw means walking from the root and following the last child at each step.
  • Claude uses a flat array, which is the easiest of the five. The only wrinkle is that newer exports put message text in a typed content block list while older ones use a plain string field, so both are read.
  • Slack is a directory structure: one folder per channel, one JSON file per day, plus a separate users.json holding the identity map. Messages refer to people as U0123ABCD, so without that file every message is attributed to a code.
  • Discord exports, as produced by the common community tooling, are a single object with channel metadata and a flat message array. Straightforward, and the closest to what you would design if you were starting fresh.

What Gets Removed

A raw export contains a great deal that nobody wants to read. The defaults drop it, and switches bring it back:

System notices. The encryption notice at the top of every WhatsApp export, group joins and leaves, subject changes, "this message was deleted", Slack's channel_join subtype. In a group chat with turnover these can outnumber real messages.

Attachment placeholders. <Media omitted> appears wherever an image or voice note was, and in a photo-heavy chat it is most of the file. It tells you something happened and nothing about what.

Hidden plumbing. ChatGPT exports include the system prompt and any tool traffic, marked as hidden from the conversation. These were never displayed to you and are dropped.

Archives Are Handled Too

Slack and ChatGPT deliver .zip files, not loose JSON, so the archive can be dropped in directly. The reader looks for conversations.json first, since when one is present it is the entire export. Failing that it treats the archive as a Slack workspace: it loads users.json before anything else so identities resolve, then walks the day files and gathers them back into one transcript per channel in date order. Files it does not recognise are skipped rather than failing the whole archive.

Why This Runs in Your Browser

This is the input on this site where it matters most. A chat export is not a document you wrote for an audience — it is years of private conversation, and it contains whatever was said in it. Addresses. Health. Money. Things about other people who never agreed to any of this.

Uploading that to a conversion service means trusting a stranger's retention policy, their access controls, their backups, and their future. The parsing here is JavaScript running in this tab. Your file is read by the browser, converted in memory, and shown to you. There is no upload step, so there is nothing to retain and nothing to delete. Building it this way also means it costs nothing to run and works offline once the page has loaded.

Platform-Specific Pages

If you know what you have, the dedicated pages carry the export instructions for that platform: WhatsApp, ChatGPT, Claude and Slack. They run the same parser, so it makes no difference to the result.