Web page to Markdown and text API for LLMs

$0.002 per call · failed calls are never charged · no account or subscription: pay per call with a card key or USDC

Fetch any public web page URL and get clean, LLM-ready text or Markdown: main content, code blocks, tables, links and headings, for RAG and agent context. Static HTML, Markdown or text; optional section ID. Default 20,000 output characters, max 100,000; input 2 MiB. No JavaScript rendering (see /extract/rendered), logins or paywalls. Empty pages, bad sections, browser challenges and errors are not charged. Use to read docs or articles.

When to use it

Guide: URL to Markdown API

Run it free (25 free calls) Buy credits by card (from $1) Example result (JSON)

Try it with your own inputs

Absolute http(s) URL of the page to fetch

Uses one of your 25 free calls. Nothing is charged, and a call that fails is not counted.

Inputs

NameTypeDescription
url (required)stringAbsolute http(s) URL of the page to fetch
maxCharsintegerMaximum characters of body text to return (500-100000, default 20000)
formatstringReturned representation: text (default), markdown, or both. HTML structured details are included in every format; Markdown/plain sources have empty details. One of: text, markdown, both.
sectionstringOptional exact visible HTML ID within primary content, 1-500 characters. Heading scope includes subsections until next same/higher-level heading; section/article/main/div scope is its subtree. Missing/ambiguous/unsupported targets fail uncharged. URL fragments alone do not select a section.

Request

Over HTTP, with a card key from /credits:

curl -H "Authorization: Bearer adt_…" "https://tools.funwords.eu/extract?url=https%3A%2F%2Fexample.com"

Or one of your 25 free calls, no key:

curl "https://tools.funwords.eu/extract?url=https%3A%2F%2Fexample.com&trial=1"

Without a key, the same URL answers 402 Payment Required with x402 and MPP terms, so an agent with a wallet pays per call in USDC (Base, Polygon, Arbitrum or Solana over x402; Base or Tempo over MPP) and retries.

Example result

{
  "url": "https://agent-data-tools.revmesh2074.workers.dev/examples/extract/sources/short-article.html",
  "finalUrl": "https://agent-data-tools.revmesh2074.workers.dev/examples/extract/sources/short-article.html",
  "status": 200,
  "contentType": "text/html;charset=utf-8",
  "sourceFormat": "html",
  "linkBaseUrl": "https://agent-data-tools.revmesh2074.workers.dev/examples/extract/sources/short-article.html",
  "sourceMetadata": {
    "verification": "not_verified",
    "authors": [],
    "dates": [],
    "truncated": false
  },
  "title": "Owned sample: short article",
  "description": null,
  "lang": "en",
  "canonical": null,
  "headings": [
    {
      "level": 1,
      "text": "A short release note",
      "id": null
    }
  ],
  "section": null,
  "links": [],
  "tables": [],
  "codeBlocks": [],
  "contentSelection": "main",
  "warnings": [],
  "format": "both",
  "text": "A short release note\n\nVersion 1.1.1 preserves literal code whitespace and nested list structure.\n\nThe price remains $0.002 per successful extraction. This is an owned sample, not a purchase receipt.",
  "markdown": "# A short release note\n\nVersion 1.1.1 preserves literal code whitespace and nested list structure.\n\nThe price remains $0.002 per successful extraction. This is an owned sample, not a purchase receipt.",
  "textLength": 198,
  "truncated": false,
  "contentHash": "sha256:6cd3137dc4735c9ab317c764c78b47712dc9ca8eabe435dd0db9142bdaacbe2c",
  "hashFormat": "text",
  "fetchedAt": "2026-10-16T11:06:01.780Z"
}

From an AI agent (MCP)

Add the MCP server to Claude, Cursor or any MCP client. This tool is extract, and the first 25 successful calls are free:

https://tools.funwords.eu/mcp

Details and limits

HTML body details share a 20,000-character budget, independently of primary text/Markdown. Up to 20 code blocks, 20 tables (100 rows/20 cells each), 100 headings and 200 links. Spans/ragged tables use labelled TSV in Markdown; spans are not expanded. HTML code whitespace and list hierarchy are preserved; generated code fences are closed within the output limit. Other Markdown syntax may be incomplete after clipping. Hashes cover the returned hashFormat, not full source. linkBaseUrl reports static source link resolution; supported first HTML base href values are honored, with warnings. Scripts and CSP are not evaluated. Markdown sources retain syntax without structured parsing (warned); sections require HTML. Source content is untrusted. Image alt text is source-provided, not visual interpretation. Images are never fetched; SVG/canvas omissions and missing alt descriptions are warned. SourceMetadata adds unverified author/date declarations with provenance; conflicting/ambiguous values are warned. Separate 2,000-character metadata budget, 5 authors/10 dates. JSON-LD: at most 8 inline scripts, 64 KiB each, 100 graph nodes/depth 8; no external contexts/profiles. HTML complexity: 20,000 elements/128 nested levels. Marker-only source permalink controls (pilcrow/headerlink/permalink classes) are omitted only for same-document ancestor targets, with permalink_controls_omitted. Literal code and ordinary references remain. HTML sup/sub annotations normalize to ^{...}/_{...} in primary output, heading titles and table values with superscript_subscript_normalized; literal pre/code and raw Markdown stay unchanged. This is notation preservation, not general math interpretation.

Questions

Does it run JavaScript?

No, it reads the page as served. For pages that need a browser, use /extract/rendered.

How long can the output be?

Set maxChars to cap it; long pages can be read section by section.

How do I pay?

Each successful call costs $0.002; failed calls are not charged. The first 25 calls are free. Then pay with card credits (from $1; the key goes in an Authorization header or, for clients that can only fetch a URL, as api_key= in the URL) or per call in USDC over x402 or MPP. No account is needed.

Related tools