Skip to content
100% in your browser. Nothing you paste is uploaded — all processing runs locally. Read more →

Why your ChatGPT markdown looks broken when you paste it (and the one-click fix)

8 min read #markdown #chatgpt #claude #ai #paste

You ask ChatGPT for a meeting agenda. It returns something nicely formatted with bold, headers, and bullet points. You paste it into Notion (or Slack, or Gmail, or Google Docs) and it shows up as a wall of literal **bold** text with stray ## characters.

This is the most common AI workflow complaint of 2026, and it’s a solvable problem with the right intermediate step. This post is what breaks, why, and the path that works.

What’s actually happening

LLMs default to markdown source code in their text responses, because:

  1. Markdown is the most-trained-on technical writing format on the open web.
  2. ChatGPT’s web UI renders the markdown back to formatted output, so users see “Heading 1” — but underneath, the model literally wrote # Heading 1.
  3. Claude, Gemini, Mistral, and every other major frontier model does the same. It’s an emergent default, not a configured one.

Where the model’s output goes determines what happens to the markdown:

DestinationWhat happens to ChatGPT markdown
ChatGPT’s own UIRendered as formatted text. You see headings and bullets.
Slack**bold** becomes literal asterisks. Slack uses *bold*.
DiscordMostly works. Discord supports a markdown-ish subset close to GFM.
NotionMostly works on web (since 2024). Pasting from clipboard into mobile is hit or miss.
Gmail / Outlook composeLiteral ** and ## symbols. Email clients don’t render markdown.
Google DocsVariable. Recent Docs (post-mid-2024) recognizes some markdown patterns on paste; older / different account types don’t.
Microsoft WordLiteral markdown source.
ConfluenceMostly literal. Some shortcuts (* → bullet) work as you type, not on paste.
Linear / Jira / AsanaEach handles a slightly different subset; none handle all of GFM.

The pattern: tools written for technical users (Discord, Notion, GitHub) handle markdown reasonably. Tools written for consumers (Gmail, Word, Google Docs without markdown-paste preference) don’t.

The clipboard format gap

There’s a deeper reason this is so painful: the clipboard supports multiple formats simultaneously — but ChatGPT only puts one of them in your clipboard.

When you copy text in any normal editor, your OS clipboard typically contains:

A receiving app picks the highest-fidelity format it understands. Pasting from Word into Outlook copies the formatted email; pasting the same Word document into a code editor copies plain text.

ChatGPT’s web UI, by default, copies only text/plain containing the markdown source. There’s no text/html version. So every receiving app sees **bold** literally. There’s nothing for Gmail or Google Docs to render — they’re not deficient; they just got handed plain text that looks like markdown.

(ChatGPT’s Mac app, since late 2025, optionally puts a rendered-HTML version in the clipboard too. Browser ChatGPT still doesn’t.)

The one-click fix

The general-purpose solution is: convert the markdown to HTML before pasting.

You can do this five ways, in increasing convenience:

1. Paste into our viewer, copy the HTML

  1. Open md.tooljo.com in a tab.
  2. Paste the ChatGPT response in the left pane.
  3. Click “Copy HTML” in the toolbar.
  4. Paste into Gmail / Docs / Word — formatting preserved.

Works for any markdown, any LLM, any browser.

Click ”🔗 Share link” and the LZ-compressed markdown becomes part of the URL. Send the URL; the recipient sees the rendered output without you needing to email a file. Good for one-off “look at this output” scenarios.

3. Paste into Notion / Discord directly

These two are the only chat / docs tools that handle markdown well enough that ChatGPT output usually just works. If you’re pasting into Notion, you probably don’t need a converter at all. If your target is Slack, Notion, or Discord, try pasting the markdown directly first.

4. Use ChatGPT itself to convert

Add to your prompt:

“Reply in plain HTML, not markdown. Use proper <h2>, <p>, <ul> tags.”

