Skip to main content

Fix Formatting

Paste AI Text into Slack Without the Formatting Breaking

CleanPastedText editorial · Updated

Text workbench

Try it on your text

Cleaning mode

Removes hidden characters and standardizes AI-style punctuation.

Try a real example

Each sample contains a problem you cannot see.

Original

Pasted text

0 chars · 0 words

Cleaned

Ready to copy

0 changes

Text stays in this browser

Same words · No AI rewriting · No content logging

Why does ChatGPT text paste broken into Slack?

Because Slack was never running the Markdown you think it was. ChatGPT, Claude, and Gemini write their answers in standard Markdown — **bold**, ### headings, pipe-separated tables — and the chat window renders that into styled HTML before you copy it. Slack messages, though, use a different, narrower syntax of their own called mrkdwn. It looks similar at a glance but diverges in exactly the ways that matter for a pasted AI answer: bold is one asterisk, not two, and headings do not exist as a concept at all.

The result is predictable once you know the cause: a pasted **Revenue** shows up in the Slack message as literal text — asterisks included — instead of bold, and a pasted ### Next steps line shows up as a plain sentence still wearing its hash marks. Slack isn't failing to parse Markdown; it's correctly parsing its own syntax, which the pasted text was never written in. This is the same character-versus-formatting mismatch covered in general terms on why text pastes weird — Slack is simply a destination with an unusually strict, unusually narrow syntax of its own.

Slack's mrkdwn vs. the Markdown ChatGPT writes

Slack documents its own syntax as mrkdwn, a deliberately smaller set of formatting rules than standard Markdown. Here is where every AI chatbot's output collides with it:

FormattingChatGPT/Claude writeSlack mrkdwnPasted into Slack as-is
Bold**bold***bold*Literal **asterisks**, not bold
Italic*italic* or _italic__italic_Single *asterisks* italicize by accident; underscores work
Strikethrough~~struck~~~struck~Literal ~~tildes~~, not struck
Heading# / ## / ###Not supportedLiteral ### text, no heading
Table| a | b |Not supportedLiteral pipes and hyphens
Inline code`code``code`Works — same syntax
Code block```code``````code```Works — same syntax
Bulleted list- item- item (composer only)Renders as a bullet while typed; a pasted block often lands as plain lines

Slack's own help center documents this syntax and lets each person choose between typing mrkdwn directly or using the composer's formatting toolbar — see Slack's message formatting preference documentation. A more detailed third-party syntax breakdown, including how bot and API messages differ from the composer, is in Knock's developer guide to Slack Markdown.

What Cmd/Ctrl+Shift+V actually fixes in Slack

Slack follows the same browser convention as most apps: a normal paste (Ctrl/Cmd+V) tries to carry over rich formatting such as bold, italic, and links from the source, while Ctrl+Shift+V on Windows/Linux or Cmd+Shift+V on Mac pastes as plain text and strips that styling. Neither one touches the literal characters already inside the text — which is the half of the problem a plain-text paste can't reach:

ArtifactSurvives Ctrl/Cmd+Shift+V?What fixes it
Rich styling carried from the sourceNo — this is what plain paste removesCtrl/Cmd+Shift+V alone
Markdown markers (**, ###, ~~)Yes — they're literal textStrip Markdown, then re-bold in Slack syntax if needed
Curly quotes and em dashesYesTypography normalization
Non-breaking / narrow no-break spaces (U+00A0, U+202F)YesWhitespace normalization
Invisible characters (U+200B, U+2060, U+FEFF)YesInvisible-character removal

Those special spaces and hidden characters are especially easy to miss in Slack, because the composer is small and single-line messages rarely get a second look before you hit Enter. The full breakdown of what each character does is on the non-breaking space guide and the invisible character remover.

The practical fix: clean it, then re-bold in Slack syntax

Run the chatbot's answer through the cleaner at the top of this page first. The default AI Clean preset normalizes curly quotes, em dashes, and special spaces, and removes hidden characters — all of which are identical problems no matter which app you paste into. Markdown markers are left alone by every preset by default, because some destinations (Notion, most CMS editors) do use them; Slack is one of the destinations that doesn't. Switch on Strip Markdown in Advanced Controls to remove **, ###, and ~~ entirely, rather than leaving them as literal characters in your Slack message.

What you copied from ChatGPT

### Deploy checklist
**Owner:** Priya
Ship by 5:00[U+202F]PM — no exceptions.

After AI Clean + Strip Markdown

Deploy checklist
Owner: Priya
Ship by 5:00 PM - no exceptions.

The bracketed tag [U+202F] stands in for a narrow no-break space that is invisible in real text — that's exactly the kind of character that makes a Slack message's line breaks look wrong for no visible reason. From that clean starting point, adding real Slack formatting takes seconds: retype *Owner:* for genuine bold, since only you know which one or two words in a short Slack message are worth emphasizing — a cleaner can safely strip markup, but it can't guess your intent well enough to re-apply it correctly. Everything runs in your browser; no message text is uploaded anywhere.

Common questions

Frequently asked questions

Why doesn't **bold** work when I paste it into Slack?

Slack's message formatting language is called mrkdwn, and it only recognizes a single asterisk for bold (*text*), not the double asterisks (**text**) that ChatGPT, Claude, and standard Markdown use. When you paste double-asterisk text into Slack, it doesn't get converted — the two extra asterisk characters just sit there as literal text next to your word.

Why do ### headings show up as plain text in Slack?

Slack's mrkdwn has no heading syntax at all — there is no Slack equivalent of a Markdown H1 through H6. A '### Summary' line pasted from a chatbot answer stays exactly as typed, hash marks included, because Slack has nothing to convert it into. The closest Slack equivalent is manually bolding a short line instead.

What is the keyboard shortcut to paste plain text into Slack?

Ctrl+Shift+V on Windows and Linux, or Cmd+Shift+V on Mac — the same paste-without-formatting shortcut used by most browsers and desktop apps. In Slack this strips incoming rich-text styling (bold, italic, colors, lists) from the source, but it does not touch the literal characters already in the text, so Markdown asterisks, curly quotes, and hidden Unicode characters all still land in the message.

How do I actually get bold text in a Slack message?

Wrap the word in single asterisks: *bold*. For italic, use underscores: _italic_. For strikethrough, use tildes: ~struck~. Slack's composer also has a formatting toolbar (the 'Aa' icon, or highlighting text) that applies the same syntax for you, so you don't have to type it by hand.

Does cleaning ChatGPT text before pasting fix Slack formatting?

It fixes the character-level mess — curly quotes, non-breaking spaces, em dashes, and any hidden Unicode — because those are the same broken characters in every destination. It does not rewrite double-asterisk bold into Slack's single-asterisk bold, since that would mean guessing which passages you actually want bolded in Slack. Switching on Strip Markdown in Advanced Controls removes the ** and ### markers entirely, leaving clean plain text you can re-bold by hand in Slack in a few keystrokes.

Can I paste a table from ChatGPT into Slack?

Not as a real table — mrkdwn has no table syntax, so Slack always renders a pasted Markdown table as literal pipe characters and hyphens. For tabular data in Slack, either reformat it as a short bulleted list or attach it as a file (CSV or a snippet), which Slack displays with its own preview instead of trying to render it as a message.

Continue reading

Related guides & tools