Markdown to Plain Text

Strip Markdown from an AI answer but keep its structure, or rewrite it as Slack, WhatsApp or Google Chat markup.

Output for

Formatting removed; bullets, numbering, quotes and tables kept as text.

Links
0 characters

Or drop a .md/.txt file onto the box above.

How to use

  1. Paste the Markdown (an answer from ChatGPT, Claude, Copilot or Cursor, a README, a Notion export) into the left box.
  2. Pick Output for: Plain text drops every symbol; Slack, WhatsApp and Google Chat rewrite the formatting in that app's own markup so it renders bold and italic there.
  3. Choose how Links are written: the text with the URL in brackets, the URL alone, or the text alone.
  4. Copy to clipboard (or Ctrl+Enter in the input box) and paste into the chat, form or email.

What survives and what goes

AI assistants answer in Markdown. Paste that answer into Microsoft Teams, Google Chat, a Jira ticket, a CRM note or a web form and you get the raw symbols: ** around every emphasised phrase, # in front of each heading, |---| rows under each table. This tool parses the Markdown the way a renderer would and writes it back out as text a person would type: the structure stays, the syntax goes.

Kept: the words of every heading, bullet and numbered lists with their nesting, quoted lines, the full contents of code blocks, tables with their columns lined up, link addresses, image addresses, and the checked or unchecked state of task items. Removed: emphasis markers, heading hashes, backticks, link brackets, fence lines, horizontal rules and backslash escapes. Raw HTML in the input is left exactly as typed, because a chat box would show it literally either way. The AI Text Cleaner is the sibling tool for the other approach: strip the symbols in place and also fix smart quotes, em dashes and hidden characters.

Example

Load sample inserts a deploy checklist with 1 heading, 3 lists (one nested, one of tasks), 1 table, 1 code block and 3 links. In Plain text mode it becomes:

Deploy checklist

Run the full test suite before tagging a release: npm test takes about two minutes.

1. Bump the version in package.json
2. Update the changelog
   • Group entries under Added, Changed and Fixed
   • Link each entry to its pull request
3. Tag and push: git tag v2.4.0 && git push --tags

Environment | URL                         | Owner
------------|-----------------------------|------
Staging     | https://staging.example.com | Priya
Production  | https://example.com         | Marco

> Production deploys happen only between 09:00 and 16:00 UTC.

npm run build && npm run deploy -- --env production

• ☑ Smoke test passed
• ☐ Release notes sent to #announcements (https://example.com/chat/announcements)

Switch to Slack and the same input starts *Deploy checklist*, the heading as a bold line, with *full test suite* and _two minutes_ in Slack's own markup, the table and the command wrapped in ``` so they stay monospace. WhatsApp writes the task list as - ☑ Smoke test passed, using its "- " list syntax instead of the • character.

Options explained

Edge cases and common errors

Do the same thing in code

Shell (pandoc)

pandoc -f gfm -t plain answer.md            # plain text, structure kept
pandoc -f gfm -t plain --wrap=none answer.md  # no re-wrapping of long lines

Python

import markdown
from bs4 import BeautifulSoup

html = markdown.markdown(text, extensions=["tables", "fenced_code"])
plain = BeautifulSoup(html, "html.parser").get_text("\n")

JavaScript (Node.js)

import { marked } from "marked";
import { convert } from "html-to-text";

const plain = convert(marked.parse(text), { wordwrap: false });

Each of those goes through HTML and loses the chat-markup step; for Slack, WhatsApp or Google Chat markup use the modes above. If the pasted text is not going into a chat but into a document, Markdown to Google Docs keeps the formatting instead of removing it, and if the text needs its curly quotes and dashes straightened as well, run it through the AI Text Cleaner afterwards. Lists that come out one item per line can be joined with the column to comma separated list tool.

Markdown to Plain Text FAQ

Why do asterisks and hashes show up when I paste an AI answer into Teams or a web form?

Because the answer is written in Markdown: **double asterisks** for bold, # for headings, backticks for code. The box you pasted into does not interpret any of it, so the symbols appear as typed. The AI app rendered them for you; the chat app does not. Converting to plain text first removes the symbols while keeping the bullets, numbers and tables the answer was organised with.

Does this remove the structure too, or only the symbols?

Only the symbols. Headings become their own line, bullet points become • lines (indented when nested), numbered lists keep their numbers, block quotes keep a > prefix, tables are laid out in aligned columns, code keeps every character, and links become "text (url)". Compare with the AI Text Cleaner, which strips the symbols in place and is the better choice when you want to keep the text as one flowing paragraph.

What is the difference between Plain text and the Slack, WhatsApp and Google Chat modes?

Plain text has no formatting at all. The three chat modes translate Markdown into the markup those apps document: single asterisks for bold, underscores for italic, single tildes for strikethrough, backticks for code, > for quotes. They differ in lists (Slack's markup mode has none, so bullets are • characters, while WhatsApp and Google Chat turn "- " into a bulleted list), and all three turn headings into a bold line, since none of them has headings.

Can I keep the links clickable?

Plain text has no clickable links, but most chat apps and email clients turn a bare URL into one. The default "Text (URL)" style writes each link as its text followed by the address in brackets; "URL only" writes just the address, which every app links; "Text only" drops the addresses for a printout or a message where they would be noise.

Is my text uploaded anywhere?

No. The Markdown is parsed and rewritten by JavaScript running in this page; there is no server, so nothing you paste can leave your device. You can load the page, go offline, and it still works.

Runs entirely in your browser: this page is a static file with no server behind it, so nothing you paste can be uploaded. Last reviewed by Parthesh Gupta. Implements GitHub Flavored Markdown.