ChatGPT & Claude export viewer — read the full conversation tree
Drop the conversations.json from your ChatGPT or Claude data export to browse, search and save your chats as Markdown — including the edited prompts and discarded replies ChatGPT hides. Nothing is uploaded.
How do you read a ChatGPT conversations.json export?
A conversations.json from a ChatGPT or Claude data export is a single nested-JSON file that no ordinary app renders, so reading it requires a viewer that rebuilds the message tree into threads. StaysPrivate's ChatGPT export viewer does that in your browser: every conversation becomes searchable and any of them can be saved as Markdown for Obsidian or Notion. Exports are frequently tens of megabytes and contain years of personal and work conversations, so parsing happens on your device and nothing is uploaded.
It also surfaces what the file keeps but the app hides. Editing a prompt or regenerating a reply does not overwrite the old version — ChatGPT stores both as sibling nodes and simply displays the branch you last navigated to. This viewer follows the same path ChatGPT does, then flags every fork so the discarded prompts and replies can be read and exported alongside the visible thread.
How to export your data from ChatGPT
- Open ChatGPT and click your name or avatar (bottom-left).
- Go to Settings → Data controls.
- Next to Export data, click Export and confirm.
- OpenAI emails you a download link, usually within minutes. The link expires, so download promptly.
- Unzip the archive. The file you want is conversations.json — drop it above.
How to export your data from Claude
- Open Claude and click your initials (bottom-left) → Settings.
- Go to Privacy and choose Export data.
- Anthropic emails you an archive; unzip it and drop the conversations file above.
The two services structure their exports differently — ChatGPT stores each chat as a tree of message nodes, Claude as a flat list. This viewer reads both. If you want the archive kept in sync rather than exported once, see the tools compared.
What is inside conversations.json?
One JSON array holding every conversation you have ever had, each with its title, creation
time and every message. ChatGPT's format stores messages in a mapping object
where each node points to its parent, which is how regenerated replies and edited prompts are
represented — that structure is why the file is unreadable in a text editor and why simply
"opening" it shows you a wall of escaped text. Rebuilding the thread order is the job this
viewer does.
Where did ChatGPT's message version arrows go?
Every time you edit a prompt or regenerate an answer, ChatGPT keeps the old version. It does
not delete it — it stores both as sibling nodes under the same parent in the
mapping tree, and shows you whichever path you last navigated to. The others stay
in the file, invisible.
This viewer follows the path ChatGPT displays — the one leading to current_node —
and then marks every point where the conversation forked. Click show on a fork to read
the version you moved away from. Two kinds appear:
- Earlier versions of a prompt. You edited a question; both wordings are in the file, along with whatever each one produced.
- Discarded replies. You pressed regenerate; the answer you rejected is still there.
The Hidden column in the list shows how many messages exist in each conversation beyond the visible thread, so you can spot which chats have branches without opening them. Tick Include branches in exported Markdown to keep them in your export under a Hidden branches heading.
One honest limit: ChatGPT records which path is current, but not the order in which you tried the others. Where a fork has several alternatives, they are listed by their own timestamps, which is usually but not always the order you created them.
How to import your ChatGPT history into Obsidian
- Drop your conversations.json above and let it load.
- Tick the conversations you want (or search first to narrow them down).
- Click Export selected as Markdown — you get a ZIP of .md files.
- Unzip into a folder inside your Obsidian vault.
- Obsidian picks them up immediately. Each file uses the conversation title as its filename and marks each turn with You / Assistant headings, so they read naturally and are searchable alongside your other notes.
The same files work in Notion, Logseq, Bear or any app that reads Markdown.
Getting the filenames right
Conversation titles are generated by ChatGPT and frequently contain characters that filesystems reject — colons, slashes, question marks. Those are stripped from the filename, and titles are truncated to 60 characters so long ones do not break on Windows. If two conversations share a title, a number is appended so nothing overwrites anything.
One consequence worth knowing before you import a large batch: because Obsidian resolves
[[wiki links]] by filename, two chats that ChatGPT named identically will produce
similar filenames and ambiguous links. If you rely on wiki links, rename the handful of
duplicates after importing rather than before.
Where to put the files in your vault
Import into a dedicated folder — ChatGPT/ or Archive/ChatGPT/ —
rather than the vault root. Three reasons this matters more than it sounds:
- Years of conversations dropped loose into a vault will dominate every search result you run afterwards. A folder can be excluded from search when you want your own notes back.
- Obsidian Sync and Git-based backups both charge you, in bandwidth or in commit noise, for a few thousand new files arriving at once. Import in batches if your vault is synced.
- You will want to delete and re-import at least once while you settle on a format. A folder makes that one operation instead of an archaeology exercise.
Keeping an archive up to date
Honest limitation: this tool produces a fresh ZIP every time. It does not know what it wrote last month, so re-exporting your whole history produces duplicates rather than updates. That is a structural limit of a browser tab, not an oversight.
If you want a maintained archive that syncs on each new export, a desktop app is the right tool, and we compare the options — including paid ones we do not sell — in getting ChatGPT into Obsidian. If you are exporting selectively, or doing this once, the ZIP is simpler.
What does not survive the conversion
Markdown is text, so some things cannot come across. Stated plainly:
- Images — both ones you uploaded and ones ChatGPT generated. They live elsewhere in the export archive and are not embedded in the Markdown.
- Canvas documents and other interactive content.
- Code interpreter output files — the chat text survives, the generated files do not.
- Live web citations as clickable footnotes, though the text of the answer is preserved.
What does survive is the full text of every turn, in order, with speakers marked — which for searching your own history later is the part that matters.
Why not just upload the file to an online viewer?
Because of what is in it. A ChatGPT export commonly spans years and includes work documents you pasted, medical or legal questions, code from private repositories, and personal conversations. Uploading that to a third-party site hands over all of it at once. This viewer never sends the file anywhere — you can disconnect from the internet after the page loads and it will still open your export.
Working with very large exports
Exports of tens of megabytes are normal and load fine. If yours is several hundred megabytes, your browser may take a while to parse it — leave the tab alone until the list appears, and close other heavy tabs first. Searching filters titles and message text together, so narrowing before exporting is usually faster than scrolling.
Frequently asked questions
How do I get my ChatGPT data export?
In ChatGPT: Settings → Data controls → Export data. You receive an email with a ZIP; inside is conversations.json holding every chat you have ever had. Claude offers the same under Settings → Privacy → Export data.
Can I see messages I edited or replies I regenerated?
Yes. ChatGPT never deletes them — editing a prompt or regenerating an answer stores the old version as a sibling node in the same conversation tree, and the app simply stops showing it. This viewer follows the path ChatGPT displays, then marks every fork so you can open the versions you moved away from. The Hidden column tells you how many extra messages each conversation contains.
Why can’t I just open conversations.json?
It is one enormous machine-readable file — often tens of megabytes of nested JSON. Text editors choke on it and the conversation order is not human-readable. This tool turns it back into readable, searchable conversations.
Is my chat history uploaded anywhere?
No — and this is exactly the kind of file you should never upload. Your export can contain years of personal and work conversations. Everything is parsed in your browser on your own device.
What can I export?
Any conversation as clean Markdown (ideal for Obsidian, Notion or a notes app) or as a text file. Multiple conversations download together as a ZIP.
Why does my conversation look different here than in other viewers?
Most viewers list every node in the file sorted by timestamp, which interleaves abandoned branches with the real thread and makes conversations read as though you asked the same question twice. This viewer walks from current_node back through its parents, which is how ChatGPT itself decides what to show, and presents branches separately rather than mixed in.
Is there a limit?
Browsing and searching your entire export is always free. Free exports up to 5 conversations at a time; Pro ($29 one-time) removes that limit.