ChatGPT Conversation Exporter — JSON → Markdown, PDF, HTML
Free ChatGPT conversation exporter that turns your OpenAI data export (conversations.json) into clean Markdown, PDF, HTML, plain text or structured JSON. Browse every chat, preview the active branch, search by title or content, download one or all conversations as a ZIP. Everything runs inside your browser — nothing is uploaded.
Open your conversations.json to start
In ChatGPT: Settings → Data Controls → Export Data. Confirm by email; OpenAI sends a ZIP — drop the conversations.json from inside.
When to use the ChatGPT conversation exporter
Personal backup
OpenAI's data retention policies can change. Keep your own clean copy of every prompt and answer — in human-readable formats, not raw JSON.
Blog & docs
Convert a useful Q&A session into Markdown and drop it into your blog, knowledge base or Notion page — formatting preserved.
Share a chat
Export a single chat as HTML or PDF and email/Slack it to a colleague — no ChatGPT account required to read it.
Search history
Find that one conversation from six months ago by typing a keyword — far faster than scrolling the sidebar in ChatGPT.
Build a dataset
Pipe the JSON exports into your own fine-tuning pipeline, RAG store or analytics dashboard.
Bulk download
One click bundles every chat (or just the search-filtered ones) into a single ZIP — perfect for archiving a year of usage.
How to export your ChatGPT conversations
Request your data from OpenAI
In ChatGPT: Settings → Data Controls → Export Data → Confirm export. OpenAI emails you a download link within minutes — the link points to a ZIP file containing conversations.json plus an HTML viewer.
Unzip and grab conversations.json
Download the ZIP, extract it locally. Inside you'll find conversations.json — that's the file this tool needs.
Drop it here
Drag & drop conversations.json onto the exporter or click Open conversations.json. Every chat appears in the sidebar within a second.
Browse, search, preview
Click any chat to see the rendered conversation. Use the search box to filter by title or message content — the list updates live.
Export
One conversation: pick .md, .html, .txt, .json or .pdf. All conversations: pick All visible → .zip to bundle every chat in your current filter into a single archive.
About the HCODX ChatGPT exporter
OpenAI lets you export everything you've ever sent or received through ChatGPT, but the raw file (conversations.json) is a megabytes-large dump of a JSON tree — readable by machines, not humans. This tool parses that file and gives you back a clean, human-readable archive in any format you want.
The message-tree problem
ChatGPT stores every conversation as a tree, not a list. Every time you edit an earlier message, ChatGPT branches the tree and renders the newest branch. The raw JSON contains every branch you ever explored — including all the ones you abandoned. This exporter walks the active branch (the path from the conversation's current_node back to the root) and lays it out in chronological order. Edited-and-abandoned branches are skipped.
What roles look like in the output
Each message is tagged with a role: user (your prompts), assistant (the model's replies), system (initial instructions like custom GPT system prompts), and tool (function calls, code interpreter output, browsing results). The reader renders each role with a distinct colour; the Markdown export labels them as # User, # Assistant, # System, # Tool headings.
Markdown format
The Markdown export preserves code fences (```python), inline code (`code`), headings, bold/italic and lists exactly as the assistant produced them. Each message is preceded by a heading and a timestamp. The first line of the file is the conversation title; the second is the create date.
HTML format
Wraps each conversation in a clean, print-friendly HTML document with system-font CSS and message bubbles. Drop it into a browser to read; print it for PDF.
JSON format
A simplified per-conversation JSON: { id, title, created, updated, messages: [{role, content, created}] }. Much friendlier to scripts than the raw tree.
Bulk export & ZIP
Use the All visible → .zip options to bundle every conversation in your current filter into a single ZIP. We build the ZIP entirely in your browser using JSZip — no server, no upload. Filenames are derived from chat titles (slugified) plus the conversation ID for uniqueness.
Privacy
Your conversations.json is read with the FileReader API and parsed in this tab. Nothing is uploaded. Close the tab and the data is gone from the page. We don't track or log anything you do here.
ChatGPT Conversation Exporter — frequently asked questions
In ChatGPT: Settings → Data Controls → Export Data, then confirm via email. OpenAI sends a download link to a ZIP file; conversations.json sits inside.
Never. The file is read locally with FileReader and parsed in your browser tab. Open DevTools → Network and you'll see no outbound request carries your conversation data.
Markdown (.md), HTML (.html), plain text (.txt), JSON (.json), and PDF (via your browser's "Save as PDF" print dialog). For all chats at once, ZIP archives of any of those formats.
ChatGPT stores conversations as trees because edited prompts create branches. The exporter walks the active branch from the conversation's current_node back to the root and lays it out in order. Edited-and-abandoned branches are skipped.
Image attachments are listed by filename and content reference — the binary image bytes live separately inside the OpenAI ZIP, not in conversations.json. Open them from the original ZIP.
Tested with exports of 5,000+ conversations / 100+ MB. The parse happens in one pass; rendering is on demand (only the selected conversation is laid out at a time).