Markdown to Text Converter

Paste raw Markdown — from ChatGPT, Claude, Obsidian or a README — and get clean, readable plain text. Nothing leaves your browser.

Free · No sign-up · Runs in your browserLast updated

How do you convert Markdown to plain text?

Paste the Markdown into a converter that removes the syntax characters but keeps the words. It strips #, **, _, backticks, >, list bullets and link brackets, while preserving link text and image alt text. The result is plain text you can paste into email, a CMS, or any editor that does not render Markdown.

markdown
## Release notes

We shipped **dark mode** and fixed [the login bug](https://example.com/123).

- Faster search
- [x] Docs updated

Becomes: Release notes / We shipped dark mode and fixed the login bug. / Faster search / Docs updated — with every #, asterisk, bracket and bullet removed.

Try the Markdown to Text Converter

Markdown Input

Plain Text Output

What gets stripped when you convert Markdown to text

Stripping Markdown is not the same as deleting punctuation. A good converter removes only the characters that carry formatting meaning, and keeps everything a human actually reads. Here is exactly how each construct is handled.

Headings, bold and italic

Leading hash marks are dropped along with the space after them, and emphasis delimiters are unwrapped. The heading text stays on its own line, so the document keeps its shape without the markup.

markdown
### Quarterly summary

Revenue was **up 12%** and churn was _flat_.

Quarterly summary / Revenue was up 12% and churn was flat.

Links and images

The visible label survives, the URL does not. Links collapse to their anchor text and images collapse to their alt text — which is why writing meaningful alt text pays off twice.

markdown
See the [migration guide](https://docs.example.com/migrate).

![Architecture diagram](/img/arch.png)

See the migration guide. / Architecture diagram

Lists, numbers and task checkboxes

Bullets (-, * or +), ordered-list numbering and task-list checkboxes are all removed from the start of the line. The items stay on separate lines, so the list is still scannable as prose.

markdown
1. Draft the RFC
2. Collect feedback

- [x] Schema migrated
- [ ] Backfill running

Draft the RFC / Collect feedback / Schema migrated / Backfill running

Code fences and inline code

The opening and closing fences and the language hint disappear, but the code inside is kept verbatim — including indentation. Inline backticks are unwrapped in place.

markdown
Call `npm run build` first.

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

Call npm run build first. / def hello(): / print("hi") — the four-space indent is preserved.

Blockquotes and horizontal rules

The angle bracket in front of a quoted line is removed so the quotation reads as ordinary text, and rule lines made of ---, *** or ___ are deleted entirely rather than left as stray punctuation.

markdown
> The API will be deprecated in Q3.

---

Plan accordingly.

The API will be deprecated in Q3. / Plan accordingly. — the divider line is gone.

What is deliberately left alone

Pipe tables keep their | separators, because flattening them would destroy the row and column relationship that makes the data readable. Raw HTML tags and platform extensions such as Obsidian wikilinks are also passed through untouched.

markdown
| Plan | Seats |
| ---- | ----- |
| Team | 10    |

<sub>footnote-sized text</sub>

The table and the HTML tag come through unchanged — remove them by hand if you need completely flat prose.

Markdown sources this handles

Almost every tool that emits Markdown emits a slightly different dialect. These are the sources people paste in most often, and what to expect from each.

PlatformSupportNotes
ChatGPT / Claude / GeminiFullStandard GFM. Headings, bold, lists, quotes, fences and links all strip cleanly.
GitHub / GitLabFullREADME badges written as linked images collapse to their alt text.
NotionFullExported .md files are plain GFM; callouts arrive as blockquotes and strip normally.
ObsidianPartial[[Wikilinks]] and ==highlights== are vault-specific syntax and are left as-is.
DiscordFull**bold**, *italic*, `code` and > quotes strip; ||spoiler|| bars stay.
SlackFullSlack's single-asterisk *bold* and _italic_ are unwrapped along with standard syntax.

How to convert Markdown to plain text

  1. Paste your Markdown

    Drop the raw Markdown into the editor on the left, or use the upload button to load a .md, .markdown or .txt file from your computer.

  2. Read the plain text output

    The right-hand pane updates as you type, so you can see immediately which symbols were removed and which content survived.

  3. Copy or download the result

    Use the copy button to put the plain text on your clipboard, or the download button to save it as a .txt file.

  4. Spot-check the leftovers

    Scan the output for pipe tables or raw HTML, which are passed through on purpose, and edit those few lines by hand if you need completely flat text.

Frequently Asked Questions

How do I remove Markdown formatting from ChatGPT or Claude output?

Copy the assistant's reply and paste it into the input box above. Chat models answer in GitHub Flavored Markdown, so the asterisks, hash marks and backticks you see are formatting characters the chat UI would normally render. Stripping them gives you text you can drop straight into an email, a ticket or a document.

What is the difference between Markdown and plain text?

Plain text is just characters with no formatting instructions. Markdown is plain text plus a small set of reserved characters that a renderer turns into headings, bold, lists and links. Removing those reserved characters converts Markdown back into ordinary plain text.

Does converting Markdown to plain text keep my links?

The link text is kept, the URL is not. A link written as [the docs](https://example.com) becomes just the docs. If you need the addresses, copy them out of the original Markdown before converting, because plain text has no way to attach a target to a word.

How do I convert a .md file to a .txt file?

Click the upload button above the input pane and choose the .md file. The plain text appears in the right pane, and the download button saves it as a .txt file. The file is read locally by your browser and never sent anywhere.

Is my Markdown uploaded to a server?

No. The conversion runs entirely in JavaScript in your own browser tab. Nothing is transmitted, logged or stored, which makes the tool safe for internal documentation, meeting notes and other content you cannot paste into an online service.

Does the converter remove Markdown tables?

No, pipe tables are passed through with their vertical bars intact. Collapsing a table into a line of words would destroy the relationship between headers and cells, so it is safer to leave the structure visible and let you decide what to do with it.

Does code inside fenced code blocks survive?

Yes. The triple-backtick fences and the language hint are removed, but every line between them is kept exactly as written, including leading whitespace. That matters for indentation-sensitive languages such as Python and YAML.

How do I strip Markdown formatting programmatically?

For scripts, pandoc with the arguments -f markdown -t plain is the most reliable option, and libraries such as remove-markdown for JavaScript or markdown-it plus a text renderer work well inside applications. This page is the quick manual equivalent for one-off cleanups.

Why does the output still contain blank lines?

Paragraph breaks are meaningful in plain text too, so a single empty line between paragraphs is preserved. Runs of three or more consecutive newlines are collapsed to two, which keeps the result readable without gluing separate paragraphs together.