URL to Markdown API — Fast Web Fetch for AI Agents avatar

URL to Markdown API — Fast Web Fetch for AI Agents

Pricing

from $1.05 / 1,000 url converted to markdowns

Go to Apify Store
URL to Markdown API — Fast Web Fetch for AI Agents

URL to Markdown API — Fast Web Fetch for AI Agents

Fetch one URL and get clean Markdown back in about a second: title, description, main content without menus, cookie banners or ads, headings and word count. Batch mode (list of URLs → dataset) or Standby HTTP API for AI agents, RAG and MCP. From US$1.05 per 1,000 URLs.

Pricing

from $1.05 / 1,000 url converted to markdowns

Rating

0.0

(0)

Developer

Fabrikit

Fabrikit

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 days ago

Last modified

Security

Limited permissions

Share

URL to Markdown API fetches one web page and returns clean Markdown in about a second, ready for an LLM prompt, a RAG pipeline or an MCP tool. Give it a URL and you get the main content without menus, footers, cookie banners or ads, plus the title, description, language, headings outline, word count, HTTP status and fetch time. It reads the HTML the server sends (no browser), so it is fast and cheap: US$1.05 per 1,000 URLs.

It does not crawl. One URL in, one Markdown document out. If you need a whole site or a docs section converted (sitemap, link depth, RAG chunks), use our Website to Markdown Scraper, which shares the same HTML-to-Markdown core.

Two ways to call it

1. Batch run — paste a list of URLs, get one dataset record per URL. This is the normal Actor run (Console, API, schedules, integrations).

2. Standby HTTP API — the Actor keeps running and answers HTTP requests synchronously, like a hosted API:

GET https://fabrikit--url-to-markdown-api.apify.actor/?url=https://example.com/&format=markdown
Authorization: Bearer <your Apify token>

The exact Standby URL is shown on the Actor's Standby tab. Query parameters:

ParameterDefaultMeaning
urlrequiredPage to fetch. https:// is assumed when the scheme is missing.
formatjsonjson (full record), markdown (text/markdown body) or text (plain text body).
removeBoilerplatetrueKeep only the main content; false converts the whole page body.
keepLinkstrueKeep [text](url) links in the Markdown.
keepImagesfalseKeep ![alt](src) images.
includeText / includeHtmlfalseAlso return plain text / cleaned HTML in the JSON record.
maxChars0Cut the content at N characters (0 = no limit) to fit a context window.
timeoutSecs20Per-request timeout (3–60).

POST / with the same fields as a JSON body works too. A request without url returns HTTP 400 with the usage; a page that could not be fetched returns 502 (or 422 when the server only sent an empty JavaScript shell) with the reason, so your agent never gets a blank document mistaken for content.

What you get per URL

FieldDescription
url, finalUrlRequested URL (normalised) and URL after redirects
statusCode, contentTypeHTTP status and MIME type of the response
title, description, language, canonicalUrlPage metadata
markdownMain content as Markdown: headings, lists, tables, fenced code with language, links
text, htmlPlain text / cleaned HTML, when requested
textLength, wordCount, headings, linksCountSize and outline of the content
needsBrowsertrue when the page is an empty JavaScript app shell (not charged)
truncatedtrue when maxChars or the 1.5M-character field cap cut the content
fetchTimeMs, fetchedAtHow long the fetch took and when
errorWhy a URL failed (HTTP 404, timeout, blocked, unsupported type); null on success

Plain text, Markdown, JSON and XML responses are passed through (JSON and XML inside a fenced block). PDFs and binaries are reported as unsupported rather than guessed.

Input example (batch run)

{
"urls": [
"https://example.com/",
"https://en.wikipedia.org/wiki/Markdown",
"https://docs.python.org/3/faq/general.html"
],
"keepLinks": true,
"maxChars": 20000
}

Duplicate URLs are skipped; invalid ones are listed in the log. concurrency (default 4) sets how many URLs are fetched in parallel.

Output example

{
"url": "https://www.iana.org/help/example-domains",
"finalUrl": "https://www.iana.org/help/example-domains",
"statusCode": 200,
"contentType": "text/html",
"title": "Example Domains",
"description": null,
"language": null,
"canonicalUrl": null,
"markdown": "# Example Domains\n\nA number of domains such as `example.com` and `example.org` are maintained for documentation purposes...",
"text": null,
"html": null,
"textLength": 756,
"wordCount": 115,
"headings": [{ "level": 1, "text": "Example Domains" }, { "level": 2, "text": "Further Reading" }],
"linksCount": 31,
"needsBrowser": false,
"truncated": false,
"fetchTimeMs": 225,
"fetchedAt": "2026-10-20T05:17:58.979Z",
"error": null
}

