Guides ·
Export ChatGPT chat to JSON
To export a ChatGPT chat to JSON, open the thread on chatgpt.com, open Chat Transfer, set the format to JSON, pick turns (Full / From turn N / Selected) and a Content mode, then click Export — you get one .json file with version, exportedAt, sourceSite, optional title, and a turns array of { role, text, index }, built on this device without an email link.
Version 0.4.0 is live on the Chrome Web Store. Export runs only when you click it. Soft Auto-Send stays opt-in and default off. Add to Chrome
ChatGPT’s built-in export vs a one-thread JSON file
ChatGPT has an official data export, and it is the right tool when you want everything. According to OpenAI’s help article Exporting your ChatGPT history and data, you go to Settings > Data controls > Export data on the web app (or Data controls in the iOS / Android apps), confirm the export, then wait for an email or SMS with a download link. That link can take up to 7 days to arrive and expires 24 hours after delivery. The ZIP holds chat history and other account data — not a single machine-readable note for one conversation.
| Need | ChatGPT Settings > Data controls > Export data | Chat Transfer Export (JSON) |
|---|---|---|
| Scope | Whole account (chat history + other account data) | The ChatGPT thread open in this tab — or a slice of it |
| Delivery | Email or SMS link, up to 7 days, valid 24 hours (source) | File saved from the extension right away; nothing is emailed |
| Output | Account data ZIP | Pretty-printed .json with version, exportedAt, sourceSite, optional title, turns[] (also Markdown, Plain, CSV, HTML, PDF, State, ZIP) |
| Who can self-export | Free / Go / Plus / Pro / eligible Edu; not Business, Enterprise, or Healthcare self-service | Anyone with the Chrome extension on a ChatGPT tab they can open |
| Re-import into ChatGPT | OpenAI’s export is for download / privacy requests — not a one-click restore into another personal account | No import into ChatGPT either — but you can Continue a Library archive in Claude, Gemini, Grok, or a new ChatGPT chat |
Rule of thumb: use ChatGPT’s export for a full backup or account move-out; use a one-thread JSON export when you want a structured file for a script, pipeline, or another tool that prefers JSON over Markdown.
What the JSON file looks like
This is the shape Chat Transfer 0.4.0 writes, taken from the extension’s own formatter (toJson in extension/src/shared/format.js), with placeholder text. Schema version stays 1. There is no YAML frontmatter on JSON — that is Markdown-only.
{
"version": 1,
"exportedAt": "2026-10-31T01:00:00.000Z",
"sourceSite": "chatgpt",
"title": "Refactor auth middleware - ChatGPT",
"turns": [
{ "role": "user", "text": "Can you refactor this middleware so the token check runs once?", "index": 0 },
{ "role": "assistant", "text": "Here is a version that caches the decoded token…", "index": 1 }
]
}
- Top-level keys:
version(always1today),exportedAt(ISO timestamp),sourceSite(ChatGPT / Claude / Gemini / Grok id), optionaltitle(tab title when non-empty), andturns. - Each turn:
role(user/assistant/systemwhen Keep system prompt is on),text(the turn body, same ordered DOM text Markdown uses),index(turn index from the extract). - Unwrapped: JSON Copy/Export is unwrapped — no hop handoff wrapper. Hop paste is a separate path.
- Filename:
{chat-title}-{YYYY-MM-DD}.json. Content modes add-user,-code, or-assistantbefore.json. - Not CT Memory: This JSON export is the transcript format above. Library archives use a separate
kind: ct-memoryrecord. ZIP packsarchive.json(CT Memory) plustranscript.md.
How Chat Transfer reads a ChatGPT thread
The ChatGPT adapter is a best-effort DOM reader for chatgpt.com and chat.openai.com (and their www hosts). It prefers turns marked with data-message-author-role, then falls back to turn containers. Message bodies keep document order: headings become Markdown headings, rendered code blocks become fenced blocks with a language when the page shows one. Markdown and JSON use that same turn text. If those hooks are missing — OpenAI can change the page without notice — the adapter does not invent messages; Copy and Export stay off until real turns appear.
Composer paste (for hops) targets #prompt-textarea and related ProseMirror / unified-composer selectors. Paste never clicks Send. Soft Auto-Send, when you opt in, only asks once after a successful paste.
Steps: export one ChatGPT chat to JSON
- Add Chat Transfer from the Chrome Web Store (0.4.0) and pin it.
- Open the ChatGPT conversation on chatgpt.com and wait until the last reply finishes streaming.
- Long thread? Click Scroll & extract. It scrolls toward the bottom until the turn count stops growing or 12 passes are done, then reads the visible turns. It never clicks Send.
- Under Copy & export, select JSON. Pick which turns (Full, From turn N, or Selected) and a Content mode (Full / User-only / Assistant-only / Code-only).
- Click Export. The filename preview shows what you’ll get. Export also saves the thread to your on-device Library so you can search it later.
Need a readable note instead? Keep format on Markdown — see Export ChatGPT chat to Markdown. Plain is the third radio next to Markdown and JSON.
Pick turns and Content mode before you export
| Control | What lands in the .json | Good for |
|---|---|---|
| Turns: Full | Every extracted turn (subject to Content mode) | Full archive of the open thread |
| Turns: From turn N | From that turn index onward | Dropping a long preamble |
| Turns: Selected | Only the turns you tick | Hand-picking a slice |
| Content: Full | User + Assistant (system only if Keep system prompt) | Scripts that need the whole dialogue |
| Content: User-only | Only your prompts (-user.json) | Prompt libraries |
| Content: Assistant-only | Only ChatGPT’s replies (-assistant.json) | Answer dumps |
| Content: Code-only | Only fenced code blocks (-code.json) | Snippet extraction |
Hop payload is separate: Full / Last N (default 10; presets 4, 8, 16) / last assistant. Soft Auto-Send is opt-in, default off, and never silent-sends.
Then continue it somewhere else (optional)
A JSON export is a structured archive. From the same popup you can still hop to Claude, Gemini, Grok, or a new ChatGPT chat with paste as Full / Last N / last assistant. Paste never presses Send. Soft Auto-Send asks “Send this hop now?” once after a successful paste when you opt in. Guides: Export ChatGPT to another AI, Hop ChatGPT to Claude, Hop ChatGPT to Gemini, Hop ChatGPT to Grok, Soft Auto-Send.
Local only
Chat Transfer reads the page you already have open and formats the file inside the extension. There is no Chat Transfer backend, the marketing site never receives your chat text, and host access is limited to ChatGPT, Claude, Gemini, and Grok domains. Export needs no downloads permission. Details: privacy policy and Local only.
Limits worth knowing
- It exports what is rendered in the tab. Turns ChatGPT hasn’t loaded yet need Scroll & extract first.
- Uploaded files, images, and canvas / GPT panels are not rebuilt as binary — text may note an attachment instead.
- It is one thread at a time. For your whole history, use ChatGPT’s Settings > Data controls export (or the OpenAI Privacy Portal).
- An empty new chat has nothing to export; Copy and Export stay off until extract finds turns.
- JSON export is not the same as CT Memory
archive.jsoninside a ZIP. Use ZIP when you want both the Library record and a Markdown transcript.
FAQ
Can I export a single ChatGPT conversation to JSON?
Yes. Open that conversation, pick JSON in Chat Transfer, and click Export. You get one .json file for that thread (or slice) only.
Does ChatGPT have a built-in JSON export for one chat?
ChatGPT’s documented export is account-wide: Settings > Data controls > Export data, delivered by an email or SMS link that can take up to 7 days and expires after 24 hours (OpenAI help). Chat Transfer covers the one-thread JSON case.
Is JSON the same as Markdown export?
No. Markdown adds YAML frontmatter and ### Role headings. JSON is the structured { version, exportedAt, sourceSite, title?, turns[] } document with no YAML.
Is my chat uploaded anywhere?
No. Formatting happens in the extension on this device. Library copies stay in chrome.storage.local (large bodies may use IndexedDB).
Does Export press Send?
No. Export only downloads a file. Soft Auto-Send (hop only) is opt-in, default off, and never silent-sends.
Sources
- Exporting your ChatGPT history and data — OpenAI Help Center
- Data controls in ChatGPT — OpenAI Help Center
- OpenAI Privacy Portal
- JSON.org (JSON data-interchange format)
- Chat Transfer on the Chrome Web Store
- Chat Transfer privacy policy
Related
Product · Guides · Export ChatGPT chat to Markdown · Export Claude chat to Markdown · Export Gemini chat to Markdown · Search ChatGPT history locally · Export ChatGPT to another AI · Hop ChatGPT to Claude · Hop ChatGPT to Gemini · Hop ChatGPT to Grok · Soft Auto-Send · How to use · Local only · Privacy · Add to Chrome