HTML to plain text
Turn HTML code or a web page into clean, readable text. Paragraphs, headings, lists, line breaks and tables keep their shape, scripts and hidden elements are removed, and you can export Markdown too.
- Structure kept, not just tags stripped
- Main content without menus and footers
- Pasted HTML stays in your browser
Plain text
Paste HTML to start
- SourceWaiting for inputPasted HTML or URL
- Parsed—By the browser's HTML parser
- Removed—Scripts, styles, hidden
- Text—Structure kept
Plain text
Options
Changes apply at once.
Text
The converted text appears here.
What was kept and removed
Counted in the part that was converted.
Nothing converted yet.
Heading outline
The h1 to h6 headings, in order.
Nothing converted yet.
Fair-use limit for page URLs: 30 per hour and 200 per day for each visitor IP address, pages up to 3 MB. Pasted HTML has no limit.
Why convert HTML to text
The text of a page is what people read and what search engines and other tools analyse. Getting it out cleanly takes more than deleting tags.
A parser, not a regex
Deleting everything between < and > breaks on scripts, comments and attributes that contain >. The browser's HTML parser reads the code the way a browser does.
Structure matters
Without line breaks, a heading, a list and a table run into one sentence. Blocks become paragraphs, list items get bullets and cells are separated by tabs.
Main content
Menus, footers and sidebars repeat on every page. Main content keeps the main or article part, which is what word counts and summaries need.
The HTML, not the screen
The tool reads the HTML as sent. It does not run JavaScript or stylesheets, so text added by scripts is missing and text hidden by CSS classes stays in.
How each element is converted
What happens to the common HTML elements, in plain text and in Markdown.
| Element | Plain text | Result |
|---|---|---|
<script>, <style>, <svg>, <iframe>, <template> |
Removed with everything inside | Nothing |
hidden, aria-hidden="true", style="display:none" |
Removed | Nothing |
<p>, <div>, <section>, <h1>–<h6> |
Separated by a blank line | Paragraphs; # headings in Markdown |
<br> |
A line break | A new line inside the paragraph |
<ul>, <ol>, <li> |
One line per item | • item, or 1. 2. 3. for numbered lists |
<table>, <tr>, <td> |
One row per line | Cells separated by tabs; a table in Markdown |
<pre>, <code> |
Spaces and line breaks kept | Code blocks in Markdown |
<a href> |
Text, optionally with the URL | text (https://…) or [text](url) |
<img alt> |
Skipped, or its alt text | [Image: alt] or  |
& ’ |
Decoded by the parser | & a space ’ |
How to use this tool
From HTML or a URL to clean text.
Paste HTML or enter a URL
Paste code, open an .html file, or switch to Page URL to fetch a live page.
Pick the options
Plain text or Markdown, whole page or main content, and how to treat links and images.
Check the result
Read the text, the counts and the heading outline. Changes apply at once.
Copy or download
Copy the text, or download it as a .txt or .md file.
What this tool does, and what it doesn't
A plain list, so you know exactly what to expect.
This tool does
- Parse HTML like a browser does
- Keep paragraphs, lists and tables
- Remove scripts, styles and hidden parts
- Export plain text or Markdown
- Fetch public pages, following redirects
- Count words and outline headings
This tool does not
- Run JavaScript on the page
- Read CSS to find hidden text
- Get past logins or paywalls
- Read text inside images or PDFs
- Upload the HTML you paste
- Store URLs or converted text
Where your data goes
Pasted HTML and opened files are converted in your browser and sent nowhere. For a page URL, our server fetches the page and returns its HTML to your browser; small results are kept for 10 minutes. Fair-use counters use a hashed IP address, as described in our privacy policy.
Why your results might look unexpected
The six situations people run into most, and what each one means.
Text from the page is missing
It is added by JavaScript after loading. Paste the HTML from your browser's developer tools instead.
Menus and footers in the text
Switch to Main content to keep only the main or article part of the page.
Hidden text still appears
It is hidden by a CSS class, which the tool cannot read. Only inline styles and hidden attributes are seen.
é instead of é
The page declares the wrong character set. URL mode converts to UTF-8; for files, save them as UTF-8.
A login or "access denied" page
The URL is protected or blocks our server. Copy the HTML from your own browser instead.
Code lost its indentation
Indentation is kept only inside <pre>. Code in other elements is normal text.
Questions about HTML to text
How does the converter turn HTML into plain text?
It reads the HTML with the browser's own parser, the same way a browser builds a page, and walks through the elements. Scripts, styles, SVG, iframes and hidden elements are dropped. Paragraphs and headings are separated by a blank line, list items get bullets or numbers, line breaks are kept, and table cells are separated by tabs, so the text keeps its structure instead of running together.
What is the difference between whole page and main content?
Whole page converts everything in the body, including menus, headers, footers and sidebars. Main content looks for the page's main element, an article or role="main", and leaves out nav, header, footer and aside, which is usually what you want for word counts, quotes or feeding text into another tool. If a page marks up nothing as main, the whole body is used.
Can I keep links and image descriptions?
Yes. Links can be kept as text only, or as text followed by the URL in brackets. Images can be skipped or written as their alt text. In Markdown output, links become [text](url) and images , and relative URLs are made absolute when the HTML came from a page URL.
Why is some text missing from a page I converted by URL?
The tool reads the HTML the server sends and does not run JavaScript. Text that a script adds after the page loads, such as in many React or Vue apps, comments and some product listings, is not in that HTML. Pages behind a login, a paywall or bot protection may also return a different page. In that case, open the page in your browser, copy its HTML from the developer tools and paste it here.
Does it remove hidden text?
It removes elements with the hidden attribute, aria-hidden="true", an inline style of display:none or visibility:hidden, and template and noscript content. It cannot read stylesheets, so text hidden by a CSS class is still included, as it is in the HTML itself.
How are the words and reading time counted?
Words are runs of letters or digits separated by spaces or punctuation, so "e-mail" counts as one and numbers count as words. Reading time assumes 238 words per minute, the average silent reading speed for non-fiction found in a 2019 review of 190 studies, and is only a rough guide.
Is my HTML sent to your server?
Pasted HTML and opened files are converted in your browser and are not sent anywhere. For a URL, our server fetches that page and returns its HTML to your browser, where the conversion runs; small results are kept for 10 minutes. Fair-use counters use a hashed version of your IP address, as described in our privacy policy.