ChatPeer
Add to Chrome — it's free

ChatGPT & Claude Export Converter — ZIP to Markdown Files

ChatGPT and Claude both let you download your history, and both hand it back as one large JSON file built for machines, not for reading. Drop the export ZIP below and you get every conversation as its own Markdown or plain-text file, named by date and title, in a single ZIP. You can search and preview conversations first, or copy just one. Everything runs in this tab: nothing is uploaded, and nothing is kept once you close it.

Drop your ChatGPT or Claude export here

The .zip you downloaded, or the conversations.json inside it. Nothing is uploaded; it all runs in this tab.

How to get your export

ChatGPT: Settings → Data controls → Export data. OpenAI emails you a link, usually within hours; it expires 24 hours after it arrives.

Claude: Settings → Privacy → Export data, on the web or desktop app. Claude also emails a link that expires after 24 hours.

Drop the ZIP here as it is. The converter finds conversations.json inside and ignores everything else. You can also drop conversations.json on its own, or paste JSON for a single conversation.

Why a conversation isn't just a list of messages

ChatGPT stores a conversation as a tree, not a sequence. Every time you edit a prompt or regenerate an answer, the conversation branches, and both the old and new versions stay in the file. A naive converter that walks the `mapping` object and prints everything it finds will give you every abandoned draft interleaved with the thread you actually kept — which is worse than the raw JSON, because it looks correct.

This one starts at `current_node` — the tip of the branch you were last on — and walks up through each message's parent to the root, then reverses. That yields exactly the thread you'd see on screen, and silently drops the branches you abandoned. It's the same walk ChatPeer's own export does.

What you get back

One file per conversation, named like `2026-09-01 Stripe webhook retries.md` so they sort by date, with duplicates numbered rather than overwritten.

Markdown files open with YAML frontmatter: title, platform, conversation ID, created, updated and exported dates, message count and tags. Obsidian's Dataview can query them straight away, and the keys match the ChatPeer extension's own exporter, so files from both sit happily in one vault. Each message sits under a `## You`, `## ChatGPT` or `## Claude` heading.

Plain text drops the syntax: the title underlined, then `[You]` and `[ChatGPT]` or `[Claude]` labels above each message.

The model's hidden reasoning, tool calls and system messages are left out; images and attachments are marked `[attachment]` where they appeared. Message text itself is never altered.

Nothing leaves this page

There is no upload step and no server to upload to. The ZIP is opened, parsed and rebuilt in JavaScript in the tab you're reading this in. Close the tab and nothing persists.

That's the same rule the extension follows — see what we store and what we don't — and it matters more than usual here, because a full export tends to contain a great deal you would not want to hand to a stranger's server in exchange for a file conversion. If you'd rather export conversations one at a time as you go, ChatPeer adds an Export button to both ChatGPT and Claude.

Want this built directly into your sidebar?

ChatPeer adds folders, full-text search, and one-click export to ChatGPT, Claude and Grok. Everything stays in your browser.

Add to Chrome — it's free