Free tool
HTML to plain text converter
Paste HTML on the left, get clean readable text on the right. Free, no signup, and your HTML never leaves your browser.
HTML input
Plain text output
0 characters · 0 words · 0 linesConverted locally in your browser — nothing is uploaded.
Code examples
Do the same thing in your own pipeline
The tool above parses the document in the browser. Here is the equivalent extraction with the standard parser in each language.
# pip install beautifulsoup4
from bs4 import BeautifulSoup
html = """
<h1>Shipping a crawler</h1>
<p>Retry transient failures with <strong>jitter</strong>.</p>
<ul><li>Cap concurrency</li><li>Log status codes</li></ul>
<script>tracking()</script>
"""
soup = BeautifulSoup(html, "html.parser")
for tag in soup(["script", "style", "noscript"]):
tag.decompose()
text = soup.get_text(separator="\n", strip=True)
print(text)How it works
What the converter does to your HTML
- Scripts, styles, noscript, iframes, SVGs and comments are removed first, so no code ends up in the text.
- Block elements become line breaks, so paragraphs, headings and list items stay on their own lines instead of running together.
- Links can keep their URL inline, or collapse to just the anchor text.
- List items get bullets or numbers, and nested lists stay indented.
- Optional hard wrapping at 72, 80 or 100 characters for plain-text email and terminal output.
With Irmu
When you also need to fetch the page
Irmu returns the page HTML — rendering, proxies and retries included. Reduce it to text with the same parsers above.
crawl_to_text.py
# 1. Fetch the page with Irmu (rendering, proxies and retries handled for you)
# 2. Reduce the HTML to plain text locally
import os, requests
from bs4 import BeautifulSoup
resp = requests.get(
"https://app.irmu.com/api/crawl",
headers={"Authorization": f"Bearer {os.environ['IRMU_API_KEY']}"},
params={"url": "https://example.com/article", "render": "true"},
timeout=60,
)
resp.raise_for_status()
soup = BeautifulSoup(resp.text, "html.parser")
for tag in soup(["script", "style", "noscript"]):
tag.decompose()
print(soup.get_text(separator="\n", strip=True)[:500])FAQ
Questions about this tool
Turn any URL into clean data
Fetch, render and extract with one API. 1,000 free credits every month, no card required.