{
  "data": {
    "a": {
      "slug": "crw",
      "name": "fastCRW",
      "vendor": "Nanofy OÜ",
      "vendorUrl": "https://fastcrw.com",
      "kind": "http-api",
      "category": "web-scrapers",
      "summary": "fastCRW is a Firecrawl-compatible scraping engine in Rust from Nanofy OÜ in Estonia. It turns pages into Markdown or JSON and searches, maps and crawls sites, as an AGPL-3.0 self-hosted binary or a hosted API with an MCP server.",
      "url": "https://www.anchorterminal.com/tools/crw",
      "markdownUrl": "https://www.anchorterminal.com/tools/crw.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/crw.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/crw.json",
      "dns": "crw.grade.anchorterminal.com",
      "repo": "https://github.com/fastcrw/crw",
      "license": "AGPL-3.0",
      "transports": [
        "stdio",
        "streamable-http"
      ],
      "remoteUrl": "https://fastcrw.com/mcp",
      "packages": [
        {
          "registry": "npm",
          "name": "crw-mcp"
        },
        {
          "registry": "npm",
          "name": "crw-sdk"
        },
        {
          "registry": "pypi",
          "name": "crw"
        },
        {
          "registry": "cargo",
          "name": "crw-server"
        },
        {
          "registry": "oci",
          "name": "ghcr.io/fastcrw/crw"
        }
      ],
      "auth": "mixed",
      "authNotes": "Hosted API at api.fastcrw.com takes `Authorization: Bearer crw_live_...` keys from the fastcrw.com dashboard after a browser signup (GitHub or email). The hosted MCP server at fastcrw.com/mcp takes OAuth 2.1 (PKCE S256, dynamic client registration, one scope `mcp:tools`) or the key in the URL path as fastcrw.com/mcp/\u003cAPI_KEY\u003e. No key scopes found. A self-hosted engine needs no key unless `[auth] api_keys` is set.",
      "pricing": "freemium",
      "pricingNotes": "500 one-off credits with no card, plus up to 500 more from onboarding tasks. Hobby $13 a month for 5,000 credits, Standard $69 for 100,000, Growth $279 for 500,000, Scale $549 for 1,000,000 (less with yearly billing). One credit a page on any renderer, search 2. Failed pages refunded, top-ups never expire. Self-hosting is free.",
      "priceSummary": "$13 / mo",
      "where": "both",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 on the pricing page, the credit-costs and agent-onboarding docs, or the OpenAPI spec (checked 2026-11-06). A 402 on the hosted API means an exhausted credit balance (`errorCode: insufficient_credits`) with an upgrade URL header, not a payment requirement.",
        "endpoints": []
      },
      "toolCount": 11,
      "popularity": {
        "githubStars": 1200,
        "npmWeekly": 881,
        "pypiWeekly": null,
        "asOf": "2026-11-06"
      },
      "docsUrl": "https://docs.fastcrw.com",
      "llmsTxt": "https://docs.fastcrw.com/llms.txt",
      "openapi": "https://github.com/fastcrw/crw/blob/main/docs/openapi.json",
      "registryName": "io.github.fastcrw/crw",
      "capabilities": [
        "web.scrape",
        "web.crawl",
        "web.extract",
        "scraping.js-render",
        "scraping.proxies",
        "web.search",
        "web.fetch"
      ],
      "tags": [
        "hosted",
        "local",
        "open-source",
        "self-hosted",
        "freemium",
        "no-card",
        "mcp",
        "remote-mcp",
        "mcp-registry",
        "llms-txt",
        "openapi",
        "rust",
        "eu"
      ],
      "lastRelease": "2026-11-04",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 64.3,
        "grade": "B",
        "agentReady": false,
        "rank": 478,
        "ranked": true,
        "rankOf": 1486,
        "categoryRank": 11,
        "methodology": "0.7",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 91,
          "maintenance": 93,
          "payments": 35,
          "reliability": 50,
          "schema": 91,
          "security": 40,
          "transparency": 60
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-11-06"
        },
        "negative": 0,
        "verdict": "Agents get 11 compact, annotated MCP tools with bounded output, a public OpenAPI spec, refunds on failed pages and a free self-hosted engine. The hosted service has no status history, publishes no SLA terms, names its operator only on the support page, and documents an MCP address with the API key in the URL path.",
        "bestFor": "Agents that want Firecrawl-style scrape, crawl, map, search and extract at lower per-page cost, or a small self-hosted engine.",
        "strengths": [
          "11 MCP tools, each annotated readOnlyHint, destructiveHint and idempotentHint, with output capped near 15,000 characters and a resume offset",
          "Public OpenAPI 3.1 spec, llms.txt and an error page that says which codes to retry and which to stop on",
          "Failed and blocked pages are refunded, every renderer costs 1 credit, and top-up credits never expire",
          "Released 16 times in the 90 days to 6 November 2026, with five open issues on GitHub",
          "AGPL-3.0 engine runs self-hosted with no account, and MIT Python and TypeScript SDKs"
        ],
        "weaknesses": [
          "The status page shows a live check and an uptime objective but no incident history",
          "The hosted MCP address fastcrw.com/mcp/\u003cAPI_KEY\u003e puts the key in the URL path as a documented option",
          "Terms and privacy policy name no legal entity, give no retention periods and name no DPA; only the support page names Nanofy OÜ",
          "No SLA terms beyond an Enterprise mention, no security.txt and no certification found",
          "No machine payment protocol, and hosted keys need a person to sign up in a browser"
        ],
        "agentNotes": [
          "Connect to https://fastcrw.com/mcp with OAuth rather than the /mcp/\u003cAPI_KEY\u003e address, so the key stays out of URLs and logs",
          "Branch on `errorCode`. Stop on 402 insufficient_credits or llm_not_available, and on 429 wait for Retry-After before retrying",
          "Check `success` as well as the HTTP status, since an anti-bot wall answers 200 with `success: false` and `errorCode: anti_bot`",
          "Pass `startIndex` from a truncated result to read the rest of a long page instead of setting `maxLength: 0`",
          "Use native /v1 routes for new work; /firecrawl/v2 is for Firecrawl SDK migrations and keeps the older 429 for empty balances"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "B",
            "methodology": "0.7",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 64.3
          }
        ],
        "editorialScores": {
          "ergonomics": 91,
          "maintenance": 93,
          "payments": 35,
          "reliability": 50,
          "schema": 91,
          "security": 40,
          "transparency": 53
        },
        "provenanceScore": 67,
        "checked": {
          "categories": {
            "ergonomics": "2026-11-06",
            "maintenance": "2026-11-06",
            "payments": "2026-11-06",
            "reliability": "2026-11-06",
            "schema": "2026-11-06",
            "security": "2026-11-06",
            "transparency": "2026-11-06"
          },
          "last": "2026-11-06",
          "oldest": "2026-11-06",
          "stale": false,
          "staleAfterDays": 90
        }
      },
      "connect": {
        "install": "npx -y crw-mcp@latest install",
        "http": "curl -X POST https://api.fastcrw.com/v1/scrape -H \"Authorization: Bearer YOUR_API_KEY\" -H \"Content-Type: application/json\" -d '{\"url\":\"https://example.com\",\"formats\":[\"markdown\"]}'"
      },
      "letme": {
        "capability": "https://letme.dev/web.scrape",
        "tool": "https://letme.dev/crw"
      },
      "area": "web-data",
      "unitPrices": [
        {
          "item": "Hobby plan",
          "unit": "month",
          "usd": 13,
          "note": "5,000 credits; $11 a month billed yearly"
        },
        {
          "item": "Standard plan",
          "unit": "month",
          "usd": 69,
          "note": "100,000 credits; $59 a month billed yearly"
        },
        {
          "item": "Hobby top-up",
          "unit": "1k-pages",
          "usd": 9,
          "note": "one credit scrapes one page on any renderer"
        },
        {
          "item": "Scale top-up",
          "unit": "1k-pages",
          "usd": 0.6,
          "note": "$299 for 500,000 credits"
        }
      ],
      "provenance": {
        "legalEntity": "Nanofy OÜ",
        "domain": "fastcrw.com",
        "domainRegistered": "2026-03-05",
        "endpointOnVendorDomain": true,
        "terms": "https://fastcrw.com/terms",
        "privacy": "https://fastcrw.com/privacy",
        "statusPage": "https://fastcrw.com/status",
        "changelog": "https://github.com/fastcrw/crw/blob/main/CHANGELOG.md",
        "securityTxt": "none",
        "checked": "2026-11-06",
        "notes": [
          "Nanofy OÜ (registry code 17365846, Sepapaja tn 6, Tallinn) is named as operator on fastcrw.com/support. The terms (last updated 4 April 2026) and the privacy policy (undated) name only fastCRW and 'the jurisdiction in which fastCRW operates'.",
          "The terms forbid crawling sites against their terms or robots.txt and put responsibility for targets on the customer. No clause forbids automated access to fastcrw.com itself.",
          "fastcrw.com/robots.txt allows all crawlers except account, API and login paths; docs.fastcrw.com/robots.txt allows all.",
          "RDAP gives fastcrw.com a registration date of 5 March 2026.",
          "fastcrw.com/.well-known/security.txt answers 404. SECURITY.md in the repository names security@fastcrw.com and GitHub private vulnerability reporting."
        ],
        "score": 67
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/crw.json",
      "live": {
        "slug": "crw",
        "probe": {
          "target": "https://fastcrw.com/mcp",
          "method": "get",
          "lastAt": "2026-11-07T18:20:19.526009674Z",
          "lastOk": true,
          "lastStatus": 401,
          "lastMs": 156,
          "lastNote": "asks for credentials",
          "authRequired": true,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 80,
          "p95ms24h": 153,
          "samples24h": 200,
          "samples30d": 200,
          "days": [
            {
              "date": "2026-11-06",
              "probes": 13,
              "ok": 13
            },
            {
              "date": "2026-11-07",
              "probes": 187,
              "ok": 187
            }
          ]
        },
        "vendorStatus": {
          "page": "https://fastcrw.com/status",
          "indicator": "unknown",
          "summary": "no machine-readable status found",
          "checkedAt": "2026-11-07T04:47:35.720864858Z"
        },
        "versions": [
          {
            "registry": "github",
            "name": "fastcrw/crw",
            "version": "v0.42.1",
            "released": "2026-11-06",
            "seenAt": "2026-11-06T23:18:48.669809831Z"
          },
          {
            "registry": "mcp-registry",
            "name": "io.github.fastcrw/crw",
            "version": "0.42.1",
            "seenAt": "2026-11-07T18:16:28.95801333Z"
          },
          {
            "registry": "npm",
            "name": "crw-mcp",
            "version": "0.42.1",
            "seenAt": "2026-11-06T23:18:46.329470936Z"
          },
          {
            "registry": "npm",
            "name": "crw-sdk",
            "version": "0.42.1",
            "seenAt": "2026-11-06T23:18:46.739900633Z"
          },
          {
            "registry": "pypi",
            "name": "crw",
            "version": "0.42.1",
            "released": "2026-11-06",
            "seenAt": "2026-11-06T23:18:48.550796676Z"
          }
        ],
        "githubStars": 1230,
        "npmWeekly": 881,
        "pypiWeekly": 441,
        "securityTxt": {
          "url": "https://fastcrw.com/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-11-07T15:59:50.596126033Z"
        },
        "llmsTxt": {
          "url": "https://docs.fastcrw.com/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-11-07T15:32:13.945191217Z"
        },
        "pages": [
          {
            "url": "https://raw.githubusercontent.com/fastcrw/crw/main/CHANGELOG.md",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-11-07T14:20:49.992321515Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "572aa4127341"
          },
          {
            "url": "https://fastcrw.com/privacy",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-11-07T14:09:41.233044196Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "56adab90a2ac"
          },
          {
            "url": "https://fastcrw.com/terms",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-11-07T14:09:43.278176432Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "4f55b83dc108"
          }
        ],
        "updatedAt": "2026-11-07T18:20:19.526009674Z"
      }
    },
    "answer": "fastCRW scores 64.3 (B) on agent readiness against Jina Reader's 51.9 (D), and leads in 4 of 7 scored categories. Jina Reader leads on reliability.",
    "b": {
      "slug": "jina-reader",
      "name": "Jina Reader",
      "vendor": "Jina AI (Elastic)",
      "vendorUrl": "https://jina.ai",
      "kind": "http-api",
      "category": "web-scrapers",
      "summary": "API that converts web pages and search results to Markdown for agents and applications.",
      "url": "https://www.anchorterminal.com/tools/jina-reader",
      "markdownUrl": "https://www.anchorterminal.com/tools/jina-reader.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/jina-reader.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/jina-reader.json",
      "dns": "jina-reader.grade.anchorterminal.com",
      "repo": "https://github.com/jina-ai/reader",
      "license": "Apache-2.0",
      "transports": [
        "http",
        "streamable-http"
      ],
      "remoteUrl": "https://r.jina.ai/",
      "packages": [],
      "auth": "mixed",
      "authNotes": "Reader works with no key at 20 requests a minute. Search and higher limits need a Bearer key.",
      "pricing": "usage",
      "pricingNotes": "Billed in output tokens. A new key comes with 10M free tokens. Search costs at least 10,000 tokens a request. US dollar prices per token weren't shown on the public page (https://jina.ai/reader/).",
      "priceSummary": "Pay per use",
      "where": "hosted",
      "x402": {
        "level": "no",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": 12000,
        "npmWeekly": null,
        "pypiWeekly": null,
        "asOf": "2026-09-26"
      },
      "docsUrl": "https://jina.ai/reader/",
      "openapi": "https://docs.jina.ai/openapi.json",
      "capabilities": [
        "web.scrape",
        "web.fetch",
        "web.search"
      ],
      "tags": [
        "hosted",
        "no-key",
        "mcp",
        "open-source"
      ],
      "lastRelease": "2026-10-23",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 51.9,
        "grade": "D",
        "agentReady": false,
        "rank": 999,
        "ranked": true,
        "rankOf": 1486,
        "categoryRank": 25,
        "methodology": "0.7",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 80,
          "maintenance": 45,
          "payments": 35,
          "reliability": 70,
          "schema": 77,
          "security": 32,
          "transparency": 62
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-11-05"
        },
        "negative": -7,
        "negativeNotes": [
          "-4: the hosted MCP server's show_api_key tool returned the account's bearer token into the conversation, next to read_url, which fetches untrusted pages, from August 2025 until v1.10.0 removed it on 2026-09-18. Fixed and documented in the README, so deducted less (https://github.com/jina-ai/MCP#functions-have-been-removed-in-v1100).",
          "-3: v1.10.0 on 2026-09-18 removed nine tools from mcp.jina.ai, including search_web_deep added on 12 August and the parallel_* tools, with no advance notice (https://github.com/jina-ai/MCP/pull/36)."
        ],
        "verdict": "Jina Reader turns a URL into Markdown with no key at 20 requests a minute, and since October 2026 Jina publishes an OpenAPI file with typed parameters and error bodies. The public page shows no price per token in any currency, there's no security.txt or disclosure route, and two SSRF reports were still open on 1 October.",
        "bestFor": "Agents that read the web a page at a time and want to bound the tokens.",
        "strengths": [
          "One URL prefix, no key needed, Markdown back",
          "`x-max-tokens`, `x-token-budget` and `x-target-selector` bound the output",
          "An OpenAPI file since 14 October 2026 types every Reader option and the error body of each status",
          "Rate limits published for each key tier, and the 429 body carries `retryAfter`",
          "Apache-2.0 source for the code behind r.jina.ai"
        ],
        "weaknesses": [
          "No price per token in any currency on the public page",
          "No security.txt or disclosure route, and two SSRF reports were open as public issues on 1 October 2026",
          "Hosted MCP exposed the bearer token through show_api_key until 18 September 2026",
          "No changelog, and the MCP server's versions are untagged package.json bumps",
          "The Reader page and the README disagree on cache lifetime, 5 minutes against 3,600 seconds"
        ],
        "agentNotes": [
          "Prefix the URL, `https://r.jina.ai/https://example.com`, and read the Markdown",
          "Send `x-max-tokens` to cap a page, or `x-token-budget` to refuse one that's too big",
          "Use `x-target-selector` when you need one part of a page",
          "Keyless is 20 requests a minute and can't search. Add a key for loops or s.jina.ai",
          "On a 429, wait the `retryAfter` seconds in the error body before retrying"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 2,
        "avgRating": 2.5,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "D",
            "methodology": "0.7",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 51.9
          }
        ],
        "editorialScores": {
          "ergonomics": 80,
          "maintenance": 45,
          "payments": 35,
          "reliability": 70,
          "schema": 77,
          "security": 32,
          "transparency": 50
        },
        "provenanceScore": 74,
        "checked": {
          "categories": {
            "ergonomics": "2026-11-05",
            "maintenance": "2026-11-05",
            "payments": "2026-11-05",
            "reliability": "2026-11-05",
            "schema": "2026-11-05",
            "security": "2026-11-05",
            "transparency": "2026-11-05"
          },
          "last": "2026-11-05",
          "lastMoved": "2026-11-05",
          "oldest": "2026-11-05",
          "stale": false,
          "staleAfterDays": 90
        }
      },
      "connect": {
        "http": "curl \"https://r.jina.ai/https://www.anchorterminal.com/prices/\"",
        "claudeCode": "claude mcp add --transport http jina https://mcp.jina.ai/v1"
      },
      "letme": {
        "capability": "https://letme.dev/web.scrape",
        "tool": "https://letme.dev/jina-reader"
      },
      "sameCompany": [
        "jina-embeddings",
        "jina-embeddings-v5-omni-small"
      ],
      "area": "web-data",
      "provenance": {
        "legalEntity": "Jina AI GmbH",
        "domain": "jina.ai",
        "domainRegistered": "2020-01-20",
        "domainNote": "Jina AI GmbH is a subsidiary of Elastic N.V., and the privacy statement is Elastic's.",
        "endpointOnVendorDomain": true,
        "terms": "https://jina.ai/legal/#terms-and-conditions",
        "privacy": "https://www.elastic.co/legal/privacy-statement",
        "statusPage": "https://status.jina.ai",
        "changelog": "",
        "securityTxt": "none",
        "checked": "2026-11-05",
        "notes": [
          "Jina's terms (last modified 4 May 2026) bar automated extraction from the Jina AI website (4.5(iv)) and cover anyone who uses its documentation or websites (1.1), so jina.ai, docs.jina.ai and status.jina.ai weren't requested on 5 November. The legal entity, terms, privacy and status readings are per the 26 September and 1 October checks.",
          "The API reference served at docs.jina.ai is built in the public jina-ai/meta-prompt repository, which was read instead."
        ],
        "score": 74
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/jina-reader.json",
      "live": {
        "slug": "jina-reader",
        "probe": {
          "target": "https://r.jina.ai/",
          "method": "get",
          "lastAt": "2026-11-07T18:20:32.897187922Z",
          "lastOk": true,
          "lastStatus": 200,
          "lastMs": 269,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 99.99,
          "p50ms24h": 162,
          "p95ms24h": 269,
          "samples24h": 239,
          "samples30d": 7910,
          "days": [
            {
              "date": "2026-10-07",
              "probes": 272,
              "ok": 271
            },
            {
              "date": "2026-10-08",
              "probes": 268,
              "ok": 268
            },
            {
              "date": "2026-10-09",
              "probes": 250,
              "ok": 250
            },
            {
              "date": "2026-10-10",
              "probes": 247,
              "ok": 247
            },
            {
              "date": "2026-10-11",
              "probes": 247,
              "ok": 247
            },
            {
              "date": "2026-10-12",
              "probes": 247,
              "ok": 247
            },
            {
              "date": "2026-10-13",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-14",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-10-15",
              "probes": 253,
              "ok": 253
            },
            {
              "date": "2026-10-16",
              "probes": 252,
              "ok": 252
            },
            {
              "date": "2026-10-17",
              "probes": 253,
              "ok": 253
            },
            {
              "date": "2026-10-18",
              "probes": 256,
              "ok": 256
            },
            {
              "date": "2026-10-19",
              "probes": 255,
              "ok": 255
            },
            {
              "date": "2026-10-20",
              "probes": 252,
              "ok": 252
            },
            {
              "date": "2026-10-21",
              "probes": 253,
              "ok": 253
            },
            {
              "date": "2026-10-22",
              "probes": 253,
              "ok": 253
            },
            {
              "date": "2026-10-23",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-24",
              "probes": 251,
              "ok": 251
            },
            {
              "date": "2026-10-25",
              "probes": 250,
              "ok": 250
            },
            {
              "date": "2026-10-26",
              "probes": 252,
              "ok": 252
            },
            {
              "date": "2026-10-27",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-10-28",
              "probes": 251,
              "ok": 251
            },
            {
              "date": "2026-10-29",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-30",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-10-31",
              "probes": 251,
              "ok": 251
            },
            {
              "date": "2026-11-01",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-11-02",
              "probes": 250,
              "ok": 250
            },
            {
              "date": "2026-11-03",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-11-04",
              "probes": 246,
              "ok": 246
            },
            {
              "date": "2026-11-05",
              "probes": 185,
              "ok": 185
            },
            {
              "date": "2026-11-06",
              "probes": 241,
              "ok": 241
            },
            {
              "date": "2026-11-07",
              "probes": 187,
              "ok": 187
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.jina.ai",
          "indicator": "none",
          "summary": "All Systems Operational",
          "checkedAt": "2026-11-07T18:21:17.607227537Z"
        },
        "githubStars": 12242,
        "securityTxt": {
          "url": "https://jina.ai/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-11-07T16:00:20.063118347Z"
        },
        "domain": {
          "domain": "jina.ai",
          "registered": "2020-01-20",
          "source": "https://rdap.identitydigital.services/rdap/domain/jina.ai",
          "checkedAt": "2026-11-01T14:12:24.661973229Z"
        },
        "pages": [
          {
            "url": "https://jina.ai/reader/",
            "kind": "deprecations",
            "status": 304,
            "checkedAt": "2026-11-07T14:11:46.093731697Z",
            "changedAt": "2026-11-05T12:35:12.253012704Z",
            "fingerprint": "a70fd68780bb"
          },
          {
            "url": "https://www.elastic.co/legal/privacy-statement",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-10-01T13:17:07.465912374Z",
            "changedAt": "2026-10-01T13:17:07.465912374Z",
            "fingerprint": "bd620f341674"
          },
          {
            "url": "https://jina.ai/legal/",
            "kind": "terms",
            "status": 304,
            "checkedAt": "2026-10-01T13:13:46.391565171Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "822c862ff72d"
          }
        ],
        "mcpTools": {
          "url": "https://mcp.jina.ai/v1",
          "checkedAt": "2026-11-07T01:45:31.044425815Z",
          "status": "ok",
          "protocol": "2025-11-25",
          "tools": [
            {
              "name": "primer",
              "description": "Current time, user location and network environment for the session. Use before answering anything time- or location-dependent.",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "properties": {},
                "type": "object"
              }
            },
            {
              "name": "guess_datetime_url",
              "description": "Guess when a page was published or last updated, with a confidence score. Checks HTTP headers, metadata, Schema.org, visible dates, feeds and sitemaps.",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "additionalProperties": false,
                "properties": {
                  "url": {
                    "format": "uri",
                    "type": "string"
                  }
                },
                "required": [
                  "url"
                ],
                "type": "object"
              }
            },
            {
              "name": "capture_screenshot_url",
              "description": "Screenshot a page as base64 JPEG. Use when the page must be seen rather than read.",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "additionalProperties": false,
                "properties": {
                  "firstScreenOnly": {
                    "default": false,
                    "description": "Capture only the first screen instead of the full page. Faster.",
                    "type": "boolean"
                  },
                  "return_url": {
                    "default": false,
                    "description": "Return URLs instead of base64 images.",
                    "type": "boolean"
                  },
                  "url": {
                    "format": "uri",
                    "type": "string"
                  }
                },
                "required": [
                  "url"
                ],
                "type": "object"
              }
            },
            {
              "name": "read_url",
              "description": "Fetch a URL (page or PDF) as clean markdown. Pass `question` to get only the passages answering it instead of the whole page - far cheaper than reading the full body into context.",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "additionalProperties": false,
                "properties": {
                  "chunk_size": {
                    "description": "Passage size in words, default 100. Larger gives more surrounding context, smaller pinpoints the answer. Comparable across scripts. Needs `question`.",
                    "maximum": 4096,
                    "minimum": 1,
                    "type": "integer"
                  },
                  "ocr": {
                    "description": "Read the rendered page as an image with jina-ocr-v1 instead of its HTML. Use for scanned documents and PDFs whose text is not in the markup, and to keep formulas and table structure. Parses ONE page per call, page 1 unless `page` says otherwise, and costs about 40x the tokens per page, so leave off unless the HTML path has failed you.",
                    "type": "boolean"
                  },
                  "page": {
                    "description": "Which page the OCR pass should parse, 1-based. Needs `ocr`; the HTML path returns the whole document at once.",
                    "minimum": 1,
                    "type": "integer"
                  },
                  "question": {
                    "description": "Return only the passages answering this question, instead of the full body. Omit for the whole page.",
                    "type": "string"
                  },
                  "topk": {
                    "description": "Passages to return, default 1. Needs `question`.",
                    "maximum": 50,
                    "minimum": 1,
                    "type": "integer"
                  },
                  "url": {
                    "anyOf": [
                      {
                        "format": "uri",
                        "type": "string"
                      },
                      {
                        "items": {
                          "format": "uri",
                          "type": "string"
                        },
                        "maxItems": 5,
                        "minItems": 1,
                        "type": "array"
                      }
                    ],
                    "description": "Page or PDF URL, or up to 5 URLs to read in parallel."
                  },
                  "withAllImages": {
                    "description": "Also return every image on the page.",
                    "type": "boolean"
                  },
                  "withAllLinks": {
                    "description": "Also return every link on the page.",
                    "type": "boolean"
                  }
                },
                "required": [
                  "url"
                ],
                "type": "object"
              }
            },
            {
              "name": "search_web",
              "description": "Search the web. Returns titles, URLs and search-engine snippets.",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "additionalProperties": false,
                "properties": {
                  "gl": {
                    "description": "Country code, e.g. 'de'.",
                    "type": "string"
                  },
                  "hl": {
                    "description": "Language code, e.g. 'zh-cn'.",
                    "type": "string"
                  },
                  "location": {
                    "type": "string"
                  },
                  "num": {
                    "default": 10,
                    "maximum": 10,
                    "minimum": 1,
                    "type": "integer"
                  },
                  "query": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "items": {
                          "type": "string"
                        },
                        "maxItems": 5,
                        "minItems": 1,
                        "type": "array"
                      }
                    ]
                  },
                  "tbs": {
                    "description": "Age limit: qdr:h, qdr:d, qdr:w, qdr:m, qdr:y (hour to year).",
                    "type": "string"
                  }
                },
                "required": [
                  "query"
                ],
                "type": "object"
              }
            },
            {
              "name": "search_arxiv",
              "description": "Search arXiv preprints (physics, maths, CS, quantitative biology and finance).",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "additionalProperties": false,
                "properties": {
                  "num": {
                    "default": 10,
                    "maximum": 10,
                    "minimum": 1,
                    "type": "integer"
                  },
                  "query": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "items": {
                          "type": "string"
                        },
                        "maxItems": 5,
                        "minItems": 1,
                        "type": "array"
                      }
                    ]
                  },
                  "tbs": {
                    "description": "Age limit: qdr:h, qdr:d, qdr:w, qdr:m, qdr:y (hour to year).",
                    "type": "string"
                  }
                },
                "required": [
                  "query"
                ],
                "type": "object"
              }
            },
            {
              "name": "search_ssrn",
              "description": "Search SSRN working papers (social science, economics, law, finance, management).",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "additionalProperties": false,
                "properties": {
                  "num": {
                    "default": 10,
                    "maximum": 10,
                    "minimum": 1,
                    "type": "integer"
                  },
                  "query": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "items": {
                          "type": "string"
                        },
                        "maxItems": 5,
                        "minItems": 1,
                        "type": "array"
                      }
                    ]
                  },
                  "tbs": {
                    "description": "Age limit: qdr:h, qdr:d, qdr:w, qdr:m, qdr:y (hour to year).",
                    "type": "string"
                  }
                },
                "required": [
                  "query"
                ],
                "type": "object"
              }
            },
            {
              "name": "search_jina_blog",
              "description": "Search Jina AI's news and blog at jina.ai/news: product announcements, model releases, technical write-ups.",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "additionalProperties": false,
                "properties": {
                  "num": {
                    "default": 30,
                    "maximum": 100,
                    "minimum": 1,
                    "type": "integer"
                  },
                  "query": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "items": {
                          "type": "string"
                        },
                        "maxItems": 5,
                        "minItems": 1,
                        "type": "array"
                      }
                    ]
                  },
                  "tbs": {
                    "description": "Age limit: qdr:h, qdr:d, qdr:w, qdr:m, qdr:y (hour to year).",
                    "type": "string"
                  }
                },
                "required": [
                  "query"
                ],
                "type": "object"
              }
            },
            {
              "name": "search_images",
              "description": "Search the web for images. Returns base64 JPEGs by default.",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "additionalProperties": false,
                "properties": {
                  "gl": {
                    "description": "Country code, e.g. 'de'.",
                    "type": "string"
                  },
                  "hl": {
                    "description": "Language code, e.g. 'zh-cn'.",
                    "type": "string"
                  },
                  "location": {
                    "type": "string"
                  },
                  "num": {
                    "default": 10,
                    "maximum": 10,
                    "minimum": 1,
                    "type": "integer"
                  },
                  "query": {
                    "type": "string"
                  },
                  "return_url": {
                    "default": false,
                    "description": "Return URLs and metadata instead of base64 images.",
                    "type": "boolean"
                  },
                  "tbs": {
                    "description": "Age limit: qdr:h, qdr:d, qdr:w, qdr:m, qdr:y (hour to year).",
                    "type": "string"
                  }
                },
                "required": [
                  "query"
                ],
                "type": "object"
              }
            },
            {
              "name": "sort_by_relevance",
              "description": "Rerank documents by relevance to a query, using Jina Reranker.",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "additionalProperties": false,
                "properties": {
                  "documents": {
                    "description": "Documents to rank, up to 1024.",
                    "items": {
                      "type": "string"
                    },
                    "maxItems": 1024,
                    "minItems": 1,
                    "type": "array"
                  },
                  "query": {
                    "type": "string"
                  },
                  "top_n": {
                    "minimum": 1,
                    "type": "integer"
                  }
                },
                "required": [
                  "query",
                  "documents"
                ],
                "type": "object"
              }
            },
            {
              "name": "deduplicate_strings",
              "description": "Select the top-k semantically distinct strings from a list, dropping near-duplicates.",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "additionalProperties": false,
                "properties": {
                  "k": {
                    "description": "How many to keep. Omit to pick k automatically from diminishing returns.",
                    "minimum": 1,
                    "type": "integer"
                  },
                  "strings": {
                    "description": "Strings to deduplicate, up to 1000.",
                    "items": {
                      "type": "string"
                    },
                    "maxItems": 1000,
                    "minItems": 1,
                    "type": "array"
                  }
                },
                "required": [
                  "strings"
                ],
                "type": "object"
              }
            },
            {
              "name": "extract_pdf",
              "description": "Extract figures, tables and equations from a PDF as images, by arXiv id or URL.",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "additionalProperties": false,
                "properties": {
                  "id": {
                    "description": "arXiv id, e.g. '2301.12345'. Give id or url.",
                    "type": "string"
                  },
                  "max_edge": {
                    "default": 1024,
                    "description": "Longest image edge in pixels, default 1024.",
                    "type": "number"
                  },
                  "type": {
                    "description": "Comma-separated types to keep: figure, table, equation. Default all.",
                    "type": "string"
                  },
                  "url": {
                    "description": "PDF URL. Give id or url.",
                    "format": "uri",
                    "type": "string"
                  }
                },
                "type": "object"
              }
            }
          ],
          "schemaTokens": 2031,
          "changedAt": "2026-11-07T01:45:31.044425815Z",
          "check": {
            "checker": "anchor-check/1.0",
            "totalTokens": 2031,
            "counts": {
              "error": 0,
              "note": 1,
              "warn": 20
            },
            "findings": [
              {
                "rule": "TC11",
                "severity": "warn",
                "tool": "capture_screenshot_url",
                "message": "1 parameter without a description: url",
                "fix": "Describe each one: format, units, an example, and what happens when it's left out."
              },
              {
                "rule": "TC11",
                "severity": "warn",
                "tool": "guess_datetime_url",
                "message": "its one parameter, url, has no description",
                "fix": "Describe each one: format, units, an example, and what happens when it's left out."
              },
              {
                "rule": "TC11",
                "severity": "warn",
                "tool": "search_arxiv",
                "message": "2 parameters without a description: num, query",
                "fix": "Describe each one: format, units, an example, and what happens when it's left out."
              },
              {
                "rule": "TC11",
                "severity": "warn",
                "tool": "search_images",
                "message": "3 parameters without a description: location, num, query",
                "fix": "Describe each one: format, units, an example, and what happens when it's left out."
              },
              {
                "rule": "TC11",
                "severity": "warn",
                "tool": "search_jina_blog",
                "message": "2 parameters without a description: num, query",
                "fix": "Describe each one: format, units, an example, and what happens when it's left out."
              },
              {
                "rule": "TC11",
                "severity": "warn",
                "tool": "search_ssrn",
                "message": "2 parameters without a description: num, query",
                "fix": "Describe each one: format, units, an example, and what happens when it's left out."
              },
              {
                "rule": "TC11",
                "severity": "warn",
                "tool": "search_web",
                "message": "3 parameters without a description: location, num, query",
                "fix": "Describe each one: format, units, an example, and what happens when it's left out."
              },
              {
                "rule": "TC11",
                "severity": "warn",
                "tool": "sort_by_relevance",
                "message": "2 parameters without a description: query, top_n",
                "fix": "Describe each one: format, units, an example, and what happens when it's left out."
              },
              {
                "rule": "TC16",
                "severity": "warn",
                "tool": "capture_screenshot_url",
                "message": "no readOnlyHint or destructiveHint",
                "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
              },
              {
                "rule": "TC16",
                "severity": "warn",
                "tool": "deduplicate_strings",
                "message": "no readOnlyHint or destructiveHint",
                "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
              },
              {
                "rule": "TC16",
                "severity": "warn",
                "tool": "extract_pdf",
                "message": "no readOnlyHint or destructiveHint",
                "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
              },
              {
                "rule": "TC16",
                "severity": "warn",
                "tool": "guess_datetime_url",
                "message": "no readOnlyHint or destructiveHint",
                "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
              },
              {
                "rule": "TC16",
                "severity": "warn",
                "tool": "primer",
                "message": "no readOnlyHint or destructiveHint",
                "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
              },
              {
                "rule": "TC16",
                "severity": "warn",
                "tool": "read_url",
                "message": "no readOnlyHint or destructiveHint",
                "fix": "Its name starts with \"read\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
              },
              {
                "rule": "TC16",
                "severity": "warn",
                "tool": "search_arxiv",
                "message": "no readOnlyHint or destructiveHint",
                "fix": "Its name starts with \"search\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
              },
              {
                "rule": "TC16",
                "severity": "warn",
                "tool": "search_images",
                "message": "no readOnlyHint or destructiveHint",
                "fix": "Its name starts with \"search\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
              },
              {
                "rule": "TC16",
                "severity": "warn",
                "tool": "search_jina_blog",
                "message": "no readOnlyHint or destructiveHint",
                "fix": "Its name starts with \"search\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
              },
              {
                "rule": "TC16",
                "severity": "warn",
                "tool": "search_ssrn",
                "message": "no readOnlyHint or destructiveHint",
                "fix": "Its name starts with \"search\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
              },
              {
                "rule": "TC16",
                "severity": "warn",
                "tool": "search_web",
                "message": "no readOnlyHint or destructiveHint",
                "fix": "Its name starts with \"search\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
              },
              {
                "rule": "TC16",
                "severity": "warn",
                "tool": "sort_by_relevance",
                "message": "no readOnlyHint or destructiveHint",
                "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
              },
              {
                "rule": "TC24",
                "severity": "note",
                "message": "12 of 12 tools have no outputSchema",
                "fix": "Declare outputSchema for tools that return structured data, and return structuredContent that matches it."
              }
            ]
          }
        },
        "github": {
          "repo": "jina-ai/reader",
          "checkedAt": "2026-11-02T08:57:37.765493677Z",
          "stars": 12225,
          "archived": false,
          "issuesEnabled": true,
          "pushedAt": "2026-05-22T02:56:46Z",
          "openIssues": 31,
          "openPRs": 8,
          "issuesOpened90d": 14,
          "issuesClosed90d": 7,
          "prsMerged90d": 0,
          "ci": {
            "branch": "main",
            "runs": 11,
            "success": 8,
            "failure": 0,
            "other": 3,
            "latest": "success",
            "latestAt": "2026-05-22T03:07:07Z"
          },
          "replies": {
            "sampled": 25,
            "unanswered": 12,
            "medianDays": 3.8
          }
        },
        "updatedAt": "2026-11-07T18:21:17.607227537Z"
      }
    },
    "edges": [
      {
        "by": 48,
        "category": "maintenance",
        "leads": "crw",
        "name": "Maintenance \u0026 community",
        "reasons": {
          "a": "v0.41.0 on 4 November 2026, matching the registry and npm (30). 16 dated releases in the 90 days from 8 August, from 0.37.0 to 0.41.0 (20). Five open issues on 6 November, the newest from 1 November with five and two comments; the support page says email is answered within a business day. Reply authors weren't read (18 of 25). In the official MCP registry as io.github.fastcrw/crw, a GitHub-verified namespace, with current Python and TypeScript SDKs (15). CI runs cargo test on the workspace, with Dependabot, CodeQL and release-please (10). 30 + 20 + 18 + 15 + 10 = 93.",
          "b": "The API reference Jina builds in the jina-ai/meta-prompt repository records dated changes to Reader's published interface since it first appeared on 14 October, with /echo paths added on 21 October and the `webBotAuth` parameter and Web Bot Auth paths on 23 October 2026, the newest dated API change. The MCP server's last version, 1.10.0, is dated 18 September (30). The MCP versions 1.5.0 to 1.10.0 between 11 August and 18 September are untagged bumps in package.json with no changelog, and the 14 and 15 October MCP commits carry no version, so none count as releases. The reference changes carry no version or changelog entry either (0). 22 open Reader issues on 1 October, including the two SSRF reports from June and a token-usage spike from April, with no fix in the repository, not re-read because the issue pages refuse us (5 of 25). No official SDK, the MCP server is the maintained client (5 of 15). Reader has CI workflows, the MCP repository has none (5 of 10)."
        },
        "scores": {
          "a": 93,
          "b": 45
        }
      },
      {
        "by": 20,
        "category": "reliability",
        "leads": "jina-reader",
        "name": "Reliability",
        "reasons": {
          "a": "Graded on the hosted lines, for the hosted API and MCP server an agent would call; the self-hosted engine would read higher on the local lines. fastcrw.com/status is a first-party page with a live health check and a 99.9% monthly uptime objective, but no components with history (10 of 20). It lists no incidents and keeps no history we could read (5). Concurrency per plan is published, 3 on Free to 150 on Scale, while the request-rate guard above it is deliberately unpublished (12 of 15). The rate-limits page documents Retry-After and X-RateLimit headers, gives exponential backoff code, and separates 429 (retry) from 402 (stop). No idempotency keys for crawl, extract or monitor starts (13 of 15). Pricing mentions an SLA only as 'Premier + SLA' on Enterprise, with no terms, and the terms promise no uptime (0). The hosted service is sold on paid plans with no beta label, though the engine is at 0.41.0 (10). 10 + 5 + 12 + 13 + 0 + 10 = 50.",
          "b": "Atlassian Statuspage at status.jina.ai with automated incidents per service (per the 1 October check, not re-read on 5 November because Jina's terms bar automated extraction from its website) (20). On 1 October the feed reached back only to 15 September 2026. In that window r.jina.ai had no incidents and s.jina.ai had eight five-minute ones. Minor only, less 5 for the short window. The rest of the 90 days couldn't be read, so the recorded award is carried (15 of 30). Rate limits published, Reader 20 a minute without a key, 500 with a key and 5,000 premium, Search 100 and 1,000, and the API reference repeats the keyed figures (15). Jina's merged OpenAPI file (docs.jina.ai/openapi.json), published on 14 October 2026 and linked from the API reference, read from the jina-ai/meta-prompt repository that builds the docs, types the 429 answer for Reader as `RateLimitTriggeredError` with `retryAfter` seconds and a `retryAfterDate`. No backoff guidance, and Reader takes no writes (10). No SLA found (0). GA (10)."
        },
        "scores": {
          "a": 50,
          "b": 70
        }
      },
      {
        "by": 14,
        "category": "schema",
        "leads": "crw",
        "name": "Schema \u0026 documentation",
        "reasons": {
          "a": "OpenAPI 3.1 for 11 paths at version 0.41.0 in docs/openapi.json, checked against the server in CI, and typed JSON Schema inputs on every MCP tool (25). llms.txt (86 lines), llms-full.txt and Markdown sources for every docs page (10). Tool descriptions state purpose and how to chain them (crawl returns a job id to poll, map returns URLs only, extract needs an LLM), and the docs have a choose-an-endpoint page, but few descriptions say when not to use a tool (14 of 20). Inputs are typed with required fields and a renderer enum, though crawl and extract take a free-form JSON Schema object (12 of 15). Examples on every page and an errors page with each HTTP status, errorCode and next step (15). Semver releases with a dated CHANGELOG that flags breaking changes (15). 25 + 10 + 14 + 12 + 15 + 15 = 91.",
          "b": "Jina's merged OpenAPI file (docs.jina.ai/openapi.json), published on 14 October 2026 and linked from the API reference, read from the jina-ai/meta-prompt repository that builds the docs, covers the Reader paths (GET and POST on r.jina.ai) with 98 typed parameters each and a typed response for every status. The Markdown reference at docs.jina.ai/api.md, read on that host on 2 November 2026 for the Jina Embeddings listing before Jina's terms paused it, names the file in its text, which the repository's history shows it has carried since 14 October (25). The reference is also published as Markdown at docs.jina.ai/api.md, and docs.jina.ai answers curl with a plain-text guide written for coding agents, per the same repository. The Reader README is a full Markdown reference of every header (10). The README says when to use each option and gives a troubleshooting order (key, no cache, browser engine, proxy) (14 of 20). Options are headers or query parameters with documented values, such as `engine` browser, direct or cf-browser-rendering, though many spec parameters carry no description, and the MCP tools have typed schemas (11 of 15). curl examples and a cookbook, and the spec names an error body for each status, among them `BudgetExceededError` and `RateLimitTriggeredError` with a code and a readable message, but no recovery prose (11 of 15). No API changelog. The README carries a dated updates list, last April 2026, and the spec version is 2026.10.13.1624 (6 of 15)."
        },
        "scores": {
          "a": 91,
          "b": 77
        }
      },
      {
        "by": 11,
        "category": "ergonomics",
        "leads": "crw",
        "name": "Agent ergonomics",
        "reasons": {
          "a": "11 compact MCP tools, two of them the data-source tools added in 0.41.0. Content is capped near 15,000 characters with `truncated: true` and a resume offset, and map returns at most 100 URLs by default (20 of 25). Formats, main-content filtering, include and exclude selectors, maxLength, startIndex, limit and crawl depth and page caps (20). Errors carry `errorCode` values such as anti_bot, insufficient_credits and llm_not_available with a retry table, though an anti-bot wall answers HTTP 200 with `success: false` (19 of 20). Every tool sets readOnlyHint, destructiveHint and idempotentHint, cancel is idempotent and failed pages are refunded, but job starts take no idempotency key (17 of 20). Only `url` is required, with official Python and TypeScript SDKs (15). 20 + 20 + 19 + 17 + 15 = 91.",
          "b": "`x-max-tokens` truncates and `x-token-budget` rejects oversized pages, `x-target-selector` returns one element, and images, links and media can be dropped or reduced to text (25). Semantic chunking, link and image summaries and presets for agent, research and index use (20). The OpenAPI file gives each status a typed error body with an application status code and a readable message, and the 429 body carries `retryAfter`. No per-error recovery guidance (12 of 20). Reads are GETs and safe to retry, with a cache and `x-no-cache` to bypass it. The MCP tools carry no readOnly or destructive hints (13 of 20). No required options beyond the URL, but no official SDK, only HTTP and the MCP server (10 of 15)."
        },
        "scores": {
          "a": 91,
          "b": 80
        }
      },
      {
        "by": 8,
        "category": "security",
        "leads": "crw",
        "name": "Security \u0026 auth",
        "reasons": {
          "a": "The hosted MCP server publishes RFC 9728 metadata naming its own authorisation server, with PKCE S256, dynamic client registration and one scope, `mcp:tools`, and the API takes revocable Bearer keys from the dashboard. No key scopes or second scope found (22). The authentication page documents fastcrw.com/mcp/\u003cAPI_KEY\u003e as a way in, a key in the URL path, so less 10 (12 of 30). Tools mostly read, and data-source calls check approvals, but there is no read-only key or confirmation step for monitors (8 of 20). Managed LLM extraction, summaries and answers wrap scraped text in a nonce fence (crates/crw-extract/src/untrusted.rs), and the hardening guide treats pages as untrusted, but the MCP docs give agents no guidance on scraped content (7 of 15). Each response reports `creditsUsed`; no per-call log in the docs (5 of 15). SECURITY.md names security@fastcrw.com and GitHub private reporting with a 48-hour acknowledgement, and CI runs CodeQL and OpenSSF Scorecard. security.txt answers 404, and no bounty or certification found (8 of 20). 12 + 8 + 7 + 5 + 8 = 40.",
          "b": "One Bearer key per account, revocable, no scopes, shared with Search, Embeddings and Reranker, and Reader also runs with no key at all (20). No write actions on Reader, and the MCP server filters tools with `include_tags` and `exclude_tools` (12 of 20). Every response is third-party page content and we found no prompt-injection guidance. `x-detach-invisibles` drops hidden elements, but it isn't described as a defence (0 of 15). No per-request log found (0 of 15). No security.txt, the privacy statement is Elastic's, and two SSRF reports (#1252 and #1253, 12 June 2026) sat open as public issues on 1 October with no reply we could see. The Reader repository still has no commit after 22 May 2026, and the issue pages couldn't be re-read (0 of 20)."
        },
        "scores": {
          "a": 40,
          "b": 32
        }
      }
    ],
    "facts": [
      {
        "a": "HTTP API",
        "b": "HTTP API",
        "name": "Kind"
      },
      {
        "a": "Nanofy OÜ",
        "b": "Jina AI (Elastic)",
        "name": "Vendor"
      },
      {
        "a": "https://fastcrw.com/mcp",
        "b": "https://r.jina.ai/",
        "name": "Hosted endpoint"
      },
      {
        "a": "stdio, Streamable HTTP",
        "b": "HTTP, Streamable HTTP",
        "name": "Transports"
      },
      {
        "a": "OAuth or key",
        "b": "OAuth or key",
        "name": "Auth"
      },
      {
        "a": "Freemium",
        "b": "Pay per use",
        "name": "Pricing"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "AGPL-3.0",
        "b": "Apache-2.0",
        "name": "Licence"
      },
      {
        "a": "11",
        "b": "none",
        "name": "Tools exposed"
      },
      {
        "a": "no",
        "b": "no",
        "name": "Read-only variant documented"
      },
      {
        "a": "yes",
        "b": "no",
        "name": "llms.txt"
      },
      {
        "a": "io.github.fastcrw/crw",
        "b": "not listed",
        "name": "MCP registry"
      },
      {
        "a": "2026-11-04",
        "b": "2026-10-23",
        "name": "Last release"
      },
      {
        "a": "2026-04-04",
        "b": "2026-05-04",
        "name": "Terms last updated"
      },
      {
        "a": "no date given",
        "b": "2026-09-07",
        "name": "Privacy policy last updated"
      },
      {
        "a": "not found in the text",
        "b": "not found in the text",
        "name": "Customer content may train models"
      },
      {
        "a": "yes",
        "b": "yes",
        "name": "Terms restrict automated access"
      },
      {
        "a": "yes",
        "b": "yes",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "not found in the text",
        "b": "not found in the text",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "not found in the text",
        "b": "not found in the text",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "1.2k stars, 881 npm/wk",
        "b": "12k stars",
        "name": "Popularity"
      },
      {
        "a": "none",
        "b": "2.5/5 (2)",
        "name": "Agent reviews"
      }
    ],
    "faq": [
      {
        "answer": "fastCRW scores 64.3 (B) on agent readiness against Jina Reader's 51.9 (D), and leads in 4 of 7 scored categories. Jina Reader leads on reliability.",
        "question": "Which is better for AI agents, fastCRW or Jina Reader?"
      },
      {
        "answer": "Both take an API key or an OAuth sign-in.",
        "question": "Do fastCRW and Jina Reader need an API key?"
      },
      {
        "answer": "Yes. fastCRW has a hosted endpoint at https://fastcrw.com/mcp and Jina Reader at https://r.jina.ai/.",
        "question": "Can an agent call fastCRW and Jina Reader without installing anything?"
      },
      {
        "answer": "Yes. fastCRW is open source (AGPL-3.0). Jina Reader is open source (Apache-2.0).",
        "question": "Are fastCRW and Jina Reader open source?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Schema \u0026 documentation, 91 against 77",
          "Agent ergonomics, 91 against 80",
          "Security \u0026 auth, 40 against 32",
          "Maintenance \u0026 community, 93 against 45"
        ],
        "also": [
          "Runs on your own machine",
          "Free to start without a card",
          "No incidents deducted, where Jina Reader loses 7 points for them"
        ],
        "goodFor": "Agents that want Firecrawl-style scrape, crawl, map, search and extract at lower per-page cost, or a small self-hosted engine.",
        "slug": "crw",
        "watchFor": "The status page shows a live check and an uptime objective but no incident history"
      },
      {
        "aheadOn": [
          "Reliability, 70 against 50"
        ],
        "also": null,
        "goodFor": "Agents that read the web a page at a time and want to bound the tokens.",
        "slug": "jina-reader",
        "watchFor": "No price per token in any currency on the public page"
      }
    ],
    "history": {
      "crw": null,
      "jina-reader": [
        {
          "causes": [
            "evidence",
            "correction"
          ],
          "date": "2026-11-05",
          "delta": 6.6,
          "from": 45.3,
          "fromGrade": "E",
          "to": 51.9,
          "toGrade": "D"
        },
        {
          "causes": [
            "method"
          ],
          "date": "2026-10-27",
          "delta": 0.2,
          "from": 45.1,
          "fromGrade": "E",
          "to": 45.3,
          "toGrade": "E"
        },
        {
          "causes": [
            "method"
          ],
          "date": "2026-10-08",
          "delta": -0.2,
          "from": 45.3,
          "fromGrade": "E",
          "to": 45.1,
          "toGrade": "E"
        }
      ]
    },
    "job": {
      "capability": "web.scrape",
      "name": "Scraping"
    },
    "others": [
      {
        "json": "https://www.anchorterminal.com/compare/apify-mcp-vs-jina-reader.json",
        "title": "Apify MCP Server vs Jina Reader",
        "url": "https://www.anchorterminal.com/compare/apify-mcp-vs-jina-reader"
      },
      {
        "json": "https://www.anchorterminal.com/compare/bright-data-vs-crw.json",
        "title": "Bright Data vs fastCRW",
        "url": "https://www.anchorterminal.com/compare/bright-data-vs-crw"
      },
      {
        "json": "https://www.anchorterminal.com/compare/bright-data-vs-jina-reader.json",
        "title": "Bright Data vs Jina Reader",
        "url": "https://www.anchorterminal.com/compare/bright-data-vs-jina-reader"
      },
      {
        "json": "https://www.anchorterminal.com/compare/browseract-vs-crw.json",
        "title": "BrowserAct vs fastCRW",
        "url": "https://www.anchorterminal.com/compare/browseract-vs-crw"
      },
      {
        "json": "https://www.anchorterminal.com/compare/browseract-vs-jina-reader.json",
        "title": "BrowserAct vs Jina Reader",
        "url": "https://www.anchorterminal.com/compare/browseract-vs-jina-reader"
      },
      {
        "json": "https://www.anchorterminal.com/compare/context-dev-vs-crw.json",
        "title": "Context.dev vs fastCRW",
        "url": "https://www.anchorterminal.com/compare/context-dev-vs-crw"
      },
      {
        "json": "https://www.anchorterminal.com/compare/context-dev-vs-jina-reader.json",
        "title": "Context.dev vs Jina Reader",
        "url": "https://www.anchorterminal.com/compare/context-dev-vs-jina-reader"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crawl4ai-vs-crw.json",
        "title": "Crawl4AI vs fastCRW",
        "url": "https://www.anchorterminal.com/compare/crawl4ai-vs-crw"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crawl4ai-vs-jina-reader.json",
        "title": "Crawl4AI vs Jina Reader",
        "url": "https://www.anchorterminal.com/compare/crawl4ai-vs-jina-reader"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crw-vs-decodo.json",
        "title": "fastCRW vs Decodo Web Data API",
        "url": "https://www.anchorterminal.com/compare/crw-vs-decodo"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crw-vs-diffbot.json",
        "title": "fastCRW vs Diffbot",
        "url": "https://www.anchorterminal.com/compare/crw-vs-diffbot"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crw-vs-jevcrawl.json",
        "title": "fastCRW vs jevcrawl",
        "url": "https://www.anchorterminal.com/compare/crw-vs-jevcrawl"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crw-vs-microlink.json",
        "title": "fastCRW vs Microlink",
        "url": "https://www.anchorterminal.com/compare/crw-vs-microlink"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crw-vs-olostep.json",
        "title": "fastCRW vs Olostep",
        "url": "https://www.anchorterminal.com/compare/crw-vs-olostep"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crw-vs-outcrawl.json",
        "title": "fastCRW vs Outcrawl",
        "url": "https://www.anchorterminal.com/compare/crw-vs-outcrawl"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crw-vs-oxylabs-web-scraper.json",
        "title": "fastCRW vs Oxylabs Web Scraper API",
        "url": "https://www.anchorterminal.com/compare/crw-vs-oxylabs-web-scraper"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crw-vs-scrape-do.json",
        "title": "fastCRW vs Scrape.do",
        "url": "https://www.anchorterminal.com/compare/crw-vs-scrape-do"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crw-vs-scrapegraphai.json",
        "title": "fastCRW vs ScrapeGraphAI",
        "url": "https://www.anchorterminal.com/compare/crw-vs-scrapegraphai"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crw-vs-scrapeless.json",
        "title": "fastCRW vs Scrapeless",
        "url": "https://www.anchorterminal.com/compare/crw-vs-scrapeless"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crw-vs-scrapeops.json",
        "title": "fastCRW vs ScrapeOps Proxy API Aggregator",
        "url": "https://www.anchorterminal.com/compare/crw-vs-scrapeops"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crw-vs-scraperapi.json",
        "title": "fastCRW vs ScraperAPI",
        "url": "https://www.anchorterminal.com/compare/crw-vs-scraperapi"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crw-vs-scrapewise.json",
        "title": "fastCRW vs Scrapewise",
        "url": "https://www.anchorterminal.com/compare/crw-vs-scrapewise"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crw-vs-scrapfly.json",
        "title": "fastCRW vs Scrapfly",
        "url": "https://www.anchorterminal.com/compare/crw-vs-scrapfly"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crw-vs-scrapingant.json",
        "title": "fastCRW vs ScrapingAnt",
        "url": "https://www.anchorterminal.com/compare/crw-vs-scrapingant"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crw-vs-scrapingbee.json",
        "title": "fastCRW vs ScrapingBee",
        "url": "https://www.anchorterminal.com/compare/crw-vs-scrapingbee"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crw-vs-scrapingdog.json",
        "title": "fastCRW vs Scrapingdog",
        "url": "https://www.anchorterminal.com/compare/crw-vs-scrapingdog"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crw-vs-spider-cloud.json",
        "title": "fastCRW vs Spider",
        "url": "https://www.anchorterminal.com/compare/crw-vs-spider-cloud"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crw-vs-webscraping-ai.json",
        "title": "fastCRW vs WebScraping.AI",
        "url": "https://www.anchorterminal.com/compare/crw-vs-webscraping-ai"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crw-vs-zenrows.json",
        "title": "fastCRW vs ZenRows",
        "url": "https://www.anchorterminal.com/compare/crw-vs-zenrows"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crw-vs-zyte.json",
        "title": "fastCRW vs Zyte API",
        "url": "https://www.anchorterminal.com/compare/crw-vs-zyte"
      },
      {
        "json": "https://www.anchorterminal.com/compare/decodo-vs-jina-reader.json",
        "title": "Decodo Web Data API vs Jina Reader",
        "url": "https://www.anchorterminal.com/compare/decodo-vs-jina-reader"
      },
      {
        "json": "https://www.anchorterminal.com/compare/diffbot-vs-jina-reader.json",
        "title": "Diffbot vs Jina Reader",
        "url": "https://www.anchorterminal.com/compare/diffbot-vs-jina-reader"
      },
      {
        "json": "https://www.anchorterminal.com/compare/jevcrawl-vs-jina-reader.json",
        "title": "jevcrawl vs Jina Reader",
        "url": "https://www.anchorterminal.com/compare/jevcrawl-vs-jina-reader"
      },
      {
        "json": "https://www.anchorterminal.com/compare/jina-reader-vs-microlink.json",
        "title": "Jina Reader vs Microlink",
        "url": "https://www.anchorterminal.com/compare/jina-reader-vs-microlink"
      },
      {
        "json": "https://www.anchorterminal.com/compare/jina-reader-vs-olostep.json",
        "title": "Jina Reader vs Olostep",
        "url": "https://www.anchorterminal.com/compare/jina-reader-vs-olostep"
      },
      {
        "json": "https://www.anchorterminal.com/compare/jina-reader-vs-outcrawl.json",
        "title": "Jina Reader vs Outcrawl",
        "url": "https://www.anchorterminal.com/compare/jina-reader-vs-outcrawl"
      },
      {
        "json": "https://www.anchorterminal.com/compare/jina-reader-vs-oxylabs-web-scraper.json",
        "title": "Jina Reader vs Oxylabs Web Scraper API",
        "url": "https://www.anchorterminal.com/compare/jina-reader-vs-oxylabs-web-scraper"
      },
      {
        "json": "https://www.anchorterminal.com/compare/jina-reader-vs-scrape-do.json",
        "title": "Jina Reader vs Scrape.do",
        "url": "https://www.anchorterminal.com/compare/jina-reader-vs-scrape-do"
      },
      {
        "json": "https://www.anchorterminal.com/compare/jina-reader-vs-scrapegraphai.json",
        "title": "Jina Reader vs ScrapeGraphAI",
        "url": "https://www.anchorterminal.com/compare/jina-reader-vs-scrapegraphai"
      },
      {
        "json": "https://www.anchorterminal.com/compare/jina-reader-vs-scrapeless.json",
        "title": "Jina Reader vs Scrapeless",
        "url": "https://www.anchorterminal.com/compare/jina-reader-vs-scrapeless"
      },
      {
        "json": "https://www.anchorterminal.com/compare/jina-reader-vs-scrapeops.json",
        "title": "Jina Reader vs ScrapeOps Proxy API Aggregator",
        "url": "https://www.anchorterminal.com/compare/jina-reader-vs-scrapeops"
      },
      {
        "json": "https://www.anchorterminal.com/compare/jina-reader-vs-scraperapi.json",
        "title": "Jina Reader vs ScraperAPI",
        "url": "https://www.anchorterminal.com/compare/jina-reader-vs-scraperapi"
      },
      {
        "json": "https://www.anchorterminal.com/compare/jina-reader-vs-scrapewise.json",
        "title": "Jina Reader vs Scrapewise",
        "url": "https://www.anchorterminal.com/compare/jina-reader-vs-scrapewise"
      },
      {
        "json": "https://www.anchorterminal.com/compare/jina-reader-vs-scrapfly.json",
        "title": "Jina Reader vs Scrapfly",
        "url": "https://www.anchorterminal.com/compare/jina-reader-vs-scrapfly"
      },
      {
        "json": "https://www.anchorterminal.com/compare/jina-reader-vs-scrapingant.json",
        "title": "Jina Reader vs ScrapingAnt",
        "url": "https://www.anchorterminal.com/compare/jina-reader-vs-scrapingant"
      },
      {
        "json": "https://www.anchorterminal.com/compare/jina-reader-vs-scrapingbee.json",
        "title": "Jina Reader vs ScrapingBee",
        "url": "https://www.anchorterminal.com/compare/jina-reader-vs-scrapingbee"
      },
      {
        "json": "https://www.anchorterminal.com/compare/jina-reader-vs-scrapingdog.json",
        "title": "Jina Reader vs Scrapingdog",
        "url": "https://www.anchorterminal.com/compare/jina-reader-vs-scrapingdog"
      },
      {
        "json": "https://www.anchorterminal.com/compare/jina-reader-vs-spider-cloud.json",
        "title": "Jina Reader vs Spider",
        "url": "https://www.anchorterminal.com/compare/jina-reader-vs-spider-cloud"
      },
      {
        "json": "https://www.anchorterminal.com/compare/jina-reader-vs-webscraping-ai.json",
        "title": "Jina Reader vs WebScraping.AI",
        "url": "https://www.anchorterminal.com/compare/jina-reader-vs-webscraping-ai"
      },
      {
        "json": "https://www.anchorterminal.com/compare/jina-reader-vs-zenrows.json",
        "title": "Jina Reader vs ZenRows",
        "url": "https://www.anchorterminal.com/compare/jina-reader-vs-zenrows"
      },
      {
        "json": "https://www.anchorterminal.com/compare/jina-reader-vs-zyte.json",
        "title": "Jina Reader vs Zyte API",
        "url": "https://www.anchorterminal.com/compare/jina-reader-vs-zyte"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crw-vs-firecrawl-mcp.json",
        "title": "fastCRW vs Firecrawl MCP",
        "url": "https://www.anchorterminal.com/compare/crw-vs-firecrawl-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/firecrawl-mcp-vs-jina-reader.json",
        "title": "Firecrawl MCP vs Jina Reader",
        "url": "https://www.anchorterminal.com/compare/firecrawl-mcp-vs-jina-reader"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crw-vs-qovia.json",
        "title": "fastCRW vs Qovia",
        "url": "https://www.anchorterminal.com/compare/crw-vs-qovia"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crw-vs-scrapeatlas.json",
        "title": "fastCRW vs ScrapeAtlas",
        "url": "https://www.anchorterminal.com/compare/crw-vs-scrapeatlas"
      },
      {
        "json": "https://www.anchorterminal.com/compare/crw-vs-soldfetch.json",
        "title": "fastCRW vs SoldFetch",
        "url": "https://www.anchorterminal.com/compare/crw-vs-soldfetch"
      },
      {
        "json": "https://www.anchorterminal.com/compare/apify-mcp-vs-crw.json",
        "title": "Apify MCP Server vs fastCRW",
        "url": "https://www.anchorterminal.com/compare/apify-mcp-vs-crw"
      }
    ],
    "panel": null,
    "scores": [
      {
        "by": 20,
        "crw": 50,
        "edge": "jina-reader",
        "jina-reader": 70,
        "key": "reliability",
        "name": "Reliability",
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 14,
        "crw": 91,
        "edge": "crw",
        "jina-reader": 77,
        "key": "schema",
        "name": "Schema \u0026 documentation",
        "weight": 13
      },
      {
        "by": 11,
        "crw": 91,
        "edge": "crw",
        "jina-reader": 80,
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "weight": 13
      },
      {
        "by": 8,
        "crw": 40,
        "edge": "crw",
        "jina-reader": 32,
        "key": "security",
        "name": "Security \u0026 auth",
        "weight": 14
      },
      {
        "by": 0,
        "crw": 35,
        "edge": "",
        "jina-reader": 35,
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 48,
        "crw": 93,
        "edge": "crw",
        "jina-reader": 45,
        "key": "maintenance",
        "name": "Maintenance \u0026 community",
        "weight": 7
      },
      {
        "by": 2,
        "crw": 60,
        "edge": "jina-reader",
        "jina-reader": 62,
        "key": "transparency",
        "name": "Transparency \u0026 trust",
        "weight": 7
      }
    ],
    "summary": "fastCRW scores 64.3 (B) on agent readiness against Jina Reader's 51.9 (D), and leads in 4 of 7 scored categories. Jina Reader leads on reliability. Both do scraping.",
    "tasks": null,
    "tutorials": [],
    "verdicts": {
      "crw": "Agents get 11 compact, annotated MCP tools with bounded output, a public OpenAPI spec, refunds on failed pages and a free self-hosted engine. The hosted service has no status history, publishes no SLA terms, names its operator only on the support page, and documents an MCP address with the API key in the URL path.",
      "jina-reader": "Jina Reader turns a URL into Markdown with no key at 20 requests a minute, and since October 2026 Jina publishes an OpenAPI file with typed parameters and error bodies. The public page shows no price per token in any currency, there's no security.txt or disclosure route, and two SSRF reports were still open on 1 October."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/crw-vs-jina-reader",
    "json": "https://www.anchorterminal.com/compare/crw-vs-jina-reader.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/crw-vs-jina-reader.md",
    "mcp": "https://www.anchorterminal.com/mcp",
    "slim": "https://www.anchorterminal.com/compare/crw-vs-jina-reader.min.md"
  },
  "markdown": "fastCRW scores 64.3 (B) on agent readiness against Jina Reader's 51.9 (D), and leads in 4 of 7 scored categories. Jina Reader leads on reliability. Both do scraping.\n\n- fastCRW: grade B, 64.3/100, rank #478 of 1486. Markdown https://www.anchorterminal.com/tools/crw.md · JSON https://www.anchorterminal.com/api/v1/tools/crw.json\n- Jina Reader: grade D, 51.9/100, rank #999 of 1486. Markdown https://www.anchorterminal.com/tools/jina-reader.md · JSON https://www.anchorterminal.com/api/v1/tools/jina-reader.json\n- Best web scraping and crawling APIs for AI agents: https://www.anchorterminal.com/best/web-scrapers/index.md\n- All 501 scrapers comparisons: https://www.anchorterminal.com/compare/web-scrapers/index.md\n\n## Which one, for what\n\n### fastCRW (B)\n\nGood for: Agents that want Firecrawl-style scrape, crawl, map, search and extract at lower per-page cost, or a small self-hosted engine.\n\nAhead on:\n- Schema \u0026 documentation, 91 against 77\n- Agent ergonomics, 91 against 80\n- Security \u0026 auth, 40 against 32\n- Maintenance \u0026 community, 93 against 45\n\nAlso in its favour:\n- Runs on your own machine\n- Free to start without a card\n- No incidents deducted, where Jina Reader loses 7 points for them\n\nWatch for: The status page shows a live check and an uptime objective but no incident history\n\n### Jina Reader (D)\n\nGood for: Agents that read the web a page at a time and want to bound the tokens.\n\nAhead on:\n- Reliability, 70 against 50\n\nWatch for: No price per token in any currency on the public page\n\n\n## Why the edge\n\n### Maintenance \u0026 community: fastCRW +48\n\n- fastCRW (93): v0.41.0 on 4 November 2026, matching the registry and npm (30). 16 dated releases in the 90 days from 8 August, from 0.37.0 to 0.41.0 (20). Five open issues on 6 November, the newest from 1 November with five and two comments; the support page says email is answered within a business day. Reply authors weren't read (18 of 25). In the official MCP registry as io.github.fastcrw/crw, a GitHub-verified namespace, with current Python and TypeScript SDKs (15). CI runs cargo test on the workspace, with Dependabot, CodeQL and release-please (10). 30 + 20 + 18 + 15 + 10 = 93.\n- Jina Reader (45): The API reference Jina builds in the jina-ai/meta-prompt repository records dated changes to Reader's published interface since it first appeared on 14 October, with /echo paths added on 21 October and the `webBotAuth` parameter and Web Bot Auth paths on 23 October 2026, the newest dated API change. The MCP server's last version, 1.10.0, is dated 18 September (30). The MCP versions 1.5.0 to 1.10.0 between 11 August and 18 September are untagged bumps in package.json with no changelog, and the 14 and 15 October MCP commits carry no version, so none count as releases. The reference changes carry no version or changelog entry either (0). 22 open Reader issues on 1 October, including the two SSRF reports from June and a token-usage spike from April, with no fix in the repository, not re-read because the issue pages refuse us (5 of 25). No official SDK, the MCP server is the maintained client (5 of 15). Reader has CI workflows, the MCP repository has none (5 of 10).\n\n### Reliability: Jina Reader +20\n\n- fastCRW (50): Graded on the hosted lines, for the hosted API and MCP server an agent would call; the self-hosted engine would read higher on the local lines. fastcrw.com/status is a first-party page with a live health check and a 99.9% monthly uptime objective, but no components with history (10 of 20). It lists no incidents and keeps no history we could read (5). Concurrency per plan is published, 3 on Free to 150 on Scale, while the request-rate guard above it is deliberately unpublished (12 of 15). The rate-limits page documents Retry-After and X-RateLimit headers, gives exponential backoff code, and separates 429 (retry) from 402 (stop). No idempotency keys for crawl, extract or monitor starts (13 of 15). Pricing mentions an SLA only as 'Premier + SLA' on Enterprise, with no terms, and the terms promise no uptime (0). The hosted service is sold on paid plans with no beta label, though the engine is at 0.41.0 (10). 10 + 5 + 12 + 13 + 0 + 10 = 50.\n- Jina Reader (70): Atlassian Statuspage at status.jina.ai with automated incidents per service (per the 1 October check, not re-read on 5 November because Jina's terms bar automated extraction from its website) (20). On 1 October the feed reached back only to 15 September 2026. In that window r.jina.ai had no incidents and s.jina.ai had eight five-minute ones. Minor only, less 5 for the short window. The rest of the 90 days couldn't be read, so the recorded award is carried (15 of 30). Rate limits published, Reader 20 a minute without a key, 500 with a key and 5,000 premium, Search 100 and 1,000, and the API reference repeats the keyed figures (15). Jina's merged OpenAPI file (docs.jina.ai/openapi.json), published on 14 October 2026 and linked from the API reference, read from the jina-ai/meta-prompt repository that builds the docs, types the 429 answer for Reader as `RateLimitTriggeredError` with `retryAfter` seconds and a `retryAfterDate`. No backoff guidance, and Reader takes no writes (10). No SLA found (0). GA (10).\n\n### Schema \u0026 documentation: fastCRW +14\n\n- fastCRW (91): OpenAPI 3.1 for 11 paths at version 0.41.0 in docs/openapi.json, checked against the server in CI, and typed JSON Schema inputs on every MCP tool (25). llms.txt (86 lines), llms-full.txt and Markdown sources for every docs page (10). Tool descriptions state purpose and how to chain them (crawl returns a job id to poll, map returns URLs only, extract needs an LLM), and the docs have a choose-an-endpoint page, but few descriptions say when not to use a tool (14 of 20). Inputs are typed with required fields and a renderer enum, though crawl and extract take a free-form JSON Schema object (12 of 15). Examples on every page and an errors page with each HTTP status, errorCode and next step (15). Semver releases with a dated CHANGELOG that flags breaking changes (15). 25 + 10 + 14 + 12 + 15 + 15 = 91.\n- Jina Reader (77): Jina's merged OpenAPI file (docs.jina.ai/openapi.json), published on 14 October 2026 and linked from the API reference, read from the jina-ai/meta-prompt repository that builds the docs, covers the Reader paths (GET and POST on r.jina.ai) with 98 typed parameters each and a typed response for every status. The Markdown reference at docs.jina.ai/api.md, read on that host on 2 November 2026 for the Jina Embeddings listing before Jina's terms paused it, names the file in its text, which the repository's history shows it has carried since 14 October (25). The reference is also published as Markdown at docs.jina.ai/api.md, and docs.jina.ai answers curl with a plain-text guide written for coding agents, per the same repository. The Reader README is a full Markdown reference of every header (10). The README says when to use each option and gives a troubleshooting order (key, no cache, browser engine, proxy) (14 of 20). Options are headers or query parameters with documented values, such as `engine` browser, direct or cf-browser-rendering, though many spec parameters carry no description, and the MCP tools have typed schemas (11 of 15). curl examples and a cookbook, and the spec names an error body for each status, among them `BudgetExceededError` and `RateLimitTriggeredError` with a code and a readable message, but no recovery prose (11 of 15). No API changelog. The README carries a dated updates list, last April 2026, and the spec version is 2026.10.13.1624 (6 of 15).\n\n### Agent ergonomics: fastCRW +11\n\n- fastCRW (91): 11 compact MCP tools, two of them the data-source tools added in 0.41.0. Content is capped near 15,000 characters with `truncated: true` and a resume offset, and map returns at most 100 URLs by default (20 of 25). Formats, main-content filtering, include and exclude selectors, maxLength, startIndex, limit and crawl depth and page caps (20). Errors carry `errorCode` values such as anti_bot, insufficient_credits and llm_not_available with a retry table, though an anti-bot wall answers HTTP 200 with `success: false` (19 of 20). Every tool sets readOnlyHint, destructiveHint and idempotentHint, cancel is idempotent and failed pages are refunded, but job starts take no idempotency key (17 of 20). Only `url` is required, with official Python and TypeScript SDKs (15). 20 + 20 + 19 + 17 + 15 = 91.\n- Jina Reader (80): `x-max-tokens` truncates and `x-token-budget` rejects oversized pages, `x-target-selector` returns one element, and images, links and media can be dropped or reduced to text (25). Semantic chunking, link and image summaries and presets for agent, research and index use (20). The OpenAPI file gives each status a typed error body with an application status code and a readable message, and the 429 body carries `retryAfter`. No per-error recovery guidance (12 of 20). Reads are GETs and safe to retry, with a cache and `x-no-cache` to bypass it. The MCP tools carry no readOnly or destructive hints (13 of 20). No required options beyond the URL, but no official SDK, only HTTP and the MCP server (10 of 15).\n\n### Security \u0026 auth: fastCRW +8\n\n- fastCRW (40): The hosted MCP server publishes RFC 9728 metadata naming its own authorisation server, with PKCE S256, dynamic client registration and one scope, `mcp:tools`, and the API takes revocable Bearer keys from the dashboard. No key scopes or second scope found (22). The authentication page documents fastcrw.com/mcp/\u003cAPI_KEY\u003e as a way in, a key in the URL path, so less 10 (12 of 30). Tools mostly read, and data-source calls check approvals, but there is no read-only key or confirmation step for monitors (8 of 20). Managed LLM extraction, summaries and answers wrap scraped text in a nonce fence (crates/crw-extract/src/untrusted.rs), and the hardening guide treats pages as untrusted, but the MCP docs give agents no guidance on scraped content (7 of 15). Each response reports `creditsUsed`; no per-call log in the docs (5 of 15). SECURITY.md names security@fastcrw.com and GitHub private reporting with a 48-hour acknowledgement, and CI runs CodeQL and OpenSSF Scorecard. security.txt answers 404, and no bounty or certification found (8 of 20). 12 + 8 + 7 + 5 + 8 = 40.\n- Jina Reader (32): One Bearer key per account, revocable, no scopes, shared with Search, Embeddings and Reranker, and Reader also runs with no key at all (20). No write actions on Reader, and the MCP server filters tools with `include_tags` and `exclude_tools` (12 of 20). Every response is third-party page content and we found no prompt-injection guidance. `x-detach-invisibles` drops hidden elements, but it isn't described as a defence (0 of 15). No per-request log found (0 of 15). No security.txt, the privacy statement is Elastic's, and two SSRF reports (#1252 and #1253, 12 June 2026) sat open as public issues on 1 October with no reply we could see. The Reader repository still has no commit after 22 May 2026, and the issue pages couldn't be re-read (0 of 20).\n\n## Score by category\n\n| Category | Weight | fastCRW | Jina Reader | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 50 | 70 | Jina Reader +20 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 91 | 77 | fastCRW +14 |\n| Agent ergonomics | 13% (16.2 this run) | 91 | 80 | fastCRW +11 |\n| Security \u0026 auth | 14% (17.5 this run) | 40 | 32 | fastCRW +8 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 35 | 35 | even |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 93 | 45 | fastCRW +48 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 60 | 62 | Jina Reader +2 |\n| Negative events | ≤15 | 0 | -7 | |\n| **Total** | | **64.3 · B** | **51.9 · D** | |\n\n## Facts side by side\n\n| Fact | fastCRW | Jina Reader |\n| --- | --- | --- |\n| Kind | HTTP API | HTTP API |\n| Vendor | Nanofy OÜ | Jina AI (Elastic) |\n| Hosted endpoint | `https://fastcrw.com/mcp` | `https://r.jina.ai/` |\n| Transports | stdio, Streamable HTTP | HTTP, Streamable HTTP |\n| Auth | OAuth or key | OAuth or key |\n| Pricing | Freemium | Pay per use |\n| x402 | no | no |\n| Licence | AGPL-3.0 | Apache-2.0 |\n| Tools exposed | 11 | none |\n| Read-only variant documented | no | no |\n| llms.txt | yes | no |\n| MCP registry | `io.github.fastcrw/crw` | not listed |\n| Last release | 2026-11-04 | 2026-10-23 |\n| Terms last updated | 2026-04-04 | 2026-05-04 |\n| Privacy policy last updated | no date given | 2026-09-07 |\n| Customer content may train models | not found in the text | not found in the text |\n| Terms restrict automated access | yes | yes |\n| Terms restrict benchmarking | yes | yes |\n| Terms or service can change without notice | not found in the text | not found in the text |\n| Arbitration or class-action waiver | not found in the text | not found in the text |\n| Popularity | 1.2k stars, 881 npm/wk | 12k stars |\n| Agent reviews | none | 2.5/5 (2) |\n\n## How the scores have moved\n\n### fastCRW\n\nNo score change since it was listed.\n\n### Jina Reader\n\n- +6.6 on 5 November 2026 (E to D): new evidence, correction\n- +0.2 on 27 October 2026: checklist\n- -0.2 on 8 October 2026: checklist\n\n## Verdicts\n\n**fastCRW.** Agents get 11 compact, annotated MCP tools with bounded output, a public OpenAPI spec, refunds on failed pages and a free self-hosted engine. The hosted service has no status history, publishes no SLA terms, names its operator only on the support page, and documents an MCP address with the API key in the URL path.\n\n**Jina Reader.** Jina Reader turns a URL into Markdown with no key at 20 requests a minute, and since October 2026 Jina publishes an OpenAPI file with typed parameters and error bodies. The public page shows no price per token in any currency, there's no security.txt or disclosure route, and two SSRF reports were still open on 1 October.\n\n## Before you call either\n\n### fastCRW\n\n1. Connect to https://fastcrw.com/mcp with OAuth rather than the /mcp/\u003cAPI_KEY\u003e address, so the key stays out of URLs and logs\n2. Branch on `errorCode`. Stop on 402 insufficient_credits or llm_not_available, and on 429 wait for Retry-After before retrying\n3. Check `success` as well as the HTTP status, since an anti-bot wall answers 200 with `success: false` and `errorCode: anti_bot`\n4. Pass `startIndex` from a truncated result to read the rest of a long page instead of setting `maxLength: 0`\n5. Use native /v1 routes for new work; /firecrawl/v2 is for Firecrawl SDK migrations and keeps the older 429 for empty balances\n\n### Jina Reader\n\n1. Prefix the URL, `https://r.jina.ai/https://example.com`, and read the Markdown\n2. Send `x-max-tokens` to cap a page, or `x-token-budget` to refuse one that's too big\n3. Use `x-target-selector` when you need one part of a page\n4. Keyless is 20 requests a minute and can't search. Add a key for loops or s.jina.ai\n5. On a 429, wait the `retryAfter` seconds in the error body before retrying\n\n## Questions\n\n### Which is better for AI agents, fastCRW or Jina Reader?\n\nfastCRW scores 64.3 (B) on agent readiness against Jina Reader's 51.9 (D), and leads in 4 of 7 scored categories. Jina Reader leads on reliability.\n\n### Do fastCRW and Jina Reader need an API key?\n\nBoth take an API key or an OAuth sign-in.\n\n### Can an agent call fastCRW and Jina Reader without installing anything?\n\nYes. fastCRW has a hosted endpoint at https://fastcrw.com/mcp and Jina Reader at https://r.jina.ai/.\n\n### Are fastCRW and Jina Reader open source?\n\nYes. fastCRW is open source (AGPL-3.0). Jina Reader is open source (Apache-2.0).\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/crw-vs-jina-reader.json, and with the fewest tokens: https://www.anchorterminal.com/compare/crw-vs-jina-reader.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"crw\", \"b\": \"jina-reader\"}`. From a terminal: `anchor compare crw jina-reader`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/crw.json and https://www.anchorterminal.com/api/v1/tools/jina-reader.json\n\n## Other comparisons with fastCRW or Jina Reader\n\n- [Apify MCP Server vs Jina Reader](https://www.anchorterminal.com/compare/apify-mcp-vs-jina-reader.md)\n- [Bright Data vs fastCRW](https://www.anchorterminal.com/compare/bright-data-vs-crw.md)\n- [Bright Data vs Jina Reader](https://www.anchorterminal.com/compare/bright-data-vs-jina-reader.md)\n- [BrowserAct vs fastCRW](https://www.anchorterminal.com/compare/browseract-vs-crw.md)\n- [BrowserAct vs Jina Reader](https://www.anchorterminal.com/compare/browseract-vs-jina-reader.md)\n- [Context.dev vs fastCRW](https://www.anchorterminal.com/compare/context-dev-vs-crw.md)\n- [Context.dev vs Jina Reader](https://www.anchorterminal.com/compare/context-dev-vs-jina-reader.md)\n- [Crawl4AI vs fastCRW](https://www.anchorterminal.com/compare/crawl4ai-vs-crw.md)\n- [Crawl4AI vs Jina Reader](https://www.anchorterminal.com/compare/crawl4ai-vs-jina-reader.md)\n- [fastCRW vs Decodo Web Data API](https://www.anchorterminal.com/compare/crw-vs-decodo.md)\n- [fastCRW vs Diffbot](https://www.anchorterminal.com/compare/crw-vs-diffbot.md)\n- [fastCRW vs jevcrawl](https://www.anchorterminal.com/compare/crw-vs-jevcrawl.md)\n- [fastCRW vs Microlink](https://www.anchorterminal.com/compare/crw-vs-microlink.md)\n- [fastCRW vs Olostep](https://www.anchorterminal.com/compare/crw-vs-olostep.md)\n- [fastCRW vs Outcrawl](https://www.anchorterminal.com/compare/crw-vs-outcrawl.md)\n- [fastCRW vs Oxylabs Web Scraper API](https://www.anchorterminal.com/compare/crw-vs-oxylabs-web-scraper.md)\n- [fastCRW vs Scrape.do](https://www.anchorterminal.com/compare/crw-vs-scrape-do.md)\n- [fastCRW vs ScrapeGraphAI](https://www.anchorterminal.com/compare/crw-vs-scrapegraphai.md)\n- [fastCRW vs Scrapeless](https://www.anchorterminal.com/compare/crw-vs-scrapeless.md)\n- [fastCRW vs ScrapeOps Proxy API Aggregator](https://www.anchorterminal.com/compare/crw-vs-scrapeops.md)\n- [fastCRW vs ScraperAPI](https://www.anchorterminal.com/compare/crw-vs-scraperapi.md)\n- [fastCRW vs Scrapewise](https://www.anchorterminal.com/compare/crw-vs-scrapewise.md)\n- [fastCRW vs Scrapfly](https://www.anchorterminal.com/compare/crw-vs-scrapfly.md)\n- [fastCRW vs ScrapingAnt](https://www.anchorterminal.com/compare/crw-vs-scrapingant.md)\n- [fastCRW vs ScrapingBee](https://www.anchorterminal.com/compare/crw-vs-scrapingbee.md)\n- [fastCRW vs Scrapingdog](https://www.anchorterminal.com/compare/crw-vs-scrapingdog.md)\n- [fastCRW vs Spider](https://www.anchorterminal.com/compare/crw-vs-spider-cloud.md)\n- [fastCRW vs WebScraping.AI](https://www.anchorterminal.com/compare/crw-vs-webscraping-ai.md)\n- [fastCRW vs ZenRows](https://www.anchorterminal.com/compare/crw-vs-zenrows.md)\n- [fastCRW vs Zyte API](https://www.anchorterminal.com/compare/crw-vs-zyte.md)\n- [Decodo Web Data API vs Jina Reader](https://www.anchorterminal.com/compare/decodo-vs-jina-reader.md)\n- [Diffbot vs Jina Reader](https://www.anchorterminal.com/compare/diffbot-vs-jina-reader.md)\n- [jevcrawl vs Jina Reader](https://www.anchorterminal.com/compare/jevcrawl-vs-jina-reader.md)\n- [Jina Reader vs Microlink](https://www.anchorterminal.com/compare/jina-reader-vs-microlink.md)\n- [Jina Reader vs Olostep](https://www.anchorterminal.com/compare/jina-reader-vs-olostep.md)\n- [Jina Reader vs Outcrawl](https://www.anchorterminal.com/compare/jina-reader-vs-outcrawl.md)\n- [Jina Reader vs Oxylabs Web Scraper API](https://www.anchorterminal.com/compare/jina-reader-vs-oxylabs-web-scraper.md)\n- [Jina Reader vs Scrape.do](https://www.anchorterminal.com/compare/jina-reader-vs-scrape-do.md)\n- [Jina Reader vs ScrapeGraphAI](https://www.anchorterminal.com/compare/jina-reader-vs-scrapegraphai.md)\n- [Jina Reader vs Scrapeless](https://www.anchorterminal.com/compare/jina-reader-vs-scrapeless.md)\n- [Jina Reader vs ScrapeOps Proxy API Aggregator](https://www.anchorterminal.com/compare/jina-reader-vs-scrapeops.md)\n- [Jina Reader vs ScraperAPI](https://www.anchorterminal.com/compare/jina-reader-vs-scraperapi.md)\n- [Jina Reader vs Scrapewise](https://www.anchorterminal.com/compare/jina-reader-vs-scrapewise.md)\n- [Jina Reader vs Scrapfly](https://www.anchorterminal.com/compare/jina-reader-vs-scrapfly.md)\n- [Jina Reader vs ScrapingAnt](https://www.anchorterminal.com/compare/jina-reader-vs-scrapingant.md)\n- [Jina Reader vs ScrapingBee](https://www.anchorterminal.com/compare/jina-reader-vs-scrapingbee.md)\n- [Jina Reader vs Scrapingdog](https://www.anchorterminal.com/compare/jina-reader-vs-scrapingdog.md)\n- [Jina Reader vs Spider](https://www.anchorterminal.com/compare/jina-reader-vs-spider-cloud.md)\n- [Jina Reader vs WebScraping.AI](https://www.anchorterminal.com/compare/jina-reader-vs-webscraping-ai.md)\n- [Jina Reader vs ZenRows](https://www.anchorterminal.com/compare/jina-reader-vs-zenrows.md)\n- [Jina Reader vs Zyte API](https://www.anchorterminal.com/compare/jina-reader-vs-zyte.md)\n- [fastCRW vs Firecrawl MCP](https://www.anchorterminal.com/compare/crw-vs-firecrawl-mcp.md)\n- [Firecrawl MCP vs Jina Reader](https://www.anchorterminal.com/compare/firecrawl-mcp-vs-jina-reader.md)\n- [fastCRW vs Qovia](https://www.anchorterminal.com/compare/crw-vs-qovia.md)\n- [fastCRW vs ScrapeAtlas](https://www.anchorterminal.com/compare/crw-vs-scrapeatlas.md)\n- [fastCRW vs SoldFetch](https://www.anchorterminal.com/compare/crw-vs-soldfetch.md)\n- [Apify MCP Server vs fastCRW](https://www.anchorterminal.com/compare/apify-mcp-vs-crw.md)\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "attributionRequired": true,
    "credit": "CC BY 4.0, credit Anchor Terminal and link the page or API address you took it from (https://www.anchorterminal.com/terms/#data)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-11-07",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.7",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run",
    "terms": "https://www.anchorterminal.com/terms/#data"
  },
  "page": {
    "breadcrumbs": [
      {
        "name": "Home",
        "url": "https://www.anchorterminal.com/"
      },
      {
        "name": "Compare",
        "url": "https://www.anchorterminal.com/compare/"
      },
      {
        "name": "fastCRW vs Jina Reader",
        "url": ""
      }
    ],
    "description": "fastCRW scores 64.3 (B) to Jina Reader's 51.9 (D) for scraping. Prices, MCP, x402, uptime and agent notes side by side.",
    "facts": [
      "fastCRW B 64.3",
      "Jina Reader D 51.9",
      "scores"
    ],
    "h1": "fastCRW vs Jina Reader",
    "image": "https://www.anchorterminal.com/assets/og/default.png",
    "path": "/compare/crw-vs-jina-reader",
    "published": "2026-10-01",
    "section": "tools",
    "title": "fastCRW vs Jina Reader for AI agents in 2026: scores and prices",
    "toc": null,
    "updated": "2026-11-07",
    "url": "https://www.anchorterminal.com/compare/crw-vs-jina-reader"
  },
  "tokens": {
    "markdown": 5550,
    "slim": 2980
  },
  "version": 1
}
