BrowserTools
Home / AI / ChatGPT Export Viewer

ChatGPT Export Viewer

Open the data export you downloaded from ChatGPT or Claude, search your old conversations and save any of them as a document.

Loading ChatGPT Export Viewer… If nothing happens, please enable JavaScript.

ChatGPT lets you download everything you have ever typed into it, but the file it sends you is not meant for people. To get it, open ChatGPT, click your profile picture, go to Settings, then Data controls, and choose Export data. After you confirm, OpenAI emails you a download link (it stops working after 24 hours), and the link gives you a .zip file. Drop that zip on this page, or the conversations.json file inside it, and every conversation becomes a searchable list you can read like the original chat. Claude exports work too: request one from Settings, then Privacy, then Export data, and the tool recognises the format on its own.

Frequently asked questions

How do I export my ChatGPT data?
In ChatGPT, click your profile picture, open Settings, go to Data controls and click Export data, then confirm. OpenAI sends an email with a download link, usually within minutes but sometimes after a few hours for large accounts. The link expires after 24 hours, so download the zip soon after it arrives. You can then drop the whole zip on this page without extracting it.
Are my conversations uploaded anywhere?
No. The file is read with the browser's own file API, unzipped with a JavaScript library bundled into the page, and parsed in a local Web Worker. There is no server step and nothing is stored after you close the tab. You can load the page, disconnect from the internet and the viewer keeps working.
Why do some messages from my chats not appear?
ChatGPT stores more than it shows. Each conversation contains the system prompt, your custom instructions, calls to tools such as Python, browsing or image generation, their raw output and, for reasoning models, summaries of the model's thinking. These are hidden by default so the thread reads like it did in the app. Tick Show system, tool and hidden messages to see them. Prompts you edited and answers you regenerated live on separate branches, and only the branch you last viewed is shown.
Can it open a Claude export as well?
Yes. Claude's data export also contains a conversations.json file, with a different structure: a flat list of messages per chat instead of a tree. The viewer detects which format it received and says so above the list. Claude's thinking blocks and tool calls are treated like ChatGPT's tool messages, hidden by default and available through the same checkbox.
Will it handle a very large export?
Exports of a few hundred megabytes are fine on a desktop computer. The JSON is parsed in a background thread, so the page shows progress instead of freezing, and search runs over the text already in memory. The practical limit is your device's memory: a browser needs roughly two to three times the size of conversations.json while parsing it, so very large files may fail on a phone.
How do I save a conversation as a PDF?
Open the conversation and click Download PDF. The tool lays the chat out as a clean, printable page and opens your browser's print dialog, where you choose Save as PDF as the destination. This produces real, selectable text rather than a screenshot, and you can pick paper size and margins in the same dialog.
Can I export everything to Markdown at once?
Yes. The Download all button above the list builds a .zip with one Markdown file per conversation, named with the date and title. If you type a search term or set a date range first, the button changes to Download these and only the matching conversations are included, which is handy for pulling every chat about one project into a notes app.
What happens to images and uploaded files?
Messages keep a placeholder such as [image] or [attachment: report.pdf] where the file was, so you can see that something was shared. The files themselves are stored separately in the zip and are not embedded in the Markdown or PDF output. Citation markers that ChatGPT inserts for web search results are also removed, since they only work inside the app.

About ChatGPT Export Viewer

The zip holds a conversations.json file with the full history, a chat.html page, your account details in user.json, feedback you gave on answers, shared links, and any images or files you uploaded. The conversations file is the valuable part and also the awkward one. Each chat is stored as a tree of messages rather than a list, because every time you edited a prompt or regenerated an answer ChatGPT kept the old branch. This viewer walks the tree from the last message you saw back to the start, so you read the version that was on screen, without the abandoned edits. System prompts, tool calls, code interpreter output, browsing results and hidden reasoning are left out by default and can be switched back on with one checkbox. Search looks through titles and message text at once, and you can narrow the list by date.

Your chat history is probably the most personal file you own: health questions, work drafts, code from private repositories, things you would not type into a search engine. Uploading it to an online converter means trusting a stranger with all of it. Here the zip is opened and parsed in your own browser, the JSON is processed in a background worker so even a 100 MB export stays responsive, and no byte leaves the page. When you find a conversation worth keeping, download it as a Markdown file, save it as a PDF through the print dialog, or export all the conversations that match your search as a .zip of Markdown files, ready for Obsidian, a notes app or a Git repository.

Why a ChatGPT chat is stored as a tree

When OpenAI added the Export data button in April 2023, alongside the option to turn off chat history, it exposed the internal shape of a conversation more or less as the app uses it. A chat is not a list of messages: it is a mapping of message ids to nodes, and each node points to its parent and its children. The conversation also records a current_node, the last message you were looking at.

The tree exists because of two buttons. Editing one of your earlier prompts, or asking for a new answer, never overwrites anything; it adds a sibling branch next to the old one, which is why the app shows small arrows such as 2 / 3 to flip between versions. A long chat where you rephrased things a lot can hold dozens of branches that no single view of the conversation ever shows at once.

That is also why a naive reading of conversations.json produces nonsense, with answers to questions you later rewrote interleaved with the ones you kept. Following the parent links from current_node back to the root gives exactly the path the app would draw on screen. The chat.html file in the same export takes the same approach, rendering the conversations with a small script instead of shipping plain text.

Support