Guides ·
Export ChatGPT chat to Markdown
To export a ChatGPT chat to Markdown, open the thread on chatgpt.com, open Chat Transfer, leave the format on Markdown (the default), and click Export — you get one .md file named after the chat title and date, with a YAML header and a ### User / ### Assistant heading for every turn, 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 Markdown 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. You must be signed in to the same account to download. The ZIP holds chat history and other account data — not a single readable note for one conversation. Self-service export is available for Free, Go, Plus, Pro, and eligible Edu workspaces; Business, Enterprise, and ChatGPT for Healthcare workspaces must go through the workspace owner. You can also start a request from the OpenAI Privacy Portal.
| Need | ChatGPT Settings > Data controls > Export data | Chat Transfer Export (Markdown) |
|---|---|---|
| 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, sign-in required (source) | File saved from the extension right away; nothing is emailed |
| Output | Account data ZIP | .md with YAML frontmatter and ### Role headings (also Plain, JSON, 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 the 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 Markdown export when you want a single conversation in Obsidian, a repo, a ticket, or another AI.
What the Markdown file looks like
This is the shape Chat Transfer 0.4.0 writes, taken from the extension’s own formatter (toMarkdown + exportYamlFrontmatter in extension/src/shared/format.js), with placeholder text:
---
title: "Refactor auth middleware - ChatGPT"
source: "ChatGPT"
url: "https://chatgpt.com/c/…"
date: 2026-10-26
turnCount: 6
---
### User
Can you refactor this middleware so the token check runs once?
### Assistant
Here is a version that caches the decoded token…
- Frontmatter keys:
title(tab title),source(ChatGPT / Claude / Gemini / Grok),url(the tab URL),date(export day, UTC,YYYY-MM-DD), andturnCount. Tools that read YAML properties, such as Obsidian properties, can pick these up as note metadata. - When YAML is added: Markdown Full, User-only, and Assistant-only get the header. Code-only, Plain, JSON, HTML, PDF, and State do not. The formatter only prepends YAML when the body already starts with a
###role heading. - Turns: each turn starts with
### Useror### Assistant(role label is the role string with the first letter capitalized), then the body. Fenced code blocks are left intact. ASystemturn is only included when you tick Keep system prompt. - Attachments: files or images ChatGPT showed that can’t be exported become one line like
[attachment not exported: …]. File bytes are never invented. - Filename:
{chat-title}-{YYYY-MM-DD}.md. If the title is empty it falls back to the site name, thencrosschat-hop-{site}-{date}.md. Content modes add-user,-code, or-assistantbefore.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 are pulled from hooks such as [data-message-content], [data-testid="message-content"], and .markdown / .prose nodes. Chrome-only UI (Copy / Edit buttons, nav, sr-only labels) is stripped before formatting. 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 Markdown
- 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, keep Markdown selected. Pick which turns (all, from turn N, or selected) and a Content mode (see below).
- 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.
Faster path: Alt+Shift+C copies the full chat as Markdown to your clipboard (no handoff wrapper, ignores Content mode). Paste it into any editor and save as .md. You can rebind it at chrome://extensions/shortcuts.
Pick a Content mode before you export
| Mode | What lands in the .md | YAML header | Good for |
|---|---|---|---|
| Full | Every User and Assistant turn | Yes | Notes, archives, sharing the whole thread |
| User-only | Only your prompts (-user.md) | Yes | Building a prompt library from a good session |
| Assistant-only | Only ChatGPT’s replies (-assistant.md) | Yes | Turning answers into docs or a README draft |
| Code-only | Only fenced code blocks (-code.md) | No | Pulling every snippet out of a coding chat |
Need more than one file? ZIP packs archive.json (the CT Memory record) plus transcript.md, and adds images only when their bytes were already in the extract. HTML and PDF are there when the reader doesn’t use Markdown.
Then continue it somewhere else (optional)
A Markdown export is often the first step of a hop. From the same popup you can open Claude, Gemini, Grok, or a new ChatGPT chat and paste the thread as Full, Last N (default 10; presets 4, 8, 16), or last assistant only. If the paste goes over 12k characters, the composer gets a shorter slice and the full unwrapped Markdown downloads as {title}-full-{date}.md for manual attach. Paste never presses Send. Soft Auto-Send is opt-in (default off) and asks “Send this hop now?” once after a successful paste. 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 — you get an
[attachment not exported: …]line instead. - It is one thread at a time. For your whole history, use ChatGPT’s Settings > Data controls export (or the Privacy Portal).
- An empty new chat has nothing to export; Copy and Export stay off until extract finds turns.
- Business / Enterprise / Healthcare workspaces that block self-service account export can still use Chat Transfer on any thread you can open in Chrome — that does not replace OpenAI’s official account ZIP.
FAQ
Can I export a single ChatGPT conversation to Markdown?
Yes. Open that conversation, pick Markdown in Chat Transfer, and click Export. You get one .md file for that thread only.
Does ChatGPT have a built-in Markdown 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 case.
Will code blocks survive?
Yes. Fenced code is kept as-is. Use Code-only if you want just the code.
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 (Settings > Data controls, email/SMS link, up to 7 days, 24-hour expiry)
- Data controls in ChatGPT — OpenAI Help Center
- How to export your data from the ChatGPT Android app — OpenAI Help Center
- OpenAI Privacy Portal
- Obsidian Help — Properties (YAML frontmatter as note metadata)
- CommonMark (Markdown spec)
- Chat Transfer on the Chrome Web Store
- Chat Transfer privacy policy
Related
Product · Guides · 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