ChatGPT Markdown Export

Adds "Copy as Markdown" and "Export as Markdown" to the ChatGPT chat options menu (the 3-dots button in the top-right of a chat).

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey, Greasemonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals {tampermonkey_link:Tampermonkey}.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Userscripts.

Voor het installeren van scripts heb je een extensie nodig, zoals {tampermonkey_link:Tampermonkey}.

Voor het installeren van scripts heb je een gebruikersscriptbeheerder nodig.

(Ik heb al een user script manager, laat me het downloaden!)

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

(Ik heb al een beheerder - laat me doorgaan met de installatie!)

Maker
Blati
Dagelijks aantal installaties
0
Totaal aantal installaties
1
Beoordelingen
0 0 0
Versie
0.1.0
Gemaakt op
18-05-2026
Bijgewerkt op
18-05-2026
Grootte
16,4 KB
Licentie
MIT
Wordt toegepast op

Adds two items to ChatGPT's chat options menu (the three-dots button in the top-right of an open conversation):

  • Copy as Markdown — copies the full conversation to the clipboard.
  • Export as Markdown — saves the conversation as a .md file named after the chat title and today's date.

Both options live inside the native menu, with matching styling, divider, and hover behavior — they look like part of ChatGPT.

Output format

The exported Markdown is the model's own emission, taken verbatim from ChatGPT's backend conversation API — not scraped from rendered HTML. That means code fences, tables, nested lists, LaTeX math (\(...\) and \[...\]), and blockquotes all survive intact, exactly as the model produced them.

Each file starts with a small YAML frontmatter block:


 ────────────────────────────────────────────────────────────────────────────────

 title: "..."
 conversation_id: ...
 created: ...
 exported: ...
 model: ...
 url: https://chatgpt.com/c/...

Each turn is preceded by an H2 heading (## User / ## ChatGPT (model-slug)), and assistant turns include a "Sources" section underneath when web citations were used in the answer.

When a chat has branches (from edited prompts or regenerated replies), the export follows the currently visible thread — i.e. what you see on screen — by walking the conversation tree from current_node back to the root.

Privacy

The script makes two requests, both to chatgpt.com, both using your already-active session:

  1. GET /api/auth/session — to obtain the access token the ChatGPT UI itself uses.
  2. GET /backend-api/conversation/{id} — to fetch the conversation JSON.

Nothing is sent anywhere else. There is no telemetry, no third-party server, no analytics. The whole script runs locally in your browser.

Compatibility

  • Site: https://chatgpt.com/* (and the legacy chat.openai.com/*)
  • Userscript managers: Tampermonkey, Violentmonkey. The @grants are required — ChatGPT's strict Content-Security-Policy blocks @grant none injections, so the script declares GM_setClipboard, GM_download, and GM_info to opt into the sandboxed injection mode.

Known limitations

  • Image attachments in user messages are rendered as *[image: …]* placeholders rather than downloaded.
  • Non-final assistant channels (tool calls, hidden reasoning) are skipped — only the visible answer text is exported.
  • Shared chat URLs (/share/{id}) are not yet supported; only your own conversations under /c/{id}.