8 URL to Markdown Tools and How to Compare Them Yourself
Most "URL to Markdown" benchmarks pick easy pages and grade on a pass/fail axis. Real conversion happens on a long tail of awkward inputs: documentation sites with code blocks, news articles wrapped in three layers of ad scaffolding, JS-rendered SPAs that fetch nothing useful on first paint, and Reddit threads where the actual content lives behind shadow DOM and infinite scroll. This guide presents eight tools by what they are, then six kinds of page that expose the differences between them, so you can run the comparison yourself on pages that match your work.
The eight tools, by what they are
Disclosure: we built one of them. The descriptions below say what each tool is and how you use it, not how well it scored: there are no scores in this guide.
- MDisBetter URL to Markdown: hosted web tool. Paste a URL in the browser on a free account, convert, and download Markdown with YAML front matter, the page's real title, its text and its links converted. Each conversion uses credits. No API or CLI.
- Firecrawl (firecrawl.dev): paid, full crawl + extract platform, used through an API
- Jina Reader (r.jina.ai): URL prefix API, put
r.jina.ai/in front of a URL and get Markdown back - Microlink (microlink.io): paid, scraping + screenshot platform
- MarkdownDown (urltomarkdown.com): free hosted utility
- Browsely (browsely.ai): paid, AI-driven scraper
- Simplescraper (simplescraper.io): paid, no-code scraper with Markdown export
- html2text (Python library): local, free, classic baseline
What the type of tool tells you before any test
Some differences follow from how a tool is built, and you can know them before converting a single page:
- Library or service: html2text runs on your machine and converts whatever HTML you hand it, navigation included; fetching and cleaning the page are your job. Hosted tools fetch the page for you.
- JavaScript: a tool that doesn't run a browser only sees the raw HTML, which on a single-page app is a near-empty shell. html2text never runs JavaScript; for the hosted tools, check it on a JS-rendered page from your own list.
- Interface: Firecrawl and Jina Reader are called from code; MDisBetter and MarkdownDown are used in the browser; Simplescraper is a no-code scraper. Pick the interface that fits how you work and how often you convert.
- Scale: crawling a whole site is a different job from converting one URL. Firecrawl is built for crawling through an API, with depth and queue control; a browser web tool is driven by hand, even when it accepts a list of URLs or crawls a site.
Six pages that expose the differences
Run every candidate on the same six kinds of page, on the same day. Each one stresses a different failure mode.
A Wikipedia article
For example en.wikipedia.org/wiki/Markdown: long-form prose, heavy internal linking, an infobox, references. Check that the article body comes out clean, that the infobox and citation links don't clutter the text, and that the references survive as a list with no navigation chrome around them.
API documentation
For example docs.stripe.com/api, which ships syntax-highlighted samples in several languages per endpoint. Check that code comes out as fenced blocks with language hints (```python, ```ruby) rather than plain paragraphs: for any LLM workflow consuming the output, flattened code is a serious downgrade.
A news article
For example a New York Times article, wrapped in newsletters, related-story cards, ad scaffolding, video players, and "continue reading" gates. Check that the article body is isolated from the chrome and that photo captions don't break into the text. Expect only the part an anonymous visitor can see.
A JS-rendered page
Pick a single-page app from your own list whose raw HTML is a near-empty shell until JavaScript runs (view the page source to check). This is the JavaScript test: a tool that doesn't run a browser returns little or nothing here.
A GitHub README
Content that was already Markdown before it was rendered to HTML, with badges, anchor tables of contents, and embedded SVGs. It should round-trip almost untouched: check that Markdown-native elements come back as Markdown rather than HTML-ish fragments.
A Reddit thread
Heavy JavaScript, nested comment trees, vote widgets, removed posts, lazy loading. Check how much of the comment hierarchy survives beyond the post itself.
Scoring the six pages
Score each output from 0 to 5 on four axes: Cleanliness (no junk, no nav cruft), Structure preservation (headings, lists, tables intact), JS handling (does the actual content come through on JS-rendered pages), Code block formatting (fenced blocks with correct language hints). Score against the page as you see it in your browser, and note why you took each point off. For a fuller method with five page categories and a grid per category, see how to benchmark URL to Markdown tools.
Choosing by the shape of your work
Once you've scored your pages, the shape of your workflow often decides more than a point or two of quality:
- You convert URLs now and then in the browser, and other formats too: MDisBetter, on a free account. There is no programmatic API or CLI, so for scripted automation look at Jina Reader or Firecrawl. Full positioning in our review of the main URL to Markdown tools.
- You crawl entire sites and need depth and queue control through an API: Firecrawl. We compare them directly in MDisBetter vs Firecrawl.
- You want a one-line URL-prefix call in a script: Jina Reader. Our Jina comparison goes deeper.
- Your input is server-rendered HTML you control and you want everything local: html2text.
For RAG pipelines specifically, see the URL-to-Markdown for RAG guidance page and the runnable Trafilatura-based recipe in scrape a website to Markdown for RAG.