By Tim King · Updated
Markdown Cleaner
Strip Asterisks, Hashes, Backticks and Link Syntax, Keeping Bullets and URLs If Wanted
OneTask is free, with no sign-up, and built by one person.
If this tool saved you time, a coffee helps keep new ones coming.
How the Markdown Cleaner works
This Markdown cleaner turns chatbot output into plain text. Paste a reply from ChatGPT, Claude or Gemini and the asterisks, hash headings, backticks, quote markers and link brackets disappear, leaving text you can drop into an email, a form or a document without stray symbols.
How the Markdown cleaner works
AI assistants write in Markdown, a light formatting syntax where bold is wrapped in double asterisks, a heading starts with a hash and a link is written as text in square brackets followed by the address in round brackets. Chat windows render it, but copying the raw reply into a plain field leaves the symbols behind. The cleaner removes them in a fixed order: fenced code blocks first, then HTML tags and comments, horizontal rules, headings, quote markers, table dividers, images, links, inline code, bold, italic and strikethrough, and finally bullets.
The formula for each element is the same: keep the words, drop the syntax around them. A backslash-escaped character such as * is kept as a literal star rather than read as formatting, and underscores inside words like snake_case_name are left alone.
First example. "## Summary" followed by "- Fast setup" becomes "Summary" and "• Fast setup".
Second example. "See the guide" becomes "See the guide", or "See the guide (https://example.com)" with Keep URL in brackets.
How many characters does it remove? Run the before and after through a character counter; the difference is the formatting syntax that was stripped, and the words are untouched.
Markdown syntax and what the cleaner turns it into (bullets as •, link URLs removed)
| Element | Markdown | Plain text |
|---|---|---|
| Heading | # Title |
Title |
| Setext heading | Title⏎===== |
Title |
| Bold | **bold** |
bold |
| Bold (underscores) | __bold__ |
bold |
| Italic | *italic* |
italic |
| Italic (underscore) | _italic_ |
italic |
| Strikethrough | ~~gone~~ |
gone |
| Inline code | `npm install` |
npm install |
| Link | [OneTask](https://onetask.uk) |
OneTask |
| Image |  |
A cat |
| Reference link | [docs][1] |
docs |
| Bullet | - item |
• item |
| Bullet (star) | * item |
• item |
| Numbered item | 1. step one |
1. step one |
| Task item | - [x] done |
• done |
| Blockquote | > quoted |
quoted |
| Horizontal rule | --- |
(removed) |
| HTML tag | <b>bold</b> |
bold |
| HTML comment | <!-- note --> |
(removed) |
| Escaped star | \*not italic\* |
not italic |
| Table row | | a | b | |
a ⇥ b |
| Snake case | snake_case_name |
snake_case_name |
| Footnote-style URL | [1]: https://example.com |
(removed) |
Tips and pitfalls
Numbered lists keep their numbers because they read naturally in plain text. Table rows become tab-separated lines, which paste cleanly into a spreadsheet. Choose Remove for code blocks when you only want the prose. If you need formatted output instead, paste into a Markdown preview rather than cleaning.
FAQ
Why does ChatGPT output have asterisks and hashes?
The model writes Markdown so the chat window can show bold text, headings and lists. When you copy the raw text, or the app copies it as plain text, the formatting characters come with it instead of the formatting.
Will it change my wording?
No. It only removes formatting syntax, merges runs of blank lines and trims the ends. Every word, number and punctuation mark in the prose stays where it was, apart from characters that were part of the Markdown syntax.
What happens to tables?
The divider row of dashes is removed and each remaining row becomes one line with cells separated by tabs. Pasted into a spreadsheet, each cell lands in its own column, and in a document the columns stay readable.
Can I keep the link addresses?
Yes. Set Links to Keep URL in brackets and each link becomes its text followed by the address in round brackets. Image links always keep only their alt text, since the image itself cannot appear in plain text.
Is my text uploaded anywhere?
No. The cleaning runs entirely in your browser with JavaScript, so nothing you paste is sent to a server or stored. You can disconnect from the internet after the page loads and it still works.
See also: all AI tools, Dev Utilities, Formatters & Validators, Data & Encoding, Security & Identifiers, SEO, Accessibility.
Related tools
Markdown Editor
Write markdown with a live preview; open, save and autosave.
HTML To Markdown
Turn HTML into clean Markdown with lists, links, code and tables.
Whitespace Cleaner
Collapse extra spaces, tabs, blank lines and invisible characters.
Prompt Formatter
Turn loose notes into a structured prompt with XML tags or headings.
AI Token Counter
Count GPT tokens in a prompt or document with o200k_base, in your browser.