Convert HTML to plain text with paragraphs and lists intact

Paste HTML and get readable plain text back, with blank lines between paragraphs, bullets and numbers on list items, tabs between table cells and every HTML entity decoded.

Live demo · real result from this tool

Plain text

Spring menu Home | Menu Fresh dishes from local farms, served all day. • Asparagus soup — €7 • Pea & mint risotto — €14 Open daily 08:00 – 22:00

Processed on your device — nothing is uploaded.

How to use HTML to Text

  1. Paste a page, an email or a fragment into the HTML box.
  2. Choose the options: Show link URLs after the link text, Show image alt text as [alt], and Bullets and numbers for list items (on by default).
  3. Copy the Plain text result or download it as text.txt.

What it does and when to use it

Many places only accept plain text: the text part of an email, an SMS, a form field, a word counter, a translation tool or a spreadsheet cell. Copying from a browser window works for one page, but not for HTML you have as source code, such as a newsletter template, a CMS export or a saved page.

The converter keeps the reading order and the shape of the content. Headings and paragraphs are separated by a blank line, br becomes a line break, list items get • or numbers, nested lists are indented by two spaces, and a horizontal rule becomes a line of dashes.

If you want to keep headings, bold text and links as formatting, convert to Markdown with HTML to Markdown instead. To clean the HTML but keep it as HTML, use the HTML Cleaner.

How it works

The tool parses your HTML into a tree in the browser and walks through it. Text nodes are decoded (& becomes &, € becomes €) and whitespace is collapsed. Block elements add line breaks around their content, and table cells are joined with a tab so the rows paste neatly into a spreadsheet. Ordered lists honour a start attribute. Nothing is uploaded.

Worked examples

The sample café page. The title and the comment in the head disappear, and the menu becomes:

• Asparagus soup — €7
• Pea & mint risotto — €14

The pre block below it keeps its two-space indent.

Numbered steps, a link, an image and a table, with both link and image options ticked. An ol that starts at 3 gives:

3. Preheat
4. Mix flour (/flour)

[Cake]

Size	Price
Small	€9

No bullets. With Bullets and numbers for list items off, a nested list becomes Tea, Coffee and an indented Espresso, each on its own line.

Limits and tips

  • CSS is not applied, so text hidden with display: none still appears, and text added by CSS content does not.
  • Table cells that contain block content are flattened. For a proper spreadsheet, use HTML Table to CSV.
  • The result keeps line breaks from br tags. To go the other way, from text with line breaks to HTML, use the Newline to BR Converter.

Frequently asked questions

Is this better than just deleting everything between angle brackets?
Yes. A simple find-and-replace joins words from neighbouring paragraphs, leaves the contents of script and style blocks behind, and keeps entities such as — as code. This tool reads the HTML as a tree, so it knows where blocks start and end and what should not be shown at all.
What happens to links?
By default you get only the link text. Tick "Show link URLs after the link text" to add the address in brackets. Links to an anchor on the same page or to javascript, and links whose text already is the URL, are not repeated.
What is removed completely?
The head with its title and meta tags, script, style, template, noscript, iframe, object, svg and math. Images are dropped too unless you tick the alt text option.
Are spaces inside pre blocks kept?
Yes. Text in pre and textarea keeps its line breaks and indentation, as in the opening-hours block of the sample. Everywhere else, runs of spaces and new lines collapse to one space, as they do in a browser.

Written by the ToolsRift team · Last updated

Pages are drafted with AI assistance and checked by automated tests. How we write and check pages.

Was this tool useful?

Report a problem

Start typing to search every tool.

↑ ↓ to moveEnter to openEsc to close