crawl to markdown api

Any URL, converted to Markdown an LLM can actually read.

webforai platform wraps the webforai extraction library in a metered HTTP API. Four acquisition engines — plain fetch, browser rendering, proxied fetch, proxied browser — behind one request body, and an auto default that renders client-side pages only when they need it.

500 free credits every month — no card required.

curl
curl -X POST https://platform.webforai.dev/v1/scrape \
  -H "Authorization: Bearer wfa_..." \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/article",
    "engine": "auto",
    "convert": { "extractor": "auto", "frontmatter": true }
  }'
Live demo

Try it on any URL

The same conversion pipeline as POST /v1/scrape, running the auto engine — plain fetch, escalating to browser rendering when the page needs JavaScript. No account needed — rate-limited to 5 requests per 10 minutes.

No conversion yet

Paste a URL and press Convert — the Markdown and a rendered preview appear side by side.

POST /v1/scrape

Scrape

One URL in, Markdown plus metadata out. Runs synchronously on a plain Worker, so a single page returns in one request.

POST /v1/batch

Batch

Up to 100 URLs per job. Runs as a Cloudflare Workflow with retries; results are paged from the job results endpoint.

POST /v1/crawl

Crawl

Seed URL, same-origin BFS with depth and page limits plus include/exclude path patterns. Same conversion core as scrape.

Four acquisition engines, one auto mode

The engine decides how the HTML is fetched; extraction and Markdown conversion are identical across all of them. The default auto starts cheap and escalates to browser rendering when a page turns out to be a client-side shell or refuses the plain fetch — you are billed for the engine that produced the result.

EngineHow it fetchesProxyScreenshotCredits
autoCheapest engine first, escalates to browser rendering when the page needs JavaScript or blocks plain fetcheswith regionyes1–5
fetchPlain HTTP fetch from the edgenono1
browserHeadless browser renderingnoyes5
proxy-fetchHTTP fetch through a rotating proxyyesno2
proxy-browserHeadless browser behind the rotating proxyyesyes5

Options add credits on top: screenshot +1, image rehosting +1 per started 5 images. Failed operations are never billed.

Pricing

Everything is denominated in credits and metered per successful operation. One counter, no plan matrix.

Free allowance

No card required.

500

credits per calendar month

That is 500 plain-fetch scrapes, or 100 browser-rendered pages. Past the allowance the API answers 402 payment_required until you subscribe.

Usage-based

Stripe metered subscription, billed monthly.

$0.002

per credit beyond the first 500

Graduated tiers on a single Stripe billing meter. Usage is recorded only after an operation succeeds, so retries and failures never appear on the invoice.

Start with the free allowance

Create an account, mint a key, send the first request in a minute.