HTML to Text
Extract plain text from HTML you paste, or from a public URL. Free, no account. Paste mode stays in your browser. URL mode uses WebInk’s server to fetch the page, then strips the article to text locally.
Keep line breaks leaves a <br> as its own line. One paragraph per block turns that break into a space. Preformatted text keeps its spacing either way. Uppercase headings is off unless you turn it on.
Paste mode parses HTML in your browser. The markup is not uploaded.
- Words
- 0
- Characters
- 0
Paste HTML to see plain text. Conversion runs in your browser.
When the destination wants words, not markup
Some destinations treat every character as a character. An SMS, a plain email, a text-to-speech script, and a search box do not know that an asterisk means emphasis. They read the asterisk. A word count that includes “#” and “*” is counting the format, not the writing. A speech engine will say “hash” and “asterisk” if you leave Markdown in the script. Plain text is the format those steps already expect.
Selecting text on a rendered page is the usual workaround, and it is lossy. The selection drops the URL behind a link unless you hunt for it, it glues table cells together, and it is easy to drag the cookie banner in with the paragraph. View source keeps every tag. This page sits between those two: you hand it HTML, or a public address, and you leave with the words, the list markers, and optional URLs.
An assistant is a mixed case. If the model should see a heading as a heading, or code as code, keep Markdown and use HTML to Markdown or URL to Markdown. The HTML vs Markdown for LLMs guide explains why that structure usually beats raw tags. Use plain text when the formatting is irrelevant: a passage to paraphrase, a list of names, or a transcript you will read aloud. If the limit is tokens rather than words, paste the result into the Token Counter. This page does not count tokens.
Three steps
Paste HTML or enter a public URL
On Paste HTML, drop in a fragment, an email, or markup copied from developer tools. That conversion stays in the browser. On From URL, enter an http(s) address. WebInk’s server fetches the public page, returns main-content Markdown, and the browser strips it to text.
Choose links, line breaks, and heading case
Keep the link label, append the URL in parentheses, or drop the link. Keep line breaks so a br stays a new line, or fold each block into one paragraph. Uppercase headings is off until you turn it on. Preformatted text keeps its spacing in both line-break modes.
Copy, download, or send the text
The box shows words and characters for the plain text on screen. Copy it, download a .txt file, or send it to ChatGPT, Claude, Gemini, or Perplexity. Empty input leaves those actions disabled. Input longer than 500,000 characters is cut, and the page says so.
A worked example
Sample HTML fills the paste box with a heading, a sentence that contains a link, a second heading, a two-item list, and a paragraph with a line break. With the default options — link text only, keep line breaks, headings not uppercased — the plain text is the block below. That string is the converter’s output, not a sketch.
<h1>Office hours</h1>
<p>Bring <strong>notes</strong> and the <a href="https://webink.app/tools">tools list</a>.</p>
<h2>Agenda</h2>
<ul>
<li>SMS draft</li>
<li>Word count</li>
</ul>
<p>Room A<br>Room B</p>Office hours
Bring notes and the tools list.
Agenda
- SMS draft
- Word count
Room A
Room BSwitch Links to “Text and URL” and the second paragraph becomes “Bring notes and the tools list (https://webink.app/tools).” Switch Line breaks to “One paragraph per block” and the last block becomes “Room A Room B” because the br is folded into a space. Turn on Uppercase headings and the two headings become “OFFICE HOURS” and “AGENDA”. A URL written next to a heading keeps its original spelling, path included. The list markers stay as they are. “中文” would not change case, because that script has none.
From URL does not receive this HTML. It receives Markdown from the server, then runs the same link, line-break, and heading options. A Markdown article shaped like the sample, plus a quote, a pipe table, and a fenced line, becomes the text below. The fence language is dropped. The spaces inside the code line stay. The quote’s “>” is not copied. The table is tabs, not pipes.
# Office hours
Bring *notes* and the [tools list](https://webink.app/tools).
## Agenda
- SMS draft
- Word count
Room A
Room B
> Quoted line
| Job | Format |
| --- | --- |
| SMS | Plain |
```
keep spaces
```
Office hours
Bring notes and the tools list.
Agenda
- SMS draft
- Word count
Room A
Room B
Quoted line
Job Format
SMS Plain
keep spacesWhat the walk keeps
Paste mode parses with the browser’s HTML parser, so a missing close tag is repaired the way a page would repair it. It then skips script, style, noscript, iframe, template, link, meta, object, and embed, plus any element with a hidden attribute. It does not read a title element that lives in the head. Button labels and textarea text stay, because they are words in the document. An input’s value attribute is not text, so it is not read. Block elements become separated paragraphs. A list is “- item” or “1. item”, and a nested list is indented under its parent. An ordered list honors a start attribute. A table is one line per row, cells separated by a tab, including the header row. A caption, when present, is a line above the rows.
Two link details are easy to miss. In Text and URL mode, javascript: and data: addresses are ignored, a bare # fragment is ignored, and a relative URL is kept as written rather than rewritten to an absolute one. Drop links removes the anchor and the words inside it.
Ordinary whitespace is collapsed, and entities are decoded, including a non-breaking space and a numeric reference such as 中. Preformatted text is the exception: spaces and blank lines inside pre stay, including indentation on the first line. Input longer than 500,000 characters is cut before conversion. The form says you are seeing the start of the paste.
Paste mode and URL mode are different machines
Paste mode never uploads the HTML. That is the right tab for a private draft, an intranet fragment you copied yourself, or anything you do not want a fetch API to see. It expects HTML. If you paste Markdown, the “#” and “*” characters stay, because they are text nodes, not tags. There is no third tab for Markdown you already have.
From URL always uses the server. The browser sends the address to /api/markdown, receives Markdown for the main content, and only then strips syntax. Emphasis, heading marks, inline code ticks, and image syntax come off. A fenced code block keeps the code and drops the fence and the language tag. A blockquote loses its “>” marks and keeps the quoted words. A GitHub-style pipe table becomes tab-separated rows. Two spaces at the end of a Markdown line are a hard break: Keep line breaks preserves it, and One paragraph per block folds it into a space. A definition such as “[id]: https://…” is used to resolve reference links and is not printed on its own. The same definition typed inside a fence is kept, because it is code.
Copy the article element from an open tab into Paste HTML when JavaScript or a login wall left the server with a shell. On the tools hub, a file or a paste stays in the browser and a URL is fetched. URL to Markdown and the Token Counter’s URL mode call this same endpoint and leave the result as Markdown.
Limits of the plain text
Merged table cells are written once, not repeated across the columns they span. A checkbox in a Markdown task list is removed, so “- [x] done” becomes “- done”; the done-ness is not labeled separately. Letter-styled ordered lists (a, b, c) are numbered. Visual styling — color, font, and columns built from divs — has no plain-text equivalent and is dropped. Words are runs of non-space text. Characters are the string length, so spaces and line breaks count and an emoji often counts as two. Neither number is a token count.
Malformed HTML does not abort the page. The browser parser repairs what it can, and you get the text of that repaired tree. If nothing visible remains, the form says so instead of pretending there was a paragraph. Clear stays available once the field has something in it. Copy and Download stay disabled until there is text to take.
Compared with HTML to Markdown and the extension
HTML to Markdown keeps a paste as notes. URL to Markdown keeps a public link as Markdown. This page deletes the syntax after the words are in hand. The extension is the one that can see a tab the server cannot. “No” in the table means that product does not do that job.
If you need tags again, Markdown to HTML parses the note in the browser. A text-based PDF is PDF to Markdown, which does not start from a paste of tags.
| Job | HTML to Text | HTML to Markdown | WebInk extension |
|---|---|---|---|
| Converts pasted HTML in the browser | Yes | Yes | No |
| Fetches a public URL on WebInk’s server | Yes | No | No |
| Plain text, without Markdown syntax | Yes | No | No |
| Markdown headings, lists, and code fences | No | Yes | Yes |
| Tables as tab-separated rows | Yes | No | No |
| Logged-in or client-rendered tab | No | No | Yes |