Website to Markdown: choose the right converter

· · 7 min read

Choosing a website to Markdown converter gets harder when the page needs your login, renders content with JavaScript, or leaves you with links that no longer work. Pick by where the page is and what you will do with the output. For one public URL, use a URL service. For the page open in your signed-in browser, use an extension. For repeat jobs or a crawl, use an API.

Which method should I use to convert a website to Markdown?

Choose by page access and job size first. A URL converter fetches the page itself; a browser tool reads the page you already have open. That decides whether the converter can see your login and current JavaScript state.

Method Where it runs Logged-in or JavaScript page Batch or crawl Link handling Cost checked October 2026
MarkDownload (2026) In your browser Reads the open page; works from the browser context Not a crawl tool Not measured here; inspect copied links before saving. Free on Chrome, Firefox, and Edge; Safari version costs a small fee.
Octoweb ⌥⌘C In the open page Uses the page you see, including logged-in and JavaScript-rendered content One page or selection Whole-page output uses absolute links. Free; no account required.
Jina Reader (2026) Jina fetches the URL server-side Default engine renders JavaScript; it does not use your browser session One URL per request 32 absolute links in the Rust Book test. Free basic use; 20 requests/min without a key.
urltomarkdown (2026) Heroku service fetches the URL Treat it as a public URL converter One URL per request 32 relative links in the Rust Book test; paths may need repair. No listed price or rate limit.
Pandoc (2026) Local CLI fetches URL over HTTP No browser session; JavaScript rendering is not documented Scriptable; one output per command Inspect link targets before moving the output. Local CLI; no service credits.
Firecrawl (2026) Firecrawl API fetches and renders pages Supports JavaScript-rendered pages; authenticated pages need configured credentials Scrape, batch, or crawl Markdown format; docs also list separate links output. 1,000 free credits/month, 1 credit/basic page; Hobby is $19/month or $16/month billed annually (pricing (2026)).
Microsoft MarkItDown (2026) Local CLI converts files Use after saving a file; not the direct URL choice here Repeatable file conversion Inspect link targets after conversion. Open-source CLI; no conversion-service credits.

Server-side converters fetch the URL themselves. Use them only for content you’re comfortable sending to that service; a browser extension or Octoweb reads the open page. I build Octoweb, so weigh that accordingly.

What changes in the converted output?

Smaller files do not prove fewer model tokens or better Markdown. On October 2, 2026, I ran the Rust Book’s ownership chapter through two URL converters (curl -sL https://r.jina.ai/<url> and curl -sL "https://urltomarkdown.herokuapp.com/?url=<url>") and compared the output bytes, code blocks, and links.

Output Bytes Lines Code blocks Links What broke or stayed
Raw HTML 55,998 759 15 — Baseline.
Jina Reader 29,892 (−47%) 424 15/15 32 absolute Kept keyboard-shortcut help-overlay text and four empty previous/next links.
urltomarkdown 28,281 (−49%) 442 15/15 32 relative Same overlay and empty links; relative paths break when pasted elsewhere.

Both converters kept every <pre> code block on this page. Jina’s absolute links are safer to move between apps. The smaller urltomarkdown result came with relative links, so it needs checking before sharing. Neither result stripped all page clutter. The page’s simple tag-strip estimate was about 4,479 visible words; the test did not count tokens.

How do I convert one public URL to Markdown?

Use Jina when you want a URL-prefix request and Markdown back. Its documentation says it fetches server-side and uses a headless browser by default for JavaScript rendering. The command below is copied from the Jina Reader API docs (2026):

curl "https://r.jina.ai/https://www.example.com"

Jina lists 20 requests per minute without an API key and says basic Reader use is free, checked October 2026. A free API key raises the listed Reader limit to 500 RPM, but key use has token-based billing (Jina Reader API (2026)).

The urltomarkdown README shows the same job as a single GET request. Replace the example URL in its url parameter with a percent-encoded page URL:

GET https://urltomarkdown.herokuapp.com/?url=https%3A%2F%2Fwww.mozilla.org%2Fen-GB%2Ffirefox%2F

The service’s README documents this one-URL request (urltomarkdown README (2026)).

Use Pandoc when you want a local command and control over the Markdown dialect. The Pandoc manual gives this working URL example:

pandoc -f html -t markdown https://www.fsf.org

It fetches the absolute URI over HTTP and writes Markdown to standard output (Pandoc User’s Guide (2026)). It doesn’t use your browser cookies, so a URL that only works after signing in isn’t available to that request. For a saved file instead, Microsoft MarkItDown documents markitdown path-to-file.pdf > document.md; its CLI is useful in a local file pipeline, rather than as a browser-session converter (MarkItDown README (2026)).

How do I convert many pages or a page behind a login?

To convert many public webpages to Markdown, use an API or crawler. Firecrawl’s /v2/scrape endpoint accepts a URL and markdown output format; its docs show this request form (Firecrawl Scrape docs (2026)):

curl -s -X POST "https://api.firecrawl.dev/v2/scrape" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://firecrawl.dev",
    "formats": ["markdown"]
  }'

The response is JSON with Markdown under data.markdown. Each basic page scrape costs one credit. The free plan lists 1,000 credits each month; the Hobby plan is $19 monthly or $16/month billed annually, checked October 2026 (Firecrawl pricing (2026)). Its free form handles public JavaScript pages, not logins. For authenticated requests, the API accepts custom headers and cookies (Firecrawl converter FAQ (2026)).

For a page already open after sign-in, use a browser extension instead. MarkDownload’s upstream README lists Chrome, Firefox, Edge, and Safari; it’s free on the first three and paid on Safari. The latest upstream release is 3.4.0 from August 23, 2024. The maintainer said that a Manifest V3 rewrite was needed, so check its current store listing and browser compatibility before relying on it (MarkDownload README (2026), release history (2024), maintainer’s 2024 update).

On macOS, Octoweb’s ⌥⌘C copies the whole open page as Markdown, or copies a selected passage as a quote with its source link. Its in-page walker sees the logged-in, JavaScript-rendered page; whole-page output includes title and URL, absolute links, headings, lists, code, and tables, while skipping navigation, header, footer, and forms. The toast shows the word count. Those are product facts, not results from the Rust Book test. See how Octoweb 0.15 lets you copy as Markdown.

What should I check before I paste it?

Inspect the output once before trusting it. Search for the page title and first real heading, then check one table, one code block, and a link. For a copy that leaves the source site, confirm that links include the domain; the measured urltomarkdown output used relative links. Scroll to the end for repeated navigation, empty links, cookie banners, or keyboard-help overlays. If the output loses a table or code block, try a browser-side extractor on the rendered page or preserve the source HTML for a local conversion.

Choose the tool that sees the right page, then inspect the Markdown you actually plan to reuse. If the reader is an agent rather than you, Octoweb’s browser MCP server hands it the page text directly.

Don Karter

Don Karter

CEO & Co-founder at Muvon

20+ years in software engineering, the last decade deep in AI systems. Builds Octoweb — a keyboard-first AI browser for macOS on WebKit and Rust. Writes from the trenches: native browser engineering, agents driving real pages over MCP, and what breaks when every action has to be one keystroke away.

Octoweb is free and open source, for macOS.

Install it →