The model will skip its markdown default and emit HTML. You can then paste the HTML into a text editor that renders HTML on paste (Gmail’s compose box does — try View Source).

This works for one-shot prompts. It doesn’t help when you want markdown for some uses (a README) and HTML for others (an email) from the same content.

5. The browser extension route

Several Chrome extensions claim to “fix ChatGPT clipboard.” Most do the same thing — convert the selected text from markdown to HTML on copy. They work fine for casual use; the privacy tradeoff is that the extension reads everything you copy. If that bothers you, option 1 (paste into a tool you trust) avoids it.

Specific scenarios

”I need to email a ChatGPT-written status report”

  1. Paste into md.tooljo.com
  2. Click “Copy HTML”
  3. Switch to Gmail’s compose, paste

You’ll see the formatting preserved — bold, headers, bullets, links. If your email client supports rich-text composition, this works.

”I need a Word document”

Two options:

”I need to share a doc that updates”

For docs you’ll edit and re-share, keep the markdown as your source-of-truth (in .md files in a repo, in a Notion page, or in a tool like Obsidian). Re-export to whatever format the recipient wants, when they want it.

”I’m pasting a code block and it loses indentation”

LLM markdown wraps code in triple backticks:

```python
def hello():
    print("hi")

When you copy this from ChatGPT and paste into a tool that doesn't
recognize the fenced block, you get a wall of `def hello():\n
print("hi")` with the triple backticks present as literal text.

The fix: paste into [md.tooljo.com](/), let it render the code block,
then copy from the rendered output (which preserves syntax). Or use
the "Copy HTML" output, which produces `<pre><code>...</code></pre>`
that tools like Confluence and Notion will recognize as code.

## When markdown is the right format

Don't fight the tide. Markdown is the right output format for:

- **GitHub README and issues** — handles GFM natively
- **Documentation** generated by static-site builders
- **Slack and Discord posts** (with minor syntax differences)
- **Notion** (mostly)
- **Hashnode, dev.to, Hashtag, Substack** — all parse markdown
- **Anywhere you'll edit the content again**

The pasting-mangling problem is specifically when the output target
is rich-text-only (email, Word, traditional docs) and you don't
want to re-edit the content there.

## Reverse direction: HTML to Markdown

The flip side: someone hands you a rich-text email, a Word document,
or a chunk of HTML from a webpage, and you want clean markdown for
your notes. Same fix in reverse:

1. Paste the HTML / rich text into the [HTML → Markdown
   converter](/from-html).
2. Copy the markdown output.
3. Save into your notes / repo / Notion.

This is the workflow most useful for converting Word docs into
Markdown-friendly note systems. Word's HTML is famously messy
(Microsoft fills it with `mso-*` styles), but the structural tags
(headings, lists, links) survive — Turndown extracts them; the
cosmetic markup gets dropped.

## The bigger picture

The clipboard format gap was always going to bite somewhere; LLMs
made it visible because suddenly every knowledge worker is moving
content between tools constantly. The right long-term fix lives in
the LLM clients: ChatGPT, Claude, and Gemini should all put both
plain-text-markdown and rendered-HTML in the clipboard, like Word
does. Some of them are starting to.

Until then, treat markdown as the source format and convert at
paste-time. Our [viewer](/) is the one-click intermediate. The
[reverse converter](/from-html) handles the other direction. Both
run entirely in your browser — your AI conversation never leaves
your device.

## Try it

- [Markdown viewer with copy-HTML](/)
- [HTML → Markdown reverse](/from-html)
- [Cheat sheet of every markdown syntax](/cheatsheet)

## Related across the network

- [regex.tooljo.com](https://regex.tooljo.com/) — for the
  paste-cleanup regex patterns described above.
- [base64.tooljo.com](https://base64.tooljo.com/) — when the markdown
  carries inline data URIs (images), decode them to verify or extract.
- [hash.tooljo.com](https://hash.tooljo.com/) — fingerprint a markdown
  document to detect drift after a paste operation.