About the Markdown Stripper
A markdown stripper removes the formatting syntax a language model writes into its replies and returns plain text. Markdown is a plain-text convention: two asterisks mean bold, a hash means a heading, a backtick marks code. A chat window renders those marks as formatting, but the text on your clipboard still contains the characters themselves, which is why they arrive as literal punctuation everywhere else.
How do you remove markdown without a tool?
Paste without formatting. Ctrl+Shift+V on Windows and Cmd+Shift+V on a Mac paste the clipboard as plain text into Google Docs, Word, Gmail and most content editors. It takes one keystroke and needs no page at all.
Two other routes work inside a document. Find and replace clears a single mark, such as every **, when only one kind is in the way. And the model's own settings can stop the formatting being produced, which the section below covers.
Those methods have three limits, and they are the reason this page exists. Paste-as-plain-text discards all formatting including the line and list structure you wanted to keep. Its behaviour differs between destination applications, so the same keystroke gives different results in Docs and in a CMS. And none of them touches the invisible characters that travel in the same clipboard, which stay behind after the visible syntax is gone.
What does markdown look like in AI output?
Nine marks account for nearly all of it. Markdown was introduced by John Gruber in 2004 as a plain-text writing format, and the CommonMark standard later fixed the behaviour of these marks precisely. Each one below is named with the syntax that produces it, so the text can be read even before it is stripped.
- Headings — one to six hashes at the start of a line:
# Title,### Subsection. - Bold — two asterisks or two underscores around the text:
**important**. - Italic — one asterisk or one underscore:
*emphasis*. - Inline code — single backticks:
`value`. - Fenced code blocks — three backticks on their own line, often with a language name after them.
- Bulleted lists — a hyphen, asterisk or plus at the start of a line.
- Numbered lists — a digit followed by a full stop.
- Blockquotes — a right angle bracket at the start of a line.
- Links — square brackets around the text and parentheses around the address:
[text](https://example.com).
A model uses these because its output is a plain-text stream and markdown is how that stream carries structure. The chat window renders it; the clipboard does not.
What does the result look like?
The example below is a short reply in the shape a model usually produces, and the result of stripping it with the default rules. The structure survives and only the syntax characters go.
## Quarterly summary
**Revenue** grew in three of four regions. Key points:
- EMEA up 12%
- APAC flat
- Use the `report_v2` endpoint for the breakdown
> Figures are provisional.
Stripped:
Quarterly summary
Revenue grew in three of four regions. Key points:
EMEA up 12%
APAC flat
Use the report_v2 endpoint for the breakdown
Figures are provisional.
Note what did not change: the blank lines between blocks, the order of the list, and the percentages. A stripper that reflows paragraphs is doing more than it was asked to.
Where does leftover markdown actually cause problems?
Anywhere the destination does not render it, and the five cases below are where it shows up most.
- A CMS or WYSIWYG editor displays the asterisks and hashes as ordinary punctuation in the published page.
- Word and Google Docs keep the marks as text, so a heading arrives as a line beginning with hashes rather than as a heading.
- An API response written into an interface that renders none of it — a support widget, a mobile app, a form field — shows the raw syntax to the user.
- A prompt being fed back into a model can be read differently when stray fences and hashes are still in it.
- Text-to-speech and voice pipelines read the punctuation aloud or stumble over it.
Can you stop ChatGPT producing markdown in the first place?
Partly, and the evidence says not reliably. The method is a standing instruction in the model's personalisation or custom-instructions settings rather than a request in each message. Google's own AI Overview for this query quotes the wording to use: write the next response in plain text with no markdown, bold text, or headers.
The reason to hedge is a matter of record. A thread on the OpenAI Developer Community opened on 29 September 2024 asking exactly this question has an accepted answer naming that fix, and it continued to collect new reports of the same problem through June 2025 — nine months of people arriving to say it had not held for them. A separate thread from 1 March 2023, answered by an OpenAI staff member, still ends with a user recommending a third-party stripper.
So: set the instruction, because it reduces the volume and costs nothing, and expect to clean the output anyway.
What if you want more markdown, not less?
A share of people arriving at this subject want the opposite thing — the raw syntax, for a README, a documentation file or a prompt — and get a rendered reply instead.
That is a display problem rather than an output problem. Asking for the answer inside a fenced code block returns the marks themselves, because the fence tells the chat window not to render what is inside it. The same settings surface controls both directions.
What does this tool not do?
It does not convert markdown into formatted rich text. Turning **bold** into actual bold for Word or Google Docs is the opposite job, and this page will not pretend to do both.
It does not defeat AI detection. Detectors score the writing, not its punctuation.
It does not rewrite or edit. The words are untouched.
It does not remove invisible Unicode characters, which arrive in the same paste and are handled by the invisible character detector and the AI text cleaner.
Tables and mathematical notation are left as they are. A markdown table stripped of its pipes stops being readable at all, so the pipes stay; LaTeX is not markdown and is not touched.