POST /v1/scrape

Hosted: https://api.fastcrw.com · Self-hosted: http://localhost:3000

Auth (hosted only): Authorization: Bearer $CRW_API_KEY

Self-hosted: no auth required by default. See configuration.

Request body

{
  "url": "https://example.com",
  "formats": ["markdown", "html", "rawHtml", "plainText", "links", "screenshot"],
  "renderer": "http",
  "onlyMainContent": true,
  "waitFor": 0
}

formats defaults to ["markdown"]. renderer accepts "http", "chromium", or "lightpanda"; omit it to let CRW auto-select. waitFor is milliseconds before capture (browser renderers only).

Response

{
  "success": true,
  "data": {
    "markdown": "# Example Domain\n\n...",
    "html": "<h1>Example Domain</h1>...",
    "rawHtml": "<!doctype html>...",
    "links": ["https://www.iana.org/domains/example"],
    "metadata": {
      "title": "Example Domain",
      "description": "...",
      "sourceURL": "https://example.com",
      "statusCode": 200
    },
    "renderDecision": "http",
    "creditCost": 1
  }
}

Python

# Run with: python3 scrape.py
import os, requests

resp = requests.post(
    "https://api.fastcrw.com/v1/scrape",
    headers={"Authorization": f"Bearer {os.environ['CRW_API_KEY']}"},
    json={"url": "https://example.com", "formats": ["markdown", "links"]},
    timeout=60,
)
resp.raise_for_status()
body = resp.json()  # {"success": true, "data": {...}}
print(body["data"]["markdown"][:500])
print("links:", body["data"].get("links", []))

Related endpoints

← CRW docs home