Skip to content
ChatVault

How to Export ChatGPT Conversations to JSON, Markdown, TXT, or HTML

Published · Updated

Exporting ChatGPT conversations one chat at a time means copy-pasting from the sidebar, losing code formatting on the way, and never being sure you captured the whole thread. This guide shows how to export ChatGPT conversations in bulk with ChatVault, a local-first Chrome extension, and end up with files you can actually use: JSON, Markdown, TXT, or HTML.

Everything below runs on your own device. You stay signed in with your own account, the extension reads only the chats you can already open, and nothing is uploaded anywhere. PDF is the one format you will not find in this list, and the format section explains why.

Before you start: what exporting requires

You need desktop Chrome and a ChatGPT account you are signed into. ChatVault is a browser extension, so it works with the same pages you already use: it cannot export chats your account cannot see, recover conversations you deleted, or reach into other people's accounts. If you use a workspace or team plan, only the conversations your login can open in the sidebar are exportable.

You also do not need to prepare anything else. There is no ChatVault account, no API key, and no cloud service in the middle. The first run asks for one permission — access to chatgpt.com — and that permission is only requested when you enable the ChatGPT platform inside the extension.

How to export ChatGPT conversations step by step

The flow below is the same one described on the export ChatGPT conversation history product page, expanded with the detail a first run usually needs:

  1. Install ChatVault from the Chrome Web Store and pin it to your toolbar.
  2. Open the extension settings, enable the ChatGPT platform, and grant the chatgpt.com host permission when prompted.
  3. Open chatgpt.com in a tab and sign in with the account whose history you want to export.
  4. Start a scan from the side panel. ChatVault follows the sidebar's pagination and lazy loading, then lists every conversation your account can see, with duplicates removed.
  5. Select all conversations, or filter by text and date when metadata is available, if you only want a subset.
  6. Pick one or more formats: JSON, Markdown, TXT, or HTML.
  7. Start the job. Watch progress, warnings, and retries in the side panel; you can pause, or close the browser entirely and resume later.
  8. When the job finishes, download the ZIP archive and open manifest.json to see the completeness state recorded for every chat.

Choose your export format

Every conversation is first normalized into a canonical, versioned JSON document, and the readable formats are rendered from that model. That means a Markdown file and an HTML file of the same chat always agree on content and message order, because they come from one source.

JSON: the lossless archive

JSON preserves roles, message order, timestamps when available, attachments as structured references, the adapter version, and a deterministic content hash. Keep this format for long-term storage or your own tooling; the schema declares its version and stays readable by future releases.

Markdown: for notes and documentation

Markdown keeps code blocks with their language tags, tables, nested lists, links, and quotes. Choose it when chats feed into Obsidian, Notion, a wiki, or any documentation workflow, and when you may later paste excerpts into another tool.

TXT and HTML: plain text or a shareable page

TXT opens in any editor and indexes well in desktop search tools. HTML renders each chat as a self-contained page you can browse or share with someone who does not use ChatGPT. Both are rendered from the same canonical model as the other formats.

Why there is no PDF export yet

PDF export has not passed its release gate for very long conversations, tables, and code blocks, so it is deliberately absent. Rather than ship a format that silently degrades on long threads, ChatVault ships nothing in that slot until it clears the gate. If you need a fixed layout today, export HTML and print to PDF from your browser.

Check that long conversations exported completely

ChatGPT loads older messages in batches as you scroll, which is exactly where naive exporters lose content without telling you. ChatVault performs the loading steps a long thread needs and, when the platform exposes a reliable expected count, compares it against the number of messages actually extracted.

Each conversation ends up in one of four states, written into manifest.json with a reason:

  • complete — the full history is proven loaded, with counts matching where a reliable count exists.
  • warning — the body is intact but something degraded, such as an attachment kept as a structured reference.
  • incomplete — completeness could not be proven; the item is flagged for retry and never reported as success.
  • unsupported — the page structure was not recognized and the item failed in a controlled way.

Where your files end up, and who can read them

Extraction, validation, and file rendering all run locally in your browser. There is no ChatVault backend, so your prompts and replies are never sent to a server, written to logs, or packed into analytics. The optional diagnostics carry content-free status and error codes only.

One caution: the archive you download, and the searchable copy you can keep in the local Vault, live inside your browser profile and downloads folder. That is a working copy, not a backup. To turn an export into a real backup, copy the ZIP to storage you control — the guide to backing up all ChatGPT chats in one job covers that workflow, and the Vault's search is documented on the page about organizing ChatGPT conversations locally.

Limits worth knowing before you rely on an export

An export reflects what your account can access at scan time. Chats you deleted earlier are gone from the platform and cannot be recovered by any exporter. Conversations shared with you by link are only exportable if your own account can open them in the sidebar.

Attachments the adapter understands are preserved; ones it does not are never dropped silently — they become structured references in the JSON model and the chat gets a warning state. If ChatGPT changes its page structure, affected items fail as unsupported with a documented reason instead of producing empty files, and an adapter update follows.

Frequently asked questions

Can I export all my ChatGPT conversations at once?

Yes. Run a scan, select every conversation it lists, and start one job. The whole selection exports into a single ZIP archive, and if anything interrupts the run, checkpoints let it resume without redoing finished chats.

How is this different from ChatGPT's built-in data export?

The built-in export emails your entire history on the platform's schedule as one undifferentiated dump. ChatVault lets you choose which conversations to export and which formats you want, reports a completeness state per chat, and hands you readable files immediately after the job ends.

Can I export a ChatGPT conversation to PDF?

No. PDF export has not passed its release gate for long conversations, tables, and code blocks, so it is not offered. HTML is the closest current format for a fixed, shareable rendering, and your browser can print that to PDF.

Do I need a paid ChatGPT account to export?

No. ChatVault reads whatever your signed-in account can already see, on any plan. It cannot reach chats your plan does not include, and it never touches billing or account settings.

Does ChatVault work on iPhone or Android?

No. It is a desktop Chrome extension, and mobile browsers are not supported in the current release. On a phone, use ChatGPT's built-in data export from Settings, which emails you an archive; run ChatVault on a desktop for bulk jobs with completeness checks.

Will my chats be uploaded to a server?

No. Everything runs locally in your browser and there is no ChatVault backend. Conversation content never leaves your device, is never logged, and is never included in diagnostics or support bundles.