HTML to Text
Paste HTML source or open a saved UTF-8 .html or .htm file to extract plain text. Copy the result or download extracted-text.txt. Headings, paragraphs and list items become text blocks; table cells are separated by tabs; image alternative text is retained. Choose blank lines, single newlines or a flowing line between blocks, and keep link targets inline, drop them or collect a numbered list. The character-based reader never renders the source, runs scripts or fetches referenced assets. Plain text cannot retain fonts, colors or rich-text layout, and CSS visibility is not evaluated.
This run will separate blocks with a blank line, and keep each link target after its words.
3 blocks, 29 characters, 5 words, style element dropped, 0 network requests made.
- First paragraph. Second paragraph.
- Jack & Jill & the <b> tag
- Pricesscript element dropped, style element dropped
Paste source or open a saved UTF-8 .html or .htm file, read here in your browser with nothing uploaded and no account. There is no fixed input-size limit; the practical limit is this browser’s memory. What comes out is text from headings, paragraphs, list items and table rows one line each with a tab between cells, preformatted blocks with their spacing, and the alternative text of images. CSS layout and visibility are not evaluated. No bullet characters or heading marks are added. Markup nested more than 400 deep is refused rather than read part way. Your two choices and your draft are kept in this browser alone, drafts up to 200,000 characters, and the Start over button above the tool forgets both.
Common questions
- How do I convert HTML to a TXT file?
- Paste the HTML source or choose Open saved UTF-8 HTML and select a .html or .htm file. Review the text, select the block and link rules, and choose Download. The UTF-8 extracted-text.txt contains the extracted result alone, without the drop-count footer. No source file is uploaded. A page URL is not fetched, and several files are not converted as a batch.
- Does stripping HTML tags retain paragraphs and line breaks?
- Headings, paragraphs and list items become blocks. Blank line puts two newlines between blocks, One newline puts one, and One line joins them with spaces. br tags supply breaks inside blocks unless One line collapses them. Preformatted content keeps its internal spacing in the newline modes, with its leading parser newline and trailing spaces or newlines trimmed. List bullets and heading marks are not added; use HTML to Markdown when you need those written as syntax.
- Can I convert HTML to text without the hyperlinks?
- Choose Dropped under Links to keep anchor words without their href. After the words includes the target in parentheses. Numbered gives each distinct target a number and lists it at the end. Unsafe javascript, vbscript, data or file targets are dropped and counted. Relative targets remain relative text; this utility does not resolve them against a website URL.
- Are HTML entities decoded exactly once?
- Yes. Common named references in this reader’s table and semicolon-terminated decimal or hexadecimal references are decoded in one pass. Unknown names remain literal. &amp; becomes &, while & becomes one ampersand; encoded angle brackets remain text rather than being parsed again as tags. For a broader entity-only conversion that keeps the rest of the input, use HTML Entity Converter.
- Can I extract the plain text of an HTML email?
- Paste or open the HTML body and choose the link and block rules before copying it into an email draft. This reads markup, not an .eml or .msg envelope, and does not open a mailbox, send mail, switch an email client’s format or reproduce Outlook or Gmail rendering. Use EML Viewer to inspect a saved .eml message first.
- Does it run scripts, load images or fetch a website?
- No. Source is scanned as characters into plain objects. Script and style contents, head metadata, comments, embedded media and form controls are dropped and counted beside the result. Referenced images, stylesheets and fonts are not requested. The output is text, and the footer’s request count concerns extraction, not the site’s own page resources.
- What happens to HTML lists and tables?
- Each list item becomes a text block without an invented bullet. Each table row becomes one block with a tab between its cells, so a row holding a and b produces a, a tab, then b. Captions precede rows. Header styling, merged-cell layout, colors and fonts cannot be carried in TXT. Block separators still follow your selected newline rule.
- Can it preserve rich-text formatting or visible-only website text?
- It retains words and selected plain-text block breaks, not bold, italics, font sizes, CSS layout, styles or an RTF document. CSS and visibility are not evaluated, so markup hidden by a style rule can still contribute text. Content created only by JavaScript is absent from the source and is not generated. This is a source reader rather than a browser-rendered text scraper.
- How much HTML can I extract, and is it remembered?
- There is no fixed input-size limit; the practical limit is the browser’s memory. Nesting deeper than 400 elements is refused to protect the recursive reader. Your two settings and draft are stored on this device; drafts above 200,000 characters still extract in full but are not saved. Start over forgets them. Local files must be UTF-8; invalid encodings, PDF, rich-text or binary input are refused.
- Can I use this inside Python, JavaScript, Excel or Power Automate?
- This page performs a manual browser conversion. It does not provide a library, code generator, API, Excel formula, Power Automate action or installed command-line program. Copying the resulting text into another program is possible, but native integration is a separate job.
A character-based reader runs no script and fetches no image, stylesheet or font. Supported entities are decoded exactly once, so a literal & survives as one ampersand. Block elements are separated by the newline rule you pick, and links are kept or dropped as you choose. CSS layout and visibility are not evaluated; nesting deeper than 400 elements is refused. There is no fixed input-size limit.