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).

Dovrai installare un'estensione come Tampermonkey, Greasemonkey o Violentmonkey per installare questo script.

You will need to install an extension such as Tampermonkey to install this script.

Dovrai installare un'estensione come Tampermonkey o Violentmonkey per installare questo script.

Dovrai installare un'estensione come Tampermonkey o Userscripts per installare questo script.

Dovrai installare un'estensione come ad esempio Tampermonkey per installare questo script.

Dovrai installare un gestore di script utente per installare questo script.

(Ho già un gestore di script utente, lasciamelo installare!)

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

(Ho già un gestore di stile utente, lasciamelo installare!)

Autore
Blati
Installazioni giornaliere
0
Installazioni totali
2
Valutazione
0 0 0
Versione
0.1.0
Creato il
18/05/2026
Aggiornato il
18/05/2026
Dimensione
16,4 KB
Licenza
MIT
Applica a

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}.