readfetch.com
Fetch a public URL and return its main readable content as Markdown or plain text, plus title, author, published date and site name. Strips navigation, ads and boilerplate. No JavaScript rendering by default (cheaper than readfetch_scrape); one Chromium fallback when plain HTTP is blocked. Prefer readfetch_fetch when you need raw status, headers, or non-HTML bytes; readfetch_scrape when the articl
- Category
- Images, audio & video
- Starting price
- $0.003
- Paid calls · 30 days
- 81
- Unique payers · 30 days
- 15
Paid endpoints
12 endpoints, sorted by usage. Prices are per request.
- POST/v1/text
Fetch a public URL and return its main readable content as Markdown or plain text, plus title, author, published date and site name. Strips navigation, ads and boilerplate. No JavaScript rendering by default (cheaper than readfetch_scrape); one Chromium fallback when plain HTTP is blocked. Prefer readfetch_fetch when you need raw status, headers, or non-HTML bytes; readfetch_scrape when the articl
$0.005Base34calls / 30d - POST/v1/fetch
Send an HTTP request (GET, POST, PUT, PATCH, DELETE, HEAD) through egress and return status_code, response headers, and body as text or base64 (`binary: true`). `max_bytes` caps the stored body; `follow_redirects` (default true) and `timeout_s` (95 s ceiling) apply to the full redirect chain. Use `json_body` for JSON POST/PUT payloads; use `body` for raw bytes or strings. Prefer readfetch_text for
$0.003Base15calls / 30d - POST/v1/map
Discover a site's crawlable surface without crawling it: parse robots.txt allow/disallow rules, collect URLs from sitemap.xml and sitemap indexes, find RSS, Atom and JSON feeds, and count internal and external links on the homepage. Use the returned URLs to plan readfetch_scrape, readfetch_batch, or readfetch_crawl — not readfetch_map again on each URL. Prefer readfetch_probe on one URL before pay
$0.005Base7calls / 30d - POST/v1/search
Run a web search without a separate search API subscription. Returns titles, URLs, and snippets only — not full page text; follow with readfetch_text, readfetch_probe, or readfetch_scrape on a chosen result URL. `limit` is 1–20 (default 5). Optional `lang` biases locale (e.g. en, de-DE). Optional `tbs` filters recency: h= past hour, d= day, w= week, m= month, y= year. Use readfetch_map/readfetch_c
$0.005Base4calls / 30d - POST/v1/batch
Up to 50 URLs in one call and one payment. Results in input order; an undelivered page is not billed and is credited.
$0.01Base3calls / 30d - POST/v1/section
One heading or one selector instead of the whole page. A heading that is not found returns 200, an empty body and the list of headings that do exist.
$0.003Base3calls / 30d - POST/v1/diff
Stateless change detection: send the hash you hold, get changed/unchanged and a bounded diff. A no-change answer is billable.
$0.003Base3calls / 30d - POST/v1/scrape
Load a public URL in headless Chromium and return Markdown, plain text, or HTML (`format`, plus status_code, title, cache_status, billed; optional links via `advanced.include_links`). `mode` sets latency and depth: fast (15 s, minimal render), render (30 s, default, full JS), full (60 s, scroll the page). `fresh: true` bypasses cache. Put scroll, wait_for, js_code, headers, cookies, and auth in `a
$0.005Base3calls / 30d - POST/v1/crawl
Start a bounded async crawl from one seed URL. Returns job_id, status (queued), pages_quoted, and price_usd — then poll readfetch_crawl_status with that id until status is completed or failed. Completed jobs include per-page url and Markdown in the status payload. Cap scope with max_pages (default 20, max 100) and max_depth (default 2, max 3); include/exclude filter paths by prefix (* suffix on in
$0.003Base3calls / 30d - POST/v1/pdf
Documents, not pages: page text plus one Markdown body, priced per document.
$0.005Base2calls / 30d - POST/v1/screenshot
PNG or JPEG of a rendered page: viewport, full page, or one element.
$0.003Base2calls / 30d - POST/v1/scrape/residential
Identical request and response to /v1/scrape, but the render leaves through a residential address instead of the datacentre. For targets that block by IP reputation (DataDome, PerimeterX, Cloudflare, AWS WAF). One attempt, no retries: residential bandwidth is the cost, and four times the scrape price is what it takes to cover it honestly. Prefer readfetch_scrape when datacentre egress works; use r
$0.02Base2calls / 30d