Guides ·
Export Grok chat to Markdown
To export a Grok chat to Markdown, open the thread on grok.x.ai (or grok.com / x.com/i/grok), 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 waiting for an xAI account-data ZIP.
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
xAI account data vs a one-thread Markdown file
xAI lets you download account data from Grok’s Settings → Data Controls (also reachable at accounts.x.ai/data), and that is the right tool when you want a bulk archive. According to xAI’s Consumer FAQs, you can download or delete your data from the Grok app or Grok.com Data Controls, or submit further requests through the privacy portal. The result is an account-scoped archive — typically a ZIP that includes a large JSON blob of conversations — not a single readable note for one open thread. Grok history used inside the X app may sit with your X account archive instead of the grok.com export.
Chat Transfer covers the other job: the conversation already open in Chrome becomes one Markdown file in a few clicks, with YAML frontmatter Obsidian and similar tools can read. Sibling guides cover the same one-thread export for ChatGPT, Claude, and Gemini.
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: "Weekend trip ideas"
source: Grok
url: "https://grok.x.ai/chat/…"
date: 2026-10-28
turnCount: 4
---
### User
Outline a three-day trip to Lisbon for two adults.
### Assistant
Here is a compact three-day plan…
- 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 — and Grok’s web UI rarely paints a user-visible system/instructions panel, so that box is usually empty. - Body walk: the Grok adapter walks the chosen response body in child order — headings become ATX Markdown, a
preor structured code shell becomes a fence (with a language class when one is present), and prose stays between them. Chrome lines (Copy, Share, Retry, DeepSearch, Think, and similar) are stripped. If the walk is empty or drops most of the visible text, the extract keepsinnerText. - Attachments: files or images that cannot 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 Grok thread
The Grok adapter is a best-effort DOM reader for grok.x.ai (any path), grok.com (optional secondary), and the X-embedded hosts x.com/i/grok and twitter.com/i/grok. Detection is hostname/path only — TipTap markers are not required to claim the page. Primary turn hooks are [data-testid="user-message"] and [data-testid="assistant-message"], with fallbacks for grok-response / grokResponseText, .message-bubble, and older aria labels (“You” / “Grok”). Roles are never invented from even/odd position when the role is unclear.
Composer paste (for hops) prefers TipTap / ProseMirror contenteditable first, then textbox contenteditables, then Ask/Grok textareas and data-testid="grokInput"; on x.com/i/grok it may also use tweetTextarea_0. Paste never clicks Send or Submit (button[aria-label="Submit"], button[data-testid="chat-submit"], button[data-testid="grokSendButton"], and similar). Soft Auto-Send, when you opt in, only asks once after a successful paste.
xAI and X remount TipTap and data-testids without notice. If those hooks are missing, the adapter does not invent messages; Copy and Export stay off until real turns appear.
Steps: export one Grok chat to Markdown
- Add Chat Transfer from the Chrome Web Store (0.4.0) and pin it.
- Open the Grok conversation on grok.x.ai, grok.com, or x.com/i/grok 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 Grok’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 ChatGPT, Claude, Gemini, or a new Grok 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: Hop Grok to ChatGPT, Hop Grok to Claude, Hop Grok to Gemini, 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 Grok hasn’t loaded yet need Scroll & extract first.
- Uploaded files and images are not rebuilt — you get an
[attachment not exported: …]line instead. - UI chrome (Copy, Share, Retry, DeepSearch, Think labels) is stripped on purpose so it does not pollute the Markdown.
- It is one thread at a time. For your whole Grok account history, use xAI’s Data Controls download (or the X archive if you used Grok inside X).
- An empty new chat has nothing to export; Copy and Export stay off until extract finds turns.
- Selector fragility is real — xAI/X can change TipTap and data-testids; when hooks vanish, the adapter fails closed instead of inventing turns.
FAQ
Can I export a single Grok 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 Grok have a built-in Markdown export for one chat?
xAI’s documented bulk path is account data download from Data Controls / accounts.x.ai/data (a ZIP / JSON archive) — not a one-thread .md download (xAI Consumer FAQs). Chat Transfer covers the one-thread case.
Will code blocks survive?
Yes. The Grok body walk turns structured code shells into fences and keeps fenced code as-is. Use Code-only if you want just the code.
Which Grok hosts are supported?
Primary: grok.x.ai and x.com/i/grok (plus twitter.com/i/grok). Optional secondary: grok.com. Host permissions match those patterns; there is no blanket x.com access.
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
- Consumer FAQs — xAI (history, download/delete via Data Controls)
- accounts.x.ai/data (account data download entry)
- Privacy Policy — xAI
- 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 · Search Grok history locally · Export ChatGPT chat to Markdown · Export Claude chat to Markdown · Export Gemini chat to Markdown · Hop Grok to ChatGPT · Hop Grok to Claude · Hop Grok to Gemini · Soft Auto-Send · How to use · Local only · Privacy · Add to Chrome