Use cases

  • AI agents and MCP tools: a "fetch this page" tool that returns Markdown instead of raw HTML, so the model spends tokens on content.
  • RAG and knowledge bases: convert the pages your users cite, then embed markdown (set maxChars to keep documents bounded).
  • Summaries and extraction: feed markdown to an LLM for summaries, Q&A, entity or price extraction.
  • Link previews and content audits: title, description, word count and outline for any list of URLs.
  • Reading services: turn an article into clean text for e-mail digests or text-to-speech.

Pricing

Pay per event. One event, url-fetched, is charged per URL converted to Markdown, in both modes.

URLs convertedCost
100US$0.11
1,000US$1.05
10,000US$10.50

Not charged: failed fetches, HTTP 4xx/5xx answers, blocked requests, unsupported content types and pages flagged needsBrowser. Normal Apify compute and proxy usage apply on top of events only as described in your plan; the Actor runs with 512 MB and typically needs well under a second of compute per URL.

How it compares

This ActorWebsite to Markdown Scraper (ours)Official Web FetchBrowser-based crawlers
ScopeSingle URLsWhole sites, docs sectionsSingle URLsSites or pages
Standby HTTP APIYesNoYesVaries
JavaScript renderingNoNoNoYes
ExtrasmaxChars, text/HTML, pass-through for JSON/XMLSitemap, depth, globs, RAG chunks with overlap—Screenshots, JS apps
Price (Store, Oct 2026)US$1.05 / 1,000US$0.50 / 1,000 pagesUS$1.50 / 1,000 (Free tier)Compute-based, usually more per page

Pick the crawler when you need many pages from one site; pick a browser tool when the page is a JavaScript app (this Actor tells you with needsBrowser: true).

Integrations

  • API: run it with the Apify API or client libraries (JavaScript, Python) and read the dataset, or call the Standby URL directly from any HTTP client.
  • AI agents / MCP: expose it through the Apify MCP server like any Actor, or give your agent the Standby URL as a plain HTTP tool (LangChain, LlamaIndex, CrewAI, OpenAI function calling, Claude tool use).
  • n8n, Make, Zapier: use the Apify node/module to run the Actor with a list of URLs, or an HTTP node against the Standby URL.
  • Schedules and webhooks: schedule batch runs and get notified when the dataset is ready.

FAQ

Is it legal? Fetching a public page you could open in a browser is generally fine; respect the site's terms, copyright and rate limits, and do not use it for personal data. It only fetches the URLs you give it and never crawls.

Do I need a proxy? Requests go through Apify's datacenter proxy by default. If a site blocks that request, it is retried once through a residential proxy automatically; you can also set a residential proxy in proxyConfiguration. Sites behind aggressive anti-bot walls may still fail; they are reported in error, not charged.

Why is markdown null? Look at error: HTTP error, timeout, block, unsupported type, or needsBrowser: true (the server sent an empty JavaScript shell; use a browser-based tool for that page).

Limits? Responses over 8 MB are skipped; very large pages are converted up to a size budget and flagged truncated. Up to 10,000 URLs per batch run; use maxChars to bound each document.

Does it run JavaScript? No. That is what keeps it fast and cheap. Docs sites, blogs, news, wikis, product and marketing pages work well; single-page apps come back as needsBrowser.

Changelog

  • 0.1 (October 2026): first release. Batch mode and Standby HTTP API, JSON / Markdown / text formats, maxChars, pass-through for text, JSON and XML responses, datacenter-to-residential proxy fallback.

En español

URL to Markdown API convierte una página web en Markdown limpio en alrededor de un segundo: entregas una URL y recibes el contenido principal sin menús, pies de página ni banners de cookies, más título, descripción, idioma, esquema de encabezados, conteo de palabras, estado HTTP y tiempo de descarga. Funciona en lote (lista de URLs → un registro por URL) o como API HTTP en modo Standby (GET /?url=...&format=markdown), pensada para agentes de IA, RAG y herramientas MCP. No usa navegador ni rastrea sitios: una URL, un Markdown. Si necesitas convertir un sitio completo, usa nuestro Website to Markdown Scraper. Precio: US$1,05 por cada 1.000 URLs convertidas; las descargas fallidas y las páginas que requieren navegador no se cobran.