[
  {
    "productId": "apify",
    "storyId": "adaptive-stop-crawling",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence describes adaptive crawling that dynamically stops once sufficient information is gathered to answer a query; Apify's docs cover Actors, scheduling, proxies, MCP integration, and CLI but nothing about query-driven adaptive stopping logic.",
    "evidenceIds": []
  },
  {
    "productId": "apify",
    "storyId": "agentic-agent-docs",
    "verdict": "full",
    "quality": 9,
    "confidence": "high",
    "rationale": "A direct probe confirms llms.txt is live at docs.apify.com/llms.txt returning HTTP 200 with structured agent-oriented documentation content, and the docs also expose an OpenAPI spec and dedicated MCP integration docs for agent discovery. Missing for 10: independent third-party confirmation that agents successfully consume/parse the llms.txt in practice.",
    "evidenceIds": [
      "apify-probe-1",
      "apify-probe-2",
      "apify-probe-3",
      "apify-docs-10"
    ]
  },
  {
    "productId": "apify",
    "storyId": "agentic-ai-insights",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Evidence covers Actor development, monitoring/alerts, MCP server for AI agents to use Actors, and CLI/API access — but nothing shows the product itself generating AI insights or suggestions from a user's scraped/collected data. Missing for 10: any feature describing AI-generated summaries, insights, or recommendations derived from data collected in Apify.",
    "evidenceIds": []
  },
  {
    "productId": "apify",
    "storyId": "agentic-autonomous-automation",
    "verdict": "full",
    "quality": 8,
    "confidence": "high",
    "rationale": "Apify supports scheduling Actors/tasks to run automatically at specific times, plus monitoring and alerting for background runs, and a CLI/API for orchestration—covering autonomous background automation. Missing for 10: independent hands-on validation of scheduling reliability and no explicit mention of event/webhook-triggered (vs. time-triggered) autonomous runs.",
    "evidenceIds": [
      "apify-docs-6",
      "apify-docs-7",
      "apify-docs-3",
      "apify-probe-4"
    ]
  },
  {
    "productId": "apify",
    "storyId": "agentic-builtin-assistant",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Evidence shows Apify exposes an MCP server so external AI agents can call Apify's Actors, but there is no mention of a built-in AI assistant inside the Apify product itself that users can delegate tasks to.",
    "evidenceIds": [
      "apify-docs-10",
      "apify-probe-3"
    ]
  },
  {
    "productId": "apify",
    "storyId": "agentic-headless",
    "verdict": "full",
    "quality": 8,
    "confidence": "high",
    "rationale": "Apify provides a CLI for scripting/terminal control (apify-docs-3, apify-probe-4), scheduling for automated runs (apify-docs-6), an OpenAPI-backed REST API (apify-probe-2), and Actors designed as headless automation units runnable via SDKs/CLI, all consistent with CI/headless automation use. missing for 10: explicit CI/CD pipeline integration examples (e.g., GitHub Actions) or independent hands-on confirmation of CI usage.",
    "evidenceIds": [
      "apify-docs-3",
      "apify-docs-6",
      "apify-probe-2",
      "apify-probe-4",
      "apify-docs-1"
    ]
  },
  {
    "productId": "apify",
    "storyId": "agentic-mcp-client",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "All MCP evidence (apify-docs-10, apify-probe-3) describes Apify exposing its own Actors via an MCP server so external AI agents can use Apify's tools — i.e., Apify acting as an MCP server provider, not as a client that plugs in third-party MCP servers to use their tools. There is no evidence Apify can consume or integrate external MCP servers itself, so the story as stated (product acting as MCP client) is unsupported.",
    "evidenceIds": [
      "apify-docs-10",
      "apify-probe-3"
    ]
  },
  {
    "productId": "apify",
    "storyId": "agentic-mcp-server",
    "verdict": "full",
    "quality": 8,
    "confidence": "high",
    "rationale": "Apify documents an official MCP server enabling AI agents/LLMs to discover and use Actors, confirmed both in docs and a direct probe of the dedicated MCP integration page. Missing for 10: independent/hands-on third-party corroboration of the MCP server working in practice.",
    "evidenceIds": [
      "apify-docs-10",
      "apify-probe-3"
    ]
  },
  {
    "productId": "apify",
    "storyId": "agentic-nl-commands",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Apify documents an official MCP server enabling AI agents/LLMs to discover and invoke Actors via natural-language-driven agent tooling, which is the core mechanism for natural-language operation, plus an llms.txt for AI discoverability. However, there's no direct evidence of a natural-language interface within Apify's own console/CLI itself (the CLI is a traditional command-line tool, not NL-driven), so operation relies on pairing with an external agent. Missing for 10: first-party natural-language chat/assistant interface in the platform itself, hands-on demonstration of NL commands working end-to-end via MCP, independent corroboration of MCP usability.",
    "evidenceIds": [
      "apify-docs-10",
      "apify-probe-1",
      "apify-probe-3",
      "apify-probe-4"
    ]
  },
  {
    "productId": "apify",
    "storyId": "agentic-official-cli",
    "verdict": "full",
    "quality": 8,
    "confidence": "high",
    "rationale": "Apify ships an official CLI (apify-cli) documented at docs.apify.com/cli, explicitly described as a tool to \"Control the Apify platform from terminal or shell scripts,\" covering Actor development, deployment, and automation workflows relevant to AI-native/agentic use. missing for 10: independent hands-on community validation specifically of CLI usage (comments reference SDK/product broadly, not CLI specifics).",
    "evidenceIds": [
      "apify-probe-4",
      "apify-docs-3",
      "apify-docs-1"
    ]
  },
  {
    "productId": "apify",
    "storyId": "agentic-public-api",
    "verdict": "full",
    "quality": 9,
    "confidence": "high",
    "rationale": "Apify provides a documented public REST API with an OpenAPI spec (verified live at docs.apify.com/api/openapi.json), plus a CLI for scripting the platform and official docs describing programmatic control, giving AI-native users clear, verifiable ways to drive the product via API. Missing for 10: independent third-party corroboration of API robustness/completeness beyond Apify's own docs and probes.",
    "evidenceIds": [
      "apify-probe-2",
      "apify-docs-3",
      "apify-probe-4",
      "apify-docs-1"
    ]
  },
  {
    "productId": "apify",
    "storyId": "agentic-scoped-keys",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence of scoped or least-privilege API token/credential issuance for agents—docs mention permissions management for organizations and MCP integration but nothing about granular/scoped API keys or credential minimization for agent use.",
    "evidenceIds": []
  },
  {
    "productId": "apify",
    "storyId": "agentic-sdks",
    "verdict": "full",
    "quality": 8,
    "confidence": "high",
    "rationale": "Apify offers official SDKs for JavaScript/Python plus Crawlee, documented developer toolkits, a CLI, an OpenAPI spec, and an MCP server enabling AI agents to build against official interfaces, with community corroboration of SDK adoption. Missing for 10: deeper independent benchmarking of SDK quality/completeness beyond community praise and more explicit versioned SDK reference docs in the pack.",
    "evidenceIds": [
      "apify-docs-2",
      "apify-docs-4",
      "apify-probe-2",
      "apify-probe-3",
      "apify-probe-4",
      "apify-comm-5"
    ]
  },
  {
    "productId": "apify",
    "storyId": "agentic-webhooks",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "The evidence pack never mentions webhooks explicitly; only vague references to alerts and monitoring (apify-docs-7) exist, with no documentation of webhook subscription or event triggers. Missing for 10: any docs on webhook creation, event types, subscription API, or delivery guarantees.",
    "evidenceIds": [
      "apify-docs-7"
    ]
  },
  {
    "productId": "apify",
    "storyId": "ai-natural-language-extraction",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "No evidence of a natural-language-to-extraction feature; Apify's documented capabilities center on Actors, crawlers, CLI, MCP integration and marketplace, not AI-driven selector-free extraction from prompts.",
    "evidenceIds": []
  },
  {
    "productId": "apify",
    "storyId": "api-interactive-docs",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Apify publishes an OpenAPI spec (confirmed live at docs.apify.com/api/openapi.json) which underlies an API reference, and general docs exist, but there's no direct evidence of an interactive reference UI with runnable/try-it examples (e.g., a Swagger/Redoc try-it console) being confirmed. Missing for 10: explicit evidence of an interactive 'try it out' console, runnable code snippets in the API reference, or community confirmation of using such a feature.",
    "evidenceIds": [
      "apify-probe-2",
      "apify-docs-1",
      "apify-docs-3"
    ]
  },
  {
    "productId": "apify",
    "storyId": "api-machine-spec",
    "verdict": "full",
    "quality": 9,
    "confidence": "high",
    "rationale": "A probe confirms a valid OpenAPI spec is publicly downloadable at docs.apify.com/api/openapi.json, and this is complemented by official CLI and MCP integration docs enabling machine-driven access. Missing for 10: independent third-party confirmation of spec completeness/versioning beyond the probe.",
    "evidenceIds": [
      "apify-probe-2",
      "apify-probe-3",
      "apify-probe-4"
    ]
  },
  {
    "productId": "apify",
    "storyId": "api-sandbox",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence pack items mention a sandbox environment, staging mode, or separation from production data for testing Actors; docs cover development, CLI, MCP, scheduling, monitoring but nothing about a sandbox/test environment isolated from production data.",
    "evidenceIds": []
  },
  {
    "productId": "apify",
    "storyId": "api-versioning-policy",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Evidence shows Apify has an OpenAPI spec, docs, CLI, and MCP server, but nothing indicates a documented API versioning scheme or a deprecation policy for breaking changes. Missing for 10: explicit API version numbers/paths, a published deprecation/sunset policy, changelog or migration guidance for breaking changes.",
    "evidenceIds": []
  },
  {
    "productId": "apify",
    "storyId": "auto-captcha-unblock",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Apify's evidence covers proxy rotation to avoid IP-based blocking (apify-docs-8) and general Actor/browser automation tooling, but nothing documents automatic CAPTCHA solving, login handling, or form-wall bypass as a built-in capability. Missing for 10: any explicit CAPTCHA-solving feature, documented login/session automation, or evidence of autonomous form-wall bypass without user intervention.",
    "evidenceIds": [
      "apify-docs-8",
      "apify-docs-4"
    ]
  },
  {
    "productId": "apify",
    "storyId": "auto-cheapest-config",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence of any automatic cost-optimization or configuration-selection feature; Apify's docs cover Actor development, scheduling, monitoring, proxies, and CLI/API tooling but nothing about automatically choosing the cheapest configuration that still succeeds.",
    "evidenceIds": []
  },
  {
    "productId": "apify",
    "storyId": "auto-retry-proxy-chain",
    "verdict": "partial",
    "quality": 5,
    "confidence": "low",
    "rationale": "Apify documents smart proxy rotation across datacenter and residential IPs to avoid blocking, which supports proxy chaining, but there's no explicit evidence of an automated retry mechanism that specifically triggers on anti-bot detection and cycles through proxies as a chain. missing for 10: documented automatic retry logic tied to anti-bot/block detection, evidence of configurable retry chains, independent confirmation of this workflow in practice.",
    "evidenceIds": [
      "apify-docs-8"
    ]
  },
  {
    "productId": "apify",
    "storyId": "automation-bulk-operations",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Apify's platform supports running Actors at scale (marketplace of 64k Actors, CLI/API/SDK for scripting, scheduling, proxy rotation), which implies bulk automation across many items/tasks, and the API/OpenAPI + CLI enable programmatic bulk control. However, there's no explicit documentation or example of a bulk-operations API (e.g., batch-running many Actors/items in one call) or dataset-level bulk processing tailored for AI-native usage. missing for 10: explicit bulk/batch API documentation, dataset-scale bulk operation examples, independent verification of bulk performance at scale.",
    "evidenceIds": [
      "apify-docs-3",
      "apify-docs-4",
      "apify-docs-6",
      "apify-docs-8",
      "apify-docs-12",
      "apify-probe-2",
      "apify-probe-4"
    ]
  },
  {
    "productId": "apify",
    "storyId": "automation-rules-engine",
    "verdict": "partial",
    "quality": 5,
    "confidence": "medium",
    "rationale": "Apify docs show automatic scheduling of Actors/tasks at specific times and performance alerts, which are limited forms of automated triggers, but the evidence pack lacks explicit documentation of a general event-driven rule/webhook system that fires actions on arbitrary platform events (e.g., dataset changes, run status) as an AI-native user would define. Missing for 10: explicit webhook/event-trigger API docs, examples of custom event-condition-action rules, and independent confirmation of event-based (not just time-based) automation.",
    "evidenceIds": [
      "apify-docs-6",
      "apify-docs-7"
    ]
  },
  {
    "productId": "apify",
    "storyId": "automation-scheduled-jobs",
    "verdict": "full",
    "quality": 8,
    "confidence": "high",
    "rationale": "Apify's docs explicitly support scheduling Actors and saved tasks to run automatically at specific times (recurring jobs), plus CLI and API access for programmatic control, fitting AI-native automation workflows. missing for 10: independent hands-on confirmation of scheduling reliability and richer detail on cron-like configuration options.",
    "evidenceIds": [
      "apify-docs-6",
      "apify-docs-3",
      "apify-probe-4"
    ]
  },
  {
    "productId": "apify",
    "storyId": "automation-versioned-workflows",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "The evidence pack covers Actor development, scheduling, monitoring, and marketplace sharing, but contains no mention of versioning Actor code, review workflows, or rollback to prior automation versions. Axis is applicable to an automation/scraping platform but no supporting evidence is present.",
    "evidenceIds": []
  },
  {
    "productId": "apify",
    "storyId": "batch-scrape-async",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Apify's platform is built around Actors (scrapers) that run at scale in the cloud, with scheduling, proxy rotation to avoid blocking, monitoring/alerts, and CLI/API control — all consistent with batch-scraping thousands of URLs asynchronously. However, no evidence pack item explicitly documents async batch job queuing, concurrency limits, or dataset-scale benchmarks for 'thousands of URLs' specifically. missing for 10: explicit documentation/benchmarks of large-scale async URL batch scraping, concurrency/queue management details, and independent hands-on validation of scale claims.",
    "evidenceIds": [
      "apify-docs-6",
      "apify-docs-7",
      "apify-docs-8",
      "apify-docs-3",
      "apify-probe-4"
    ]
  },
  {
    "productId": "apify",
    "storyId": "block-ads-for-speed",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "Evidence pack shows Apify's proxy/IP rotation, Actor development, CLI, MCP, and marketplace features, but no mention of ad-blocking or resource-blocking capabilities for target pages to speed up scraping.",
    "evidenceIds": []
  },
  {
    "productId": "apify",
    "storyId": "block-images-css-for-speed",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence pack item mentions blocking images/CSS resources or any bandwidth-saving resource filtering feature; while Apify's underlying crawlers (Puppeteer/Playwright) could support this, no documentation here confirms a default or built-in option for it.",
    "evidenceIds": []
  },
  {
    "productId": "apify",
    "storyId": "concurrency-cap-by-plan",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence pack item documents concurrent session/request caps per pricing tier or the cost to increase them; nothing addresses concurrency limits or upgrade pricing.",
    "evidenceIds": []
  },
  {
    "productId": "apify",
    "storyId": "concurrent-sessions-at-scale",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Apify's platform supports running Actors (scrapers) with IP rotation to avoid blocking, scheduling, monitoring, and CLI/API control, which implies infrastructure for scaling scraping jobs, but the evidence pack lacks explicit documentation on concurrency limits, parallel run orchestration, or autoscaling guarantees for many simultaneous sessions. Missing for 10: explicit docs on concurrent run limits/autoscaling, benchmarks or case studies demonstrating large-scale concurrent scraping, and independent verification of scale-reliability under load.",
    "evidenceIds": [
      "apify-docs-6",
      "apify-docs-7",
      "apify-docs-8",
      "apify-docs-3",
      "apify-docs-4"
    ]
  },
  {
    "productId": "apify",
    "storyId": "content-change-monitoring",
    "verdict": "partial",
    "quality": 5,
    "confidence": "low",
    "rationale": "Apify offers scheduling to run Actors periodically (apify-docs-6) and general Actor monitoring/alerting (apify-docs-7), which together could underpin a page-change-monitoring workflow, and its marketplace likely has ready-made 'content checker' Actors, but no evidence pack item explicitly documents a change-detection/diffing feature or notification-on-change capability for target pages like prices or listings. Missing for 10: explicit docs on content-diff/change-detection Actors, notification channels (email/webhook/Slack) triggered specifically by detected content changes, and independent confirmation of this exact use case.",
    "evidenceIds": [
      "apify-docs-6",
      "apify-docs-7"
    ]
  },
  {
    "productId": "apify",
    "storyId": "control-viewport-size",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence pack item mentions viewport width/height control or browser rendering configuration; while Apify supports Playwright/Puppeteer/Crawlee generically, no specific documentation of viewport control is cited. Missing for 10: any docs or examples showing viewport/window size configuration in Apify Actors or SDK.",
    "evidenceIds": []
  },
  {
    "productId": "apify",
    "storyId": "crawl-respects-robots-and-rate-limits",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Evidence mentions IP rotation to avoid blocking and general Actor development/scheduling docs, but nothing explicitly addresses automatic robots.txt compliance or configurable rate-limiting to respect target-site limits. missing for 10: robots.txt compliance settings, automatic rate-limit/throttling configuration, documentation or community confirmation of these specific features.",
    "evidenceIds": [
      "apify-docs-8"
    ]
  },
  {
    "productId": "apify",
    "storyId": "credit-overage-billing",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence in the pack addresses what happens when a plan's monthly credit or request quota is exceeded—no mention of overage billing, pay-as-you-go charges, or hard cutoffs/service suspension. Missing for 10: any pricing/billing docs on overage policy, quota enforcement behavior, or account throttling upon limit breach.",
    "evidenceIds": []
  },
  {
    "productId": "apify",
    "storyId": "css-xpath-extraction",
    "verdict": "partial",
    "quality": 3,
    "confidence": "low",
    "rationale": "Apify's ecosystem integrates with Playwright, Puppeteer, Selenium, Scrapy, and Crawlee (apify-docs-4), all of which support CSS/XPath selector-based extraction, implying the capability exists, but the evidence pack contains no direct documentation of a selector-based extraction feature (e.g., Web Scraper Actor page-function/selector config) or examples showing CSS/XPath rule usage. missing for 10: explicit docs or examples of CSS/XPath selector extraction features, independent confirmation of selector-based scraping workflows.",
    "evidenceIds": [
      "apify-docs-4"
    ]
  },
  {
    "productId": "apify",
    "storyId": "custom-actor-development",
    "verdict": "full",
    "quality": 8,
    "confidence": "high",
    "rationale": "Apify's core value proposition is building 'Actors' (custom scraping scripts) deployed serverlessly on their platform, with docs covering development toolkits, SDKs (JS/Python), CLI for terminal control, scheduling, monitoring, and migration guides for existing projects. Community feedback corroborates real-world usage of the platform for custom scraping projects without infrastructure management. Missing for 10: independent hands-on benchmarks of deployment ease/scaling limits, and more recent community validation beyond older HN threads.",
    "evidenceIds": [
      "apify-docs-1",
      "apify-docs-2",
      "apify-docs-3",
      "apify-docs-4",
      "apify-docs-6",
      "apify-docs-11",
      "apify-probe-4",
      "apify-comm-1",
      "apify-comm-5"
    ]
  },
  {
    "productId": "apify",
    "storyId": "data-export-portability",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Evidence shows Apify's CLI, API, and docs for migrating projects INTO Apify (apify-docs-11) but nothing about exporting scraped data or job configurations in a portable format to move AWAY from Apify to another provider; Actors/tasks are platform-specific constructs with no documented export-for-migration path.",
    "evidenceIds": [
      "apify-docs-11",
      "apify-probe-4",
      "apify-probe-2"
    ]
  },
  {
    "productId": "apify",
    "storyId": "data-quality-monitoring-alerts",
    "verdict": "full",
    "quality": 7,
    "confidence": "medium",
    "rationale": "Apify docs explicitly state the platform lets users check Actor performance, validate data quality, and receive alerts, directly matching the story. Missing for 10: independent/hands-on corroboration of monitoring/alerting in practice and detail on alert configuration options beyond the single doc line.",
    "evidenceIds": [
      "apify-docs-7"
    ]
  },
  {
    "productId": "apify",
    "storyId": "deep-crawl-bfs-with-limit",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "While Apify's Crawlee library and Actors are built for web crawling, none of the evidence mentions a breadth-first crawl strategy or a configurable maximum page limit specifically; the docs pack only lists generic feature blurbs (Actor development, scheduling, monitoring, proxies) without crawl-strategy specifics.",
    "evidenceIds": []
  },
  {
    "productId": "apify",
    "storyId": "docker-container-deploy",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "None of the evidence explicitly mentions Docker or containerized deployment for Apify Actors; docs reference generic Actor development, toolkits, CLI, and migration guides but never state Docker-based deployment. Missing for 10: explicit Docker/Dockerfile documentation, container registry or image-based deployment workflow, and any hands-on confirmation of Docker usage for production scraping.",
    "evidenceIds": []
  },
  {
    "productId": "apify",
    "storyId": "documented-rate-limits",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence pack item documents specific rate-limit numbers (requests per second/minute) for the Apify API; only general docs, CLI, MCP, and community sentiment are present, with no mention of throttling thresholds per API key.",
    "evidenceIds": []
  },
  {
    "productId": "apify",
    "storyId": "failed-request-billing",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence in the pack addresses whether failed, blocked, or empty-result runs still consume billing quota/compute units; none of the docs or community items discuss billing treatment of failed or empty results.",
    "evidenceIds": []
  },
  {
    "productId": "apify",
    "storyId": "full-site-crawl",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Apify's ecosystem includes Crawlee and general Actor infrastructure that could power full-site crawling, and marketplace Actors (like website content crawlers) exist implicitly via the Store, but the evidence pack lacks any direct documentation of a single-request 'crawl entire website' Actor, its configuration, or output format. missing for 10: explicit docs/demo of a whole-site crawler Actor invoked via one API call, details on link-following/depth/queue handling, and independent confirmation of successful full-site crawls.",
    "evidenceIds": [
      "apify-docs-4",
      "apify-docs-12",
      "apify-probe-1",
      "apify-probe-2"
    ]
  },
  {
    "productId": "apify",
    "storyId": "geo-targeted-proxy",
    "verdict": "partial",
    "quality": 5,
    "confidence": "low",
    "rationale": "Apify's docs mention proxy rotation to avoid blocking (datacenter and residential IPs) but the evidence pack does not explicitly confirm country-specific/geolocation targeting for proxies. missing for 10: explicit documentation of country-level proxy selection parameters, independent confirmation of geo-targeting accuracy.",
    "evidenceIds": [
      "apify-docs-8"
    ]
  },
  {
    "productId": "apify",
    "storyId": "image-captioning-for-text-llm",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "No evidence of any image captioning, alt-text generation, or vision-to-text capability in Apify's docs or community mentions; the evidence pack covers Actors, scraping, CLI, MCP, and proxying but nothing about generating captions for images to aid text-only model reasoning.",
    "evidenceIds": []
  },
  {
    "productId": "apify",
    "storyId": "interactive-browser-sandbox",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Apify's evidence covers Actors, SDKs, CLI, MCP server, and browser automation libraries for building automated scraping/crawling workflows, but there is no mention of an interactive, manual remote browser sandbox (like a live browser session a developer can control interactively for manual browsing). This is a distinct capability (e.g., live view/remote debugging is not documented here) rather than automated headless browser execution.",
    "evidenceIds": []
  },
  {
    "productId": "apify",
    "storyId": "js-rendering-spa",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Apify supports Playwright, Puppeteer, and Crawlee for browser automation, which are standard tools for rendering JS-heavy SPAs and extracting fully rendered HTML, and its Actor marketplace includes ready-made scrapers for this purpose. However, the evidence pack lacks explicit first-party documentation or examples demonstrating headless-browser rendering output or a dedicated 'render HTML' API/endpoint, relying instead on general framework compatibility claims. Missing for 10: explicit docs/tutorial on rendering SPAs and returning full HTML, hands-on/independent verification of rendering fidelity, and a dedicated rendering API example.",
    "evidenceIds": [
      "apify-docs-4",
      "apify-docs-12",
      "apify-comm-4"
    ]
  },
  {
    "productId": "apify",
    "storyId": "json-schema-extraction",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "No evidence pack item describes passing a JSON schema to constrain/validate API output structure for extraction; docs cover Actor development, CLI, MCP server, and general platform features but nothing about schema-guided structured output.",
    "evidenceIds": []
  },
  {
    "productId": "apify",
    "storyId": "large-table-chunked-extraction",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence pack items address extracting data from large tables or intelligent chunking to fit processing limits; docs cover Actors, scheduling, proxies, MCP, CLI, but nothing about table-size chunking strategies.",
    "evidenceIds": []
  },
  {
    "productId": "apify",
    "storyId": "latency-completeness-tradeoff",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence pack items address configurable latency-vs-completeness tradeoffs (e.g., streaming partial results, timeouts, or synchronous vs async return controls); docs cover scheduling, monitoring, proxies, and Actor development but not this specific control.",
    "evidenceIds": []
  },
  {
    "productId": "apify",
    "storyId": "live-system-dashboard",
    "verdict": "partial",
    "quality": 4,
    "confidence": "low",
    "rationale": "Apify docs mention monitoring Actor performance, data quality checks, and alerts (apify-docs-7), implying some run/status visibility, but there's no concrete evidence of a real-time dashboard showing live system metrics or worker/browser pool status specifically. Missing for 10: explicit dashboard UI showing live resource/worker pool metrics, screenshots or docs describing real-time monitoring views, and independent confirmation of dashboard capabilities.",
    "evidenceIds": [
      "apify-docs-7"
    ]
  },
  {
    "productId": "apify",
    "storyId": "llm-driven-extraction",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "Evidence shows Apify's marketplace, CLI, MCP server, and Actor platform, but nothing about an LLM-driven extraction mode that reads a page and decides structured fields without pre-written selectors — no AI-extraction Actor or feature is documented.",
    "evidenceIds": []
  },
  {
    "productId": "apify",
    "storyId": "llm-ready-text-instead-of-raw-html",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Apify offers anti-blocking proxy rotation, an MCP server for LLM/agent consumption, and llms.txt documentation support, suggesting some LLM-ready output orientation, but the evidence never explicitly documents a 'clean text/markdown extraction' output mode analogous to dedicated LLM-ready scraping tools. Missing for 10: explicit documentation of automatic HTML-to-clean-text/markdown conversion output format, examples of LLM-ready output from Actors, and independent verification that scraped output is directly consumable without further parsing.",
    "evidenceIds": [
      "apify-docs-8",
      "apify-docs-10",
      "apify-probe-1",
      "apify-probe-3"
    ]
  },
  {
    "productId": "apify",
    "storyId": "local-llm-extraction-backend",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "No evidence that Apify supports plugging in a local or self-hosted LLM as the extraction backend; documentation covers Actors, CLI, MCP server, and marketplace but nothing about swapping in self-hosted/local models for extraction tasks.",
    "evidenceIds": []
  },
  {
    "productId": "apify",
    "storyId": "markdown-output",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence in the pack mentions markdown output or content-format conversion capabilities for scraped data; docs references cover Actors, CLI, MCP, scheduling, proxies, etc., but nothing about clean markdown vs raw HTML output.",
    "evidenceIds": []
  },
  {
    "productId": "apify",
    "storyId": "marketplace-monetization",
    "verdict": "full",
    "quality": 8,
    "confidence": "high",
    "rationale": "Apify explicitly documents publishing Actors to the public Apify Store for 'regular passive income' and has a marketplace of 64k+ Actors, directly matching the story. Missing for 10: independent third-party confirmation of actual developer earnings/payouts and details on revenue-share terms.",
    "evidenceIds": [
      "apify-docs-5",
      "apify-docs-12",
      "apify-docs-9"
    ]
  },
  {
    "productId": "apify",
    "storyId": "multi-format-choice",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence in the pack shows Apify letting developers select specific output formats like markdown, HTML, text, or frontmatter; the docs cover Actors, CLI, MCP, and platform features but not configurable content-extraction output formats.",
    "evidenceIds": []
  },
  {
    "productId": "apify",
    "storyId": "nocode-automation-connector",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence in the pack mentions n8n, Zapier, or any prebuilt no-code automation connector; the docs reference MCP server, CLI, SDKs, and Actor Store but nothing about a no-code platform integration.",
    "evidenceIds": []
  },
  {
    "productId": "apify",
    "storyId": "open-source-library-integration",
    "verdict": "full",
    "quality": 8,
    "confidence": "high",
    "rationale": "Apify explicitly states it works with Playwright, Puppeteer, Selenium, and Scrapy alongside its own Crawlee library, and docs cover Actor development toolkits and migrating existing projects onto the platform. Missing for 10: hands-on independent verification/tutorials specifically showing Selenium or Scrapy actors running end-to-end, and community evidence is thin/tangential on this specific capability.",
    "evidenceIds": [
      "apify-docs-4",
      "apify-docs-1",
      "apify-docs-2",
      "apify-docs-11"
    ]
  },
  {
    "productId": "apify",
    "storyId": "openness-api-parity",
    "verdict": "full",
    "quality": 8,
    "confidence": "high",
    "rationale": "Apify documents a full OpenAPI-based API (apify-probe-2), a CLI to control the platform from terminal/scripts (apify-docs-3, apify-probe-4), and docs explicitly covering scheduling, monitoring, sharing, proxy, and Actor management—core UI functions all exposed programmatically. This is corroborated by an official MCP server and llms.txt for AI-native access (apify-probe-3, apify-probe-1). Missing for 10: independent/hands-on confirmation that every single UI feature (e.g., billing, org permissions) has 1:1 API parity, and no explicit statement of complete UI/API feature parity.",
    "evidenceIds": [
      "apify-docs-3",
      "apify-docs-6",
      "apify-docs-7",
      "apify-docs-8",
      "apify-docs-9",
      "apify-probe-2",
      "apify-probe-4",
      "apify-probe-3",
      "apify-probe-1"
    ]
  },
  {
    "productId": "apify",
    "storyId": "openness-full-export",
    "verdict": "partial",
    "quality": 4,
    "confidence": "low",
    "rationale": "Apify provides a CLI and REST/OpenAPI API (apify-docs-3, apify-probe-2, apify-probe-4) that could be used to pull data out of the platform, implying some data portability, but the evidence pack never documents actual dataset export formats (e.g., JSON/CSV/Excel) or an explicit 'export and leave' workflow. missing for 10: explicit documentation of dataset export formats, confirmation of full data portability/deletion, and independent verification that a user can fully migrate data out.",
    "evidenceIds": [
      "apify-docs-3",
      "apify-probe-2",
      "apify-probe-4"
    ]
  },
  {
    "productId": "apify",
    "storyId": "openness-open-license",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Apify is a proprietary SaaS platform; while its SDKs/CLI and Crawlee library have some open-source components, the evidence pack shows no mention of an open license for the core platform's source code, and the product itself (the Apify platform/service) is closed-source.",
    "evidenceIds": []
  },
  {
    "productId": "apify",
    "storyId": "openness-self-host",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Apify is a cloud SaaS platform; evidence shows Actor development, CLI, MCP server, and marketplace features but no evidence of an open-source self-hostable core platform or on-premise deployment option. The Apify SDK/Crawlee is open source, but the core platform (task scheduling, storage, marketplace) is not shown as self-hostable.",
    "evidenceIds": []
  },
  {
    "productId": "apify",
    "storyId": "pass-session-cookies",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence pack item mentions passing custom session cookies or authentication headers for fetching pages behind login; docs listed cover general Actor development, CLI, MCP, and marketplace features but nothing about cookie/session injection.",
    "evidenceIds": []
  },
  {
    "productId": "apify",
    "storyId": "pdf-office-doc-extraction",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence pack items mention PDF/Word/Excel/PowerPoint text extraction capability or any document-parsing Actor; the pack only covers general Actor development, CLI, MCP, scraping/web crawling tooling.",
    "evidenceIds": []
  },
  {
    "productId": "apify",
    "storyId": "per-url-pattern-config",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence in the pack shows per-URL-pattern crawl configuration within a single job; docs mention general Actor development, scheduling, proxy rotation, and CLI/MCP tooling but nothing about applying different crawl rules to different URL patterns in one batch job.",
    "evidenceIds": []
  },
  {
    "productId": "apify",
    "storyId": "persistent-authenticated-session",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence in the pack mentions persistent browser profiles, cookie storage, or session/login state reuse across requests; docs only cover general Actor development, CLI, SDKs, proxies, and scheduling.",
    "evidenceIds": []
  },
  {
    "productId": "apify",
    "storyId": "pii-filtering-on-extraction",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence of any built-in PII detection or filtering capability before data reaches storage; docs cover Actor development, CLI, scheduling, monitoring, proxies, and MCP integration but nothing about PII redaction or compliance filtering.",
    "evidenceIds": []
  },
  {
    "productId": "apify",
    "storyId": "post-render-behind-login",
    "verdict": "partial",
    "quality": 5,
    "confidence": "low",
    "rationale": "Apify supports Playwright/Puppeteer/Selenium/Crawlee for building Actors that could interact with pages (clicking, filling forms, navigating login walls) via browser automation, but the evidence pack contains no direct documentation or example describing session persistence, interactive multi-step navigation through login walls, or maintaining state across scraped pages. Missing for 10: explicit documentation/example of stateful interaction with an already-loaded page (form-fill, click-through, login-wall bypass), session/cookie persistence guidance, and independent confirmation of this workflow.",
    "evidenceIds": [
      "apify-docs-4",
      "apify-docs-1",
      "apify-docs-2"
    ]
  },
  {
    "productId": "apify",
    "storyId": "prebuilt-scraper-marketplace",
    "verdict": "full",
    "quality": 8,
    "confidence": "high",
    "rationale": "Apify Store offers a marketplace of 64,279 ready-made Actors (scrapers) that developers can run directly instead of building from scratch, backed by docs on publishing/sharing Actors and the llms.txt description confirming it as 'the largest marketplace of tools for AI' with 'thousands of ready-made Actors'. Community reviews corroborate real-world usage of pre-built scrapers as a core value proposition. Missing for 10: no hands-on walkthrough evidence of actually running a marketplace Actor end-to-end or independent review specifically praising the marketplace-run experience.",
    "evidenceIds": [
      "apify-docs-5",
      "apify-docs-9",
      "apify-docs-12",
      "apify-probe-1",
      "apify-comm-1"
    ]
  },
  {
    "productId": "apify",
    "storyId": "premium-residential-proxies",
    "verdict": "full",
    "quality": 8,
    "confidence": "high",
    "rationale": "Apify docs explicitly describe smart rotation of datacenter and residential IP addresses to avoid blocking, directly matching the anti-bot proxy use case, and the platform's marketplace/integration docs corroborate a mature proxy infrastructure. missing for 10: no independent hands-on benchmark or third-party report validating residential proxy success rates against specific hard-to-scrape sites.",
    "evidenceIds": [
      "apify-docs-8",
      "apify-docs-12"
    ]
  },
  {
    "productId": "apify",
    "storyId": "privacy-data-residency",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence in the pack mentions data residency, region selection, or storage location controls for Apify; this is a fair question for a cloud data platform but is unaddressed.",
    "evidenceIds": []
  },
  {
    "productId": "apify",
    "storyId": "privacy-no-training",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence pack items mention AI training data opt-out, data usage policies for model training, or privacy controls addressing this specific concern; all citations relate to Actor development, marketplace, CLI, and MCP features unrelated to data-training privacy.",
    "evidenceIds": []
  },
  {
    "productId": "apify",
    "storyId": "privacy-retention-controls",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence pack items address data retention policies, dataset/storage expiration controls, or deletion mechanisms for user data on the Apify platform. Missing for 10: documentation on data retention periods, deletion APIs/controls, GDPR-related data handling, or account/data export-and-delete workflows.",
    "evidenceIds": []
  },
  {
    "productId": "apify",
    "storyId": "privacy-telemetry-optout",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence pack items mention telemetry, usage tracking, or an opt-out mechanism for Apify's CLI, SDK, or platform; all citations concern unrelated features like Actors, MCP, CLI commands, and marketplace stats.",
    "evidenceIds": []
  },
  {
    "productId": "apify",
    "storyId": "public-status-page-history",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence of a public status page, uptime history, or incident postmortems anywhere in the pack; only docs, community sentiment, and API/CLI probes are provided.",
    "evidenceIds": []
  },
  {
    "productId": "apify",
    "storyId": "ready-made-templates",
    "verdict": "partial",
    "quality": 5,
    "confidence": "medium",
    "rationale": "Apify provides a CLI and 'software toolkits for developing new Actors' plus a large marketplace of 64,279 pre-built Actors, which functionally lets developers start from existing building blocks, but the evidence never explicitly documents a curated 'project template' gallery or scaffolding command with named starter templates. Missing for 10: explicit template gallery/documentation, CLI scaffolding command details (e.g., 'apify create' template list), independent confirmation of ease-of-start experience.",
    "evidenceIds": [
      "apify-docs-2",
      "apify-docs-3",
      "apify-docs-12",
      "apify-probe-4"
    ]
  },
  {
    "productId": "apify",
    "storyId": "reasoning-effort-control",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence Apify exposes a reasoning-effort control (low/medium/high) for agents on data-gathering tasks; the docs cover Actors, CLI, scheduling, proxies, and MCP integration but nothing about configurable reasoning depth or agent 'effort' levels.",
    "evidenceIds": []
  },
  {
    "productId": "apify",
    "storyId": "research-agent-preset",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "No evidence of a preset configuration tuned for research agents that yields structured, citable output; Apify's evidence covers general Actor development, MCP server access, CLI, and marketplace but nothing about a research-agent-specific preset or citation-formatted output.",
    "evidenceIds": []
  },
  {
    "productId": "apify",
    "storyId": "resume-crashed-crawl",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "No evidence in the pack mentions checkpointing or resuming a crashed deep crawl; Apify docs cover Actors, scheduling, monitoring, CLI, MCP, etc., but nothing about saving/restoring crawl state after a crash. This is a plausible axis for a scraping platform, so absence of evidence yields 'none'.",
    "evidenceIds": []
  },
  {
    "productId": "apify",
    "storyId": "rotating-proxy-pool",
    "verdict": "full",
    "quality": 8,
    "confidence": "medium",
    "rationale": "Apify explicitly documents proxy rotation across datacenter and residential IPs to avoid blocking, directly matching the story. Missing for 10: independent/hands-on corroboration of proxy rotation effectiveness and details on configuration/pricing tiers.",
    "evidenceIds": [
      "apify-docs-8"
    ]
  },
  {
    "productId": "apify",
    "storyId": "scheduled-runs",
    "verdict": "full",
    "quality": 8,
    "confidence": "medium",
    "rationale": "Apify docs explicitly state scheduling functionality: \"Automatically start Actors and saved tasks at specific times,\" directly matching the story of scheduling scraping jobs to run automatically. This is corroborated by CLI/API tooling for platform control, though there's no independent hands-on report specifically validating the scheduler feature. Missing for 10: independent/community confirmation of scheduling reliability, and more detail on schedule configuration options (cron, timezone, etc.).",
    "evidenceIds": [
      "apify-docs-6",
      "apify-docs-3",
      "apify-probe-4"
    ]
  },
  {
    "productId": "apify",
    "storyId": "screenshot-capture",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "The evidence pack contains no mention of screenshot capture functionality (full-page or selector-based) in any Apify docs, community posts, or probes; while Apify supports Playwright/Puppeteer which could enable screenshots, no direct evidence documents this capability.",
    "evidenceIds": []
  },
  {
    "productId": "apify",
    "storyId": "scripted-page-interactions",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Apify supports building Actors with Playwright, Puppeteer, Selenium, and Crawlee, which are libraries capable of scripting clicks, filling inputs, and scrolling before content extraction, but the evidence pack only asserts library compatibility rather than showing documented examples or tutorials of interaction scripting within Apify Actors. Missing for 10: dedicated docs/tutorials demonstrating click/fill/scroll interaction patterns within an Actor, and independent hands-on confirmation of this workflow.",
    "evidenceIds": [
      "apify-docs-4",
      "apify-docs-1",
      "apify-docs-2"
    ]
  },
  {
    "productId": "apify",
    "storyId": "self-host-open-source",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Apify's evidence shows CLI tooling and local Actor development (apify-docs-3, apify-probe-4), but nothing indicates a fully self-hostable open-source version of the platform as an alternative to the hosted cloud service — Apify's core value proposition remains the managed cloud platform and marketplace. missing for 10: evidence of an open-source self-hosted runtime/platform replacing the cloud service, docs on self-hosting infrastructure, community confirmation of running Apify independently of apify.com.",
    "evidenceIds": [
      "apify-docs-3",
      "apify-probe-4"
    ]
  },
  {
    "productId": "apify",
    "storyId": "semantic-chunked-output",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "No evidence in the pack indicates Apify offers semantic chunking of output content for retrieval pipelines; docs cover Actor development, CLI, MCP integration, scheduling, and proxy rotation, but nothing about chunked/segmented output formats.",
    "evidenceIds": []
  },
  {
    "productId": "apify",
    "storyId": "single-call-html-extraction",
    "verdict": "partial",
    "quality": 4,
    "confidence": "low",
    "rationale": "Apify's Actor marketplace and public REST API (openapi.json) mean a developer could run a scraping Actor and retrieve HTML via one API call, but no evidence item explicitly documents a single-call 'get raw HTML' endpoint or a specific ready-made scraper Actor's output format. Missing for 10: explicit docs/example showing an API call that returns raw HTML, and any hands-on confirmation of extraction quality/fidelity for that use case.",
    "evidenceIds": [
      "apify-docs-12",
      "apify-probe-2",
      "apify-probe-4",
      "apify-docs-4"
    ]
  },
  {
    "productId": "apify",
    "storyId": "spend-cap-alerts",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence pack item mentions spending caps, budget limits, or usage alerts for proxy/credit consumption; docs snippets cover Actor development, scheduling, monitoring performance/data quality, but not billing/usage limit controls.",
    "evidenceIds": []
  },
  {
    "productId": "apify",
    "storyId": "sticky-session-proxy",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "The evidence only shows generic proxy IP rotation (apify-docs-8) but contains no mention of session identifiers, sticky sessions, or maintaining a consistent IP across multiple requests, which is the specific capability the story requires.",
    "evidenceIds": [
      "apify-docs-8"
    ]
  },
  {
    "productId": "apify",
    "storyId": "structured-json-output",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "The evidence pack contains no documentation or claims about dataset/output formats (e.g., JSON, CSV, Excel) delivered from Actors; only generic docs about building/publishing Actors, CLI, MCP, and API schema are present. Missing for 10: explicit mention of dataset export formats, JSON output examples, or API endpoints returning structured scraped data.",
    "evidenceIds": []
  },
  {
    "productId": "apify",
    "storyId": "team-permissions-management",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Apify's official docs explicitly mention sharing Actors and managing organizations/permissions, directly matching the story, but the evidence pack only has a single doc title with no detail on role granularity or workflow, and no independent/hands-on corroboration of this feature. Missing for 10: detailed documentation of role-based permission levels, screenshots/hands-on walkthrough, and community confirmation that org/permission management works well in practice.",
    "evidenceIds": [
      "apify-docs-9"
    ]
  },
  {
    "productId": "apify",
    "storyId": "undetected-browser-mode",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Evidence shows IP rotation/proxy features and browser automation library support (Playwright, Puppeteer, Selenium), but no mention of a specific 'undetected browser' mode or stealth fingerprinting/anti-bot-detection bypass capability.",
    "evidenceIds": []
  },
  {
    "productId": "apify",
    "storyId": "url-discovery-map",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence of a sitemap/URL-discovery feature (e.g., a dedicated sitemap crawler or 'discover URLs without full crawl' Actor); evidence only covers general crawling, Actors, CLI, MCP, and proxy features. Absence of evidence for this specific capability yields 'none'.",
    "evidenceIds": []
  },
  {
    "productId": "apify",
    "storyId": "wait-for-selector",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence in the pack mentions waiting for a specific selector before returning rendered page; only generic mentions of Playwright/Puppeteer/Crawlee support are given, without documenting a wait-for-selector API parameter or option.",
    "evidenceIds": []
  },
  {
    "productId": "apify",
    "storyId": "web-search-with-content",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "The evidence pack shows only generic Apify platform docs (Actors, CLI, MCP server, marketplace) with no mention of a specific search-plus-full-content extraction capability or actor (e.g., a RAG/web-search actor) that returns full page content alongside search results in one call.",
    "evidenceIds": []
  },
  {
    "productId": "browserbase",
    "storyId": "adaptive-stop-crawling",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "Browserbase offers browser automation, session infrastructure, web search, and URL-to-content extraction, but no evidence describes adaptive crawling logic that autonomously determines when 'enough' information has been gathered to stop crawling further.",
    "evidenceIds": []
  },
  {
    "productId": "browserbase",
    "storyId": "agentic-agent-docs",
    "verdict": "full",
    "quality": 9,
    "confidence": "high",
    "rationale": "A direct probe confirms llms.txt is live at https://docs.browserbase.com/llms.txt returning HTTP 200 with structured agent-oriented content describing the platform, and this is reinforced by extensive agent-oriented docs content across the docs site. missing for 10: no independent third-party confirmation of agents actually consuming/using the llms.txt file in practice.",
    "evidenceIds": [
      "browserbase-probe-1",
      "browserbase-docs-1",
      "browserbase-docs-5"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "agentic-ai-insights",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "browserbase",
    "storyId": "agentic-autonomous-automation",
    "verdict": "full",
    "quality": 7,
    "confidence": "medium",
    "rationale": "Docs explicitly describe deploying browser agents 'on a schedule or on demand,' plus session-scaling and monitoring use cases (uptime checks, price/job tracking) that imply persistent background automation. missing for 10: independent/hands-on confirmation of scheduling reliability and details on failure alerting/retry mechanisms.",
    "evidenceIds": [
      "browserbase-docs-14",
      "browserbase-docs-11",
      "browserbase-docs-12",
      "browserbase-docs-9"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "agentic-builtin-assistant",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "browserbase",
    "storyId": "agentic-headless",
    "verdict": "full",
    "quality": 8,
    "confidence": "medium",
    "rationale": "Browserbase is explicitly built for programmatic, headless browser sessions accessible via API/SDK, with docs describing scheduling agents to run 'on a schedule or on demand' and spinning up thousands of concurrent sessions — a core CI/automation use case. missing for 10: independent hands-on CI integration examples/case studies and explicit CI-provider (GitHub Actions, etc.) documentation.",
    "evidenceIds": [
      "browserbase-docs-1",
      "browserbase-docs-4",
      "browserbase-docs-9",
      "browserbase-docs-14",
      "browserbase-probe-1"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "agentic-mcp-client",
    "verdict": "na",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Browserbase is a browser automation infrastructure/platform, not itself an AI agent that would consume other MCP servers' tools — evidence shows the reverse (Browserbase exposes its own official MCP server for other agents to plug into, per browserbase-probe-3), which is a different axis than 'plugging MCP servers into this product.' There's no evidence Browserbase itself acts as an MCP client consuming external tool servers.",
    "evidenceIds": [
      "browserbase-probe-3"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "agentic-mcp-server",
    "verdict": "full",
    "quality": 8,
    "confidence": "medium",
    "rationale": "Browserbase documents an official MCP server integration allowing agents to connect directly, confirmed by probe evidence at docs.browserbase.com/integrations/mcp/introduction. Missing for 10: independent/hands-on confirmation of MCP server usage and more detail on setup/config beyond the doc link.",
    "evidenceIds": [
      "browserbase-probe-3"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "agentic-nl-commands",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Browserbase's Stagehand SDK supports 'natural language selectors' for browser actions, and the platform offers MCP server and CLI integrations that let AI agents operate it via natural-language-driven commands rather than raw code. However, this is developer/SDK-mediated natural language (act/extract commands within code) rather than a conversational end-user NL interface, and there's no independent hands-on evidence confirming reliability of the NL selector feature. Missing for 10: independent verification of natural-language selector accuracy, evidence of a direct end-user chat/NL interface (vs SDK-embedded NL), and quality/reliability benchmarks from third parties.",
    "evidenceIds": [
      "browserbase-docs-5",
      "browserbase-docs-6",
      "browserbase-probe-3",
      "browserbase-probe-4"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "agentic-official-cli",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "There's a documented official CLI ('browse-cli') referenced in probe evidence, but the pack lacks detailed first-party documentation content (installation, commands, usage examples) or independent/community corroboration of its use. missing for 10: detailed CLI docs/commands, independent hands-on validation, broader community adoption evidence.",
    "evidenceIds": [
      "browserbase-probe-4"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "agentic-public-api",
    "verdict": "full",
    "quality": 8,
    "confidence": "high",
    "rationale": "Browserbase documents a public API for creating/controlling/observing browser sessions programmatically, with an llms.txt confirming API-key-based agent access, plus SDKs and integrations (MCP, CLI) built on top of it. Missing for 10: a discoverable OpenAPI/swagger spec (probe found only 404s) and independent third-party confirmation of API robustness beyond vendor docs.",
    "evidenceIds": [
      "browserbase-docs-1",
      "browserbase-docs-4",
      "browserbase-probe-1",
      "browserbase-probe-2",
      "browserbase-probe-3"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "agentic-scoped-keys",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "No evidence of scoped or least-privilege API key/credential issuance; the only relevant probe explicitly states Browserbase uses a single broad API key ('one API key gives your agent everything it needs'), suggesting no fine-grained scoping exists.",
    "evidenceIds": [
      "browserbase-probe-1"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "agentic-sdks",
    "verdict": "full",
    "quality": 8,
    "confidence": "high",
    "rationale": "Browserbase documents official SDKs and APIs for programmatic session control, plus a dedicated 'Stagehand' SDK for browser agents and a TypeScript-first agent framework, backed by extensive first-party docs. Missing for 10: independent/hands-on developer corroboration of SDK quality and a discoverable OpenAPI spec (probe found 404s), which limits confidence beyond vendor docs.",
    "evidenceIds": [
      "browserbase-docs-1",
      "browserbase-docs-4",
      "browserbase-docs-5",
      "browserbase-docs-6",
      "browserbase-probe-1",
      "browserbase-probe-2"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "agentic-webhooks",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence pack item mentions webhooks or event subscription mechanisms; docs focus on session control, agent frameworks, and scraping but never describe a webhook/event system. This is a fair capability for a browser automation platform (e.g. session status events), so absence of evidence yields 'none' rather than 'na'.",
    "evidenceIds": []
  },
  {
    "productId": "browserbase",
    "storyId": "ai-natural-language-extraction",
    "verdict": "partial",
    "quality": 5,
    "confidence": "medium",
    "rationale": "Browserbase's ecosystem includes Stagehand, described as 'Natural language selectors, self-healing actions, and caching at scale,' which directly supports natural-language-driven extraction instead of manual selectors, and other docs mention agents 'pulling data from any website.' However, the evidence is thin first-party marketing copy with no concrete extraction API examples, no structured-data-specific documentation, and no independent/hands-on corroboration of extraction quality. Missing for 10: detailed extraction API docs/examples, structured-output schema support details, and independent verification of extraction accuracy.",
    "evidenceIds": [
      "browserbase-docs-5",
      "browserbase-docs-8"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "api-interactive-docs",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Evidence shows general documentation pages (docs.browserbase.com) and feature descriptions, but no mention of an interactive API reference or runnable code examples; a probe for OpenAPI/swagger specs (which typically power such interactive docs) returned 404 on all candidate paths, indicating no such interactive reference is exposed.",
    "evidenceIds": [
      "browserbase-docs-1",
      "browserbase-probe-2"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "api-machine-spec",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "A direct probe for OpenAPI/Swagger spec files at common paths returned 404 across all candidates, indicating no downloadable machine-readable API spec is exposed; docs mention an API but not a spec file.",
    "evidenceIds": [
      "browserbase-probe-2"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "api-sandbox",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "The evidence describes Browserbase's core browser-session and agent-automation capabilities but contains no mention of a distinct sandbox/staging mode, test API keys, or any mechanism to isolate testing from production data. Since API/dev platforms commonly offer such sandbox environments, the axis is applicable, but nothing in the pack demonstrates it.",
    "evidenceIds": []
  },
  {
    "productId": "browserbase",
    "storyId": "api-versioning-policy",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "No evidence of API versioning scheme (e.g., v1/v2 paths) or any documented deprecation policy; the OpenAPI spec probe even returned 404s, and no changelog or deprecation notes appear in the pack.",
    "evidenceIds": [
      "browserbase-probe-2"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "auto-captcha-unblock",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Vendor docs explicitly claim automatic handling of forms, CAPTCHAs, and logins ('When your workflow requires a form, a CAPTCHA, or a login prompt, it's handled' and 'Your agent logs in, navigates, and pulls data from any website, login walls included'), directly matching the story. However, this is first-party marketing copy without independent hands-on verification or technical detail on CAPTCHA-solving mechanics/success rates, and community evidence is generic praise unrelated to this specific capability. Missing for 10: independent/hands-on confirmation that CAPTCHA bypass works reliably, technical documentation of the anti-bot mechanism, and any real-world case study demonstrating unattended login-wall bypass.",
    "evidenceIds": [
      "browserbase-docs-8",
      "browserbase-docs-10",
      "browserbase-docs-13"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "auto-cheapest-config",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence in the pack indicates any feature for automatic cost-optimized configuration selection; Browserbase docs focus on session control, agent tooling, and scaling but never mention cost-aware auto-selection of configurations.",
    "evidenceIds": []
  },
  {
    "productId": "browserbase",
    "storyId": "auto-retry-proxy-chain",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "Evidence shows Browserbase offers CAPTCHA handling, proxy support, and session management generally, but there is no mention of automatic retry chaining across multiple proxies upon anti-bot detection failures.",
    "evidenceIds": []
  },
  {
    "productId": "browserbase",
    "storyId": "automation-bulk-operations",
    "verdict": "full",
    "quality": 7,
    "confidence": "medium",
    "rationale": "Browserbase explicitly advertises spinning up thousands of concurrent browser sessions to return answers immediately, plus scheduled/on-demand agent deployment and monitoring across many tracked items (prices, listings, competitors), directly matching bulk cross-item automation for AI agents. Missing for 10: independent/hands-on benchmarks validating claimed concurrency at scale, and more detail on rate limits/orchestration patterns for very large batch jobs.",
    "evidenceIds": [
      "browserbase-docs-9",
      "browserbase-docs-12",
      "browserbase-docs-14",
      "browserbase-docs-8"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "automation-rules-engine",
    "verdict": "partial",
    "quality": 4,
    "confidence": "low",
    "rationale": "Browserbase supports scheduled/on-demand agent deployment and continuous monitoring use cases (e.g., alerting on breakage, tracking price/job changes), which implies some event-triggered automation, but there's no documented rule-engine or explicit event-trigger/webhook-condition system for defining 'if X happens, do Y' automation. missing for 10: explicit rule-definition interface, event-trigger/webhook configuration docs, condition-action automation examples, independent verification of trigger-based workflows.",
    "evidenceIds": [
      "browserbase-docs-11",
      "browserbase-docs-12",
      "browserbase-docs-14"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "automation-scheduled-jobs",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Docs explicitly mention deploying and running browser agents 'on a schedule or on demand' (browserbase-docs-14), directly supporting recurring job scheduling, but there is no detailed documentation of scheduling syntax, retry/monitoring, or independent hands-on confirmation of this feature working in practice. missing for 10: detailed scheduling API/config docs, independent verification of scheduled job reliability, monitoring/alerting details for scheduled runs.",
    "evidenceIds": [
      "browserbase-docs-14",
      "browserbase-docs-11"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "automation-versioned-workflows",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence of versioning, review workflows, or rollback capabilities for automations; the docs cover session control, scraping, agent frameworks, and scheduling but nothing about version history or reverting changes to automations.",
    "evidenceIds": []
  },
  {
    "productId": "browserbase",
    "storyId": "batch-scrape-async",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Browserbase docs claim it can spin up thousands of concurrent browser sessions and return answers immediately, directly supporting async batch scraping at scale, plus scheduling/deploying agents on demand. However, there is no explicit documentation of a batch-job API, queueing semantics, rate-limit/backoff guidance, or independent hands-on evidence confirming reliability at thousands-of-URL scale. missing for 10: dedicated batch/queue API docs, independent benchmarks or case studies validating thousands-of-URL scraping, and error-handling/retry guarantees at scale.",
    "evidenceIds": [
      "browserbase-docs-9",
      "browserbase-docs-14",
      "browserbase-docs-1"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "block-ads-for-speed",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "The evidence pack mentions general network interception capability (browserbase-docs-4) but no explicit ad-blocking feature, flag, or documentation is cited that lets developers block ads on target pages to speed up scraping. Missing for 10: dedicated ad-blocking API/flag, performance benchmarks showing speed gains, and any documentation referencing ad or resource blocking specifically.",
    "evidenceIds": [
      "browserbase-docs-4"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "block-images-css-for-speed",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "The evidence only mentions generic 'network interception' capability (browserbase-docs-4) but nowhere documents blocking images/CSS by default to reduce bandwidth or speed up requests; missing for 10: explicit resource-blocking config, default image/CSS blocking behavior, bandwidth-savings documentation.",
    "evidenceIds": [
      "browserbase-docs-4"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "concurrency-cap-by-plan",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The evidence pack contains no pricing page, tier comparison, or concurrency-cap documentation; only marketing claims about spinning up 'thousands of concurrent sessions' with no tier-specific limits or upgrade costs cited. No mention of what concurrency cap applies at each plan or how much raising it costs.",
    "evidenceIds": [
      "browserbase-docs-9"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "concurrent-sessions-at-scale",
    "verdict": "full",
    "quality": 8,
    "confidence": "medium",
    "rationale": "Docs explicitly claim ability to 'spin up thousands of concurrent browser sessions' with programmatic session creation/control and scraping-focused features (login walls, CAPTCHAs, data extraction), directly matching the story. Missing for 10: independent/hands-on benchmarks validating concurrency at scale and no third-party performance corroboration beyond vendor docs.",
    "evidenceIds": [
      "browserbase-docs-9",
      "browserbase-docs-1",
      "browserbase-docs-4",
      "browserbase-docs-8",
      "browserbase-docs-10"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "content-change-monitoring",
    "verdict": "partial",
    "quality": 5,
    "confidence": "low",
    "rationale": "Marketing copy explicitly promises tracking price/listing changes 'as they happen' and alerting when something breaks, and agents can be scheduled or run on demand, aligning with the monitoring+notify story. However there's no documented notification mechanism (webhooks, email/Slack alerts), no dedicated 'change detection' API, and no independent/hands-on evidence confirming this works in practice. Missing for 10: concrete alerting/notification API or integration docs, hands-on validation of change-monitoring workflows, independent user reports of this specific use case.",
    "evidenceIds": [
      "browserbase-docs-11",
      "browserbase-docs-12",
      "browserbase-docs-14"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "control-viewport-size",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "The evidence pack contains no documentation or mention of session creation parameters such as viewport width/height, browser dimensions, or rendering resolution controls; it only covers general browser control, agent frameworks, and integrations. Missing for 10: any docs page, API parameter, or example showing viewport configuration during session creation.",
    "evidenceIds": [
      "browserbase-docs-1",
      "browserbase-docs-4"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "crawl-respects-robots-and-rate-limits",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence in the pack mentions robots.txt compliance, rate-limit configuration, or crawl politeness controls; Browserbase docs focus on session control, agent tooling, and captcha/login handling but nothing about respecting robots.txt or throttling requests to target sites.",
    "evidenceIds": []
  },
  {
    "productId": "browserbase",
    "storyId": "credit-overage-billing",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence in the pack addresses billing behavior when plan quotas are exceeded—nothing on overage charges vs hard cutoffs is documented.",
    "evidenceIds": []
  },
  {
    "productId": "browserbase",
    "storyId": "css-xpath-extraction",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "Browserbase's evidence describes full browser control, natural-language selectors, and general data extraction, but nothing explicitly confirms support for CSS or XPath selector-based field extraction. Missing for 10: explicit documentation or example of CSS/XPath selector usage for extraction, API reference showing selector parameters.",
    "evidenceIds": [
      "browserbase-docs-4",
      "browserbase-docs-5",
      "browserbase-docs-8"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "custom-actor-development",
    "verdict": "full",
    "quality": 7,
    "confidence": "medium",
    "rationale": "Browserbase's docs explicitly describe programmatic session creation/control, full browser automation, 30+ starter templates, and deploying/running agents 'on a schedule or on demand' without infrastructure management, directly matching the story of building and deploying custom scraping scripts serverlessly. Missing for 10: independent developer testimonials confirming ease of deploying custom scripts, and detailed docs/tutorials specifically on writing/deploying custom scraping code (vs. general agent framing).",
    "evidenceIds": [
      "browserbase-docs-1",
      "browserbase-docs-4",
      "browserbase-docs-7",
      "browserbase-docs-9",
      "browserbase-docs-14",
      "browserbase-probe-1"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "data-export-portability",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "No evidence of any export/migration feature for scraped data or job configurations in a portable format; documentation covers session control, agent SDKs, and MCP/CLI integrations but nothing about data portability or avoiding lock-in.",
    "evidenceIds": []
  },
  {
    "productId": "browserbase",
    "storyId": "data-quality-monitoring-alerts",
    "verdict": "partial",
    "quality": 5,
    "confidence": "low",
    "rationale": "Browserbase supports observing browser sessions (browserbase-docs-1) and explicitly offers agents that 'click through your product continuously and alert you the moment something breaks' (browserbase-docs-11), which covers basic failure alerting for scraping/monitoring jobs. However, there is no evidence of structured job performance dashboards, metrics, or explicit data-quality validation tooling for extracted data. Missing for 10: dedicated job performance monitoring/metrics dashboard, data quality validation checks, and integration with alerting channels (email/Slack/webhooks) beyond a generic marketing claim.",
    "evidenceIds": [
      "browserbase-docs-1",
      "browserbase-docs-11"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "deep-crawl-bfs-with-limit",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "Browserbase provides browser session infrastructure, session control, and agent tooling, but there is no evidence of a deep-crawl feature with breadth-first traversal or a configurable max page limit; crawling logic would need to be built by the customer on top of the raw browser sessions.",
    "evidenceIds": []
  },
  {
    "productId": "browserbase",
    "storyId": "docker-container-deploy",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Browserbase is presented throughout its docs as a hosted, serverless browser API/platform (spin up sessions via API key, no infrastructure to manage) rather than a self-hostable container image; no evidence pack item mentions a Docker image, self-hosted deployment, or on-prem installation. Community discussion even frames a separate open-source project as the alternative for self-hosting, implying Browserbase itself doesn't offer this.",
    "evidenceIds": [
      "browserbase-docs-1",
      "browserbase-docs-9",
      "browserbase-comm-4"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "documented-rate-limits",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence in the pack documents specific API rate limits (requests per second/minute) or throttling behavior for Browserbase API keys; the OpenAPI spec probe even returned 404s, and no docs page addresses rate limiting.",
    "evidenceIds": [
      "browserbase-probe-2"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "failed-request-billing",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence in the pack addresses billing treatment of failed, blocked, or empty-result sessions—pricing docs, session lifecycle, or FAQ content on quota consumption for unsuccessful requests are absent.",
    "evidenceIds": []
  },
  {
    "productId": "browserbase",
    "storyId": "full-site-crawl",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Browserbase's docs describe session control, single-URL-to-content conversion, web search, and scaling concurrent sessions, but no evidence describes a one-request whole-site crawl capability that traverses all pages and aggregates content.",
    "evidenceIds": [
      "browserbase-docs-3",
      "browserbase-docs-9"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "geo-targeted-proxy",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "The evidence pack contains no mention of proxy configuration, geolocation targeting, or country-specific proxy selection features—only general session/agent capabilities and unrelated community commentary.",
    "evidenceIds": []
  },
  {
    "productId": "browserbase",
    "storyId": "image-captioning-for-text-llm",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence Browserbase provides automatic image captioning/alt-text generation for text-only model reasoning; docs mention browser control, scraping, markdown/HTML/JSON extraction but nothing about vision-to-text captioning of images.",
    "evidenceIds": []
  },
  {
    "productId": "browserbase",
    "storyId": "interactive-browser-sandbox",
    "verdict": "partial",
    "quality": 5,
    "confidence": "low",
    "rationale": "Browserbase clearly provides managed remote browser sessions that can be created, controlled and observed via API (browserbase-docs-1, browserbase-docs-4), and a CLI/skill integration exists (browserbase-probe-4) that could support manual, interactive use. However, the evidence is overwhelmingly focused on programmatic/agent-driven automation rather than a human-in-the-loop, manual browsing experience (e.g., a live-view iframe or interactive debugger), which is never explicitly documented. Missing for 10: explicit documentation of a live/interactive session viewer for manual human browsing, and independent corroboration that developers actually use it for hands-on manual sessions rather than purely automated agent tasks.",
    "evidenceIds": [
      "browserbase-docs-1",
      "browserbase-docs-4",
      "browserbase-probe-4"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "js-rendering-spa",
    "verdict": "full",
    "quality": 7,
    "confidence": "medium",
    "rationale": "Browserbase runs real browser sessions (docs-1, docs-4) and explicitly offers converting any URL into HTML/JSON/markdown (docs-3), which requires rendering JS-heavy pages in a real browser before extraction—directly matching the story. Missing for 10: explicit mention of SPA-specific rendering guarantees and independent hands-on verification of rendered HTML fidelity.",
    "evidenceIds": [
      "browserbase-docs-1",
      "browserbase-docs-3",
      "browserbase-docs-4"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "json-schema-extraction",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Evidence mentions fetching web context and converting URLs into HTML/JSON/markdown, but nothing describes accepting a JSON schema parameter to enforce structured output matching that schema. Missing for 10: any documentation of a schema-based extraction API, parameter naming, or example request/response validating against a user-supplied schema.",
    "evidenceIds": [
      "browserbase-docs-3"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "large-table-chunked-extraction",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "Browserbase's evidence covers browser session infrastructure, agent tooling, scraping, and automation, but there is no mention of intelligent chunking of large tables or any mechanism to fit extracted data within processing/context limits.",
    "evidenceIds": []
  },
  {
    "productId": "browserbase",
    "storyId": "latency-completeness-tradeoff",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "Browserbase's evidence covers session control, auto-waits, and content extraction generally, but nothing describes developer-facing controls for choosing when to return content (e.g., wait strategies, streaming vs full-page load, timeout tuning) to trade latency for completeness. missing for 10: explicit wait/timeout configuration options, streaming or partial-content return APIs, documentation on latency-completeness tradeoffs.",
    "evidenceIds": [
      "browserbase-docs-4",
      "browserbase-docs-3"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "live-system-dashboard",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Evidence covers session control, agent frameworks, and scraping use cases but contains no mention of a real-time dashboard for monitoring live system metrics or worker/browser pool status; no dashboard UI, metrics endpoint, or observability feature is documented.",
    "evidenceIds": []
  },
  {
    "productId": "browserbase",
    "storyId": "llm-driven-extraction",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Browserbase's ecosystem includes Stagehand, described as an SDK with 'natural language selectors, self-healing actions' (browserbase-docs-5) and URL-to-JSON/markdown conversion (browserbase-docs-3), which supports LLM-driven extraction without hardcoded selectors. However, there's no explicit documentation of a schema-based 'extract structured fields' API or example showing an LLM inferring fields dynamically. Missing for 10: a dedicated extraction API/schema example, independent hands-on validation of extraction accuracy without selectors.",
    "evidenceIds": [
      "browserbase-docs-5",
      "browserbase-docs-3",
      "browserbase-docs-8"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "llm-ready-text-instead-of-raw-html",
    "verdict": "full",
    "quality": 7,
    "confidence": "medium",
    "rationale": "Browserbase explicitly offers a URL-to-content conversion feature that outputs HTML, JSON, or markdown, directly targeting the LLM-ready text use case, and provides an llms.txt for agent consumption. This clearly addresses avoiding messy HTML/rendering, though there's no independent hands-on validation of output cleanliness or completeness. Missing for 10: independent/third-party verification of extraction quality, and more detail on how CAPTCHA/login-walled content is cleaned before conversion.",
    "evidenceIds": [
      "browserbase-docs-3",
      "browserbase-docs-8",
      "browserbase-probe-1"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "local-llm-extraction-backend",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "No evidence that Browserbase allows configuring a local or self-hosted LLM as the extraction backend; all documented extraction features (e.g., Stagehand, web search, URL-to-markdown) reference cloud-based agent tooling with no mention of BYO-model or self-hosted model support.",
    "evidenceIds": [
      "browserbase-docs-5",
      "browserbase-docs-3"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "markdown-output",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Browserbase's URL-fetch/context tool explicitly supports converting any URL into HTML, JSON, or markdown, directly enabling clean markdown output instead of raw HTML. However, evidence is limited to a single doc snippet with no detail on markdown fidelity, cleaning quality, or independent validation. Missing for 10: detailed docs/examples showing markdown extraction quality, independent/hands-on confirmation of clean output, and coverage across the main scraping API (not just the URL-context tool).",
    "evidenceIds": [
      "browserbase-docs-3"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "marketplace-monetization",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "browserbase",
    "storyId": "multi-format-choice",
    "verdict": "partial",
    "quality": 5,
    "confidence": "low",
    "rationale": "Browserbase's URL-to-context tool explicitly converts pages into HTML, JSON, or markdown, showing some format choice, but there is no evidence of a full selectable set including plain text or frontmatter, nor documentation of a unified output-format parameter across its APIs. missing for 10: explicit text/frontmatter options, unified API-level format parameter documentation, independent confirmation of format selection.",
    "evidenceIds": [
      "browserbase-docs-3"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "nocode-automation-connector",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence of a prebuilt n8n or Zapier connector; the pack shows SDKs, MCP server, CLI, and agent framework integrations but nothing about no-code automation platforms.",
    "evidenceIds": []
  },
  {
    "productId": "browserbase",
    "storyId": "open-source-library-integration",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "The evidence pack describes Browserbase's own control APIs, agent framework integrations, and web-scraping use cases, but never mentions compatibility or connection methods (e.g., CDP endpoints) for Playwright, Puppeteer, Selenium, or Scrapy specifically.",
    "evidenceIds": []
  },
  {
    "productId": "browserbase",
    "storyId": "openness-api-parity",
    "verdict": "partial",
    "quality": 6,
    "confidence": "low",
    "rationale": "Browserbase is fundamentally API-first ('one API key gives your agent everything it needs') with docs showing session creation, control, and observability programmatically, suggesting the dashboard largely mirrors API capabilities rather than gating features behind UI-only workflows. However, there is no explicit documentation stating full UI/API parity, and the openapi spec probe returned 404s at all candidate locations, undermining confidence that a complete, discoverable API surface matches every UI capability. Missing for 10: explicit UI/API parity documentation, a public OpenAPI spec, and independent confirmation that no dashboard-only features exist.",
    "evidenceIds": [
      "browserbase-docs-1",
      "browserbase-docs-4",
      "browserbase-probe-1",
      "browserbase-probe-2"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "openness-full-export",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "No evidence of any data export feature, open-format download, or account portability tooling in Browserbase's docs; the only related community signal is that users seeking self-hosted/open alternatives turn to a separate third-party project (BrowserStation), not an export path from Browserbase itself.",
    "evidenceIds": [
      "browserbase-comm-4"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "openness-open-license",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "No evidence Browserbase source code is available under any open license; documentation only describes hosted API/SDK features. Community discussion explicitly frames another project (BrowserStation) as 'an open-source alternative to Browserbase', implying Browserbase itself is closed-source/proprietary.",
    "evidenceIds": [
      "browserbase-comm-4",
      "browserbase-comm-5"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "openness-self-host",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Browserbase is offered exclusively as a hosted cloud API/service; no docs or product pages mention a self-hosted or on-prem deployment option. Community evidence even points to a separate open-source project (BrowserStation) as the self-hosted alternative, underscoring that Browserbase itself cannot be self-hosted.",
    "evidenceIds": [
      "browserbase-comm-4",
      "browserbase-comm-5",
      "browserbase-docs-1"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "pass-session-cookies",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Evidence shows Browserbase can handle logins, CAPTCHAs, and full browser control (network interception, multi-tab) but never mentions a documented API/param for developers to inject their own session cookies to bypass authentication. Missing for 10: explicit cookie-injection/session-context API docs, code sample showing custom cookies passed to a session, and independent confirmation it works for authenticated fetches.",
    "evidenceIds": [
      "browserbase-docs-8",
      "browserbase-docs-10",
      "browserbase-docs-4"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "pdf-office-doc-extraction",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "browserbase",
    "storyId": "per-url-pattern-config",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "Browserbase's evidence covers session management, agent tooling, scraping/search APIs, and scheduling, but nothing describes a batch job mechanism where different crawl configurations can be applied per URL pattern within one job. This is a plausible axis for a browser automation platform, but no feature or doc supports it.",
    "evidenceIds": [
      "browserbase-docs-1",
      "browserbase-docs-4",
      "browserbase-docs-9",
      "browserbase-docs-14"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "persistent-authenticated-session",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "The evidence pack contains no mention of persistent browser profiles, contexts, or reusable cookie/login state across sessions—only generic mentions of handling logins/login walls during a single session (browserbase-docs-8, browserbase-docs-10). No documentation of a profile/context object, storage of cookies, or reuse across multiple requests is present. missing for 10: any mention of a persistent context/profile object, cookie storage/reuse mechanism, or documentation showing login state persisting across separate sessions.",
    "evidenceIds": [
      "browserbase-docs-8",
      "browserbase-docs-10"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "pii-filtering-on-extraction",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence of any PII detection, redaction, or filtering capability in Browserbase's docs or community sources; the product focuses on browser session control, automation, and data extraction infrastructure without mentioning content sanitization or privacy filtering before storage.",
    "evidenceIds": []
  },
  {
    "productId": "browserbase",
    "storyId": "post-render-behind-login",
    "verdict": "full",
    "quality": 7,
    "confidence": "medium",
    "rationale": "Browserbase provides persistent programmatic sessions with full browser control (auto-waits, network interception, multi-tab), and docs explicitly describe agents logging in, navigating, and pulling data behind login walls, with forms/CAPTCHAs/logins handled. This directly supports interacting further with an already-scraped page to reach gated content. Missing for 10: independent hands-on verification of session persistence across multi-step interactions and concrete code examples showing continued interaction post-scrape.",
    "evidenceIds": [
      "browserbase-docs-4",
      "browserbase-docs-8",
      "browserbase-docs-10",
      "browserbase-docs-13"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "prebuilt-scraper-marketplace",
    "verdict": "partial",
    "quality": 4,
    "confidence": "low",
    "rationale": "Browserbase advertises '30+ ready-made templates' to start building quickly, which is the closest evidence to a marketplace of pre-built scrapers, but this is framed as starter templates for building agents/browser automations rather than a curated marketplace of finished, run-as-is scrapers. Missing for 10: explicit scraper marketplace, evidence of running a template unmodified to scrape a target site, and any community/hands-on account of using a template instead of coding one.",
    "evidenceIds": [
      "browserbase-docs-7"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "premium-residential-proxies",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "The evidence pack describes browser automation, CAPTCHA handling, login walls, and agent tooling, but contains no mention of residential or datacenter proxy offerings for bypassing anti-bot measures. Since proxy infrastructure is a plausible feature for a browser automation platform, the axis applies, but no evidence supports it.",
    "evidenceIds": []
  },
  {
    "productId": "browserbase",
    "storyId": "privacy-data-residency",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence in the pack mentions data residency, region selection, or storage location controls for Browserbase sessions or data; all evidence covers browser automation features and community sentiment unrelated to data location.",
    "evidenceIds": []
  },
  {
    "productId": "browserbase",
    "storyId": "privacy-no-training",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence pack item mentions data usage policies, AI training opt-outs, or privacy commitments regarding customer data; all citations focus on browser automation features and product capabilities, not privacy posture.",
    "evidenceIds": []
  },
  {
    "productId": "browserbase",
    "storyId": "privacy-retention-controls",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "No evidence in the pack addresses data retention policies, session data deletion controls, or privacy/compliance settings for stored session artifacts. The docs focus entirely on browser automation capabilities, not data lifecycle management.",
    "evidenceIds": []
  },
  {
    "productId": "browserbase",
    "storyId": "privacy-telemetry-optout",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence pack item mentions telemetry, usage tracking, opt-out settings, or privacy controls for Browserbase; the axis is applicable to a cloud service handling browser sessions/data but no supporting documentation is present.",
    "evidenceIds": []
  },
  {
    "productId": "browserbase",
    "storyId": "public-status-page-history",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence of a public status page, uptime history, or incident postmortems anywhere in the evidence pack; only product feature docs and unrelated community comments are provided.",
    "evidenceIds": []
  },
  {
    "productId": "browserbase",
    "storyId": "ready-made-templates",
    "verdict": "full",
    "quality": 7,
    "confidence": "medium",
    "rationale": "First-party docs explicitly state '30+ ready-made templates' to start building right away, directly matching the story. Quality is capped since there's no independent/hands-on corroboration of the template library's breadth or ease of use. missing for 10: independent verification of template quality/quantity, examples of specific templates or hands-on developer feedback using them.",
    "evidenceIds": [
      "browserbase-docs-7"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "reasoning-effort-control",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "Browserbase provides browser session infrastructure, scraping, and agent deployment tools, but no evidence describes any 'reasoning effort' control (low/medium/high) for agent tasks — this is a model-level parameter, not something exposed in Browserbase's docs. Missing for 10: any mention of reasoning-effort settings, task budget controls, or configurable agent 'thinking' levels.",
    "evidenceIds": []
  },
  {
    "productId": "browserbase",
    "storyId": "research-agent-preset",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Browserbase offers general agent tooling (web search, URL-to-markdown/JSON fetching, session control) but there is no evidence of a dedicated 'research agent' preset or configuration that returns structured, citable output with sources. missing for 10: a documented research-agent preset, citation/source-tracking output format, or structured schema tailored to research tasks.",
    "evidenceIds": [
      "browserbase-docs-2",
      "browserbase-docs-3",
      "browserbase-docs-9"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "resume-crashed-crawl",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence of checkpointing or resumable crawl functionality; Browserbase docs describe session creation, control, and scaling but nothing about saving/restoring crawl state after a crash.",
    "evidenceIds": []
  },
  {
    "productId": "browserbase",
    "storyId": "rotating-proxy-pool",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "The evidence pack contains no mention of proxy IP support, rotation, or anti-blocking proxy features for Browserbase—only general browser automation, agent, and session capabilities are documented. Since proxy routing is a plausible and common feature for a browser automation platform, its absence here counts as 'none' rather than 'na'.",
    "evidenceIds": []
  },
  {
    "productId": "browserbase",
    "storyId": "scheduled-runs",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Docs explicitly state agents can be deployed 'on Browserbase, on a schedule or on demand,' directly supporting scheduled scraping jobs, but there's no detail on scheduling configuration, cron-like syntax, retry/failure handling, or independent hands-on confirmation. missing for 10: detailed scheduling API/config docs, examples of recurring job setup, independent verification of schedule reliability.",
    "evidenceIds": [
      "browserbase-docs-14",
      "browserbase-docs-9",
      "browserbase-docs-12"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "screenshot-capture",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "Browserbase's evidence pack covers session control, web search, data extraction, and agent tooling, but nothing explicitly documents full-page or selector-based screenshot capture. Missing for 10: any documentation or docs snippet referencing screenshot/image capture APIs, selector-based capture options, or hands-on confirmation of this output format.",
    "evidenceIds": [
      "browserbase-docs-1",
      "browserbase-docs-4"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "scripted-page-interactions",
    "verdict": "partial",
    "quality": 7,
    "confidence": "medium",
    "rationale": "Browserbase's docs describe full programmatic browser control—auto-waits, network interception, multi-tab support, and agents that log in, fill forms, and navigate pages—implying developers can script click/fill/scroll actions before returning content, and it integrates with frameworks like Playwright/Stagehand for such control. However, the evidence pack lacks explicit code examples or docs naming click/fill/scroll actions directly, and there's no independent hands-on confirmation of these specific interactions. missing for 10: explicit API/code snippets demonstrating click, fill, and scroll actions; independent developer corroboration of these specific interactions.",
    "evidenceIds": [
      "browserbase-docs-4",
      "browserbase-docs-8",
      "browserbase-docs-10",
      "browserbase-docs-1"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "self-host-open-source",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "All evidence describes Browserbase as a hosted cloud API/platform (session management, agent tooling, MCP, CLI) with no mention of an open-source or self-hostable version; community discussion explicitly frames a separate project (BrowserStation) as 'an open-source alternative to Browserbase,' implying Browserbase itself is not self-hostable.",
    "evidenceIds": [
      "browserbase-comm-4",
      "browserbase-comm-5",
      "browserbase-docs-1",
      "browserbase-probe-1"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "semantic-chunked-output",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Browserbase's docs mention converting URLs into HTML/JSON/markdown (browserbase-docs-3) but there is no evidence of a semantic-chunking output mode or configurable chunk size for retrieval pipelines specifically.",
    "evidenceIds": [
      "browserbase-docs-3"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "single-call-html-extraction",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Docs describe a URL-to-content endpoint that can convert any URL into HTML, JSON, or markdown, directly supporting single-call scraping with raw HTML output, but this is framed as 'fetch web context' rather than a dedicated documented scrape API with clear parameters/examples. Missing for 10: explicit API reference/example showing a single call returning raw HTML, independent hands-on verification of output fidelity, and confirmation of an OpenAPI spec (openapi probe returned 404s).",
    "evidenceIds": [
      "browserbase-docs-3",
      "browserbase-probe-1"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "spend-cap-alerts",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence of spending caps, budget alerts, or usage-limit controls anywhere in the docs or community pack; all citations concern browser automation features, not billing/usage controls.",
    "evidenceIds": []
  },
  {
    "productId": "browserbase",
    "storyId": "sticky-session-proxy",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "Evidence pack contains only generic Browserbase product descriptions and community sentiment; nothing documents sticky-session proxy identity or session-ID-based proxy routing. Missing for 10: any mention of proxy session persistence, sticky IP configuration, or session-identifier-based proxy routing in docs or hands-on reports.",
    "evidenceIds": []
  },
  {
    "productId": "browserbase",
    "storyId": "structured-json-output",
    "verdict": "partial",
    "quality": 5,
    "confidence": "low",
    "rationale": "Docs mention converting URLs into HTML, JSON, or markdown (browserbase-docs-3), which directly supports structured JSON output for scraped content, but there's no detailed schema documentation, examples of JSON output format, or independent verification of this capability. missing for 10: detailed JSON schema/response examples, API reference documentation, independent hands-on confirmation of JSON output quality.",
    "evidenceIds": [
      "browserbase-docs-3"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "team-permissions-management",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence in the pack mentions team/organization management, sharing scrapers with teammates, or role-based access control features; all evidence covers browser session automation, agent tooling, and integrations. This is a plausible axis for a dev platform with team accounts, but no supporting documentation or community evidence exists.",
    "evidenceIds": []
  },
  {
    "productId": "browserbase",
    "storyId": "undetected-browser-mode",
    "verdict": "partial",
    "quality": 4,
    "confidence": "low",
    "rationale": "Evidence shows Browserbase handles CAPTCHAs and login walls automatically (docs-8, docs-10), which relates to the anti-bot theme, but there is no explicit mention of a dedicated 'undetected'/stealth browser mode, fingerprint spoofing, or claims about bypassing sophisticated bot-detection systems specifically. Missing for 10: explicit stealth/undetected mode documentation, fingerprint randomization details, and independent evidence of successfully evading bot-detection systems like Cloudflare/PerimeterX.",
    "evidenceIds": [
      "browserbase-docs-8",
      "browserbase-docs-10"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "url-discovery-map",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Browserbase's docs cover session control, web search, URL-to-content conversion, and full browsing/automation, but nothing describes a lightweight URL-discovery or sitemap-extraction capability that avoids full crawling. Missing for 10: any sitemap parsing, link-graph extraction, or 'list all URLs' feature distinct from full page rendering/crawling.",
    "evidenceIds": []
  },
  {
    "productId": "browserbase",
    "storyId": "wait-for-selector",
    "verdict": "partial",
    "quality": 3,
    "confidence": "low",
    "rationale": "Browserbase docs mention 'auto-waits' as part of full browser control (docs-4), implying the underlying Playwright/Puppeteer session supports waiting for elements, but no explicit documentation of a selector-wait API or parameter is provided. Missing for 10: explicit API/parameter documentation for waiting on a specific selector, code examples, and independent confirmation of this exact behavior.",
    "evidenceIds": [
      "browserbase-docs-4"
    ]
  },
  {
    "productId": "browserbase",
    "storyId": "web-search-with-content",
    "verdict": "partial",
    "quality": 5,
    "confidence": "low",
    "rationale": "Browserbase separately advertises a 'Web search' tool for finding relevant URLs (docs-2) and a distinct 'Contents' tool to convert a URL into HTML/JSON/markdown (docs-3), but the evidence never shows these unified into a single call that returns full page content directly from search results. Missing for 10: documentation of a combined search+extract endpoint, example code showing one call returning both links and full content, and independent verification of extraction quality/accuracy.",
    "evidenceIds": [
      "browserbase-docs-2",
      "browserbase-docs-3"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "adaptive-stop-crawling",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "The docs describe crawling with fixed page caps (500 for sync, 25,000 for async) and extraction with 'coverage' controls, but there is no evidence of an adaptive mechanism that halts crawling once sufficient information for a query has been gathered.",
    "evidenceIds": [
      "context-dev-docs-2",
      "context-dev-docs-3",
      "context-dev-docs-4"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "agentic-agent-docs",
    "verdict": "full",
    "quality": 9,
    "confidence": "high",
    "rationale": "Context.dev has a confirmed live llms.txt at docs.context.dev/llms.txt (HTTP 200, agent-oriented index of docs), plus agent-oriented docs, MCP server, CLI, and a coding-agent skill install guide, directly enabling an agent to be pointed at agent-native documentation. Missing for 10: independent third-party confirmation that agents successfully consume the llms.txt in practice beyond the probe check.",
    "evidenceIds": [
      "context-dev-probe-1",
      "context-dev-docs-13",
      "context-dev-docs-14",
      "context-dev-docs-15",
      "context-dev-probe-3",
      "context-dev-probe-4"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "agentic-ai-insights",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Context.dev is a data-extraction/scraping API (Markdown, structured JSON extraction, screenshots, brand data) intended to feed external AI agents and applications, but there is no evidence of the product itself surfacing AI-generated insights, recommendations, or analysis inside a Context.dev interface — it delivers raw/structured data, not in-product AI insight generation.",
    "evidenceIds": [
      "context-dev-docs-1",
      "context-dev-docs-4",
      "context-dev-docs-11",
      "context-dev-docs-13"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "agentic-autonomous-automation",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Context.dev supports background automation via async batch crawling that runs as a tracked job until completion, and scheduled monitoring of pages/sitemaps/datasets that emits signed change events without user intervention — both run autonomously once configured. However, there's no evidence of a broader automation/workflow engine (e.g., chaining actions, triggering downstream agent tasks, retries/orchestration) beyond these two specific background job types. Missing for 10: evidence of workflow chaining or agent-triggered automation, independent confirmation of monitoring reliability, and details on scheduling flexibility.",
    "evidenceIds": [
      "context-dev-docs-3",
      "context-dev-docs-9"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "agentic-builtin-assistant",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "context-dev",
    "storyId": "agentic-headless",
    "verdict": "full",
    "quality": 8,
    "confidence": "medium",
    "rationale": "Context.dev ships a CLI explicitly documented for scripting and CI use ('Call Context.dev from your terminal and use JSON responses in scripts or CI'), backed by a full REST API with OpenAPI spec, async batch jobs for long-running headless crawls, and documented rate-limit/timeout handling suited to automated pipelines. Missing for 10: no explicit CI/CD pipeline example (e.g., GitHub Actions), and no independent/community confirmation of headless CI usage beyond vendor docs.",
    "evidenceIds": [
      "context-dev-docs-14",
      "context-dev-docs-3",
      "context-dev-docs-17",
      "context-dev-docs-18",
      "context-dev-probe-2",
      "context-dev-probe-4"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "agentic-mcp-client",
    "verdict": "na",
    "quality": 0,
    "confidence": "high",
    "rationale": "Context.dev is a web-scraping/data-extraction API/service that itself exposes an MCP server (context-dev-docs-13, context-dev-probe-3) so that AI clients can call ITS tools — it is not an agentic product that would consume other MCP servers' tools. The 'plug MCP servers in' client-role story is a category error for this kind of product.",
    "evidenceIds": [
      "context-dev-docs-13",
      "context-dev-probe-3"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "agentic-mcp-server",
    "verdict": "full",
    "quality": 8,
    "confidence": "high",
    "rationale": "Context.dev is a web-data API (not itself an agent), so the MCP-server axis applies, and it publishes an official hosted MCP endpoint (mcp.context.dev/mcp) plus install docs for connecting AI clients to its tools for live web/company data. Missing for 10: independent/hands-on verification of the MCP server working in practice beyond first-party docs and a probe confirming the endpoint exists.",
    "evidenceIds": [
      "context-dev-probe-3",
      "context-dev-docs-13"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "agentic-nl-commands",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Context.dev ships an official MCP server ('Connect your AI client to Context.dev tools for live web and company data') and an agent 'skill' file that teaches coding agents how to call the API, which together let AI-native users issue natural-language requests that get translated into API calls; there is also a CLI for scripted/terminal use. However, all natural-language operation is mediated through third-party AI clients (Claude, agents) rather than a native NL interface in Context.dev itself, and no community/hands-on evidence confirms this NL workflow works smoothly in practice. Missing for 10: first-party or independent evidence of actual natural-language usage/output quality via the MCP or skill integration, and any native chat/NL interface within the product itself.",
    "evidenceIds": [
      "context-dev-docs-13",
      "context-dev-docs-15",
      "context-dev-docs-14",
      "context-dev-probe-3",
      "context-dev-probe-4"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "agentic-official-cli",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Docs and probe confirm an official CLI exists ('Call Context.dev from your terminal and use JSON responses in scripts or CI') with a dedicated install page, supporting agentic/CI workflows. However, there's no independent/hands-on corroboration of the CLI's functionality or depth beyond first-party docs. Missing for 10: independent verification/hands-on review of CLI usage, details on CLI command coverage vs the full API surface.",
    "evidenceIds": [
      "context-dev-docs-14",
      "context-dev-probe-4"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "agentic-public-api",
    "verdict": "full",
    "quality": 9,
    "confidence": "high",
    "rationale": "Context.dev is fundamentally an API product with a public OpenAPI spec, documented endpoints (crawl, extract, screenshot, brand data, auth), API key management, rate-limit headers, plus a CLI and MCP server built on top of the same API — clear evidence of a documented, drivable public API for AI-native consumption. Missing for 10: independent third-party developer confirmation of full API coverage beyond docs/probes.",
    "evidenceIds": [
      "context-dev-probe-2",
      "context-dev-docs-1",
      "context-dev-docs-10",
      "context-dev-docs-14",
      "context-dev-docs-18",
      "context-dev-docs-19",
      "context-dev-probe-4"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "agentic-scoped-keys",
    "verdict": "full",
    "quality": 7,
    "confidence": "medium",
    "rationale": "Docs explicitly describe restricted API keys scoped to selected operations only, with a no-permission key unable to call the API at all, directly supporting least-privilege credential issuance for agents; the OAuth-like device flow (discover→register→claim→poll) also supports scoped token issuance per client. missing for 10: no evidence of fine-grained scoping beyond operation-level (e.g., resource/data scoping), and no independent/hands-on confirmation of restricted-key behavior in production.",
    "evidenceIds": [
      "context-dev-docs-10",
      "context-dev-docs-19"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "agentic-sdks",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "The evidence shows an OpenAPI spec, CLI, MCP server, and 'skill' for coding agents, but there is no mention of official SDK client libraries (e.g., Python, JS, Go packages) for Context.dev. Missing for 10: explicit official SDK packages/documentation, language-specific client libraries, versioning/release notes for SDKs.",
    "evidenceIds": [
      "context-dev-probe-2",
      "context-dev-probe-4",
      "context-dev-docs-14"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "agentic-webhooks",
    "verdict": "partial",
    "quality": 5,
    "confidence": "low",
    "rationale": "Context.dev supports monitoring pages/sitemaps/datasets and receiving 'signed change events' on a schedule, which functions as a webhook-like event delivery mechanism, but the docs never explicitly describe a subscribe/webhook API, event types, delivery retries, or webhook management endpoints. missing for 10: explicit webhook subscription/management API docs, event schema/type documentation, delivery reliability/retry details, and independent confirmation of webhook functionality.",
    "evidenceIds": [
      "context-dev-docs-9"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "ai-natural-language-extraction",
    "verdict": "full",
    "quality": 7,
    "confidence": "medium",
    "rationale": "Docs describe an extract endpoint that crawls relevant pages and returns an object matching a JSON Schema with controls for grounding, coverage, and freshness—no CSS/XPath selectors required, just a schema/instructions-driven approach. Missing for 10: no explicit mention of natural-language instruction fields (vs. schema-only), no independent hands-on benchmark of extraction accuracy/quality.",
    "evidenceIds": [
      "context-dev-docs-4",
      "context-dev-docs-1",
      "context-dev-docs-11"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "api-interactive-docs",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Evidence confirms docs, guides, and an OpenAPI spec exist, but nothing indicates an interactive reference with runnable/try-it-out examples (no Swagger/Redoc playground, no 'try it' feature mentioned).",
    "evidenceIds": [
      "context-dev-probe-2",
      "context-dev-docs-1"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "api-machine-spec",
    "verdict": "full",
    "quality": 9,
    "confidence": "high",
    "rationale": "A probe confirms a live OpenAPI JSON spec at docs.context.dev/openapi.json (HTTP 200, contains 'openapi' key), directly satisfying the machine-readable spec requirement, alongside first-party docs describing the API surface. Missing for 10: independent third-party corroboration of spec completeness/versioning beyond the probe check.",
    "evidenceIds": [
      "context-dev-probe-2",
      "context-dev-docs-1"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "api-sandbox",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "context-dev",
    "storyId": "api-versioning-policy",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "Evidence shows an OpenAPI spec exists but no documentation of API versioning scheme or a deprecation policy anywhere in the pack. Missing for 10: versioning scheme documentation, explicit deprecation policy, migration/sunset notices.",
    "evidenceIds": []
  },
  {
    "productId": "context-dev",
    "storyId": "auto-captcha-unblock",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Context.dev is a web scraping/crawling/data-extraction API; there is no evidence of CAPTCHA-solving, login/session automation, or form-wall bypass capability. Community comments even question its handling of restricted/anti-scraping sites, and no docs describe login or CAPTCHA handling.",
    "evidenceIds": [
      "context-dev-comm-2",
      "context-dev-comm-4",
      "context-dev-comm-5",
      "context-dev-docs-7"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "auto-cheapest-config",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence of automatic model/config selection based on cost-success tradeoffs; docs cover crawling, extraction, timeouts, and rate limits but nothing about auto-selecting cheapest successful configuration.",
    "evidenceIds": []
  },
  {
    "productId": "context-dev",
    "storyId": "auto-retry-proxy-chain",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "No documentation or evidence describes proxy rotation, proxy-chain retries, or anti-bot bypass mechanisms; a community comment explicitly notes the homepage never mentions IP rotation or residential proxies, reinforcing the absence of this capability.",
    "evidenceIds": [
      "context-dev-comm-2",
      "context-dev-comm-5"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "automation-bulk-operations",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Docs describe genuine bulk capability: async crawl jobs processing up to 25,000 pages in the background with progress tracking, plus a smaller 500-page synchronous crawl mode, which cover bulk operations across many web pages. However, evidence doesn't show bulk operations across arbitrary item sets (e.g., batch brand lookups, batch document parsing, or bulk extraction across a list of disparate items) beyond website crawling, and there's no independent/hands-on corroboration of large-scale batch reliability. Missing for 10: evidence of bulk/batch endpoints beyond crawling (e.g., batch document conversion, batch structured extraction across arbitrary item lists), and third-party validation of large-scale batch performance.",
    "evidenceIds": [
      "context-dev-docs-2",
      "context-dev-docs-3",
      "context-dev-docs-4"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "automation-rules-engine",
    "verdict": "partial",
    "quality": 5,
    "confidence": "medium",
    "rationale": "Context.dev supports watching a page, sitemap, or dataset on a schedule and receiving signed change events, which functions as an event-trigger mechanism, but this is presented as a single monitoring feature rather than a general rule-definition system with configurable conditions and varied actions. Missing for 10: evidence of a rules/conditions engine, multiple trigger types beyond scheduled monitoring, and configurable downstream actions (e.g., webhooks to arbitrary endpoints, multi-step workflows).",
    "evidenceIds": [
      "context-dev-docs-9"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "automation-scheduled-jobs",
    "verdict": "partial",
    "quality": 5,
    "confidence": "medium",
    "rationale": "The docs describe a monitoring feature that watches a page, sitemap, or dataset 'on a schedule' and emits signed change events (context-dev-docs-9), which is a form of recurring job scheduling, but this is scoped only to change-detection, not general recurring crawl/extract/workflow jobs. Missing for 10: evidence of cron-style scheduling for arbitrary crawl/extract jobs, workflow chaining, or a broader job-scheduling API beyond the single 'monitor' feature.",
    "evidenceIds": [
      "context-dev-docs-9"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "automation-versioned-workflows",
    "verdict": "na",
    "quality": 0,
    "confidence": "high",
    "rationale": "Context.dev is a web-scraping/data-extraction API product, not an automation/workflow-builder tool; versioning, reviewing, and rolling back 'automations' is not a fair axis for this kind of product.",
    "evidenceIds": []
  },
  {
    "productId": "context-dev",
    "storyId": "batch-scrape-async",
    "verdict": "partial",
    "quality": 7,
    "confidence": "medium",
    "rationale": "Docs explicitly describe an async background crawl job handling up to 25,000 pages with progress tracking and retrieval on completion, plus rate-limit headers and partial-result timeout handling that support reliability at scale. However, this is framed as crawling one site rather than an arbitrary list of thousands of distinct URLs, and there is no independent/hands-on evidence confirming real-world throughput or reliability at that scale. Missing for 10: evidence of scraping an arbitrary batch/list of thousands of URLs (not just one site's crawl), independent benchmarks or user reports validating async batch reliability at scale.",
    "evidenceIds": [
      "context-dev-docs-3",
      "context-dev-docs-17",
      "context-dev-docs-18"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "block-ads-for-speed",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence pack item mentions ad-blocking, resource blocking, or any performance optimization feature to skip ads/media during scraping; the docs cover crawling, extraction, screenshots, and browser actions but never ad-blocking specifically. Missing for 10: any documentation of an ad-block or resource-blocking option, any performance/speed benefit tied to blocking ads.",
    "evidenceIds": []
  },
  {
    "productId": "context-dev",
    "storyId": "block-images-css-for-speed",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence that Context.dev offers a resource-blocking option (images/CSS) for scraping or crawling to reduce bandwidth; docs describe crawling, screenshot, extraction, and monitoring but never mention selective resource blocking.",
    "evidenceIds": []
  },
  {
    "productId": "context-dev",
    "storyId": "concurrency-cap-by-plan",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "Docs mention rate-limit headers exist and per-minute limits apply, but there is no evidence of tier-specific concurrency/session caps or the cost to raise them. Missing for 10: documented tier limits table, concrete numeric caps per plan, and pricing/upgrade path to raise the cap.",
    "evidenceIds": [
      "context-dev-docs-18"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "concurrent-sessions-at-scale",
    "verdict": "partial",
    "quality": 5,
    "confidence": "medium",
    "rationale": "Context.dev supports large single crawls (up to 25,000 pages async) and exposes rate-limit headers, implying some capacity for scaled scraping, but there is no explicit documentation of running many concurrent scraping sessions or session-level concurrency controls. Community feedback also raises doubts about scaling to high-volume/high-value scraping due to lack of rotating/residential proxy support. missing for 10: explicit concurrency/session-limit documentation, evidence of parallel job orchestration, and independent benchmarks confirming multi-session scale.",
    "evidenceIds": [
      "context-dev-docs-3",
      "context-dev-docs-18",
      "context-dev-comm-2",
      "context-dev-comm-5"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "content-change-monitoring",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Docs explicitly describe a monitoring feature that watches a page, sitemap, or dataset on a schedule and delivers signed change events, directly matching the story's core ask. However, there's no independent/hands-on corroboration of this feature working in practice, and no detail on notification channels (webhooks, email, etc.) or reliability at scale. Missing for 10: independent evidence of monitoring reliability, details on notification delivery mechanisms/channels, and evidence of scale/performance under continuous monitoring.",
    "evidenceIds": [
      "context-dev-docs-9"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "control-viewport-size",
    "verdict": "partial",
    "quality": 3,
    "confidence": "low",
    "rationale": "The screenshot guide mentions a 'viewport' capture mode alongside full-page and offset options, implying some viewport-based rendering, but no evidence specifies developer control over exact width/height dimensions. missing for 10: explicit API parameters for setting viewport width and height, documentation confirming custom viewport sizing, and any hands-on confirmation.",
    "evidenceIds": [
      "context-dev-docs-6"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "crawl-respects-robots-and-rate-limits",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "No documentation describes automatic robots.txt compliance or target-site rate-limiting; the only rate-limit doc (context-dev-docs-18) covers API-caller limits, not crawl politeness. Community evidence (context-dev-comm-4) even states the company relies on a manual opt-out blocklist rather than respecting robots.txt automatically, undercutting the story further.",
    "evidenceIds": [
      "context-dev-docs-18",
      "context-dev-comm-4"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "credit-overage-billing",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence pack item discusses what happens when a monthly credit or request quota is exceeded—no mention of overage billing or hard cutoffs; only per-minute rate-limit headers and timeout behavior are documented, which are unrelated to plan quota exhaustion.",
    "evidenceIds": []
  },
  {
    "productId": "context-dev",
    "storyId": "css-xpath-extraction",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Context.dev's extraction is schema-based (JSON Schema-driven structured extraction) with no evidence of CSS or XPath selector-based field extraction rules; docs mention Markdown conversion, crawling, and JSON-schema extraction but never selector syntax.",
    "evidenceIds": []
  },
  {
    "productId": "context-dev",
    "storyId": "custom-actor-development",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Context.dev exposes a fixed set of hosted scraping endpoints (crawl, extract, screenshot, monitor, parse) accessed via API/CLI/MCP, but there is no evidence of a mechanism for developers to write and deploy their own custom scraping scripts or actors on the platform's infrastructure. This is a fair question for a web-scraping-as-a-service category, so absence of evidence yields 'none' rather than 'na'.",
    "evidenceIds": []
  },
  {
    "productId": "context-dev",
    "storyId": "data-export-portability",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence of an export feature for scraped data or job configurations in a portable format, nor any migration/lock-in-avoidance tooling; data is returned via API responses (Markdown/JSON) but no mention of bulk export or config portability to another provider.",
    "evidenceIds": []
  },
  {
    "productId": "context-dev",
    "storyId": "data-quality-monitoring-alerts",
    "verdict": "partial",
    "quality": 4,
    "confidence": "low",
    "rationale": "Context.dev offers async crawl jobs with progress tracking (docs-3), some quality controls like grounding/coverage/freshness for extraction (docs-4), and scheduled change monitoring with signed events (docs-9), which loosely cover job status and alerting. However there is no dedicated job-performance dashboard, no explicit failure-alert/webhook system for scraping jobs, and no formal data-quality validation framework described. Missing for 10: job performance metrics/dashboard, explicit failure alerting (e.g. webhooks on job error), and structured data quality checks beyond extraction fidelity.",
    "evidenceIds": [
      "context-dev-docs-3",
      "context-dev-docs-4",
      "context-dev-docs-9",
      "context-dev-docs-17",
      "context-dev-docs-18"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "deep-crawl-bfs-with-limit",
    "verdict": "partial",
    "quality": 4,
    "confidence": "medium",
    "rationale": "Context.dev documents crawling with configurable maximum page limits (500 for sync, up to 25,000 for async batch crawls), satisfying the page-limit part of the story, but no evidence describes a selectable crawl strategy (e.g., breadth-first vs depth-first) as a configurable parameter. Missing for 10: explicit breadth-first strategy option/documentation, evidence of strategy configurability alongside the page limit.",
    "evidenceIds": [
      "context-dev-docs-2",
      "context-dev-docs-3"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "docker-container-deploy",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "context-dev",
    "storyId": "documented-rate-limits",
    "verdict": "partial",
    "quality": 4,
    "confidence": "medium",
    "rationale": "Docs confirm a per-minute rate limit exists and that authenticated responses expose rate-limit headers, but no specific numeric threshold (requests/sec or /min) is given in the evidence. Missing for 10: the actual documented numeric limit value, guidance on limits per plan/key tier, and confirmation via headers example showing remaining/limit values.",
    "evidenceIds": [
      "context-dev-docs-18"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "failed-request-billing",
    "verdict": "partial",
    "quality": 5,
    "confidence": "medium",
    "rationale": "Docs explicitly state that in the timeout/return-partial flow, if no usable result exists the request 'fails without a charge,' directly addressing billing behavior on failure. However, there's no broader documentation covering all failure modes (e.g., blocked requests, empty-result extractions, rate-limited calls) confirming whether they also skip billing. Missing for 10: explicit policy for blocked requests, empty JSON extraction results, and general error responses beyond the timeout optimization guide; independent/community confirmation of billing behavior.",
    "evidenceIds": [
      "context-dev-docs-17"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "full-site-crawl",
    "verdict": "full",
    "quality": 8,
    "confidence": "medium",
    "rationale": "Docs describe a one-request crawl endpoint that returns page Markdown for a site (up to 500 pages synchronously) plus an async option for up to 25,000 pages, and a real customer (SiteGPT) is cited using it to scrape entire websites into a knowledge base. Missing for 10: independent hands-on verification of crawl completeness/accuracy at scale and no third-party benchmark of crawl reliability beyond vendor docs and one customer quote.",
    "evidenceIds": [
      "context-dev-docs-2",
      "context-dev-docs-3",
      "context-dev-docs-16",
      "context-dev-docs-1"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "geo-targeted-proxy",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "No documentation or feature mentions country-specific proxy selection or geolocation control; community comments even question whether Context.dev uses rotating/residential proxies at all, suggesting no such capability exists.",
    "evidenceIds": [
      "context-dev-comm-2",
      "context-dev-comm-5"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "image-captioning-for-text-llm",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence of automatic image captioning or alt-text generation for visual content; the product's extraction focuses on Markdown/JSON/screenshots and document parsing, not describing images for text-only models. Missing for 10: any mention of image captioning, vision-to-text description, or alt-text generation feature.",
    "evidenceIds": []
  },
  {
    "productId": "context-dev",
    "storyId": "interactive-browser-sandbox",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "context-dev",
    "storyId": "js-rendering-spa",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Context.dev supports browser actions (click/wait/scroll) before scraping, and screenshot rendering, implying JS execution via a real browser, and crawl/scrape guides return Markdown/HTML output — suggesting rendered SPA content is retrievable. However, there is no explicit statement that scraping fully executes JavaScript-heavy SPAs or waits for hydration/network-idle by default, and no independent/hands-on confirmation of SPA rendering fidelity. missing for 10: explicit documentation confirming full JS/SPA rendering (e.g., wait-for-network-idle, headless browser execution) as default behavior, and independent verification of rendered output correctness for JS-heavy sites.",
    "evidenceIds": [
      "context-dev-docs-7",
      "context-dev-docs-6",
      "context-dev-docs-2",
      "context-dev-docs-3"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "json-schema-extraction",
    "verdict": "full",
    "quality": 8,
    "confidence": "medium",
    "rationale": "Docs explicitly describe extracting structured data by supplying a JSON Schema, with the API returning an object matching it, plus controls for grounding, coverage, and freshness; an OpenAPI spec is also available for verification. Missing for 10: independent hands-on confirmation of schema-conformance accuracy and no explicit mention of schema validation/error handling edge cases.",
    "evidenceIds": [
      "context-dev-docs-4",
      "context-dev-probe-2"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "large-table-chunked-extraction",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "context-dev",
    "storyId": "latency-completeness-tradeoff",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Context.dev offers explicit controls that trade off latency vs completeness: synchronous small crawls (fast, limited to 500 pages) vs async background crawls up to 25,000 pages, plus a 'return-partial' timeout policy that returns usable completed work with a completion marker rather than waiting for full completion. This directly supports controlling when content is returned along a latency/completeness axis, though it's documented only in claimed-docs with no independent hands-on validation of the tradeoff behavior. Missing for 10: independent/community confirmation of the return-partial and sync/async tradeoff working as documented, and more granular mid-request streaming or partial-result controls beyond the two crawl modes and timeout policy.",
    "evidenceIds": [
      "context-dev-docs-2",
      "context-dev-docs-3",
      "context-dev-docs-17"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "live-system-dashboard",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "context-dev",
    "storyId": "llm-driven-extraction",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "The extract-structured-data guide shows the product accepts a JSON Schema and returns matching structured data with grounding/coverage controls, which fits an LLM-driven extraction without pre-written CSS/XPath selectors. However, the evidence doesn't explicitly describe the underlying mechanism as an LLM 'deciding' fields freely versus schema-guided extraction, and there's no example of open-ended field discovery without a supplied schema. Missing for 10: evidence of schema-less/free-form field discovery, and independent hands-on confirmation of extraction quality without selectors.",
    "evidenceIds": [
      "context-dev-docs-4",
      "context-dev-docs-1"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "llm-ready-text-instead-of-raw-html",
    "verdict": "full",
    "quality": 8,
    "confidence": "high",
    "rationale": "Context.dev's core offering is scraping/crawling websites directly into clean Markdown (and JSON) for AI agents, handling rendering, browser actions, and document parsing so the user doesn't deal with raw HTML; this is corroborated by docs and a real-world migration story (SiteGPT switching from Firecrawl). missing for 10: independent hands-on benchmark of output cleanliness/quality versus alternatives, and no detail on how well it strips boilerplate/ads beyond doc claims.",
    "evidenceIds": [
      "context-dev-docs-1",
      "context-dev-docs-2",
      "context-dev-docs-3",
      "context-dev-docs-7",
      "context-dev-docs-8",
      "context-dev-docs-16"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "local-llm-extraction-backend",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "context-dev",
    "storyId": "markdown-output",
    "verdict": "full",
    "quality": 8,
    "confidence": "high",
    "rationale": "First-party docs consistently describe scraping/crawling output as Markdown (sync and async crawl endpoints, single-page scrape, document parsing all return Markdown rather than raw HTML), and this is corroborated by a customer case study (SiteGPT) using it to build a knowledge base. Missing for 10: independent hands-on verification of markdown output quality/cleanliness and no explicit sample output shown.",
    "evidenceIds": [
      "context-dev-docs-1",
      "context-dev-docs-2",
      "context-dev-docs-3",
      "context-dev-docs-8",
      "context-dev-docs-16"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "marketplace-monetization",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "context-dev",
    "storyId": "multi-format-choice",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Docs show explicit format choice for Markdown (sync/async crawl) and HTML (async crawl), plus JSON output via structured extraction, but no mention of plain 'text' or 'frontmatter' output options anywhere in the docs. missing for 10: explicit text output mode, frontmatter output mode, independent confirmation of format selection working in practice.",
    "evidenceIds": [
      "context-dev-docs-2",
      "context-dev-docs-3",
      "context-dev-docs-4",
      "context-dev-docs-1"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "nocode-automation-connector",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence of a prebuilt n8n or Zapier connector; the product exposes an API, CLI, MCP server, and SDK, but nothing about no-code automation platform integrations.",
    "evidenceIds": []
  },
  {
    "productId": "context-dev",
    "storyId": "open-source-library-integration",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "context-dev",
    "storyId": "openness-api-parity",
    "verdict": "full",
    "quality": 8,
    "confidence": "medium",
    "rationale": "Context.dev is API-first: the product's core functions (crawl, extract, screenshot, monitor, brand data) are all documented as API endpoints with an OpenAPI spec, and the CLI/MCP/skill installs are just wrappers around that same API, implying no UI-exclusive functionality. missing for 10: explicit confirmation that the web UI itself exposes zero features unavailable via API (e.g., dashboard-only settings) and independent hands-on verification of full parity.",
    "evidenceIds": [
      "context-dev-docs-1",
      "context-dev-docs-2",
      "context-dev-docs-3",
      "context-dev-docs-4",
      "context-dev-docs-9",
      "context-dev-docs-14",
      "context-dev-probe-2",
      "context-dev-probe-4"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "openness-full-export",
    "verdict": "partial",
    "quality": 4,
    "confidence": "low",
    "rationale": "Context.dev's outputs (Markdown, JSON, HTML) are inherently open, portable formats rather than proprietary lock-in formats, and structured extraction lets users get their scraped/monitored data in JSON Schema-conformant form (docs-1, docs-3, docs-4, docs-9). However there is no explicit account-level 'export all your data and leave' feature (e.g., bulk export of saved crawls, monitors, API key configs, or account deletion with data portability) documented anywhere in the evidence. Missing for 10: dedicated account/data export tooling, documentation of account deletion/data portability guarantees, and independent confirmation that historical crawl/monitor data can be bulk-exported.",
    "evidenceIds": [
      "context-dev-docs-1",
      "context-dev-docs-3",
      "context-dev-docs-4",
      "context-dev-docs-9"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "openness-open-license",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence of Context.dev's source code being available under an open license; this is a closed API/SaaS product with no mention of open-sourcing its codebase. Missing for 10: any public repository, license file, or open-source announcement.",
    "evidenceIds": []
  },
  {
    "productId": "context-dev",
    "storyId": "openness-self-host",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "Context.dev is a hosted API/SaaS product (web scraping, extraction, MCP, CLI) with no evidence of an open-source core or self-hosting option; all evidence points to a cloud-only API service.",
    "evidenceIds": []
  },
  {
    "productId": "context-dev",
    "storyId": "pass-session-cookies",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence in the pack mentions passing custom session cookies, headers, or authentication credentials for scraping protected pages; only browser-actions (click/wait/scroll) and general crawl/scrape features are documented.",
    "evidenceIds": []
  },
  {
    "productId": "context-dev",
    "storyId": "pdf-office-doc-extraction",
    "verdict": "full",
    "quality": 8,
    "confidence": "medium",
    "rationale": "Docs explicitly describe a 'parse-documents' API that converts PDFs, Office documents, and spreadsheets into Markdown, including OCR recovery for scanned PDFs, delivered as a hosted API (no self-hosting required). Missing for 10: independent/hands-on verification of extraction quality and no explicit mention of PowerPoint file type beyond generic 'Office documents'.",
    "evidenceIds": [
      "context-dev-docs-8"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "per-url-pattern-config",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The docs describe a single batch crawl job (up to 25,000 pages) with one set of settings, but there is no evidence of applying different crawl configurations to different URL patterns within the same job.",
    "evidenceIds": [
      "context-dev-docs-3",
      "context-dev-docs-2"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "persistent-authenticated-session",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence of persistent browser profiles, saved cookies, or reusable login/session state across requests; browser-actions doc only covers click/wait/scroll per single request. Missing for 10: any mention of persistent sessions, cookie storage, authentication state reuse, or profile management across multiple API calls.",
    "evidenceIds": [
      "context-dev-docs-7"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "pii-filtering-on-extraction",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence in the pack mentions PII detection, redaction, or filtering of sensitive personal data in scraped content; the docs cover scraping, crawling, extraction, screenshots, document parsing, and monitoring but nothing about PII compliance or content filtering.",
    "evidenceIds": []
  },
  {
    "productId": "context-dev",
    "storyId": "post-render-behind-login",
    "verdict": "partial",
    "quality": 4,
    "confidence": "low",
    "rationale": "Context.dev documents browser actions (click, wait, scroll) that can run before a scrape or extraction, which supports some interactive page manipulation, but there is no evidence of form-filling, typing credentials, or a persistent multi-step session capable of reaching authenticated/login-walled content. Missing for 10: explicit support for filling login forms/typing input, session/cookie persistence across interactions, and any documented login-wall use case or example.",
    "evidenceIds": [
      "context-dev-docs-7"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "prebuilt-scraper-marketplace",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "Context.dev's evidence describes a general-purpose scraping/crawling/extraction API, CLI, and MCP server that developers configure themselves, but no marketplace of pre-built, ready-made scrapers for specific sites/use-cases is mentioned anywhere in the docs, community discussion, or probes.",
    "evidenceIds": [
      "context-dev-docs-1",
      "context-dev-docs-2",
      "context-dev-docs-3",
      "context-dev-docs-4"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "premium-residential-proxies",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "No documentation or product page mentions residential/datacenter proxies, IP rotation, or anti-bot bypass infrastructure; community comments explicitly note the absence of any proxy mention and question whether the product can handle high-value/anti-scraping targets like LinkedIn.",
    "evidenceIds": [
      "context-dev-comm-2",
      "context-dev-comm-5",
      "context-dev-docs-1"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "privacy-data-residency",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence anywhere in the pack mentions data residency, region selection, or storage location options for Context.dev; the product is a web-scraping/data API with no documented control over where data is stored. Missing for 10: any mention of regional hosting, data residency options, or compliance certifications tied to storage location.",
    "evidenceIds": []
  },
  {
    "productId": "context-dev",
    "storyId": "privacy-no-training",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence pack item addresses data-training opt-out, privacy policy on model training, or any commitment about customer data usage for AI training; the pack only covers scraping/crawling features, API key restrictions, and community pricing/proxy debates.",
    "evidenceIds": []
  },
  {
    "productId": "context-dev",
    "storyId": "privacy-retention-controls",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence pack items address data retention policies, deletion controls, or data export/erasure mechanisms; the docs cover scraping, crawling, extraction, and API key permissions but nothing about how customer data is retained or can be deleted.",
    "evidenceIds": []
  },
  {
    "productId": "context-dev",
    "storyId": "privacy-telemetry-optout",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence in the pack addresses telemetry, usage tracking, or opt-out settings for Context.dev; the API/product docs focus on scraping, crawling, and data extraction features rather than privacy controls.",
    "evidenceIds": []
  },
  {
    "productId": "context-dev",
    "storyId": "public-status-page-history",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence of a public status page, uptime history, or incident postmortems anywhere in the docs, probes, or community discussion. missing for 10: public status page, uptime metrics, incident postmortem history.",
    "evidenceIds": []
  },
  {
    "productId": "context-dev",
    "storyId": "ready-made-templates",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "context-dev",
    "storyId": "reasoning-effort-control",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "context-dev",
    "storyId": "research-agent-preset",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "Context.dev is a web scraping/data extraction API with structured extraction, crawling, and monitoring features, but there is no evidence of a preset or configuration profile specifically tuned for 'research agents' that returns structured, citable output (e.g., with source attribution/citations). The extraction guide supports JSON Schema output but nothing about citation tracking or a research-agent preset.",
    "evidenceIds": []
  },
  {
    "productId": "context-dev",
    "storyId": "resume-crashed-crawl",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "Evidence shows async batch crawling with progress tracking (up to 25,000 pages) but no mention of checkpointing or resuming a crashed crawl from a saved state; only completed-job retrieval or partial-result return on timeout is documented, not crash recovery/resume.",
    "evidenceIds": [
      "context-dev-docs-3",
      "context-dev-docs-17"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "rotating-proxy-pool",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "No documentation or product page mentions proxy IP rotation, residential proxies, or anti-blocking infrastructure; a community comment on Hacker News explicitly notes the homepage never mentions 'ip' and questions whether rotating/residential proxies are used at all.",
    "evidenceIds": [
      "context-dev-comm-2",
      "context-dev-comm-5"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "scheduled-runs",
    "verdict": "partial",
    "quality": 5,
    "confidence": "medium",
    "rationale": "Context.dev's monitor-website-changes feature watches a page, sitemap, or dataset \"on a schedule\" and emits change events, which functions as scheduled recurring scraping, but this is framed narrowly as change-detection rather than a general-purpose cron/scheduler for arbitrary scrape/crawl jobs. Missing for 10: explicit documentation of configurable schedule intervals/cron syntax, ability to schedule full crawl or extract jobs (not just change monitors), and any independent/hands-on confirmation of scheduling reliability.",
    "evidenceIds": [
      "context-dev-docs-9",
      "context-dev-docs-3"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "screenshot-capture",
    "verdict": "full",
    "quality": 8,
    "confidence": "medium",
    "rationale": "Docs explicitly describe rendering an exact URL or resolved page and returning a viewport, full-page, or offset PNG capture, directly matching the story of full-page or selected-area screenshots. Missing for 10: independent/hands-on corroboration of screenshot quality or selector-based area capture beyond viewport/offset options.",
    "evidenceIds": [
      "context-dev-docs-6"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "scripted-page-interactions",
    "verdict": "full",
    "quality": 8,
    "confidence": "medium",
    "rationale": "Docs explicitly describe a browser-actions capability allowing click, wait, or scroll before scraping/extracting content, with success verification, directly matching the story. Missing for 10: independent/hands-on corroboration of scripted interactions beyond first-party docs, and no detail on filling form inputs specifically.",
    "evidenceIds": [
      "context-dev-docs-7"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "self-host-open-source",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence anywhere in the pack of an open-source or self-hostable version of Context.dev; it is presented exclusively as a hosted cloud API/service with CLI, MCP server, and SDKs pointing to context.dev endpoints. Missing for 10: any open-source repo, self-hosting instructions, Docker image, or license permitting local deployment.",
    "evidenceIds": []
  },
  {
    "productId": "context-dev",
    "storyId": "semantic-chunked-output",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Context.dev's docs describe scraping/crawling into full-page Markdown, JSON extraction, and document parsing, but nowhere mention a chunking feature (e.g., configurable chunk size, semantic segmentation, or overlap controls) intended for retrieval pipelines. Output is delivered as whole-page Markdown/HTML/JSON blobs per page, not sub-page semantic chunks.",
    "evidenceIds": [
      "context-dev-docs-1",
      "context-dev-docs-2",
      "context-dev-docs-3",
      "context-dev-docs-8"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "single-call-html-extraction",
    "verdict": "partial",
    "quality": 5,
    "confidence": "medium",
    "rationale": "Context.dev's primary scrape endpoints convert pages to Markdown by default (docs-1, docs-2), and raw HTML is only mentioned as an output option for the async batch-crawl job that must be polled for completion (docs-3), not as an immediate single-call response for a single page. This satisfies the general 'scrape a page via API' need but not the specific 'single call → raw HTML' expectation. Missing for 10: documented synchronous single-page endpoint that returns raw HTML directly, independent confirmation of HTML fidelity/quality.",
    "evidenceIds": [
      "context-dev-docs-1",
      "context-dev-docs-2",
      "context-dev-docs-3"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "spend-cap-alerts",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Evidence only shows rate-limit headers and API key restriction, but nothing about setting a spending cap, budget alert, or usage threshold notification; community mentions pricing complaints but no dispute of a cap feature since none is claimed.",
    "evidenceIds": []
  },
  {
    "productId": "context-dev",
    "storyId": "sticky-session-proxy",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "No documentation or product page mentions session-based IP persistence, sticky sessions, or proxy identity management; the crawl/scrape/extract guides only cover content retrieval, not proxy control. A community comment even flags the total absence of any IP/residential-proxy discussion on the site, reinforcing that this capability isn't offered.",
    "evidenceIds": [
      "context-dev-docs-2",
      "context-dev-docs-3",
      "context-dev-docs-7",
      "context-dev-comm-2"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "structured-json-output",
    "verdict": "full",
    "quality": 8,
    "confidence": "high",
    "rationale": "Docs explicitly describe extracting structured JSON matching a user-supplied JSON Schema from crawled pages, with controls for grounding, coverage, and freshness, plus an OpenAPI spec confirming API-driven JSON responses and a CLI that returns JSON for scripting/CI. missing for 10: independent hands-on verification of JSON extraction accuracy/quality beyond vendor docs.",
    "evidenceIds": [
      "context-dev-docs-4",
      "context-dev-docs-1",
      "context-dev-probe-2",
      "context-dev-docs-14"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "team-permissions-management",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence of team/organization features, shared scraper workflows, or role-based permission management beyond restricted API keys, which is a single-key scoping mechanism, not team/org collaboration. Missing for 10: organization/team creation, member invites, role-based access control across users, shared scraper/workflow assets.",
    "evidenceIds": [
      "context-dev-docs-10"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "undetected-browser-mode",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "No evidence in the pack claims an 'undetected browser' or anti-bot-bypass mode; the docs describe scraping, crawling, screenshots, and browser actions but never mention stealth/anti-detection techniques, and community comments explicitly question whether the product uses rotating/residential IPs at all, suggesting no such capability is documented.",
    "evidenceIds": [
      "context-dev-docs-7",
      "context-dev-comm-2",
      "context-dev-comm-5"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "url-discovery-map",
    "verdict": "full",
    "quality": 8,
    "confidence": "medium",
    "rationale": "Context.dev has a dedicated URL discovery endpoint that reads a site's public sitemaps and returns a filtered URL list \"without rendering each page,\" explicitly avoiding a full crawl — directly matching the story. Missing for 10: independent/hands-on corroboration of discovery speed or scale beyond vendor docs.",
    "evidenceIds": [
      "context-dev-docs-5"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "wait-for-selector",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Docs describe browser actions supporting 'wait' among click/scroll before scraping or extracting a page, which directly matches waiting for content before returning rendered output, but there's no explicit mention of waiting for a CSS/DOM selector specifically (vs. fixed delays) nor independent confirmation of this behavior. missing for 10: explicit selector-based wait documentation, example showing selector syntax, independent/hands-on verification.",
    "evidenceIds": [
      "context-dev-docs-7"
    ]
  },
  {
    "productId": "context-dev",
    "storyId": "web-search-with-content",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Context.dev's documented capabilities are URL-based (crawl, scrape, extract, sitemap discovery, screenshot, document parsing, monitoring) but no evidence shows a web-search endpoint that returns full page content for search results in one call — 'discover website URLs' only reads a site's own sitemap, not the open web.",
    "evidenceIds": [
      "context-dev-docs-1",
      "context-dev-docs-5",
      "context-dev-docs-2",
      "context-dev-docs-4"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "adaptive-stop-crawling",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "First-party docs explicitly describe an adaptive crawling feature using 'information foraging algorithms' that stops once sufficient information is gathered to answer a query, directly matching the story. However, there is no independent/hands-on corroboration of this specific feature's effectiveness, and no benchmark or user report validating its stopping accuracy. missing for 10: independent verification of adaptive-stop behavior, quantitative accuracy/efficiency data, community confirmation of real-world use.",
    "evidenceIds": [
      "crawl4ai-docs-3"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "agentic-agent-docs",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "A direct probe of the docs site found no llms.txt (404), and there is no evidence of any agent-oriented docs format for AI agents to consume; the evidence pack shows only standard human-readable documentation and CLI/MCP references that don't satisfy this story.",
    "evidenceIds": [
      "crawl4ai-probe-1"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "agentic-ai-insights",
    "verdict": "partial",
    "quality": 4,
    "confidence": "low",
    "rationale": "Crawl4AI offers LLM-driven structured extraction and adaptive crawling that determines when 'sufficient information' has been gathered, which could generate insight-like structured data from crawled content, but there is no evidence of a dashboard or interface that generates proactive 'insights and suggestions' about a user's own data corpus in the way the story implies. missing for 10: evidence of an insights/suggestions UI or report generation feature, evidence of proactive recommendations rather than raw extraction, independent confirmation of this use case.",
    "evidenceIds": [
      "crawl4ai-gh-1",
      "crawl4ai-docs-2",
      "crawl4ai-docs-3"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "agentic-autonomous-automation",
    "verdict": "partial",
    "quality": 4,
    "confidence": "low",
    "rationale": "Crawl4AI provides Docker/FastAPI deployment, resume checkpoints, and community mentions of bridging to automation tools like n8n and MCP servers, suggesting it can be embedded into autonomous background pipelines, but there is no first-party evidence of a native scheduler, trigger system, or persistent autonomous agent loop within Crawl4AI itself. missing for 10: native scheduling/trigger mechanism, documented autonomous background-run feature, first-party (non-community) evidence of persistent unattended operation, integration guide owned by Crawl4AI rather than third-party community sites.",
    "evidenceIds": [
      "crawl4ai-gh-5",
      "crawl4ai-gh-8",
      "crawl4ai-comm-5",
      "crawl4ai-comm-6",
      "crawl4ai-docs-3"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "agentic-builtin-assistant",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "crawl4ai",
    "storyId": "agentic-headless",
    "verdict": "full",
    "quality": 8,
    "confidence": "high",
    "rationale": "Crawl4AI ships a CLI (crwl), a Python async API usable in scripts, and a Dockerized FastAPI server setup explicitly for deployment/automation, all consistent with headless CI use; community evidence confirms production/Docker/n8n integrations. Missing for 10: no explicit CI pipeline example (e.g., GitHub Actions) or headless-mode flag documentation in the pack.",
    "evidenceIds": [
      "crawl4ai-docs-1",
      "crawl4ai-gh-2",
      "crawl4ai-gh-5",
      "crawl4ai-probe-4",
      "crawl4ai-comm-6"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "agentic-mcp-client",
    "verdict": "na",
    "quality": 0,
    "confidence": "high",
    "rationale": "Crawl4AI is a web-crawling library/service, not an agent that consumes external tools; the evidence shows it exposes an official MCP *server* (crawl4ai-probe-3) so that agents like Cursor/Claude can plug into it, which is the reverse relationship from the story's 'plug MCP servers into this product' framing. There is no evidence of Crawl4AI acting as an MCP client consuming other servers' tools, and this role doesn't fit its product category.",
    "evidenceIds": [
      "crawl4ai-probe-3",
      "crawl4ai-comm-5",
      "crawl4ai-comm-6"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "agentic-mcp-server",
    "verdict": "partial",
    "quality": 7,
    "confidence": "medium",
    "rationale": "Official docs explicitly document an MCP (Model Context Protocol) server for self-hosting, confirming Crawl4AI ships a first-party MCP integration point for agents. However, community evidence notes developers commonly struggle with configuring MCP servers for tools like Cursor, indicating real-world friction rather than a seamless plug-and-play experience. Missing for 10: detailed first-party MCP server docs/spec excerpt, independent hands-on confirmation of successful agent connection, and evidence the setup struggles are resolved.",
    "evidenceIds": [
      "crawl4ai-probe-3",
      "crawl4ai-comm-5",
      "crawl4ai-comm-6"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "agentic-nl-commands",
    "verdict": "partial",
    "quality": 5,
    "confidence": "medium",
    "rationale": "Crawl4AI supports LLM-based extraction where users can specify extraction goals in natural language, and its adaptive crawling engine stops based on a natural-language 'query' describing what information is needed. However, the core interface (CLI, Python API) is still command/flag-based, not a general natural-language command layer for controlling the crawler itself. missing for 10: evidence of a chat-style or NL command interface for the tool's core operations, independent confirmation of how well NL-driven extraction/query works in practice.",
    "evidenceIds": [
      "crawl4ai-gh-1",
      "crawl4ai-docs-3",
      "crawl4ai-gh-2",
      "crawl4ai-docs-2"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "agentic-official-cli",
    "verdict": "full",
    "quality": 8,
    "confidence": "high",
    "rationale": "There is a documented official CLI (`crwl`) with deep-crawl and other flags shown in GitHub examples, plus a dedicated docs page confirming it as an official feature. missing for 10: independent/hands-on third-party verification of the CLI's usage and a fuller list of supported CLI commands/flags beyond the single example.",
    "evidenceIds": [
      "crawl4ai-gh-2",
      "crawl4ai-probe-4"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "agentic-public-api",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Crawl4AI ships a documented Python async API (AsyncWebCrawler.arun), a CLI, and a Dockerized FastAPI server plus an official MCP endpoint, giving AI agents multiple programmatic ways to drive it. However, probes show no discoverable OpenAPI spec or llms.txt for the hosted API, meaning the REST/API surface isn't formally machine-documented in a standard way. Missing for 10: a published OpenAPI/swagger schema, llms.txt, and independent confirmation of API stability/versioning.",
    "evidenceIds": [
      "crawl4ai-docs-1",
      "crawl4ai-gh-2",
      "crawl4ai-gh-5",
      "crawl4ai-probe-3",
      "crawl4ai-probe-4",
      "crawl4ai-probe-1",
      "crawl4ai-probe-2"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "agentic-scoped-keys",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Crawl4AI is an open-source library/self-hosted tool that explicitly avoids API keys ('No forced API keys'), and there is no evidence of any credential issuance system, scoped tokens, or least-privilege access controls for agents; auth-related evidence only covers browser profile cookies/session state, not API credential scoping.",
    "evidenceIds": [
      "crawl4ai-docs-4",
      "crawl4ai-gh-3"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "agentic-sdks",
    "verdict": "full",
    "quality": 7,
    "confidence": "medium",
    "rationale": "Crawl4AI ships a first-party Python SDK (AsyncWebCrawler API, extraction strategies, CLI) that is well documented and used directly by developers per docs and GitHub. missing for 10: no official SDKs beyond Python (e.g., JS/TS), no OpenAPI spec (404s found), and no independent benchmarking of SDK stability/versioning.",
    "evidenceIds": [
      "crawl4ai-docs-1",
      "crawl4ai-docs-2",
      "crawl4ai-gh-1",
      "crawl4ai-gh-2",
      "crawl4ai-probe-4",
      "crawl4ai-probe-2"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "agentic-webhooks",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "No evidence of webhook subscription or event-push capability anywhere in the docs, GitHub features, or community discussion; the product is a crawling library/service with Docker/FastAPI/MCP interfaces but nothing about webhooks.",
    "evidenceIds": []
  },
  {
    "productId": "crawl4ai",
    "storyId": "ai-natural-language-extraction",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Crawl4AI documents LLM-based extraction as an alternative to CSS/XPath selectors, letting developers describe desired structured data rather than write selectors, and this is corroborated by GitHub feature docs (LLM-Driven Extraction, LLMTableExtraction). However, the evidence doesn't show natural-language instruction schemas in detail (e.g., prompt examples), nor independent hands-on validation of extraction quality/accuracy. missing for 10: concrete example of natural-language extraction prompt/schema, independent quality benchmarks or hands-on confirmation of NL-instruction extraction accuracy.",
    "evidenceIds": [
      "crawl4ai-docs-2",
      "crawl4ai-gh-1",
      "crawl4ai-gh-7"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "api-interactive-docs",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Docs show static code snippets (e.g., crawl4ai-docs-1) but there is no evidence of an interactive API reference (like Swagger/OpenAPI UI) or runnable in-browser examples; probes explicitly confirm openapi.json/swagger.json and llms.txt endpoints return 404, indicating no such interactive reference exists.",
    "evidenceIds": [
      "crawl4ai-docs-1",
      "crawl4ai-probe-1",
      "crawl4ai-probe-2"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "api-machine-spec",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Crawl4AI ships a Dockerized FastAPI server (crawl4ai-gh-5), so a machine-readable OpenAPI spec would be a plausible artifact, but direct probes for openapi.json/swagger.json/llms.txt all returned 404 with no alternative spec location documented.",
    "evidenceIds": [
      "crawl4ai-probe-2",
      "crawl4ai-probe-1",
      "crawl4ai-gh-5"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "api-sandbox",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "crawl4ai",
    "storyId": "api-versioning-policy",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence of versioned APIs or a documented deprecation policy; probes show no OpenAPI spec, no llms.txt, and no mention of versioning/deprecation practices anywhere in docs or community discussion.",
    "evidenceIds": [
      "crawl4ai-probe-1",
      "crawl4ai-probe-2"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "auto-captcha-unblock",
    "verdict": "partial",
    "quality": 4,
    "confidence": "medium",
    "rationale": "Crawl4AI offers persistent browser profiles with saved authentication/cookies and 'undetected browser' support to evade bot detection, plus proxy/retry chains, which partially help with login walls and basic anti-bot evasion. However, there is no evidence of automatic CAPTCHA-solving, and community feedback explicitly calls out login/session handling and bot mitigation as things the user must configure and own themselves rather than fully automatic agent behavior. missing for 10: CAPTCHA-solving capability, evidence of fully hands-off login/session bootstrap, independent confirmation that undetected-browser mode reliably bypasses modern bot walls without manual setup.",
    "evidenceIds": [
      "crawl4ai-gh-3",
      "crawl4ai-gh-9",
      "crawl4ai-gh-4",
      "crawl4ai-comm-3"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "auto-cheapest-config",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence of any auto-selection of cheapest model/config that still meets quality requirements; there's no cost-based routing, budget optimizer, or fallback-on-price logic described anywhere in the docs or community reports. Adaptive crawling stops when enough info is gathered, but that's about crawl coverage, not cost-based configuration selection.",
    "evidenceIds": []
  },
  {
    "productId": "crawl4ai",
    "storyId": "auto-retry-proxy-chain",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "GitHub feature list explicitly documents 'Automatic retry with proxy chain and fallback fetch function' plus undetected browser support for bot detection bypass, directly matching the story. However, this is a single line-item mention with no detailed docs, configuration examples, or independent/hands-on validation showing it working against real anti-bot systems. Missing for 10: dedicated documentation/tutorial on configuring proxy chains, code examples showing retry-on-block logic, and independent confirmation it succeeds against modern anti-bot defenses.",
    "evidenceIds": [
      "crawl4ai-gh-4",
      "crawl4ai-gh-9"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "automation-bulk-operations",
    "verdict": "full",
    "quality": 8,
    "confidence": "high",
    "rationale": "Crawl4AI supports batch/bulk crawling via deep-crawl BFS with max-pages, multi-URL configuration with per-pattern strategies, checkpoint/resume for large jobs, and dockerized/API deployment for scaling bulk crawls. Missing for 10: independent benchmarks of large-scale bulk runs and clearer documentation of concurrency/throughput limits at scale.",
    "evidenceIds": [
      "crawl4ai-gh-2",
      "crawl4ai-gh-10",
      "crawl4ai-gh-8",
      "crawl4ai-gh-5",
      "crawl4ai-docs-3"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "automation-rules-engine",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Crawl4AI is a crawling/extraction library with adaptive crawling, retries, and checkpointing, but there is no evidence of a rules/trigger engine that lets users define conditional event-based automations (e.g., 'if X happens, do Y'). Community notes even highlight that users must build their own automation/policy layer via external tools like n8n rather than Crawl4AI natively supporting this.",
    "evidenceIds": [
      "crawl4ai-comm-5",
      "crawl4ai-comm-6",
      "crawl4ai-docs-3"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "automation-scheduled-jobs",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Crawl4AI provides crawling, extraction, checkpointing, and Docker/API deployment, but no evidence of built-in scheduling or recurring job/workflow orchestration; community notes mention bridging to external tools like n8n for automation, implying no native scheduler exists.",
    "evidenceIds": [
      "crawl4ai-comm-5",
      "crawl4ai-comm-6",
      "crawl4ai-gh-8"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "automation-versioned-workflows",
    "verdict": "na",
    "quality": 0,
    "confidence": "high",
    "rationale": "Crawl4AI is a web-crawling/extraction library, not an automation/workflow builder with versioned pipelines; version control, review, and rollback of automations is a category error for this product type. No evidence pack item addresses versioning or rollback of crawl configurations/workflows.",
    "evidenceIds": []
  },
  {
    "productId": "crawl4ai",
    "storyId": "batch-scrape-async",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Crawl4AI supports async crawling (AsyncWebCrawler/arun), multi-URL batch configuration with per-pattern strategies, deep-crawl CLI options, retry/proxy fallback, and resume-from-checkpoint for long jobs, all pointing toward large-scale async scraping. However, there's no explicit documentation of a dedicated 'arun_many' or thousands-of-URLs batch API, concurrency/throughput benchmarks, or first-party evidence of tested scale at 'thousands of URLs'; community comments note buyers must build their own policy/quality/rate-limiting layer for production scale. Missing for 10: documented high-concurrency batch API (e.g., arun_many) with concurrency controls, published benchmarks/case studies at thousands-of-URL scale, and independent confirmation of reliability at that scale.",
    "evidenceIds": [
      "crawl4ai-docs-1",
      "crawl4ai-gh-10",
      "crawl4ai-gh-4",
      "crawl4ai-gh-8",
      "crawl4ai-gh-2",
      "crawl4ai-comm-2",
      "crawl4ai-comm-3"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "block-ads-for-speed",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence in the pack mentions ad-blocking or resource-blocking features to speed up crawling; while Crawl4AI has various performance and crawling features, none reference blocking ads specifically.",
    "evidenceIds": []
  },
  {
    "productId": "crawl4ai",
    "storyId": "block-images-css-for-speed",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence in the pack mentions blocking images/CSS resources or any bandwidth-saving resource-filtering feature; none of the docs, GitHub, or community citations reference this capability.",
    "evidenceIds": []
  },
  {
    "productId": "crawl4ai",
    "storyId": "concurrency-cap-by-plan",
    "verdict": "na",
    "quality": 0,
    "confidence": "high",
    "rationale": "Crawl4AI is an open-source, self-hosted library/Docker deployment with no vendor-imposed pricing tiers or session caps (crawl4ai-docs-4 emphasizes no forced API keys or paywalls); concurrency is governed by the user's own infrastructure, not a purchasable tier, so the pricing-limits axis doesn't apply to this product category.",
    "evidenceIds": [
      "crawl4ai-docs-4"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "concurrent-sessions-at-scale",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Crawl4AI supports batch/multi-URL crawling, deep crawl with max-pages, checkpoint resume, Docker/FastAPI deployment with a monitoring dashboard showing browser pool visibility, and retry/proxy chains—together implying support for concurrent, at-scale scraping. However, there's no explicit documentation of concurrency limits, session pooling configuration, or benchmarks proving many-simultaneous-session throughput, and community commentary notes users must build their own rate-limiting/production policy layer. Missing for 10: explicit concurrency/session-pool configuration docs, load/scale benchmarks, and independent verification of large-scale concurrent runs.",
    "evidenceIds": [
      "crawl4ai-gh-2",
      "crawl4ai-gh-4",
      "crawl4ai-gh-5",
      "crawl4ai-gh-6",
      "crawl4ai-gh-8",
      "crawl4ai-gh-10",
      "crawl4ai-comm-2",
      "crawl4ai-comm-3"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "content-change-monitoring",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Crawl4AI is a crawling/extraction library with deep-crawl, retry, and dashboard monitoring features, but nothing in the evidence describes scheduled re-crawling, diff/change-detection, or alerting/notification mechanisms for tracking content changes like price or listing updates over time.",
    "evidenceIds": []
  },
  {
    "productId": "crawl4ai",
    "storyId": "control-viewport-size",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "Crawl4AI is a browser-based crawler and viewport control (headless=True/False, viewport_width/height config) is a real feature category, but no evidence pack item mentions viewport, browser window size, or rendering dimensions configuration.",
    "evidenceIds": []
  },
  {
    "productId": "crawl4ai",
    "storyId": "crawl-respects-robots-and-rate-limits",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "No documentation or feature evidence shows Crawl4AI automatically respects robots.txt or enforces target-site rate limits; the only relevant community evidence explicitly notes that 'robots/ToS, rate limiting' are things the operator must own themselves, i.e., not built-in automation.",
    "evidenceIds": [
      "crawl4ai-comm-2",
      "crawl4ai-comm-3"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "credit-overage-billing",
    "verdict": "na",
    "quality": 0,
    "confidence": "high",
    "rationale": "Crawl4AI is an open-source, self-hosted crawling library/tool with no paywalls or paid plans (crawl4ai-docs-4), so there is no metered plan with credits, quotas, or overage billing for this question to apply to.",
    "evidenceIds": [
      "crawl4ai-docs-4"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "css-xpath-extraction",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Docs explicitly mention structured extraction supporting CSS and XPath selectors alongside LLM-based extraction, confirming the capability exists. However, evidence lacks concrete code examples, schema syntax details, or independent hands-on confirmation of CSS/XPath extraction specifically (most community and GitHub evidence focuses on LLM extraction, crawling, and deployment features instead). Missing for 10: detailed CSS/XPath schema examples, independent verification of selector-based extraction working in practice, documentation depth comparable to LLM extraction features.",
    "evidenceIds": [
      "crawl4ai-docs-2"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "custom-actor-development",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Crawl4AI is an open-source library/framework requiring self-hosting via Docker or local Python install; there is no evidence of a managed serverless platform for deploying custom scraping scripts without infrastructure management. Evidence instead shows users must set up Docker containers, browser pools, and monitoring dashboards themselves.",
    "evidenceIds": [
      "crawl4ai-gh-5",
      "crawl4ai-gh-6",
      "crawl4ai-comm-3",
      "crawl4ai-comm-5"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "data-export-portability",
    "verdict": "partial",
    "quality": 4,
    "confidence": "low",
    "rationale": "Crawl4AI outputs scraped data in portable formats like Markdown and structured JSON/CSS-XPath extraction, and being open-source with no forced API keys supports a no-lock-in narrative, but there is no documented feature for exporting or migrating job configurations, crawl profiles, or schemas to another provider. missing for 10: explicit config/job export or import tooling, documented migration path to another scraping provider, independent confirmation of format portability.",
    "evidenceIds": [
      "crawl4ai-docs-1",
      "crawl4ai-docs-2",
      "crawl4ai-docs-4"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "data-quality-monitoring-alerts",
    "verdict": "partial",
    "quality": 3,
    "confidence": "medium",
    "rationale": "There is a documented real-time monitoring dashboard with live system metrics and browser pool visibility, which covers basic job performance monitoring, and automatic retry with proxy/fallback chains aids reliability. However, there is no evidence of data quality validation features or an alerting/notification system for failures, and community feedback explicitly notes users must 'own the policy layer + quality gates' themselves. Missing for 10: data quality validation tooling, failure alerting/notification integration, and independent confirmation of the monitoring dashboard's depth.",
    "evidenceIds": [
      "crawl4ai-gh-6",
      "crawl4ai-gh-4",
      "crawl4ai-comm-2",
      "crawl4ai-comm-3"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "deep-crawl-bfs-with-limit",
    "verdict": "full",
    "quality": 8,
    "confidence": "medium",
    "rationale": "CLI evidence explicitly shows `--deep-crawl bfs --max-pages 10`, directly matching the requested breadth-first strategy with configurable page limit, and the official CLI docs corroborate this exists as a documented feature. Missing for 10: no independent hands-on report validating large-scale BFS crawl behavior/performance at scale, and no Python API example (only CLI) confirming programmatic configurability.",
    "evidenceIds": [
      "crawl4ai-gh-2",
      "crawl4ai-probe-4"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "docker-container-deploy",
    "verdict": "partial",
    "quality": 7,
    "confidence": "medium",
    "rationale": "GitHub docs explicitly advertise a 'Dockerized Setup: Optimized Docker image with FastAPI server for easy deployment' and community mentions of one-click Docker setups for production use corroborate this. However, there's no independent hands-on production deployment report, no details on scaling/orchestration guidance, and no OpenAPI spec confirmed (probe found 404s), leaving some production-readiness details unverified. Missing for 10: independent hands-on verification of the Docker deployment in production, confirmed API schema/OpenAPI docs, and details on scaling/orchestration best practices.",
    "evidenceIds": [
      "crawl4ai-gh-5",
      "crawl4ai-comm-6",
      "crawl4ai-probe-2"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "documented-rate-limits",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "crawl4ai",
    "storyId": "failed-request-billing",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "crawl4ai",
    "storyId": "full-site-crawl",
    "verdict": "full",
    "quality": 8,
    "confidence": "medium",
    "rationale": "Crawl4AI supports deep/BFS crawling with a max-pages parameter via CLI (--deep-crawl bfs --max-pages 10), plus adaptive crawling that decides when enough pages have been gathered, and resume_state for continuing large crawls — directly enabling whole-site crawling in one request/command. Community feedback confirms it's used for scraping at scale, though notes production concerns like rate limiting and bot mitigation as caveats. Missing for 10: independent benchmark of full-site crawl completeness/performance and clearer documentation of concurrency limits at scale.",
    "evidenceIds": [
      "crawl4ai-gh-2",
      "crawl4ai-docs-3",
      "crawl4ai-gh-8",
      "crawl4ai-comm-2",
      "crawl4ai-comm-3"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "geo-targeted-proxy",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "Evidence mentions proxy chain retry/fallback for reliability but nothing about selecting or requesting a proxy from a specific country/geolocation. Missing for 10: documentation of country-specific proxy selection, geolocation targeting API/config, and any example of requesting geo-located content.",
    "evidenceIds": [
      "crawl4ai-gh-4"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "image-captioning-for-text-llm",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence pack item mentions image captioning or alt-text generation for images; the extraction features described (LLM-based structured extraction, table extraction) are unrelated to describing visual content for a text-only model. Missing for 10: any mention of image-to-text captioning, vision-model integration, or alt-text generation feature.",
    "evidenceIds": []
  },
  {
    "productId": "crawl4ai",
    "storyId": "interactive-browser-sandbox",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "crawl4ai",
    "storyId": "js-rendering-spa",
    "verdict": "partial",
    "quality": 5,
    "confidence": "medium",
    "rationale": "Crawl4AI is built on a real browser (AsyncWebCrawler with undetected browser support, browser profiles, etc.), which implies it can render JS-heavy SPAs and return rendered HTML/markdown, but the evidence pack never explicitly documents JS execution/wait-for-selector behavior or confirms fully-rendered HTML output for SPAs. Missing for 10: explicit documentation of JS rendering/execution settings (e.g., wait_for, js_code, page load strategies), and independent/hands-on confirmation that dynamic SPA content is captured correctly.",
    "evidenceIds": [
      "crawl4ai-docs-1",
      "crawl4ai-gh-9",
      "crawl4ai-gh-3",
      "crawl4ai-gh-5"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "json-schema-extraction",
    "verdict": "partial",
    "quality": 5,
    "confidence": "low",
    "rationale": "Docs mention structured extraction via CSS/XPath/LLM-based extraction and LLM-driven extraction supporting schema-like structured output, implying JSON-schema-guided extraction, but no evidence pack item explicitly shows passing a JSON schema and receiving matching structured JSON output. missing for 10: explicit documented JSON schema parameter/example, sample output matching schema, independent verification of schema conformance.",
    "evidenceIds": [
      "crawl4ai-docs-2",
      "crawl4ai-gh-1"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "large-table-chunked-extraction",
    "verdict": "full",
    "quality": 7,
    "confidence": "medium",
    "rationale": "GitHub docs explicitly cite 'LLMTableExtraction: Revolutionary table extraction with intelligent chunking for massive tables,' directly matching the story of extracting data from very large tables via chunking. However, missing for 10: independent hands-on validation of chunking behavior on real large tables, and detailed documentation on configuring chunk size/limits or performance benchmarks.",
    "evidenceIds": [
      "crawl4ai-gh-7"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "latency-completeness-tradeoff",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Crawl4AI offers explicit levers to trade latency for completeness: adaptive crawling that stops once 'sufficient information' is gathered, deep-crawl with max-pages limits, and resume_state checkpointing to control scope of a crawl before returning results. However, evidence is first-party docs/GitHub only, with no independent benchmarks or hands-on confirmation of how well the adaptive stopping heuristic tunes latency-vs-completeness in practice. Missing for 10: independent verification of adaptive-crawl accuracy/latency tradeoffs, and explicit developer-facing controls (e.g., a 'depth' or 'confidence threshold' parameter) documented with examples.",
    "evidenceIds": [
      "crawl4ai-docs-3",
      "crawl4ai-gh-2",
      "crawl4ai-gh-8"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "live-system-dashboard",
    "verdict": "partial",
    "quality": 6,
    "confidence": "low",
    "rationale": "GitHub evidence explicitly claims a 'Real-time Monitoring Dashboard with live system metrics and browser pool visibility,' directly matching the story, but this is a single first-party mention with no independent hands-on corroboration, screenshots, or docs detail on what metrics/UI it exposes. missing for 10: independent/community confirmation of the dashboard working, detailed docs on metrics tracked, screenshots or setup instructions.",
    "evidenceIds": [
      "crawl4ai-gh-6"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "llm-driven-extraction",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Docs and GitHub confirm LLM-based structured extraction supporting arbitrary LLMs (open-source and proprietary), which enables schema-free, LLM-decided field extraction rather than fixed CSS/XPath selectors. However, evidence is thin on how the LLM decides fields (e.g., whether a schema/prompt is still required or if it's fully autonomous field discovery), and there's no hands-on example or independent validation of the LLM extraction path's accuracy. missing for 10: concrete example/walkthrough of LLM freely deciding fields without any schema, independent quality benchmarks on this specific extraction mode.",
    "evidenceIds": [
      "crawl4ai-docs-2",
      "crawl4ai-gh-1"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "llm-ready-text-instead-of-raw-html",
    "verdict": "full",
    "quality": 8,
    "confidence": "high",
    "rationale": "Core value proposition is documented directly: result.markdown provides clean LLM-ready markdown output from arun(), avoiding manual HTML parsing, plus structured/LLM-based extraction options and community confirmation it 'solves many LLM-scraping headaches.' Missing for 10: independent benchmarking of markdown output quality across diverse sites, and more detail on how blocking/anti-bot handling integrates seamlessly with the output pipeline.",
    "evidenceIds": [
      "crawl4ai-docs-1",
      "crawl4ai-docs-2",
      "crawl4ai-gh-1",
      "crawl4ai-comm-4"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "local-llm-extraction-backend",
    "verdict": "full",
    "quality": 8,
    "confidence": "medium",
    "rationale": "Docs and GitHub explicitly state LLM-based extraction supports all LLMs, both open-source and proprietary, and the project is fully open source with no forced API keys, implying local/self-hosted LLM backends can be plugged in for extraction. Missing for 10: explicit step-by-step docs/config example showing pointing extraction at a local model (e.g., Ollama endpoint) and independent hands-on confirmation of this specific workflow.",
    "evidenceIds": [
      "crawl4ai-gh-1",
      "crawl4ai-docs-2",
      "crawl4ai-docs-4"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "markdown-output",
    "verdict": "full",
    "quality": 8,
    "confidence": "high",
    "rationale": "First-party docs show result.markdown as the direct output from crawler.arun(), and community sentiment corroborates it as a core value proposition for LLM-scraping. Missing for 10: independent hands-on verification of markdown quality/cleanliness and details on markdown customization options (e.g., filters).",
    "evidenceIds": [
      "crawl4ai-docs-1",
      "crawl4ai-comm-4"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "marketplace-monetization",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "crawl4ai",
    "storyId": "multi-format-choice",
    "verdict": "partial",
    "quality": 4,
    "confidence": "low",
    "rationale": "Evidence confirms markdown output (result.markdown) and structured/CSS/XPath/LLM extraction, but the pack contains no explicit mention of selectable HTML, text, or frontmatter output formats. Missing for 10: documented options for raw/cleaned HTML output, plain text output, and frontmatter format selection.",
    "evidenceIds": [
      "crawl4ai-docs-1",
      "crawl4ai-docs-2"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "nocode-automation-connector",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "No evidence of a prebuilt n8n/Zapier connector; the only related evidence is community commentary noting developers struggle to bridge Crawl4AI with n8n and a third-party community doc hub with Docker setup guides, not an official connector from Crawl4AI itself.",
    "evidenceIds": [
      "crawl4ai-comm-5",
      "crawl4ai-comm-6",
      "crawl4ai-gh-5"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "open-source-library-integration",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Crawl4AI ships its own AsyncWebCrawler API (built on Playwright internally) rather than exposing compatibility layers for Playwright, Puppeteer, Selenium, or Scrapy code; none of the evidence mentions using these other libraries to build scrapers within Crawl4AI.",
    "evidenceIds": [
      "crawl4ai-docs-1",
      "crawl4ai-gh-2"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "openness-api-parity",
    "verdict": "partial",
    "quality": 5,
    "confidence": "low",
    "rationale": "Crawl4AI is API/library-first (Python API, CLI, Docker/FastAPI server) and the only 'UI' surface mentioned is a monitoring dashboard for the Docker deployment, so most functionality is inherently API-native; however probes found no OpenAPI spec (404s) to confirm full parity/documentation of the API surface, and there's no explicit claim that dashboard-only features (e.g., live monitoring) are also exposed via API. missing for 10: explicit API/OpenAPI documentation confirming parity, evidence that dashboard-specific features (metrics, browser pool visibility) are also API-accessible.",
    "evidenceIds": [
      "crawl4ai-docs-1",
      "crawl4ai-gh-2",
      "crawl4ai-gh-5",
      "crawl4ai-gh-6",
      "crawl4ai-probe-2",
      "crawl4ai-probe-4"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "openness-full-export",
    "verdict": "full",
    "quality": 7,
    "confidence": "medium",
    "rationale": "Crawl4AI is fully open-source and self-hosted, and its core output is markdown/JSON (open, non-proprietary formats) with no forced API keys or paywalls, meaning there is no vendor silo to 'leave' in the first place. Structured extraction (CSS/XPath/LLM) further lets users get data out in standard formats.  Missing for 10: no explicit bulk 'export all my data' feature, no documented data-portability/migration tooling, and no independent hands-on confirmation of full data portability beyond architecture inference.",
    "evidenceIds": [
      "crawl4ai-docs-1",
      "crawl4ai-docs-2",
      "crawl4ai-docs-4",
      "crawl4ai-gh-1"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "openness-open-license",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "The project is explicitly described as open source (GitHub repo, docs stating 'Open Source: No forced API keys, no paywalls'), and community posts confirm it as an 'amazing open-source library', supporting readable source code. However, no specific license name (e.g., Apache-2.0, MIT) is cited in the evidence pack, so the exact open-license terms are unconfirmed. Missing for 10: explicit license identification/text, independent confirmation of license permissiveness.",
    "evidenceIds": [
      "crawl4ai-docs-4",
      "crawl4ai-gh-1",
      "crawl4ai-comm-4"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "openness-self-host",
    "verdict": "full",
    "quality": 8,
    "confidence": "high",
    "rationale": "Crawl4AI is open-source with a Dockerized FastAPI setup for deployment, explicit self-hosting docs (including MCP support), and community confirmation of running it themselves via Docker/n8n setups. Missing for 10: independent hands-on verification of a full self-hosted production deployment at scale, and more detail on resource/infra requirements.",
    "evidenceIds": [
      "crawl4ai-gh-5",
      "crawl4ai-docs-4",
      "crawl4ai-probe-3",
      "crawl4ai-comm-6"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "pass-session-cookies",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "GitHub docs mention a Browser Profiler that creates and manages persistent profiles with saved authentication states and cookies, indicating support for passing session/auth state into crawls. However, there's no explicit first-party documentation snippet showing how to directly inject custom session cookies into the arun() API call, and no independent hands-on confirmation of this specific workflow. Missing for 10: direct API-level example of passing cookies, independent verification of authenticated-page fetching working reliably.",
    "evidenceIds": [
      "crawl4ai-gh-3"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "pdf-office-doc-extraction",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence in the pack mentions extraction of PDF, Word, Excel, or PowerPoint file content; all documented capabilities relate to web page crawling, structured/LLM extraction from HTML, and table extraction, not office document formats.",
    "evidenceIds": []
  },
  {
    "productId": "crawl4ai",
    "storyId": "per-url-pattern-config",
    "verdict": "full",
    "quality": 7,
    "confidence": "medium",
    "rationale": "GitHub docs explicitly advertise 'Multi-URL Configuration: Different strategies for different URL patterns in one batch,' directly matching the story. However, this is only a single-line feature mention with no first-party documentation example, API detail, or independent hands-on confirmation. missing for 10: detailed docs/tutorial showing per-pattern config syntax, independent/community validation of this specific feature in practice.",
    "evidenceIds": [
      "crawl4ai-gh-10"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "persistent-authenticated-session",
    "verdict": "full",
    "quality": 7,
    "confidence": "medium",
    "rationale": "GitHub docs explicitly describe a 'Browser Profiler' feature for creating and managing persistent profiles with saved authentication states, cookies, and settings, directly matching the story. Missing for 10: no independent/hands-on corroboration of profile reuse across multiple requests, and no first-party code sample demonstrating loading a saved profile in arun/AsyncWebCrawler calls.",
    "evidenceIds": [
      "crawl4ai-gh-3"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "pii-filtering-on-extraction",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence anywhere in the pack of built-in PII detection or filtering; extraction features focus on structured/LLM-based data extraction, not privacy compliance. Community commentary explicitly flags PII handling as something the user must own ('not accidentally hoovering up PII' as a 'boring production bit'), reinforcing that this is not a shipped capability.",
    "evidenceIds": [
      "crawl4ai-comm-3"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "post-render-behind-login",
    "verdict": "partial",
    "quality": 4,
    "confidence": "low",
    "rationale": "The Browser Profiler feature (crawl4ai-gh-3) supports persistent authentication states and cookies, which can help reach content behind a login wall, but there is no direct evidence of interactive session APIs for clicking or filling forms mid-crawl. Community commentary (crawl4ai-comm-3) even flags login/session handling as one of the 'boring production bits' users must handle themselves, suggesting it's not a polished, first-class capability. missing for 10: explicit documentation of click/fill/form-interaction APIs, session-persistence across multiple interactive steps, and independent confirmation of successful login-wall traversal.",
    "evidenceIds": [
      "crawl4ai-gh-3",
      "crawl4ai-comm-3"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "prebuilt-scraper-marketplace",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "No evidence of a marketplace or gallery of ready-made scrapers/templates that a developer could run out of the box; the evidence only covers building crawlers via code/CLI configuration yourself, not a pre-built scraper marketplace.",
    "evidenceIds": []
  },
  {
    "productId": "crawl4ai",
    "storyId": "premium-residential-proxies",
    "verdict": "partial",
    "quality": 4,
    "confidence": "low",
    "rationale": "Crawl4AI supports proxy chains with automatic retry/fallback and undetected browser mode to bypass bot detection, but there is no evidence of built-in support for premium residential/datacenter proxy providers or proxy rotation services—users must bring and configure their own proxies. missing for 10: no documented integration with residential/datacenter proxy providers, no proxy rotation/pool management features, no independent evidence of successful bypass on hard-to-scrape sites using proxies.",
    "evidenceIds": [
      "crawl4ai-gh-4",
      "crawl4ai-gh-9"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "privacy-data-residency",
    "verdict": "partial",
    "quality": 3,
    "confidence": "low",
    "rationale": "Crawl4AI is open-source and self-hosted (Dockerized Setup), which implicitly lets users control where data is processed/stored by choosing their own deployment infrastructure, but there is no explicit documentation, configuration option, or claim about region/data-residency selection. missing for 10: explicit data residency/region configuration options, documentation addressing compliance/residency requirements, any mention of storage location control beyond generic self-hosting.",
    "evidenceIds": [
      "crawl4ai-gh-5",
      "crawl4ai-docs-4"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "privacy-no-training",
    "verdict": "na",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Crawl4AI is a self-hosted, open-source crawling library that runs on the user's own infrastructure; there is no vendor-hosted service that ingests user data for model training, so a 'prevent training on my data' opt-out is a category mismatch rather than a missing feature. Any LLM training concerns would pertain to whichever third-party LLM the user chooses to plug in, not to Crawl4AI itself.",
    "evidenceIds": [
      "crawl4ai-docs-4",
      "crawl4ai-gh-1"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "privacy-retention-controls",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence describes explicit data retention/deletion controls (e.g., cache TTLs, purge commands, GDPR-style export/delete APIs); the only related item is a vague self-hosted/open-source claim about accessing your own data, which does not address retention or deletion policy.",
    "evidenceIds": [
      "crawl4ai-docs-4"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "privacy-telemetry-optout",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "Crawl4AI is an open-source, self-hosted library (no forced API keys/paywalls), which suggests limited built-in telemetry, but no evidence pack item mentions a telemetry system, opt-out flag, or privacy/usage-tracking policy at all.",
    "evidenceIds": []
  },
  {
    "productId": "crawl4ai",
    "storyId": "public-status-page-history",
    "verdict": "na",
    "quality": 0,
    "confidence": "high",
    "rationale": "Crawl4AI is an open-source self-hosted crawling library/tool, not a hosted SaaS with an uptime/SLA obligation; a public status page with incident postmortems is not a fair expectation for this product category.",
    "evidenceIds": []
  },
  {
    "productId": "crawl4ai",
    "storyId": "ready-made-templates",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The evidence shows basic usage snippets, CLI/Docker deployment instructions, and a third-party community docs hub with one-click setups, but no official library of ready-made project templates or starter kits is documented by the vendor.",
    "evidenceIds": [
      "crawl4ai-docs-1",
      "crawl4ai-gh-5",
      "crawl4ai-comm-6"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "reasoning-effort-control",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Crawl4AI has adaptive crawling that stops when 'enough' info is gathered, but there is no evidence of a configurable reasoning-effort dial (low/medium/high) for agent tasks.",
    "evidenceIds": []
  },
  {
    "productId": "crawl4ai",
    "storyId": "research-agent-preset",
    "verdict": "partial",
    "quality": 5,
    "confidence": "medium",
    "rationale": "Crawl4AI supports markdown/structured output and LLM-based structured extraction, and its 'adaptive crawling' feature explicitly determines when 'sufficient information has been gathered to answer your query,' which aligns with a research-agent workflow. However, there is no evidence of an actual named preset/config specifically tuned for research agents nor of output formatted with citations/sources for verifiability. Missing for 10: a documented 'research agent' preset profile, explicit citation/source-tracking in output, and independent confirmation that adaptive crawling output is citable.",
    "evidenceIds": [
      "crawl4ai-docs-2",
      "crawl4ai-docs-3",
      "crawl4ai-gh-1",
      "crawl4ai-docs-1"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "resume-crashed-crawl",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "GitHub evidence confirms a resume_state parameter to continue a deep crawl from a saved checkpoint, directly matching the story. However, there's no documentation detail on how checkpoints are saved automatically during a crash, how frequently state is persisted, or independent hands-on confirmation of this working in practice. missing for 10: first-party docs walkthrough of checkpoint save/resume workflow, independent/community verification of crash-recovery behavior.",
    "evidenceIds": [
      "crawl4ai-gh-8"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "rotating-proxy-pool",
    "verdict": "partial",
    "quality": 5,
    "confidence": "low",
    "rationale": "There is evidence of proxy chain retry/fallback logic (automatic retry with proxy chain and fallback fetch function) and undetected browser support for bot detection bypass, indicating some proxy-rotation and anti-bot capability exists. However, no documentation details how to configure a pool of rotating proxy IPs, proxy list management, or rotation strategy specifics. missing for 10: explicit proxy pool configuration docs, rotation strategy details, independent confirmation of proxy rotation working in practice.",
    "evidenceIds": [
      "crawl4ai-gh-4",
      "crawl4ai-gh-9"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "scheduled-runs",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "No evidence of built-in scheduling functionality (cron-like triggers or job scheduler) — Crawl4AI is a crawling/extraction library and CLI/Docker deployment, with community notes suggesting users must bridge to external automation tools like n8n for production workflows including scheduling. Missing for 10: any native scheduler, cron integration, or documented recurring-job API.",
    "evidenceIds": [
      "crawl4ai-comm-5",
      "crawl4ai-comm-6",
      "crawl4ai-gh-5"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "screenshot-capture",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence in the pack mentions screenshot capture, full-page or selector-based screenshots, or any image output capability of Crawl4AI.",
    "evidenceIds": []
  },
  {
    "productId": "crawl4ai",
    "storyId": "scripted-page-interactions",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "The evidence pack describes many Crawl4AI features (extraction, deep-crawl, browser profiles, proxy retry, docker/MCP/CLI) but never mentions scripting page interactions such as clicking, filling inputs, or scrolling before extraction. This is a fair capability to expect from a browser-based crawler, but no evidence in the pack documents it.",
    "evidenceIds": []
  },
  {
    "productId": "crawl4ai",
    "storyId": "self-host-open-source",
    "verdict": "full",
    "quality": 9,
    "confidence": "high",
    "rationale": "Crawl4AI is explicitly open source with no forced API keys/paywalls, distributed via GitHub, and supports Dockerized self-hosting with a FastAPI server, plus community-documented self-hosting guides (Docker, n8n, MCP for Cursor/Claude) corroborating real-world self-hosted deployments. missing for 10: independent benchmark/uptime evidence of large-scale self-hosted production use.",
    "evidenceIds": [
      "crawl4ai-docs-4",
      "crawl4ai-gh-5",
      "crawl4ai-comm-6",
      "crawl4ai-probe-3"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "semantic-chunked-output",
    "verdict": "partial",
    "quality": 4,
    "confidence": "low",
    "rationale": "Evidence only shows 'intelligent chunking' applied specifically to massive table extraction (LLMTableExtraction), not a general semantic chunking mode for arbitrary page content feeding a RAG pipeline. Structured/LLM extraction exists but nothing documents configurable chunk sizes, overlap, or semantic-boundary chunking of markdown output. Missing for 10: documented general-purpose content chunking strategy (e.g. semantic/topic-based chunking of markdown), configurable chunk size/overlap, and independent confirmation it integrates cleanly into retrieval pipelines.",
    "evidenceIds": [
      "crawl4ai-gh-7",
      "crawl4ai-docs-2",
      "crawl4ai-docs-1"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "single-call-html-extraction",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "The docs show a single async call (crawler.arun(url=...)) returning a result object, and result.html/cleaned_html is a documented attribute of Crawl4AI's result, though the sample shown emphasizes result.markdown rather than raw HTML explicitly. This confirms single-call scraping works, but the evidence pack doesn't explicitly show raw HTML retrieval or an OpenAPI-documented single-endpoint HTTP API (openapi probes 404). missing for 10: explicit example of raw HTML field usage, independent confirmation of HTML fidelity/extraction quality.",
    "evidenceIds": [
      "crawl4ai-docs-1",
      "crawl4ai-gh-5",
      "crawl4ai-probe-2"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "spend-cap-alerts",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "Crawl4AI is an open-source self-hosted crawler with no billing/credit system mentioned anywhere in the evidence; there is no spending cap, usage alert, or budget-tracking feature documented for proxy/LLM credit consumption.",
    "evidenceIds": []
  },
  {
    "productId": "crawl4ai",
    "storyId": "sticky-session-proxy",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "Evidence mentions proxy chains for retry/fallback and undetected browser support, but there is no mention of a session identifier mechanism to route multiple requests through the same proxy IP for persistent identity. Missing for 10: sticky-session/proxy-session-ID feature documentation, any example binding a session to a specific proxy IP, and independent confirmation of this capability.",
    "evidenceIds": [
      "crawl4ai-gh-4",
      "crawl4ai-gh-9"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "structured-json-output",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Docs confirm structured extraction via CSS/XPath/LLM strategies producing structured data (JSON-like) and LLM-driven structured data extraction, plus table extraction into structured form, supporting the core capability. However, the evidence never explicitly shows a JSON output example or schema, and there's no first-party confirmation of a dedicated JSON output mode/field beyond the markdown example shown. missing for 10: an explicit documented JSON output example/schema, independent hands-on confirmation of JSON structure quality.",
    "evidenceIds": [
      "crawl4ai-docs-2",
      "crawl4ai-gh-1",
      "crawl4ai-gh-7",
      "crawl4ai-docs-1"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "team-permissions-management",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "crawl4ai",
    "storyId": "undetected-browser-mode",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "GitHub feature list explicitly claims 'Undetected Browser Support: Bypass sophisticated bot detection systems,' directly matching the story, and this is corroborated by related anti-detection features like persistent browser profiles and proxy chain retries. However, there is no independent/hands-on evidence confirming its effectiveness, and community commentary notes bot mitigation is still something users must handle themselves ('own the policy layer', 'boring production bits: ... bot mitigation'), suggesting real-world limitations. Missing for 10: independent verification of undetected-mode effectiveness, technical documentation on how it works, and resolution of community caveats about needing to handle bot mitigation manually.",
    "evidenceIds": [
      "crawl4ai-gh-9",
      "crawl4ai-gh-3",
      "crawl4ai-gh-4",
      "crawl4ai-comm-3"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "url-discovery-map",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Evidence shows deep-crawl (BFS) and adaptive crawling features that limit or stop crawling, but these still involve fetching and parsing pages rather than instantly enumerating a site's URL list (e.g., via sitemap parsing) without crawling. No probe or doc confirms a dedicated 'discover URLs only' mode. Missing for 10: sitemap.xml/URL-discovery feature, evidence of URL enumeration without page fetches, independent confirmation of instant discovery.",
    "evidenceIds": [
      "crawl4ai-gh-2",
      "crawl4ai-docs-3"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "wait-for-selector",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence in the pack mentions a wait_for/selector-based config option or any mechanism to delay page return until a specific CSS/XPath selector appears; the docs snippets shown only cover basic arun usage, extraction, and CLI/MCP features. missing for 10: documentation or example of a wait_for_selector or similar parameter, confirmation it blocks return until element renders, any community/hands-on validation of this feature.",
    "evidenceIds": [
      "crawl4ai-docs-1",
      "crawl4ai-docs-2"
    ]
  },
  {
    "productId": "crawl4ai",
    "storyId": "web-search-with-content",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Crawl4AI's evidence describes crawling/scraping given URLs, deep-crawl (BFS) from a seed URL, and structured/LLM extraction, but no evidence of a web-search capability that returns full content for search-engine results in one call. Since comparable scraping tools do offer this, the axis applies but no supporting evidence exists here.",
    "evidenceIds": [
      "crawl4ai-docs-1",
      "crawl4ai-gh-2",
      "crawl4ai-docs-3"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "adaptive-stop-crawling",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "The evidence describes crawling, scraping, and AI agent search/reasoning controls (e.g., firecrawl-gh-1, firecrawl-gh-2), but nothing documents adaptive crawling that automatically halts once sufficient information has been gathered to answer a specific query — crawls appear to run to full site discovery or fixed limits rather than stopping based on information sufficiency.",
    "evidenceIds": []
  },
  {
    "productId": "firecrawl",
    "storyId": "agentic-agent-docs",
    "verdict": "full",
    "quality": 7,
    "confidence": "medium",
    "rationale": "A direct probe confirms Firecrawl publishes a working llms.txt at docs.firecrawl.dev/llms.txt with structured agent-readable documentation links, letting an AI agent be pointed directly at it to navigate Firecrawl's docs. Missing for 10: explicit first-party announcement/documentation describing llms.txt support as a deliberate feature, and independent community confirmation of agents successfully using it.",
    "evidenceIds": [
      "firecrawl-probe-1"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "agentic-ai-insights",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "firecrawl",
    "storyId": "agentic-autonomous-automation",
    "verdict": "partial",
    "quality": 5,
    "confidence": "medium",
    "rationale": "Firecrawl supports webhooks for async event delivery and crawling jobs that run without blocking, which enables background/autonomous data-retrieval workflows, and its MCP server/CLI let agents trigger these jobs programmatically. However there's no evidence of a scheduling/trigger system (e.g., cron-like recurring jobs) or persistent autonomous 'automation' orchestration beyond one-off crawl/extract jobs with webhook callbacks. Missing for 10: scheduled/recurring job support, autonomous multi-step automation orchestration, independent confirmation of long-running background automation reliability.",
    "evidenceIds": [
      "firecrawl-docs-7",
      "firecrawl-gh-5",
      "firecrawl-docs-5",
      "firecrawl-probe-3"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "agentic-builtin-assistant",
    "verdict": "partial",
    "quality": 4,
    "confidence": "low",
    "rationale": "Firecrawl exposes an 'AI agent' mode where a user describes what they need and the agent searches/navigates/retrieves without URLs, with configurable reasoning effort (firecrawl-gh-1, firecrawl-gh-2) — a limited form of task delegation to an embedded AI. However, this is a narrow scraping/search agent, not a general-purpose in-product assistant, and there's no evidence of a broader conversational assistant UI for delegating arbitrary tasks. Missing for 10: evidence of a general-purpose conversational assistant interface, examples of delegated multi-step tasks beyond search/navigate, and independent confirmation of this agent's real-world reliability.",
    "evidenceIds": [
      "firecrawl-gh-1",
      "firecrawl-gh-2"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "agentic-headless",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Firecrawl offers an API-first product (async scraping, webhooks, CLI, SDKs) that is well-suited to headless/CI use, and docs confirm a CLI and webhook-based async event delivery for automation pipelines. However, there's no explicit CI-specific documentation (e.g., GitHub Actions examples, Docker image for CI), and community comments note some daemon/CLI limitations rather than confirming robust CI usage. missing for 10: explicit CI/headless deployment docs or examples, independent confirmation of stable CLI/daemon behavior in automated pipelines, containerization guidance for CI environments.",
    "evidenceIds": [
      "firecrawl-docs-7",
      "firecrawl-probe-4",
      "firecrawl-gh-5",
      "firecrawl-comm-4"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "agentic-mcp-client",
    "verdict": "na",
    "quality": 0,
    "confidence": "high",
    "rationale": "Firecrawl is a web-scraping/crawling API/service that itself exposes an MCP server for other AI tools to consume (firecrawl-docs-5, firecrawl-probe-3); it is not an agent or orchestration platform designed to consume external MCP servers as a client. The evidence pack shows no capability for Firecrawl to import/plug in third-party MCP servers to extend its own tool use, and this is not a fair capability to expect of a scraping API — it's the reverse role.",
    "evidenceIds": [
      "firecrawl-docs-5",
      "firecrawl-probe-3"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "agentic-mcp-server",
    "verdict": "full",
    "quality": 8,
    "confidence": "high",
    "rationale": "Firecrawl is a scraping/data-extraction service (not itself an agent), and it documents an official MCP server for connecting AI tools/agents to Firecrawl, corroborated by a dedicated GitHub repo (firecrawl-mcp-server). Missing for 10: independent hands-on testing of the MCP server itself and details on tool/resource coverage exposed via MCP.",
    "evidenceIds": [
      "firecrawl-docs-5",
      "firecrawl-probe-3"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "agentic-nl-commands",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Firecrawl offers a natural-language 'search agent' mode ('Describe what you need... No URLs required') and lets users tune agent reasoning effort, which supports NL-driven operation, and its MCP/CLI integrations let AI agents invoke it conversationally through coding assistants. However, most of the product's core surface (scrape, crawl, extract, map) is still driven by structured API calls/schemas rather than free-form natural language commands. Missing for 10: evidence of full NL command coverage across all core endpoints (not just the search agent), and independent hands-on confirmation that NL commands reliably work end-to-end.",
    "evidenceIds": [
      "firecrawl-gh-1",
      "firecrawl-gh-2",
      "firecrawl-docs-4",
      "firecrawl-docs-5",
      "firecrawl-probe-3"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "agentic-official-cli",
    "verdict": "partial",
    "quality": 7,
    "confidence": "medium",
    "rationale": "Firecrawl ships an official CLI (docs.firecrawl.dev/sdks/cli) that installs, authenticates, and adds skills to coding agents, directly matching an AI-native CLI story. However, community feedback notes real limitations in CLI/daemon mode (e.g., inability to return HTML), suggesting it's not fully mature. Missing for 10: independent hands-on verification of full CLI feature parity, and no comparison data beyond one critical community comment.",
    "evidenceIds": [
      "firecrawl-docs-4",
      "firecrawl-probe-4",
      "firecrawl-comm-4"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "agentic-public-api",
    "verdict": "full",
    "quality": 8,
    "confidence": "high",
    "rationale": "Firecrawl is API-first: docs cover scrape/crawl/search/extract endpoints, schema-based structured output, webhooks, and SDKs/CLI, all confirmed by an extensive llms.txt-indexed documentation site and GitHub feature list. Missing for 10: a discoverable machine-readable OpenAPI/Swagger spec (probe returned 404s) and independent third-party confirmation of API completeness.",
    "evidenceIds": [
      "firecrawl-docs-1",
      "firecrawl-docs-2",
      "firecrawl-docs-3",
      "firecrawl-gh-7",
      "firecrawl-docs-7",
      "firecrawl-probe-1",
      "firecrawl-probe-2",
      "firecrawl-probe-4"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "agentic-scoped-keys",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence of scoped or least-privilege API key/credential management for agents; documentation covers scraping, crawling, MCP, CLI, and webhooks but nothing about API key scopes, permissions, or credential issuance controls.",
    "evidenceIds": []
  },
  {
    "productId": "firecrawl",
    "storyId": "agentic-sdks",
    "verdict": "partial",
    "quality": 4,
    "confidence": "low",
    "rationale": "The only concrete artifact tied to 'SDKs' in the evidence is the CLI documented at docs.firecrawl.dev/sdks/cli, implying an SDKs section exists, but no evidence pack item names or links a Python/Node/other language SDK, shows install/usage snippets, or corroborates community usage. Missing for 10: explicit language SDK docs/links, code examples, independent/community confirmation of SDK usage.",
    "evidenceIds": [
      "firecrawl-probe-4",
      "firecrawl-docs-4"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "agentic-webhooks",
    "verdict": "full",
    "quality": 7,
    "confidence": "medium",
    "rationale": "Firecrawl's docs explicitly document a Webhooks feature for async event delivery, directly matching the story. Missing for 10: details on event types, payload schema, retry/security guarantees, and independent/hands-on confirmation of webhook usage.",
    "evidenceIds": [
      "firecrawl-docs-7"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "ai-natural-language-extraction",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Firecrawl's Extract feature lets developers get structured JSON via schemas and its agent can be described in natural language to find/retrieve content without URLs, but the evidence pack shows schema-based extraction more than fully free-form natural-language field extraction replacing selectors. Missing for 10: explicit documentation of prompt-only (no schema) extraction, and independent hands-on confirmation of extraction accuracy.",
    "evidenceIds": [
      "firecrawl-docs-1",
      "firecrawl-gh-7",
      "firecrawl-gh-1",
      "firecrawl-docs-3"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "api-interactive-docs",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "No evidence of an interactive API reference or runnable-example playground; the OpenAPI/swagger probe explicitly returned 404s at all candidate paths, and docs items only describe features, not an interactive reference experience.",
    "evidenceIds": [
      "firecrawl-probe-2"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "api-machine-spec",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "A direct probe for OpenAPI/Swagger spec files at all standard locations (openapi.json, swagger.json, etc.) returned 404s, and no other evidence pack item mentions a downloadable machine-readable API spec; only an llms.txt documentation index was found, which is not an OpenAPI-equivalent spec.",
    "evidenceIds": [
      "firecrawl-probe-2",
      "firecrawl-probe-1"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "api-sandbox",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "firecrawl",
    "storyId": "api-versioning-policy",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "The docs reference a 'v2' API version (firecrawl-probe-1), showing some versioning exists, but there is no evidence of a documented deprecation policy, version support timelines, or migration guides, and an OpenAPI spec could not even be located (firecrawl-probe-2). Missing for 10: explicit deprecation policy documentation, versioning/support lifecycle statements, migration guidance for older API versions.",
    "evidenceIds": [
      "firecrawl-probe-1",
      "firecrawl-probe-2"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "auto-captcha-unblock",
    "verdict": "partial",
    "quality": 4,
    "confidence": "low",
    "rationale": "Firecrawl's docs support form-filling, clicking, and navigating via a 'Browser Sandbox' for interactive workflows (firecrawl-docs-3, firecrawl-docs-8), and community comments reference actual CAPTCHA 'solves' being consumed at cost (firecrawl-comm-6), suggesting some automated CAPTCHA handling exists in practice. However, there is no first-party documentation explicitly claiming automatic CAPTCHA bypass or login-wall traversal, and community sentiment flags cost/reliability friction rather than seamless unattended operation. Missing for 10: explicit vendor documentation of CAPTCHA-solving/login automation, and independent hands-on confirmation that it reliably completes login flows without manual steps.",
    "evidenceIds": [
      "firecrawl-docs-3",
      "firecrawl-docs-8",
      "firecrawl-comm-6",
      "firecrawl-comm-5"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "auto-cheapest-config",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence of automatic cost-optimal configuration selection; docs mention manual controls like reasoning effort but nothing about the API choosing cheapest successful config automatically.",
    "evidenceIds": []
  },
  {
    "productId": "firecrawl",
    "storyId": "auto-retry-proxy-chain",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "No evidence describes proxy rotation or anti-bot retry chains; the only relevant community comment explicitly states Firecrawl lacks a proxy service, which is core to bypassing anti-bot blocks.",
    "evidenceIds": [
      "firecrawl-comm-3"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "automation-bulk-operations",
    "verdict": "full",
    "quality": 8,
    "confidence": "high",
    "rationale": "Firecrawl explicitly supports bulk operations at scale: crawling entire websites, scraping thousands of URLs asynchronously, batch discovery of URLs, and async webhook delivery for large jobs. This directly matches an AI-native user's need to operate across many items at once. Missing for 10: independent hands-on benchmarks validating throughput/reliability at scale and more detail on rate limits/error handling for bulk jobs.",
    "evidenceIds": [
      "firecrawl-gh-3",
      "firecrawl-gh-4",
      "firecrawl-gh-5",
      "firecrawl-docs-7"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "automation-rules-engine",
    "verdict": "partial",
    "quality": 3,
    "confidence": "low",
    "rationale": "Firecrawl offers webhooks for async event delivery (e.g., notifying when a crawl job completes), which is the only automation-adjacent capability in the evidence; there's no documented rule-definition engine or conditional trigger system for defining custom actions on events. Missing for 10: a rules/trigger engine, conditional logic, or action-chaining beyond simple webhook notifications, and any independent confirmation of automation depth.",
    "evidenceIds": [
      "firecrawl-docs-7"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "automation-scheduled-jobs",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Firecrawl offers webhooks for async event delivery and async crawling/scraping, but there is no evidence of a scheduler or recurring-job/workflow feature (e.g., cron-based crawls or scheduled scrape jobs).",
    "evidenceIds": []
  },
  {
    "productId": "firecrawl",
    "storyId": "automation-versioned-workflows",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "Firecrawl is a web scraping/extraction API and toolset; there is no evidence of automation versioning, review workflows, or rollback capabilities for crawl/scrape configurations or workflows in any of the docs, GitHub, or community sources.",
    "evidenceIds": []
  },
  {
    "productId": "firecrawl",
    "storyId": "batch-scrape-async",
    "verdict": "full",
    "quality": 8,
    "confidence": "medium",
    "rationale": "Firecrawl's GitHub docs explicitly advertise batch/async scraping of thousands of URLs, plus webhook-based async event delivery for pipeline integration, and crawl/map endpoints for URL discovery at scale, aligning well with the data-engineer scale story. Missing for 10: independent hands-on benchmarks proving reliability at thousands-of-URL scale and details on rate limits/retry/error handling under batch load.",
    "evidenceIds": [
      "firecrawl-gh-5",
      "firecrawl-docs-7",
      "firecrawl-gh-3",
      "firecrawl-gh-4"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "block-ads-for-speed",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence pack item mentions ad-blocking or any option to strip ads/trackers on target pages to speed up scraping; only general scraping, crawling, and extraction features are documented.",
    "evidenceIds": []
  },
  {
    "productId": "firecrawl",
    "storyId": "block-images-css-for-speed",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence pack mentions blocking images or CSS resources, resource-type filtering, or bandwidth-saving scrape options; only general scraping/crawling features are documented.",
    "evidenceIds": []
  },
  {
    "productId": "firecrawl",
    "storyId": "concurrency-cap-by-plan",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence pack item documents rate limits, concurrency caps per pricing tier, or the cost to raise them; only unrelated product feature docs and community anecdotes about usage cost are present. missing for 10: documented per-tier concurrency/request limits, documented pricing to upgrade limits, any rate-limit or quota API reference.",
    "evidenceIds": []
  },
  {
    "productId": "firecrawl",
    "storyId": "concurrent-sessions-at-scale",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Firecrawl explicitly supports scraping 'thousands of URLs asynchronously' and full-site crawling with async webhooks for event delivery, which supports scaling to many concurrent scrape jobs. However, there is no documentation of concurrency limits, session management, or dedicated infrastructure for spinning up many parallel sessions, and community feedback raises cost/efficiency concerns at scale (proxy usage, cost overpay) without directly disputing the concurrency capability itself. Missing for 10: explicit concurrency/rate-limit documentation, first-party benchmarks or case studies of large-scale concurrent scraping, and independent verification of scale claims.",
    "evidenceIds": [
      "firecrawl-gh-5",
      "firecrawl-gh-3",
      "firecrawl-docs-7",
      "firecrawl-comm-6",
      "firecrawl-comm-7"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "content-change-monitoring",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "The evidence pack shows scraping, crawling, extraction, and webhook-based async event delivery, but no dedicated change-tracking/monitoring feature (e.g., diffing pages over time, price/listing change alerts) is documented anywhere in the pack.",
    "evidenceIds": [
      "firecrawl-docs-7",
      "firecrawl-gh-3",
      "firecrawl-gh-5"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "control-viewport-size",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence in the pack mentions viewport width/height, mobile emulation, or screen size configuration for rendering pages; the docs mention scraping, actions, and a browser sandbox but nothing about viewport control.",
    "evidenceIds": []
  },
  {
    "productId": "firecrawl",
    "storyId": "crawl-respects-robots-and-rate-limits",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "No documentation or evidence describes robots.txt compliance settings or automatic rate-limit throttling; the only related community comment (firecrawl-comm-8) suggests sites must proactively disallow the crawler, which doesn't confirm built-in respect for robots.txt as a configurable, automatic behavior.",
    "evidenceIds": [
      "firecrawl-comm-8"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "credit-overage-billing",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence in the pack addresses billing behavior when a plan's credit/request quota is exceeded — nothing on overage charges vs. hard cutoffs. This is a fair pricing question for a paid API product, so absence of evidence yields none. Missing for 10: any pricing/billing docs describing quota overage policy, hard-stop vs auto-billing behavior, or community reports confirming either.",
    "evidenceIds": []
  },
  {
    "productId": "firecrawl",
    "storyId": "css-xpath-extraction",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Evidence shows Firecrawl's extraction relies on schema-based/LLM extraction (firecrawl-gh-7) and general markdown/HTML/JSON output (firecrawl-docs-1), but nothing in the pack documents CSS or XPath selector-based field extraction rules. Missing for 10: any mention of CSS selector or XPath rule support in scrape/extract config, docs page confirming selector-based extraction, or independent confirmation of this capability.",
    "evidenceIds": [
      "firecrawl-gh-7",
      "firecrawl-docs-1"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "custom-actor-development",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Firecrawl's evidence shows a fixed API/SDK/CLI for scraping, crawling, extracting, and search, plus webhooks and an MCP server — but nothing about writing and deploying custom serverless scripts or actor-style code that runs on Firecrawl's own infrastructure (unlike platforms such as Apify Actors). No docs, GitHub, or community evidence mentions custom script deployment or a functions/actors runtime.",
    "evidenceIds": []
  },
  {
    "productId": "firecrawl",
    "storyId": "data-export-portability",
    "verdict": "partial",
    "quality": 4,
    "confidence": "low",
    "rationale": "Firecrawl's outputs (markdown/HTML/structured JSON) are inherently portable formats, and its open-source AGPL-3.0 license means self-hosting/forking is possible, reducing lock-in — but there is no documented feature for exporting job configurations, crawl settings, or webhooks setups for migration to another provider. missing for 10: explicit job-configuration export/import tooling, migration guides, or documented data-portability features beyond raw scrape output formats.",
    "evidenceIds": [
      "firecrawl-docs-1",
      "firecrawl-gh-6",
      "firecrawl-comm-2"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "data-quality-monitoring-alerts",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Evidence shows webhooks for async event delivery but nothing about job performance dashboards, data quality validation, or failure alerting mechanisms for a data-engineering monitoring workflow.",
    "evidenceIds": []
  },
  {
    "productId": "firecrawl",
    "storyId": "deep-crawl-bfs-with-limit",
    "verdict": "partial",
    "quality": 5,
    "confidence": "low",
    "rationale": "Evidence confirms Firecrawl can crawl an entire website and discover all URLs (firecrawl-gh-3, firecrawl-gh-4), which implies a crawl feature suitable for a data-engineer's bulk scraping needs, but nothing in the pack explicitly documents a breadth-first crawl strategy or a configurable maximum page limit parameter. Missing for 10: explicit mention of BFS traversal mode, documented maxPages/limit parameter, and independent confirmation that these controls work at scale.",
    "evidenceIds": [
      "firecrawl-gh-3",
      "firecrawl-gh-4",
      "firecrawl-gh-5"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "docker-container-deploy",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "The evidence confirms Firecrawl is open source (AGPL-3.0) and self-hostable, but no citation mentions Docker, docker-compose, or containerized deployment instructions for production use.",
    "evidenceIds": [
      "firecrawl-gh-6"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "documented-rate-limits",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence pack item documents specific rate limits (requests per second/minute) per API key or plan tier; only general product features and community commentary are present.",
    "evidenceIds": []
  },
  {
    "productId": "firecrawl",
    "storyId": "failed-request-billing",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence pack items discuss billing/credit treatment for failed, blocked, or empty-result requests; documentation snippets cover features (scrape, crawl, MCP, webhooks) but not quota/credit consumption policy.",
    "evidenceIds": []
  },
  {
    "productId": "firecrawl",
    "storyId": "full-site-crawl",
    "verdict": "full",
    "quality": 9,
    "confidence": "high",
    "rationale": "GitHub docs explicitly state 'Crawl an entire website and get content from all pages' with supporting features like URL discovery and async scraping of thousands of URLs, directly matching the story. Missing for 10: independent hands-on validation specifically of full-site crawl completeness/reliability at scale (community comments discuss cost/proxy issues but not crawl-completeness failures).",
    "evidenceIds": [
      "firecrawl-gh-3",
      "firecrawl-gh-4",
      "firecrawl-gh-5"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "geo-targeted-proxy",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "No evidence in the pack shows Firecrawl offering country-specific or geolocation proxy selection; in fact a community comment explicitly states Firecrawl lacks a proxy service entirely, and no docs or GitHub references mention proxy/geolocation features.",
    "evidenceIds": [
      "firecrawl-comm-3"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "image-captioning-for-text-llm",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence Firecrawl generates automatic image captions or alt-text descriptions for visual content; evidence only covers text/HTML/markdown extraction, crawling, and structured data extraction.",
    "evidenceIds": []
  },
  {
    "productId": "firecrawl",
    "storyId": "interactive-browser-sandbox",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Firecrawl docs explicitly mention a 'Browser Sandbox' offering managed browser sessions for interactive workflows, plus 'scrape, then keep working with it: click, fill forms, extract dynamic content' — directly matching the story. However, this is only a single doc snippet with no detail on session persistence, remote access UI, or manual/human-driven browsing versus API-driven automation, and no independent/community corroboration of this specific feature. Missing for 10: detailed documentation on session duration/access model, evidence of true manual/interactive human use (vs agent-driven), and third-party confirmation.",
    "evidenceIds": [
      "firecrawl-docs-8",
      "firecrawl-docs-3"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "js-rendering-spa",
    "verdict": "full",
    "quality": 7,
    "confidence": "medium",
    "rationale": "Docs confirm Firecrawl scrapes pages with an actual browser session ('Browser Sandbox... managed browser sessions for interactive workflows', 'click, fill forms, extract dynamic content'), and community evidence confirms it uses a real headless browser (Puppeteer) to render pages rather than static HTTP fetch, which supports JS-heavy SPA rendering. Output can be returned as HTML per docs-1. Missing for 10: independent benchmark/proof of correctly rendering complex SPAs, and community notes it uses Puppeteer not Playwright with some limitations in certain modes.",
    "evidenceIds": [
      "firecrawl-docs-1",
      "firecrawl-docs-3",
      "firecrawl-docs-8",
      "firecrawl-comm-3"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "json-schema-extraction",
    "verdict": "full",
    "quality": 8,
    "confidence": "high",
    "rationale": "Firecrawl's docs and GitHub explicitly advertise passing a JSON schema to extract structured data (\"Use a schema to get structured data\") and general structured JSON extraction from URLs, PDFs, and other formats. Missing for 10: independent/hands-on confirmation of schema-conformance accuracy and edge-case handling beyond vendor docs.",
    "evidenceIds": [
      "firecrawl-gh-7",
      "firecrawl-docs-1",
      "firecrawl-docs-6"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "large-table-chunked-extraction",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence pack items mention table extraction, large-table handling, or intelligent chunking strategies for oversized data; the evidence only covers general scraping, crawling, and structured extraction features. missing for 10: any mention of table-specific extraction, chunking mechanisms, or handling of oversized documents/tables to fit token/processing limits.",
    "evidenceIds": []
  },
  {
    "productId": "firecrawl",
    "storyId": "latency-completeness-tradeoff",
    "verdict": "partial",
    "quality": 5,
    "confidence": "low",
    "rationale": "Firecrawl offers async webhooks for event delivery and an agent 'reasoning effort' setting that trades speed for thoroughness, plus async bulk scraping — all of which let a developer influence when/how much content comes back, but there's no explicit documented parameter (e.g., wait-time or completeness threshold) framed as a direct latency-vs-completeness control on the standard scrape/crawl endpoints. missing for 10: explicit sync-return timeout/partial-completeness parameter, independent benchmarking of latency vs completeness tradeoffs, and hands-on confirmation of the reasoning-effort knob's effect.",
    "evidenceIds": [
      "firecrawl-gh-2",
      "firecrawl-docs-7",
      "firecrawl-gh-5"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "live-system-dashboard",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence of a real-time dashboard for monitoring system metrics, worker pool, or browser pool status; evidence only covers scraping/crawling features, CLI, MCP server, and community discussion unrelated to monitoring dashboards.",
    "evidenceIds": []
  },
  {
    "productId": "firecrawl",
    "storyId": "llm-driven-extraction",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Firecrawl's docs and GitHub note schema-based structured extraction (\"Use a schema to get structured data\") and general LLM-driven content extraction to JSON, which aligns with selector-free, LLM-decided field extraction. However, evidence doesn't show prompt-only (schema-less) extraction quality, nor independent verification of how well the LLM infers fields without any schema hints. missing for 10: evidence of extraction working from a pure natural-language prompt without any schema, and independent/hands-on validation of extraction accuracy.",
    "evidenceIds": [
      "firecrawl-docs-1",
      "firecrawl-gh-7",
      "firecrawl-gh-1"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "llm-ready-text-instead-of-raw-html",
    "verdict": "full",
    "quality": 8,
    "confidence": "high",
    "rationale": "Firecrawl's core value proposition is turning any URL into clean markdown/structured JSON, handling rendering, JS-heavy pages, and blocking via a managed browser sandbox, explicitly for LLM/RAG use cases. Docs and GitHub confirm markdown/HTML/JSON extraction, PDF/DOCX conversion, and managed browser sessions abstracting away rendering complexity, though community comments note some limitations (e.g., proxy/anti-bot gaps, missing HTML in some modes). Missing for 10: independent benchmark of output cleanliness vs raw HTML scraping, and resolution of community-reported edge-case limitations (daemon mode HTML issue).",
    "evidenceIds": [
      "firecrawl-docs-1",
      "firecrawl-docs-3",
      "firecrawl-docs-6",
      "firecrawl-docs-8",
      "firecrawl-gh-3",
      "firecrawl-comm-4"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "local-llm-extraction-backend",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "No evidence that Firecrawl allows swapping in a local or self-hosted LLM as the extraction backend; a community comment even suggests adding Ollama support as a future wish, implying it isn't currently offered.",
    "evidenceIds": [
      "firecrawl-comm-9"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "markdown-output",
    "verdict": "full",
    "quality": 9,
    "confidence": "high",
    "rationale": "First-party docs explicitly state extraction as markdown (alongside HTML/JSON) and support converting local files to markdown, confirming clean markdown output is a core, well-documented feature. Missing for 10: independent hands-on confirmation specifically praising markdown output quality/cleanliness.",
    "evidenceIds": [
      "firecrawl-docs-1",
      "firecrawl-docs-6"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "marketplace-monetization",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "firecrawl",
    "storyId": "multi-format-choice",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Docs confirm output as markdown, HTML, or structured JSON (firecrawl-docs-1, firecrawl-docs-6), and a community comment notes a daemon-mode limitation where HTML return is unsupported in some contexts, suggesting partial reliability. No explicit mention of 'frontmatter' or 'text' formats, and no documentation snippet showing a format-selection parameter/API example. Missing for 10: explicit mention of frontmatter/text format options, and a documented parameter/example showing developers selecting formats.",
    "evidenceIds": [
      "firecrawl-docs-1",
      "firecrawl-docs-6",
      "firecrawl-comm-4"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "nocode-automation-connector",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence of a prebuilt n8n or Zapier connector; docs mention MCP server, CLI, SDKs, and webhooks but nothing about no-code automation platform integrations.",
    "evidenceIds": []
  },
  {
    "productId": "firecrawl",
    "storyId": "open-source-library-integration",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Firecrawl is a hosted scraping/crawling API with its own primitives (scrape, crawl, extract, browser sandbox) rather than a framework for developers to write Playwright/Puppeteer/Selenium/Scrapy scripts; there is no documented support for plugging in or building on these open-source libraries. A community comment even notes Firecrawl internally uses Puppeteer (not user-selectable) and lacks the openness these libraries provide, contradicting any claim of multi-library dev flexibility.",
    "evidenceIds": [
      "firecrawl-comm-3",
      "firecrawl-docs-8",
      "firecrawl-gh-6"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "openness-api-parity",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Firecrawl is fundamentally API-first — scrape, crawl, extract, search, and structured data features are all exposed via API/SDKs and docs, and there is no evidence of a rich standalone UI with capabilities withheld from the API. However, the evidence pack lacks a discoverable OpenAPI spec (probe found 404s) and does not explicitly confirm dashboard-only features (e.g., billing, team management, job monitoring) are also API-accessible. missing for 10: a published OpenAPI/swagger spec, explicit confirmation that all dashboard/UI-only functions (usage analytics, team/billing management, job history) are API-reachable, and independent verification of full UI/API parity.",
    "evidenceIds": [
      "firecrawl-docs-1",
      "firecrawl-docs-2",
      "firecrawl-docs-3",
      "firecrawl-gh-3",
      "firecrawl-gh-5",
      "firecrawl-probe-2",
      "firecrawl-probe-4"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "openness-full-export",
    "verdict": "partial",
    "quality": 5,
    "confidence": "medium",
    "rationale": "Firecrawl outputs are natively in open formats (markdown, HTML, structured JSON) and the core engine is open source (AGPL-3.0), letting a user self-host and avoid lock-in to the hosted service. However there's no explicit 'export all your account/config data' feature documented, and community notes only touch on forking rights, not a formal data-export path. Missing for 10: a documented account-data export/migration flow, evidence of exporting crawl history/settings, and independent confirmation users have actually migrated off the hosted service.",
    "evidenceIds": [
      "firecrawl-docs-1",
      "firecrawl-gh-6",
      "firecrawl-comm-2"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "openness-open-license",
    "verdict": "full",
    "quality": 8,
    "confidence": "high",
    "rationale": "Firecrawl's GitHub repo confirms it is open source under the AGPL-3.0 license, with community discussion also confirming this (including implications of AGPL forking rights). Source is publicly readable on GitHub with an OSI-approved-family open license. Missing for 10: no evidence of clarity on which parts of the cloud-only features are excluded from the open license, and no independent audit of full repo completeness.",
    "evidenceIds": [
      "firecrawl-gh-6",
      "firecrawl-comm-2"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "openness-self-host",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Firecrawl's GitHub repo confirms the core product is open source under AGPL-3.0 and can be self-hosted, with the hosted cloud version offering extra features (firecrawl-gh-6). However, community reports note self-hosted/simple versions lack key production features like proxy support and have functional limitations (e.g., daemon mode restrictions, no HTML return) compared to the cloud offering (firecrawl-comm-3, firecrawl-comm-4). Missing for 10: official self-hosting setup docs/guide in the evidence pack, and confirmation that self-hosted deployment achieves full feature parity with the hosted service.",
    "evidenceIds": [
      "firecrawl-gh-6",
      "firecrawl-comm-3",
      "firecrawl-comm-4"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "pass-session-cookies",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "No evidence pack item mentions passing custom cookies, headers, or session/auth tokens to Firecrawl's scrape API; only generic scraping, crawling, and browser-sandbox features are documented.",
    "evidenceIds": []
  },
  {
    "productId": "firecrawl",
    "storyId": "pdf-office-doc-extraction",
    "verdict": "full",
    "quality": 8,
    "confidence": "medium",
    "rationale": "Firecrawl explicitly documents converting local PDFs, DOCX, XLSX, HTML and more into Markdown or structured JSON as a hosted (cloud) service, directly matching the story of extracting text from PDFs/Word/Excel/PowerPoint without self-hosting. Missing for 10: explicit mention of PowerPoint (.pptx) support and independent hands-on confirmation of file-parsing quality/accuracy.",
    "evidenceIds": [
      "firecrawl-docs-6",
      "firecrawl-docs-1"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "per-url-pattern-config",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "The evidence pack covers crawling, scraping, extraction, webhooks, and CLI/MCP features, but nothing describes per-URL-pattern configuration overrides within a single crawl/batch job (e.g., different scrape options for different path patterns). No docs or community evidence mention such rule-based configuration.",
    "evidenceIds": []
  },
  {
    "productId": "firecrawl",
    "storyId": "persistent-authenticated-session",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "The evidence mentions a 'Browser Sandbox' for managed sessions and interactive workflows, but nothing describes persisting cookies/login state or reusing a browser profile across multiple separate requests. No docs, SDK, or community evidence confirms this capability.",
    "evidenceIds": [
      "firecrawl-docs-8"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "pii-filtering-on-extraction",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence in the pack mentions PII detection, redaction, or filtering capabilities; Firecrawl's documented features cover scraping, extraction, crawling, and structured output but nothing about privacy/PII compliance controls.",
    "evidenceIds": []
  },
  {
    "productId": "firecrawl",
    "storyId": "post-render-behind-login",
    "verdict": "full",
    "quality": 7,
    "confidence": "medium",
    "rationale": "Firecrawl's docs explicitly describe an interactive workflow — 'Scrape a page, then keep working with it: click, fill forms, extract dynamic content, or navigate deeper' — plus a 'Browser Sandbox' for managed interactive browser sessions, directly matching the story. Missing for 10: independent/hands-on corroboration that clicking/filling forms actually reaches login-walled content, and more detail on session persistence across interactions.",
    "evidenceIds": [
      "firecrawl-docs-3",
      "firecrawl-docs-8"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "prebuilt-scraper-marketplace",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "No evidence of a marketplace of ready-made scrapers/templates that developers can pick up and run; Firecrawl's evidence covers building scraping/crawling calls via API, CLI, MCP, and SDKs, not a curated marketplace of pre-built scrapers.",
    "evidenceIds": []
  },
  {
    "productId": "firecrawl",
    "storyId": "premium-residential-proxies",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "The evidence pack contains no vendor documentation mentioning residential or datacenter proxy support; in fact a community source explicitly states 'Firecrawl... don't have proxy service which is the heart of any crawler and scraper' (firecrawl-comm-3). No official docs or GitHub features reference proxy rotation, IP pools, or anti-bot proxy tiers.",
    "evidenceIds": [
      "firecrawl-comm-3"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "privacy-data-residency",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "No evidence in the pack mentions data residency, regional storage options, or compliance controls for where scraped data is processed/stored; the open-source AGPL version could theoretically be self-hosted for residency control, but this is not documented anywhere in the evidence.",
    "evidenceIds": []
  },
  {
    "productId": "firecrawl",
    "storyId": "privacy-no-training",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence pack item mentions any data-training opt-out, privacy policy on model training use, or data retention/DPA controls for Firecrawl's scraped or user data; the only related community comment raises concerns about scraping others' data, not about protecting the user's own data from AI training use.",
    "evidenceIds": []
  },
  {
    "productId": "firecrawl",
    "storyId": "privacy-retention-controls",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence pack item mentions data retention policies, deletion controls, or privacy settings for stored crawl/scrape data; this is a fair question for a cloud scraping/data API but no documentation addresses it.",
    "evidenceIds": []
  },
  {
    "productId": "firecrawl",
    "storyId": "privacy-telemetry-optout",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence in the pack mentions telemetry, usage tracking, analytics collection, or an opt-out setting/flag for Firecrawl's CLI, SDK, or self-hosted deployment; while the open-source AGPL nature suggests self-hosting is possible, nothing documents a telemetry toggle or privacy control.",
    "evidenceIds": []
  },
  {
    "productId": "firecrawl",
    "storyId": "public-status-page-history",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence pack item mentions a public status page, uptime history, or incident postmortems for Firecrawl; the docs and community threads cover product features and complaints but nothing about SLA/uptime transparency.",
    "evidenceIds": []
  },
  {
    "productId": "firecrawl",
    "storyId": "ready-made-templates",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "Evidence shows CLI, SDKs, MCP server, and API docs, but nothing about a library of ready-made project templates or starter projects to jumpstart development.",
    "evidenceIds": []
  },
  {
    "productId": "firecrawl",
    "storyId": "reasoning-effort-control",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "GitHub README explicitly states the agent lets users 'set how much reasoning the agent spends on the task,' directly matching the story, but there's no detailed documentation confirming discrete low/medium/high levels or pricing-tied reasoning-effort controls. Missing for 10: first-party docs specifying the exact reasoning-effort parameter/levels, independent confirmation of how this affects cost/limits.",
    "evidenceIds": [
      "firecrawl-gh-2",
      "firecrawl-gh-1"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "research-agent-preset",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Firecrawl offers general scraping, structured JSON extraction, and search, but the evidence pack shows no dedicated preset/mode tuned specifically for research agents that returns citable, source-attributed output — no citation formatting, source-tracking, or research-agent-specific configuration is documented.",
    "evidenceIds": []
  },
  {
    "productId": "firecrawl",
    "storyId": "resume-crashed-crawl",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence of checkpointing or resuming crawls from saved state; docs mention crawling, webhooks, and async scraping but nothing about crash recovery or resumable checkpoints.",
    "evidenceIds": []
  },
  {
    "productId": "firecrawl",
    "storyId": "rotating-proxy-pool",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "No first-party documentation or GitHub evidence claims a rotating proxy pool feature; in fact community commentary explicitly states Firecrawl 'don't have proxy service which is the heart of any crawler and scraper.' Without vendor claims to dispute, this is simply unevidenced.",
    "evidenceIds": [
      "firecrawl-comm-3"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "scheduled-runs",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "No evidence of scheduled/cron-based scraping jobs; Firecrawl's evidence covers crawling, scraping, webhooks, and async batch scraping, but nothing about scheduling jobs to run at specific times.",
    "evidenceIds": []
  },
  {
    "productId": "firecrawl",
    "storyId": "screenshot-capture",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "The evidence pack lists output formats as markdown/HTML/JSON but never mentions screenshot capture, full-page or selector-based, as a capability. A community comment even raises it as an open question ('does it support screenshots?') without confirmation, so there's no evidence the capability exists.",
    "evidenceIds": [
      "firecrawl-docs-1",
      "firecrawl-comm-4"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "scripted-page-interactions",
    "verdict": "full",
    "quality": 7,
    "confidence": "medium",
    "rationale": "Firecrawl's docs explicitly describe scripting page interactions—click, fill forms, extract dynamic content, navigate deeper—after an initial scrape, and mention a managed Browser Sandbox for interactive workflows, directly matching the story of clicking/filling/scrolling before content is returned. Missing for 10: detailed API reference for the specific 'actions' parameter (e.g. scroll behavior), and independent/hands-on confirmation from community sources that these interaction primitives work reliably in practice.",
    "evidenceIds": [
      "firecrawl-docs-3",
      "firecrawl-docs-8"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "self-host-open-source",
    "verdict": "partial",
    "quality": 7,
    "confidence": "medium",
    "rationale": "Firecrawl is explicitly confirmed open source under AGPL-3.0 with the cloud version noted as having 'additional features', confirming self-hosting is possible but with reduced functionality (firecrawl-gh-6). Community commentary corroborates this, noting the self-hosted version lacks the proxy service considered 'the heart' of a scraper and other missing capabilities like screenshots (firecrawl-comm-3, firecrawl-comm-4). Missing for 10: first-party self-hosting setup/docker docs, explicit feature-parity comparison, and independent hands-on confirmation of a smooth self-host deployment experience.",
    "evidenceIds": [
      "firecrawl-gh-6",
      "firecrawl-comm-3",
      "firecrawl-comm-4",
      "firecrawl-comm-9"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "semantic-chunked-output",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Firecrawl's evidence covers markdown/HTML/structured JSON extraction, crawling, and PDF/DOCX conversion, but nothing describes a semantic chunking feature or chunked output mode for retrieval pipelines. The axis applies (chunked output is a plausible feature for a scraping/RAG-prep tool) but no evidence shows it exists.",
    "evidenceIds": [
      "firecrawl-docs-1",
      "firecrawl-docs-6",
      "firecrawl-gh-7"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "single-call-html-extraction",
    "verdict": "full",
    "quality": 8,
    "confidence": "medium",
    "rationale": "First-party docs explicitly state that Firecrawl's scrape endpoint extracts content from any URL as markdown, HTML, or structured JSON in a single call, directly matching the story. A community comment raises a narrow caveat about HTML not being returned in a separate 'daemon mode', but this does not contradict the main scrape API. Missing for 10: independent hands-on confirmation of raw HTML output quality/fidelity for the primary scrape endpoint.",
    "evidenceIds": [
      "firecrawl-docs-1",
      "firecrawl-comm-4"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "spend-cap-alerts",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "No evidence of spending caps, budget alerts, or usage-limit notifications; community comments even describe unexpectedly high consumption ('10gb of proxy gone in two days') with no mention of a cap/alert mechanism to prevent overage.",
    "evidenceIds": [
      "firecrawl-comm-6",
      "firecrawl-comm-5"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "sticky-session-proxy",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "No evidence that Firecrawl exposes a session-identifier parameter to pin requests to the same proxy IP; the closest evidence is a community comment stating Firecrawl lacks its own proxy service entirely, which undercuts rather than supports this specific anti-bot capability.",
    "evidenceIds": [
      "firecrawl-comm-3"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "structured-json-output",
    "verdict": "full",
    "quality": 9,
    "confidence": "high",
    "rationale": "Firecrawl docs explicitly support extracting content as structured JSON, including with a defined schema, alongside markdown/HTML options, and this extends to document formats like PDFs/DOCX as well. Missing for 10: independent hands-on confirmation of JSON output quality/schema fidelity beyond vendor docs and GitHub README.",
    "evidenceIds": [
      "firecrawl-docs-1",
      "firecrawl-gh-7",
      "firecrawl-docs-6"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "team-permissions-management",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence pack items mention team collaboration, organizations, workspaces, or role-based access control for sharing scrapers; documentation focuses on scraping, extraction, CLI, and MCP features only.",
    "evidenceIds": []
  },
  {
    "productId": "firecrawl",
    "storyId": "undetected-browser-mode",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Evidence mentions a 'Browser Sandbox' for managed browser sessions and general scraping/crawling features, but there is no documentation or claim of a stealth/undetected browser mode specifically designed to bypass sophisticated bot detection. Community comments (e.g., proxy tiers, captcha solves) hint indirectly at anti-bot infrastructure but do not confirm an official 'undetected mode' feature. missing for 10: explicit stealth/undetected browser mode docs, technical details on bypassing bot detection (fingerprint spoofing, TLS/JA3 randomization, etc.), independent verification of bypass success.",
    "evidenceIds": [
      "firecrawl-docs-8",
      "firecrawl-comm-6"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "url-discovery-map",
    "verdict": "full",
    "quality": 8,
    "confidence": "high",
    "rationale": "Firecrawl explicitly offers a 'Map' capability described as 'Discover all URLs on a website instantly,' distinct from full crawling, directly matching the story. This is a first-party GitHub claim but lacks independent hands-on corroboration or detail on accuracy/limits at scale. missing for 10: independent/hands-on verification of speed and completeness, documentation of limits on very large sites.",
    "evidenceIds": [
      "firecrawl-gh-4",
      "firecrawl-gh-3"
    ]
  },
  {
    "productId": "firecrawl",
    "storyId": "wait-for-selector",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence pack item mentions waiting for a specific CSS selector before returning rendered content; only general mentions of scraping, interactive actions, and browser sandboxing are present without detail on selector-based wait conditions.",
    "evidenceIds": []
  },
  {
    "productId": "firecrawl",
    "storyId": "web-search-with-content",
    "verdict": "full",
    "quality": 8,
    "confidence": "medium",
    "rationale": "Firecrawl's docs explicitly advertise a search endpoint that returns full page content from results in one call, matching the story exactly, and this is backed by broader scrape/extract capabilities showing it can fetch full markdown/HTML/structured content rather than just snippets. Missing for 10: independent hands-on verification of the search+content endpoint specifically (community evidence discusses scraping/crawling generally but not this exact combined search feature).",
    "evidenceIds": [
      "firecrawl-docs-2",
      "firecrawl-docs-1",
      "firecrawl-gh-1"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "adaptive-stop-crawling",
    "verdict": "partial",
    "quality": 4,
    "confidence": "low",
    "rationale": "Reader offers a related knob (`x-respond-timing` to trade off latency vs completeness) and a `research` preset for agentic use, suggesting some adaptive control over when it returns results, but there is no evidence of true query-driven adaptive crawling that stops once 'enough information' has been gathered to answer a specific question — the search flow simply fetches a fixed top-5 results. Missing for 10: explicit query-aware stopping criteria, evidence of dynamic crawl depth/breadth adjustment based on information sufficiency, and independent validation of this behavior.",
    "evidenceIds": [
      "jina-reader-gh-7",
      "jina-reader-gh-6",
      "jina-reader-gh-2"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "agentic-agent-docs",
    "verdict": "partial",
    "quality": 5,
    "confidence": "medium",
    "rationale": "Jina Reader's core function—converting any URL to LLM-friendly markdown (r.jina.ai/<url>)—technically lets an agent fetch llms.txt or agent-oriented docs pages and get clean text, and the 'research' preset is explicitly aimed at AI research agents needing structured, citable output. But there is no evidence of llms.txt-specific parsing/discovery, sitemap-style agent doc crawling, or first-party guidance for this workflow, and a probe shows Jina's own site lacks an llms.txt (404), undercutting any implied endorsement of the convention. missing for 10: explicit llms.txt/agent-doc support or examples, first-party documentation naming this use case, evidence Jina practices llms.txt on its own docs.",
    "evidenceIds": [
      "jina-reader-gh-1",
      "jina-reader-gh-6",
      "jina-reader-probe-1"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "agentic-ai-insights",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "jina-reader",
    "storyId": "agentic-autonomous-automation",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "jina-reader",
    "storyId": "agentic-builtin-assistant",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "jina-reader",
    "storyId": "agentic-headless",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Jina Reader is a plain HTTP endpoint and also ships a self-hostable Docker image bundling headless Chrome/LibreOffice, making it straightforward to script and run in CI pipelines (curl, headers for output control). However, community reports show real-world automation attempts hitting 401/404 errors, and there is no first-party CI/automation guide or examples. missing for 10: explicit CI/CD documentation or examples, rate-limit/reliability guarantees for unattended use, and resolution of the reported auth/404 failures in automated contexts.",
    "evidenceIds": [
      "jina-reader-gh-1",
      "jina-reader-gh-8",
      "jina-reader-gh-5",
      "jina-reader-gh-6",
      "jina-reader-gh-7",
      "jina-reader-comm-3",
      "jina-reader-comm-4",
      "jina-reader-comm-5"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "agentic-mcp-client",
    "verdict": "na",
    "quality": 0,
    "confidence": "high",
    "rationale": "Jina Reader is a single-purpose URL-to-text/content-extraction API, not an agentic host that consumes external tools; the only MCP-related evidence (jina-reader-probe-3) shows Jina exposing itself as an MCP server for others to call, not Reader acting as an MCP client that plugs in external servers. This story's direction (product consuming other MCP servers) is a category mismatch for this kind of product.",
    "evidenceIds": [
      "jina-reader-probe-3"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "agentic-mcp-server",
    "verdict": "full",
    "quality": 7,
    "confidence": "medium",
    "rationale": "Jina explicitly documents an official MCP server repository (jina-ai/MCP) that would expose Reader's capabilities to agents, but the evidence pack lacks first-party details on setup, tool list, or hands-on/independent corroboration of its use. missing for 10: detailed MCP server docs/tool schema, hands-on or community verification of the MCP server working end-to-end.",
    "evidenceIds": [
      "jina-reader-probe-3"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "agentic-nl-commands",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "The `x-instruction` header lets users give natural-language instructions to extract specific fields (via ReaderLM-v2), and the `x-preset: research` bundle is tailored for AI agents, showing some natural-language-driven operation. However, this is limited to extraction/formatting rather than full natural-language control of the whole reading/search pipeline, and there's no independent corroboration of reliability. Missing for 10: broader NL control across all Reader operations (search, fetch, formatting) and third-party validation that x-instruction works robustly.",
    "evidenceIds": [
      "jina-reader-docs-3",
      "jina-reader-gh-6"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "agentic-official-cli",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "The evidence pack shows Jina Reader as an HTTP API/service (curl-based usage, headers like x-respond-with, x-preset) and a self-hostable Docker image, but there is no mention of an official dedicated CLI tool for interacting with Reader. No evidence names a packaged command-line binary or npm/pip CLI client.",
    "evidenceIds": []
  },
  {
    "productId": "jina-reader",
    "storyId": "agentic-public-api",
    "verdict": "full",
    "quality": 8,
    "confidence": "high",
    "rationale": "Jina Reader ships an extensively documented public HTTP API (r.jina.ai) with numerous header-controlled options (output format, presets, chunking, cookies, JSON schema extraction, proxy routing) all detailed in first-party GitHub docs, directly enabling programmatic/agentic use. Missing for 10: a discoverable machine-readable spec (OpenAPI/swagger probes returned 404, llms.txt 404), and independent confirmation beyond community auth-error reports which reflect expected key requirements rather than API failure.",
    "evidenceIds": [
      "jina-reader-gh-1",
      "jina-reader-gh-5",
      "jina-reader-gh-6",
      "jina-reader-gh-7",
      "jina-reader-gh-10",
      "jina-reader-docs-3",
      "jina-reader-probe-1",
      "jina-reader-probe-2"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "agentic-scoped-keys",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence of scoped or least-privilege API key/credential issuance for agents; the pack only shows a single API key auth requirement and no mention of scoped tokens, permissions, or credential management.",
    "evidenceIds": []
  },
  {
    "productId": "jina-reader",
    "storyId": "agentic-sdks",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "The evidence pack documents Jina Reader purely as an HTTP endpoint (curl-style requests with custom headers like x-respond-with, x-preset, x-json-schema) and an OpenAPI/llms.txt probe that both 404'd — there is no mention of an official Python/JS/other SDK package for building against it.",
    "evidenceIds": [
      "jina-reader-gh-5",
      "jina-reader-gh-6",
      "jina-reader-docs-3",
      "jina-reader-probe-1",
      "jina-reader-probe-2"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "agentic-webhooks",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "No evidence anywhere in the pack of Jina Reader supporting webhooks or event subscriptions; it's a synchronous URL-to-text conversion API with no mention of push/callback mechanisms.",
    "evidenceIds": []
  },
  {
    "productId": "jina-reader",
    "storyId": "ai-natural-language-extraction",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Jina Reader's docs describe an `x-instruction` header that accepts natural-language extraction instructions (alongside a JSON-schema alternative), directly matching the story of skipping selectors, and this is paired with ReaderLM-v2 for field extraction. However, this is a single first-party doc mention with no independent hands-on validation, extraction accuracy examples, or benchmark, and community threads focus on unrelated auth/JS issues rather than confirming this feature's real-world quality. Missing for 10: independent verification of extraction accuracy, example outputs, and confirmation the feature works reliably outside vendor docs.",
    "evidenceIds": [
      "jina-reader-docs-3"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "api-interactive-docs",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "There is no evidence of an interactive API reference or runnable examples; probes explicitly found no OpenAPI/swagger spec (404s) and no llms.txt, and the documentation snippets only describe headers/params in prose form, not an interactive playground.",
    "evidenceIds": [
      "jina-reader-probe-1",
      "jina-reader-probe-2"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "api-machine-spec",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "Direct probes for OpenAPI/Swagger spec files and llms.txt all returned 404, and no evidence pack item shows a downloadable machine-readable API spec being published.",
    "evidenceIds": [
      "jina-reader-probe-1",
      "jina-reader-probe-2"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "api-sandbox",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "jina-reader",
    "storyId": "api-versioning-policy",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "There is no evidence of API versioning (e.g., /v1/ paths) or a published deprecation policy; probes for OpenAPI spec and llms.txt both 404, and no docs mention version lifecycle commitments. missing for 10: versioned endpoint scheme, documented deprecation/sunset policy, changelog or migration guide.",
    "evidenceIds": [
      "jina-reader-probe-1",
      "jina-reader-probe-2"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "auto-captcha-unblock",
    "verdict": "partial",
    "quality": 3,
    "confidence": "low",
    "rationale": "Reader's SaaS proxy claims to 'handle common anti-bot challenges automatically' and supports forwarding session cookies via X-Set-Cookie for login-walled pages, but neither is documented as solving CAPTCHAs, and cookie-based login still requires the user to manually obtain and supply valid session cookies beforehand. Missing for 10: explicit CAPTCHA-solving capability, fully automatic login/form-wall traversal without any pre-supplied credentials, and independent evidence confirming these anti-bot claims work in practice.",
    "evidenceIds": [
      "jina-reader-gh-9",
      "jina-reader-docs-1"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "auto-cheapest-config",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "No evidence Jina Reader has any automatic cost-optimization logic that selects the cheapest configuration guaranteed to succeed; the options exposed (x-preset, x-respond-timing, x-proxy) are manually set by the developer, not auto-selected for cost minimization, and pricing/limits aren't even documented per community reports.",
    "evidenceIds": [
      "jina-reader-gh-6",
      "jina-reader-gh-7",
      "jina-reader-gh-9",
      "jina-reader-comm-1"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "auto-retry-proxy-chain",
    "verdict": "partial",
    "quality": 4,
    "confidence": "low",
    "rationale": "Jina Reader offers a single hosted proxy option (`x-proxy: auto`) that rotates residential/datacenter IPs and handles common anti-bot challenges, but there is no evidence of an automatic retry mechanism chaining through multiple distinct proxy providers/configs on failure. missing for 10: documented retry/fallback logic across a chain of different proxies, evidence of automatic re-attempt after a block, independent confirmation of anti-bot bypass success.",
    "evidenceIds": [
      "jina-reader-gh-9"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "automation-bulk-operations",
    "verdict": "partial",
    "quality": 4,
    "confidence": "low",
    "rationale": "The search endpoint fetches and converts the top 5 results in one call (jina-reader-gh-2), showing some multi-item processing, but there's no documented bulk/batch API for submitting many arbitrary URLs or files at once beyond single-item POST endpoints (jina-reader-gh-1, jina-reader-gh-3). missing for 10: a dedicated batch/bulk endpoint accepting arbitrary lists of URLs, documented concurrency/rate limits for bulk jobs, and evidence of large-scale automation use.",
    "evidenceIds": [
      "jina-reader-gh-2",
      "jina-reader-gh-1",
      "jina-reader-gh-3"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "automation-rules-engine",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "jina-reader",
    "storyId": "automation-scheduled-jobs",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "Jina Reader is a URL-to-text/API conversion service with no evidence of a scheduler, cron-like trigger, or recurring workflow feature; nothing in the evidence pack describes recurring jobs or workflow automation beyond single-shot fetch requests.",
    "evidenceIds": []
  },
  {
    "productId": "jina-reader",
    "storyId": "automation-versioned-workflows",
    "verdict": "na",
    "quality": 0,
    "confidence": "high",
    "rationale": "Jina Reader is a URL-to-LLM-text conversion API/service, not an automation platform with workflow definitions; there is no concept of an 'automation' to version, review, or roll back. This axis is a category error for this product type.",
    "evidenceIds": []
  },
  {
    "productId": "jina-reader",
    "storyId": "batch-scrape-async",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Evidence covers single-URL conversion, search-based fetching, proxy rotation, and format options, but nothing documents a batch/bulk endpoint, job queue, or async processing pipeline for thousands of URLs at once.",
    "evidenceIds": []
  },
  {
    "productId": "jina-reader",
    "storyId": "block-ads-for-speed",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence of any ad-blocking or content-filtering feature to speed up scraping; Reader's evidence covers output formatting, chunking, proxy rotation, and cookie forwarding, but nothing about blocking ads/trackers on the target page.",
    "evidenceIds": []
  },
  {
    "productId": "jina-reader",
    "storyId": "block-images-css-for-speed",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence of an option to block images or CSS resources by default; Reader's documented features focus on content extraction, VLM image captioning, and output formatting, not resource-blocking for bandwidth savings.",
    "evidenceIds": []
  },
  {
    "productId": "jina-reader",
    "storyId": "concurrency-cap-by-plan",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence documents concurrency/request caps per pricing tier or the cost to increase them; community comments explicitly note the website doesn't mention API limits, and authentication errors appear but no rate-limit specifics.",
    "evidenceIds": [
      "jina-reader-comm-1",
      "jina-reader-comm-4",
      "jina-reader-comm-5"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "concurrent-sessions-at-scale",
    "verdict": "partial",
    "quality": 5,
    "confidence": "low",
    "rationale": "Reader offers infrastructure that could support scale (a rotating proxy pool for anti-bot handling, and a self-hostable Docker image bundling headless Chrome so engineers could run many parallel instances), but there is no first-party documentation of concurrency limits, rate limits, or guidance for running many simultaneous scraping sessions. Community commentary explicitly notes the site doesn't mention API limits, adding uncertainty rather than confirmation.\nmissing for 10: documented concurrency/rate limits, guidance or benchmarks for running many parallel sessions, independent evidence of successful large-scale concurrent use.",
    "evidenceIds": [
      "jina-reader-gh-9",
      "jina-reader-gh-8",
      "jina-reader-comm-1"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "content-change-monitoring",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "Jina Reader converts URLs into LLM-ready content on-demand but there is no evidence of scheduled monitoring, diffing, or change-notification features (webhooks, alerts, polling schedules) that would let a data-engineer track content changes over time.",
    "evidenceIds": []
  },
  {
    "productId": "jina-reader",
    "storyId": "control-viewport-size",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence pack item mentions viewport width/height control, browser window sizing, or any device-emulation/viewport configuration options for Jina Reader's rendering.",
    "evidenceIds": []
  },
  {
    "productId": "jina-reader",
    "storyId": "crawl-respects-robots-and-rate-limits",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence in the pack mentions robots.txt compliance or configurable rate-limiting; features described relate to output formatting, proxying, and anti-bot bypass, not politeness controls.",
    "evidenceIds": []
  },
  {
    "productId": "jina-reader",
    "storyId": "credit-overage-billing",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "No evidence describes what happens when a plan's monthly credit/request quota is exceeded — no mention of overage billing or hard cutoff behavior; community commentary even notes the site doesn't document API limits at all.",
    "evidenceIds": [
      "jina-reader-comm-1"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "css-xpath-extraction",
    "verdict": "partial",
    "quality": 4,
    "confidence": "medium",
    "rationale": "Jina Reader offers structured field extraction via `x-json-schema` and `x-instruction` headers (backed by ReaderLM-v2), which lets developers pull specific fields, but the evidence never mentions CSS or XPath selector syntax as the extraction mechanism. Missing for 10: explicit CSS selector support, explicit XPath selector support, documentation showing selector-based (not just schema/instruction-based) targeting.",
    "evidenceIds": [
      "jina-reader-docs-3"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "custom-actor-development",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "jina-reader",
    "storyId": "data-export-portability",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "Jina Reader outputs markdown/JSON per request but there is no evidence of exportable job configuration bundles, batch export tooling, or any portability/migration feature; the evidence pack never mentions exporting data or configs for migration. missing for 10: export/download of scraped data sets, job configuration export, migration tooling or documentation.",
    "evidenceIds": []
  },
  {
    "productId": "jina-reader",
    "storyId": "data-quality-monitoring-alerts",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence of job performance monitoring, data quality validation, or failure alerting features; evidence covers content extraction and formatting only, with community reports even noting undocumented API limits and auth errors rather than monitoring/alerting tooling.",
    "evidenceIds": []
  },
  {
    "productId": "jina-reader",
    "storyId": "deep-crawl-bfs-with-limit",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence of a deep-crawl feature with breadth-first strategy or configurable page-limit; Jina Reader converts single URLs or performs top-5 search results, not a crawler with BFS/page-limit controls.",
    "evidenceIds": []
  },
  {
    "productId": "jina-reader",
    "storyId": "docker-container-deploy",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "A prebuilt GitHub Container Registry image bundling headless Chrome, LibreOffice, and CJK fonts is documented, enabling self-hosted Docker deployment without building from source. However, missing for 10: no production deployment guidance (scaling, orchestration, resource sizing), no independent hands-on confirmation of running the container in production, and no docs on configuration/env vars for the containerized service.",
    "evidenceIds": [
      "jina-reader-gh-8"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "documented-rate-limits",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "Community evidence explicitly states the website does not mention an API rate limit, and probes for API spec/docs (openapi, llms.txt) return 404s, so no documented RPS/RPM throttling threshold is available.",
    "evidenceIds": [
      "jina-reader-comm-1",
      "jina-reader-probe-1",
      "jina-reader-probe-2"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "failed-request-billing",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence pack item discusses billing behavior for failed, blocked, or empty-result requests, nor any quota-consumption policy; community notes only mention lack of clarity on API limits and unrelated authentication errors.",
    "evidenceIds": [
      "jina-reader-comm-1"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "full-site-crawl",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Jina Reader's evidence describes converting single URLs to LLM-friendly text and a search-then-fetch-top-5 mode, but there is no evidence of a whole-site crawl feature that traverses all pages of a domain in one request.",
    "evidenceIds": []
  },
  {
    "productId": "jina-reader",
    "storyId": "geo-targeted-proxy",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Evidence shows a proxy toggle (x-proxy: auto) that rotates residential/datacenter IPs and bypasses anti-bot challenges, but no capability to select or request a proxy from a specific country/geolocation.",
    "evidenceIds": [
      "jina-reader-gh-9"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "image-captioning-for-text-llm",
    "verdict": "full",
    "quality": 8,
    "confidence": "medium",
    "rationale": "Jina Reader explicitly auto-captions images lacking alt tags using a VLM and formats them inline as markdown, directly enabling text-only models to reason about visual content. Missing for 10: independent/hands-on verification of caption quality and no mention of configurability or coverage for images with existing (but poor) alt text.",
    "evidenceIds": [
      "jina-reader-gh-4"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "interactive-browser-sandbox",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "jina-reader",
    "storyId": "js-rendering-spa",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "The self-hosted Reader image bundles headless Chrome (gh-8), and docs claim clean output even for 'complex or dynamic pages' (docs-2), implying SPA/JS rendering support. However, a community commenter explicitly notes the website doesn't clearly document dynamic JS support, and no first-party doc or hands-on test explicitly confirms full SPA rendering works end-to-end. Missing for 10: explicit documentation stating JS/SPA rendering is supported, a hands-on demonstration of a JS-heavy site being fully rendered, and resolution of the community's noted uncertainty about dynamic JS handling.",
    "evidenceIds": [
      "jina-reader-gh-8",
      "jina-reader-docs-2",
      "jina-reader-comm-2"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "json-schema-extraction",
    "verdict": "full",
    "quality": 8,
    "confidence": "medium",
    "rationale": "Docs explicitly describe an x-json-schema header for passing a JSON schema definition that works with ReaderLM-v2 to extract specific fields, directly matching the story. Missing for 10: independent/hands-on verification of schema-conformant output and no worked example showing exact schema-to-output mapping.",
    "evidenceIds": [
      "jina-reader-docs-3"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "large-table-chunked-extraction",
    "verdict": "partial",
    "quality": 4,
    "confidence": "low",
    "rationale": "Reader offers an opt-in `x-markdown-chunking` feature that splits markdown output into semantic chunks, which could help fit large content (including tables) within processing limits, but there is no evidence it specifically preserves table structure or handles very large tables intelligently. missing for 10: table-aware chunking logic, evidence of table structure preservation across chunks, benchmarks on large-table extraction accuracy.",
    "evidenceIds": [
      "jina-reader-gh-10"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "latency-completeness-tradeoff",
    "verdict": "full",
    "quality": 8,
    "confidence": "medium",
    "rationale": "The `x-respond-timing` header is documented explicitly as giving developers explicit control over when Reader returns, directly trading off latency against completeness, which is exactly the story described. Missing for 10: independent/hands-on confirmation of the header's behavior and concrete latency/completeness benchmarks beyond the first-party doc snippet.",
    "evidenceIds": [
      "jina-reader-gh-7"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "live-system-dashboard",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence of any real-time dashboard, metrics UI, or worker/browser pool status monitoring; evidence only covers content extraction features and API options. This is an applicable axis for a scale-reliability story about a self-hostable service with a browser pool, but nothing in the pack shows such a dashboard exists.",
    "evidenceIds": []
  },
  {
    "productId": "jina-reader",
    "storyId": "llm-driven-extraction",
    "verdict": "full",
    "quality": 7,
    "confidence": "medium",
    "rationale": "Reader explicitly supports `x-instruction` (natural language) and `x-json-schema` headers feeding ReaderLM-v2 to extract specific fields, meaning an LLM/instruction can decide what to pull without pre-written CSS/XPath selectors — directly matching the story. Missing for 10: independent/hands-on verification of extraction quality/accuracy beyond the single first-party doc claim, and no community corroboration of this specific feature working reliably.",
    "evidenceIds": [
      "jina-reader-docs-3",
      "jina-reader-gh-1",
      "jina-reader-docs-2"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "llm-ready-text-instead-of-raw-html",
    "verdict": "full",
    "quality": 9,
    "confidence": "high",
    "rationale": "Jina Reader's core purpose is converting any URL into clean, LLM-ready Markdown/text, avoiding manual HTML parsing and handling JS rendering, anti-bot blocking, and headless browsing behind the scenes, with configurable output formats (frontmatter, JSON, chunked) tailored to AI agents. Community reports show some auth/404 errors on certain deployments, but the core capability is well documented and corroborated. Missing for 10: broader independent benchmarking of output quality/reliability across diverse sites beyond one HN anecdote of failure.",
    "evidenceIds": [
      "jina-reader-gh-1",
      "jina-reader-gh-2",
      "jina-reader-gh-5",
      "jina-reader-gh-6",
      "jina-reader-gh-8",
      "jina-reader-gh-9",
      "jina-reader-docs-1",
      "jina-reader-docs-2",
      "jina-reader-gh-10",
      "jina-reader-docs-3",
      "jina-reader-comm-3",
      "jina-reader-comm-4"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "local-llm-extraction-backend",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "Evidence shows Jina Reader uses fixed VLM captioning and ReaderLM-v2 for structured extraction, with no mention of configuring a local/self-hosted LLM as an alternative extraction backend; the open-source self-hosted image runs Reader's own pipeline (Chrome, LibreOffice) rather than letting users swap in their own LLM.",
    "evidenceIds": [
      "jina-reader-gh-4",
      "jina-reader-docs-3",
      "jina-reader-gh-8"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "markdown-output",
    "verdict": "full",
    "quality": 9,
    "confidence": "high",
    "rationale": "Jina Reader's core function is converting URLs into clean, LLM-friendly Markdown (r.jina.ai), with additional options like frontmatter YAML, image captioning, and semantic chunking, all well documented in first-party sources. Missing for 10: independent hands-on verification of markdown output quality (community evidence cited focuses on auth/404 issues, not output format fidelity).",
    "evidenceIds": [
      "jina-reader-gh-1",
      "jina-reader-gh-4",
      "jina-reader-gh-5",
      "jina-reader-gh-10",
      "jina-reader-docs-2"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "marketplace-monetization",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "jina-reader",
    "storyId": "multi-format-choice",
    "verdict": "full",
    "quality": 9,
    "confidence": "high",
    "rationale": "jina-reader-gh-5 documents the `x-respond-with` header explicitly selecting output format including markdown, HTML, text, and frontmatter (Markdown+YAML), directly matching the story; gh-10 adds chunking control as extra format nuance. Missing for 10: independent hands-on confirmation of each format option (community evidence only covers auth errors, not format selection).",
    "evidenceIds": [
      "jina-reader-gh-5",
      "jina-reader-gh-10"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "nocode-automation-connector",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence of a prebuilt n8n or Zapier connector; the evidence only covers the REST API, headers, self-hosting, and an MCP server, none of which constitute a no-code automation platform connector.",
    "evidenceIds": []
  },
  {
    "productId": "jina-reader",
    "storyId": "open-source-library-integration",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "jina-reader",
    "storyId": "openness-api-parity",
    "verdict": "full",
    "quality": 7,
    "confidence": "medium",
    "rationale": "Jina Reader is fundamentally an API-first product where nearly all functionality (URL-to-markdown conversion, web search, PDF/Office ingestion, VLM image captioning, JSON schema/instruction-based extraction, chunking, proxy routing, cookie forwarding, output presets) is exposed entirely through API endpoints and headers, with no evidence of a richer separate UI holding back features. This suggests the API is the primary and complete interface, matching the AI-native openness story well.  Missing for 10: no explicit documentation stating 'everything the UI can do the API can also do' or comparison against a dashboard/UI feature set, and no independent corroboration confirming full parity.",
    "evidenceIds": [
      "jina-reader-gh-1",
      "jina-reader-gh-3",
      "jina-reader-gh-4",
      "jina-reader-gh-5",
      "jina-reader-gh-6",
      "jina-reader-gh-9",
      "jina-reader-gh-10",
      "jina-reader-docs-1",
      "jina-reader-docs-3"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "openness-full-export",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "jina-reader",
    "storyId": "openness-open-license",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Jina Reader has an open-source branch on GitHub with a prebuilt image published to GitHub Container Registry, confirming source availability, but the evidence pack never states the license under which the code is released. missing for 10: explicit license file/name (e.g., Apache/MIT) confirming open-license status, independent confirmation of license terms.",
    "evidenceIds": [
      "jina-reader-gh-8"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "openness-self-host",
    "verdict": "full",
    "quality": 8,
    "confidence": "high",
    "rationale": "The open-source branch is self-hostable via a prebuilt Docker image on GitHub Container Registry bundling headless Chrome, LibreOffice, and CJK fonts, so users can run Reader without building it themselves. Missing for 10: independent hands-on confirmation of a successful self-hosted deployment and details on feature parity between self-hosted and SaaS versions.",
    "evidenceIds": [
      "jina-reader-gh-8"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "pass-session-cookies",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Jina Reader's docs describe an X-Set-Cookie header that forwards developer-supplied session cookies when fetching a URL, directly matching the story. However this is a single claimed-docs citation with no independent/hands-on corroboration, and community evidence shows unrelated auth/reliability issues (401 errors, 404s) that raise doubts about robustness. Missing for 10: independent verification that cookie-based authenticated fetches actually work end-to-end, and documentation depth (e.g., examples, session persistence details).",
    "evidenceIds": [
      "jina-reader-docs-1",
      "jina-reader-comm-4",
      "jina-reader-comm-5"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "pdf-office-doc-extraction",
    "verdict": "full",
    "quality": 8,
    "confidence": "high",
    "rationale": "Jina Reader explicitly supports POSTing PDFs and MS Office (Word, Excel, PowerPoint) files directly via the `file` body field without needing to host them, and the self-hosted image bundles LibreOffice to process these office formats. Community evidence shows some auth/404 issues but none specifically contradict document-extraction functionality. Missing for 10: independent hands-on verification of extraction quality/fidelity across all four file types and no detail on limits (file size, complex formatting).",
    "evidenceIds": [
      "jina-reader-gh-3",
      "jina-reader-gh-8",
      "jina-reader-docs-2"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "per-url-pattern-config",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Jina Reader operates per-URL request with headers/options (e.g. x-preset, x-respond-with) applied uniformly to a single fetch; there's no evidence of a batch-job concept or per-URL-pattern configuration mapping within one job. missing for 10: batch job API, URL-pattern-based rule matching, differentiated configs within a single request/job.",
    "evidenceIds": []
  },
  {
    "productId": "jina-reader",
    "storyId": "persistent-authenticated-session",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Jina Reader supports passing session cookies per-request via the X-Set-Cookie header, but there is no evidence of a persistent browser profile that maintains login/cookie state across multiple requests automatically — each request appears stateless, requiring cookies to be re-supplied manually.",
    "evidenceIds": [
      "jina-reader-docs-1"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "pii-filtering-on-extraction",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence of any PII detection or redaction/filtering feature; Jina Reader's documented capabilities focus on content extraction, formatting, chunking, and structured extraction via schemas, not privacy/PII filtering.",
    "evidenceIds": []
  },
  {
    "productId": "jina-reader",
    "storyId": "post-render-behind-login",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Jina Reader is a stateless URL-to-markdown converter; there's no evidence of interactive session persistence, clicking, or form-filling to navigate behind a login wall. Cookie forwarding (X-Set-Cookie) only supports pre-authenticated single fetches, not interactive multi-step navigation.",
    "evidenceIds": [
      "jina-reader-docs-1",
      "jina-reader-docs-2",
      "jina-reader-comm-2"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "prebuilt-scraper-marketplace",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "jina-reader",
    "storyId": "premium-residential-proxies",
    "verdict": "full",
    "quality": 7,
    "confidence": "medium",
    "rationale": "Jina Reader offers a hosted SaaS proxy pool (`x-proxy: auto`) that rotates residential/datacenter IPs and auto-handles anti-bot challenges, directly matching the story. Missing for 10: independent/hands-on confirmation of proxy effectiveness against hard-to-scrape sites, and detail on choosing specific proxy types/locations rather than just 'auto'.",
    "evidenceIds": [
      "jina-reader-gh-9"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "privacy-data-residency",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence anywhere in the pack mentions data residency, region selection, or storage location controls; only self-hosting via a prebuilt container image is mentioned, which is a deployment option not a residency control feature.",
    "evidenceIds": []
  },
  {
    "productId": "jina-reader",
    "storyId": "privacy-no-training",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence found of any data-training opt-out, privacy policy, or no-training guarantee for Jina Reader; the pack covers only functional features (parsing, chunking, proxying) and unrelated auth/probe issues.",
    "evidenceIds": []
  },
  {
    "productId": "jina-reader",
    "storyId": "privacy-retention-controls",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence pack item addresses data retention policies, data deletion controls, or user-facing settings to manage stored data lifecycle; evidence covers scraping features, formats, and proxying but nothing about retention/deletion posture.",
    "evidenceIds": []
  },
  {
    "productId": "jina-reader",
    "storyId": "privacy-telemetry-optout",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence pack item mentions telemetry, usage tracking, analytics, or an opt-out mechanism for Jina Reader; the docs focus on API features and scraping, not privacy controls.",
    "evidenceIds": []
  },
  {
    "productId": "jina-reader",
    "storyId": "public-status-page-history",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence of a public status page, uptime history, or incident postmortems; instead there's community evidence of undocumented failures (404s, auth errors) with no transparency page to check beforehand.",
    "evidenceIds": [
      "jina-reader-comm-3",
      "jina-reader-comm-4",
      "jina-reader-comm-5"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "ready-made-templates",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Jina Reader is a URL-to-text/API service with usage flags and headers, but there is no evidence of any ready-made project templates or starter kits for developers to bootstrap projects with.",
    "evidenceIds": []
  },
  {
    "productId": "jina-reader",
    "storyId": "reasoning-effort-control",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Jina Reader is a URL-to-text extraction service, not an autonomous reasoning agent; there is no reasoning-effort/low-medium-high control exposed. The closest options (x-respond-timing trading latency vs completeness, x-preset) control fetch behavior, not agentic reasoning depth, so the specific capability is absent.",
    "evidenceIds": [
      "jina-reader-gh-7",
      "jina-reader-gh-6"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "research-agent-preset",
    "verdict": "full",
    "quality": 8,
    "confidence": "medium",
    "rationale": "The `x-preset: research` option is explicitly documented as being 'for AI research agents needing structured, citable output,' directly matching the story, and complements related features like frontmatter/YAML output and JSON schema extraction for structured data. Missing for 10: independent or hands-on verification that the research preset's output quality/citability holds up in practice beyond the first-party docs.",
    "evidenceIds": [
      "jina-reader-gh-6",
      "jina-reader-gh-5",
      "jina-reader-docs-3"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "resume-crashed-crawl",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "Jina Reader is a URL-to-markdown conversion API/tool, not a deep-crawl orchestration system with crawl-state checkpointing; no evidence anywhere in the pack mentions crawl checkpoints, resumable crawls, or job-state persistence.",
    "evidenceIds": []
  },
  {
    "productId": "jina-reader",
    "storyId": "rotating-proxy-pool",
    "verdict": "full",
    "quality": 7,
    "confidence": "medium",
    "rationale": "Reader documents a hosted proxy feature (`x-proxy: auto`) that rotates residential/datacenter IPs and auto-handles anti-bot challenges, directly matching the story. missing for 10: no independent/hands-on confirmation of rotation behavior or effectiveness against blocks, and no detail on pool size or geographic control.",
    "evidenceIds": [
      "jina-reader-gh-9"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "scheduled-runs",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence of any scheduling, cron, or job-queue feature; Jina Reader is a synchronous URL-to-text API with no mention of automated/recurring execution.",
    "evidenceIds": []
  },
  {
    "productId": "jina-reader",
    "storyId": "screenshot-capture",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "No evidence in the pack mentions screenshot capture of full pages or selected areas; Jina Reader's documented capabilities focus on converting URLs to Markdown/text, image captioning, and structured extraction, not visual screenshots.",
    "evidenceIds": []
  },
  {
    "productId": "jina-reader",
    "storyId": "scripted-page-interactions",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Jina Reader offers cookie forwarding, proxy rotation, timing/format controls, and extraction schemas, but no evidence shows any mechanism to script page interactions like clicking, filling inputs, or scrolling before content extraction; community comments explicitly note uncertainty about dynamic JS handling.",
    "evidenceIds": [
      "jina-reader-docs-1",
      "jina-reader-gh-7",
      "jina-reader-comm-2"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "self-host-open-source",
    "verdict": "full",
    "quality": 8,
    "confidence": "high",
    "rationale": "GitHub repo explicitly documents an open-source branch with a prebuilt image on GitHub Container Registry bundling headless Chrome, LibreOffice, and CJK fonts so developers can self-host without building from scratch. Missing for 10: independent hands-on report confirming self-hosted deployment works smoothly and details on feature parity vs. the hosted proxy (e.g., anti-bot/x-proxy features noted as SaaS-only).",
    "evidenceIds": [
      "jina-reader-gh-8",
      "jina-reader-gh-9"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "semantic-chunked-output",
    "verdict": "full",
    "quality": 8,
    "confidence": "high",
    "rationale": "Jina Reader explicitly supports `x-markdown-chunking`, an opt-in header returning semantically chunked output as a JSON array or delimited text instead of one blob, directly matching the story. Missing for 10: independent hands-on validation of chunk quality/boundaries and no detail on chunking algorithm robustness across document types.",
    "evidenceIds": [
      "jina-reader-gh-10"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "single-call-html-extraction",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Jina Reader's entire design purpose is to convert pages into LLM-friendly Markdown/JSON/frontmatter output (jina-reader-docs-2, jina-reader-gh-5), not raw HTML; no evidence pack item shows an option to return unprocessed raw HTML, and the docs explicitly frame raw scraping as the problem being solved rather than the deliverable.",
    "evidenceIds": [
      "jina-reader-docs-2",
      "jina-reader-gh-5",
      "jina-reader-gh-1"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "spend-cap-alerts",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "No evidence of spending caps or usage alerts; community even notes API limits aren't documented on the website (jina-reader-comm-1), and no billing/quota dashboard or alerting feature is mentioned anywhere in the evidence pack.",
    "evidenceIds": [
      "jina-reader-comm-1"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "sticky-session-proxy",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Evidence shows a proxy rotation feature (x-proxy: auto) that rotates IPs for anti-bot handling, but there is no mention of a session identifier or sticky-IP mechanism to keep the same proxy IP across multiple requests for a consistent identity.",
    "evidenceIds": [
      "jina-reader-gh-9"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "structured-json-output",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Jina Reader supports structured output via `x-json-schema` for schema-defined field extraction and `x-markdown-chunking` for JSON array chunk output, plus frontmatter YAML metadata — showing real structured-output capability beyond plain markdown. However, the default/primary output is markdown/LLM-friendly text, not JSON, and there's no evidence of a dedicated full-page-to-JSON endpoint or independent confirmation these structured modes work reliably in practice. Missing for 10: independent/hands-on verification of x-json-schema output quality, a documented default JSON response mode, and confirmation these features aren't limited/beta.",
    "evidenceIds": [
      "jina-reader-docs-3",
      "jina-reader-gh-10",
      "jina-reader-gh-5"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "team-permissions-management",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence of team/organization management, shared scraper libraries, or role-based access control features; Jina Reader is a URL-to-text API product with no collaboration or RBAC layer mentioned anywhere in the evidence pack.",
    "evidenceIds": []
  },
  {
    "productId": "jina-reader",
    "storyId": "undetected-browser-mode",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Evidence shows a rotating IP proxy pool that 'handles common anti-bot challenges automatically' (x-proxy: auto), but there is no mention of an undetected/stealth browser mode, fingerprint spoofing, or bypassing sophisticated bot detection like Cloudflare/Datadome-style challenges. This is a distinct, more specific capability than generic proxy rotation and is unevidenced.",
    "evidenceIds": [
      "jina-reader-gh-9"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "url-discovery-map",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "Jina Reader converts individual URLs into clean text/markdown and can search top results, but there is no evidence of a sitemap/URL-discovery feature that lists all URLs on a site without crawling it.",
    "evidenceIds": []
  },
  {
    "productId": "jina-reader",
    "storyId": "wait-for-selector",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "The evidence shows Reader has timing controls (x-respond-timing to trade latency vs completeness) and general JS-rendering via headless Chrome, but there's no mention of a selector-wait mechanism (e.g., waiting for a specific CSS/XPath selector before returning). Community feedback even notes it's unclear whether/how dynamic JS support works.",
    "evidenceIds": [
      "jina-reader-gh-7",
      "jina-reader-gh-8",
      "jina-reader-comm-2"
    ]
  },
  {
    "productId": "jina-reader",
    "storyId": "web-search-with-content",
    "verdict": "full",
    "quality": 8,
    "confidence": "medium",
    "rationale": "Jina Reader's documented behavior explicitly performs a web search, fetches the top 5 results, and converts each to LLM-friendly full text in one call (s.jina.ai flow), with a 'research' preset tailored for citable agent output. Missing for 10: independent hands-on verification specifically of the search+fetch endpoint (the community evidence cited relates to a different third-party wrapper's auth/404 issues, not this feature directly).",
    "evidenceIds": [
      "jina-reader-gh-2",
      "jina-reader-gh-6",
      "jina-reader-gh-5",
      "jina-reader-docs-2"
    ]
  },
  {
    "productId": "riveter",
    "storyId": "adaptive-stop-crawling",
    "verdict": "partial",
    "quality": 3,
    "confidence": "low",
    "rationale": "Riveter's search_agent and enrichment agent loop imply some autonomous research process that fills a cell with an AI-researched answer, suggesting the agent decides when it has enough data, but there is no explicit documentation of stopping criteria or adaptive crawling behavior tied to query sufficiency. missing for 10: explicit description of adaptive stopping/crawling logic, evidence of how the agent determines 'enough information', independent confirmation of this behavior in practice.",
    "evidenceIds": [
      "riveter-docs-5",
      "riveter-docs-1"
    ]
  },
  {
    "productId": "riveter",
    "storyId": "agentic-agent-docs",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "Direct probes show llms.txt returns 404 and no OpenAPI spec is discoverable at any standard path, and no evidence pack item claims an agent-oriented docs format exists; while MCP integration is mentioned, that's a separate capability from machine-readable docs for pointing an agent at.",
    "evidenceIds": [
      "riveter-probe-1",
      "riveter-probe-2"
    ]
  },
  {
    "productId": "riveter",
    "storyId": "agentic-ai-insights",
    "verdict": "full",
    "quality": 7,
    "confidence": "medium",
    "rationale": "Riveter's core enrichment feature fills columns using AI agents, web search/scrape, and other tools to generate insights directly on user data, and search_agent provides ad hoc AI-researched answers within the product. missing for 10: independent/hands-on corroboration of insight quality, no example of proactive/unprompted suggestions (only prompt-driven enrichment), and no dashboard-level 'insights' UI evidence beyond API/SDK docs.",
    "evidenceIds": [
      "riveter-docs-1",
      "riveter-docs-2",
      "riveter-docs-5",
      "riveter-docs-15",
      "riveter-docs-18"
    ]
  },
  {
    "productId": "riveter",
    "storyId": "agentic-autonomous-automation",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Riveter supports scheduling projects to run on a cadence ('every minute' for fast-moving data) and webhook notifications on run completion, which enables autonomous background execution without manual triggering. However, there's no evidence of broader automation orchestration (e.g., conditional triggers, chaining multiple actions, or a dedicated automation/workflow builder) beyond scheduled data refresh. Missing for 10: evidence of multi-step autonomous workflows beyond scheduled enrichment refresh, independent/hands-on confirmation that scheduling works reliably in production, and any automation trigger types beyond time-based schedules.",
    "evidenceIds": [
      "riveter-docs-13",
      "riveter-docs-17",
      "riveter-docs-6"
    ]
  },
  {
    "productId": "riveter",
    "storyId": "agentic-builtin-assistant",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Riveter ships an internal 'agent loop' (search_agent, enrichment AI) that autonomously researches, scrapes, and fills data on request, which functions as a built-in AI assistant for delegated research tasks rather than a conversational general-purpose assistant. Missing for 10: evidence of a general chat/task interface for arbitrary delegation, independent hands-on validation, and clarity on how broadly the agent can handle tasks beyond enrichment/search/scrape.",
    "evidenceIds": [
      "riveter-docs-1",
      "riveter-docs-5",
      "riveter-docs-15",
      "riveter-docs-18"
    ]
  },
  {
    "productId": "riveter",
    "storyId": "agentic-headless",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Riveter exposes a full API with SDKs (Go example shown), webhooks for async completion, dry_run/max_credits safety controls, and scheduling for recurring automation — all of which support headless, non-interactive use in a pipeline. However, there is no explicit CI/CD example, GitHub Actions integration, or CLI documentation demonstrating a documented headless workflow. Missing for 10: explicit CI/CD or pipeline integration guide, CLI headless invocation docs, independent confirmation of automated/scripted runs.",
    "evidenceIds": [
      "riveter-docs-6",
      "riveter-docs-7",
      "riveter-docs-8",
      "riveter-docs-11",
      "riveter-docs-12",
      "riveter-docs-13"
    ]
  },
  {
    "productId": "riveter",
    "storyId": "agentic-mcp-client",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "All MCP-related evidence describes Riveter acting as an MCP *server* that other AI assistants (Claude, ChatGPT, Cursor) connect to, not Riveter acting as a client that can plug in and consume external MCP servers' tools. No evidence shows Riveter itself importing/connecting to third-party MCP servers to extend its own tool use.",
    "evidenceIds": [
      "riveter-docs-9",
      "riveter-docs-10"
    ]
  },
  {
    "productId": "riveter",
    "storyId": "agentic-mcp-server",
    "verdict": "full",
    "quality": 7,
    "confidence": "medium",
    "rationale": "Docs explicitly describe connecting Riveter to Claude, ChatGPT, Cursor, or any MCP-compatible assistant via two connection methods, including a local Node.js-based server option, indicating an official MCP server offering. Missing for 10: no independent/hands-on corroboration of the MCP server working, and no detail on the remote/hosted connection method's implementation.",
    "evidenceIds": [
      "riveter-docs-9",
      "riveter-docs-10"
    ]
  },
  {
    "productId": "riveter",
    "storyId": "agentic-nl-commands",
    "verdict": "full",
    "quality": 7,
    "confidence": "medium",
    "rationale": "Riveter explicitly supports building enrichments from natural-language prompts (riveter-docs-2), offers a search_agent that answers questions in natural language without setup (riveter-docs-5), and can be operated via MCP-compatible AI assistants like Claude, ChatGPT, and Cursor (riveter-docs-9), which is the core mechanism for natural-language control. Missing for 10: independent/hands-on confirmation of NL command reliability, and no evidence of a broader NL command surface beyond enrichment/search (e.g., NL-driven scheduling or config changes).",
    "evidenceIds": [
      "riveter-docs-2",
      "riveter-docs-5",
      "riveter-docs-9",
      "riveter-docs-12"
    ]
  },
  {
    "productId": "riveter",
    "storyId": "agentic-official-cli",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Evidence shows SDKs (Go), a local MCP server requiring Node.js, and REST API features, but no mention of an official CLI tool for running enrichments or managing the product. The docs and probes (llms.txt, openapi) surface no CLI reference, so this applicable axis is unmet.",
    "evidenceIds": [
      "riveter-docs-9",
      "riveter-docs-10",
      "riveter-docs-11",
      "riveter-docs-12"
    ]
  },
  {
    "productId": "riveter",
    "storyId": "agentic-public-api",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Docs describe concrete API mechanics (webhook_url, dry_run, max_credits, SDK auth/retry/pagination handling, Go SDK code sample) showing a real documented public API surface for driving runs programmatically, and MCP/remote-server integration is documented. However, probes for a formal machine-readable spec (openapi.json/swagger.json) and llms.txt all returned 404, so there's no discoverable canonical API reference, undermining full 'documented public API' claims. missing for 10: a public OpenAPI/swagger spec or llms.txt confirming a fully machine-readable API contract, independent third-party confirmation of API usage.",
    "evidenceIds": [
      "riveter-docs-6",
      "riveter-docs-7",
      "riveter-docs-8",
      "riveter-docs-11",
      "riveter-docs-12",
      "riveter-docs-9",
      "riveter-probe-1",
      "riveter-probe-2"
    ]
  },
  {
    "productId": "riveter",
    "storyId": "agentic-scoped-keys",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Riveter's evidence covers a single API key model, credit caps, and dry-run cost estimation, but there is no mention of scoped or least-privilege credentials, per-agent tokens, or permission scoping for agents. missing for 10: scoped/least-privilege credential issuance, per-agent API key scoping, role/permission-based access control.",
    "evidenceIds": []
  },
  {
    "productId": "riveter",
    "storyId": "agentic-sdks",
    "verdict": "full",
    "quality": 7,
    "confidence": "medium",
    "rationale": "Riveter ships an official Go SDK (riveterhq/riveter-go) with documented client code (riveter.EnrichParams), and docs describe SDK-level handling of auth, retries, long-polling, and pagination, indicating a first-party SDK layer built for AI-native workflows. Missing for 10: confirmation of additional language SDKs (e.g., Python/JS) beyond Go, and independent/hands-on corroboration of SDK reliability.",
    "evidenceIds": [
      "riveter-docs-11",
      "riveter-docs-12"
    ]
  },
  {
    "productId": "riveter",
    "storyId": "agentic-webhooks",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Riveter supports webhooks by passing a webhook_url when starting a run, with Riveter POSTing results back on run.completed, run.stopped, and run.finished events — a real event-notification mechanism for agentic workflows. However this is scoped to a single run's lifecycle rather than a general subscription model (no persistent webhook registration/management endpoint, no broader event catalog, no signature/security details). Missing for 10: a dedicated webhook subscription/management API, documentation of additional event types beyond run lifecycle, and payload signing/verification details.",
    "evidenceIds": [
      "riveter-docs-6"
    ]
  },
  {
    "productId": "riveter",
    "storyId": "ai-natural-language-extraction",
    "verdict": "full",
    "quality": 7,
    "confidence": "medium",
    "rationale": "Riveter's core enrichment feature lets developers build extraction jobs from a natural-language prompt with target attributes instead of writing selectors, and AI agents interpret pages semantically so configs survive redesigns, directly matching the story. missing for 10: independent/hands-on verification of extraction accuracy and no live API schema (openapi/llms.txt probes 404) to confirm behavior beyond vendor docs.",
    "evidenceIds": [
      "riveter-docs-2",
      "riveter-docs-12",
      "riveter-docs-15",
      "riveter-docs-1"
    ]
  },
  {
    "productId": "riveter",
    "storyId": "api-interactive-docs",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "No evidence of an interactive API reference or runnable examples; probes for llms.txt and OpenAPI/Swagger specs both returned 404s, and docs snippets are static text/code examples only, not interactive/runnable.",
    "evidenceIds": [
      "riveter-probe-1",
      "riveter-probe-2"
    ]
  },
  {
    "productId": "riveter",
    "storyId": "api-machine-spec",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "Probes for llms.txt and OpenAPI/swagger spec files all returned 404s, and no documentation mentions a downloadable machine-readable API spec despite having a REST API and SDKs.",
    "evidenceIds": [
      "riveter-probe-1",
      "riveter-probe-2"
    ]
  },
  {
    "productId": "riveter",
    "storyId": "api-sandbox",
    "verdict": "partial",
    "quality": 4,
    "confidence": "low",
    "rationale": "Riveter offers a dry_run mode that validates a request and returns a credit estimate without creating or charging anything, and a max_credits cap that blocks runs before they execute — both function like a lightweight 'test without side effects' capability. However, there's no explicit documentation of a separate sandbox environment or synthetic/test dataset distinct from production data sources (Riveter always operates against live web/data sources when actually run). Missing for 10: a documented sandbox/staging environment, sample or mock datasets, and explicit guidance on testing enrichments without touching real production data sources.",
    "evidenceIds": [
      "riveter-docs-7",
      "riveter-docs-8"
    ]
  },
  {
    "productId": "riveter",
    "storyId": "api-versioning-policy",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence of API versioning scheme or a documented deprecation policy; probes for OpenAPI/spec discovery returned 404s, and docs mention SDKs/features but nothing about version numbers or deprecation guarantees. Missing for 10: versioned endpoint scheme (e.g., /v1/), a published deprecation/sunset policy, changelog or migration guides.",
    "evidenceIds": [
      "riveter-probe-1",
      "riveter-probe-2"
    ]
  },
  {
    "productId": "riveter",
    "storyId": "auto-captcha-unblock",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "riveter",
    "storyId": "auto-cheapest-config",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "Riveter offers cost controls like dry_run estimates and max_credits caps that refuse overpriced requests, but there is no evidence the API automatically searches for or selects the cheapest configuration that still succeeds — it only estimates/caps, it doesn't auto-optimize. Missing for 10: any documentation of automatic configuration search/optimization for cost, fallback logic that retries cheaper options, or an API parameter that lets Riveter choose the minimal successful config itself.",
    "evidenceIds": [
      "riveter-docs-7",
      "riveter-docs-8"
    ]
  },
  {
    "productId": "riveter",
    "storyId": "auto-retry-proxy-chain",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence of proxy rotation, IP chaining, or anti-bot-specific retry logic; only generic SDK retries for 429s/transient failures are mentioned, which is unrelated to proxy chaining against anti-bot blocks.",
    "evidenceIds": []
  },
  {
    "productId": "riveter",
    "storyId": "automation-bulk-operations",
    "verdict": "full",
    "quality": 8,
    "confidence": "medium",
    "rationale": "Riveter's core enrichment model operates on many rows at once (bulk input data with AI-filled columns), supports batch generation from a prompt/spec, scheduling for ongoing refresh, and examples like pulling every dentist from every practice in a city in one request. Missing for 10: independent/hands-on verification of large-scale bulk runs and no explicit documentation of per-run item limits or throughput benchmarks.",
    "evidenceIds": [
      "riveter-docs-1",
      "riveter-docs-2",
      "riveter-docs-13",
      "riveter-docs-16",
      "riveter-docs-17",
      "riveter-docs-18"
    ]
  },
  {
    "productId": "riveter",
    "storyId": "automation-rules-engine",
    "verdict": "partial",
    "quality": 4,
    "confidence": "medium",
    "rationale": "Riveter supports scheduled refresh of projects (time-based automation) and webhook events (run.completed/stopped/finished) that can notify external systems, giving some automation-on-events capability, but there is no evidence of a rules/condition engine that lets users define arbitrary triggers (e.g., 'if data matches X, then do Y') beyond scheduling and run-completion notifications. missing for 10: conditional rule definitions, event-driven branching logic, multi-condition triggers, and any UI/API for building custom automations beyond schedule+webhook.",
    "evidenceIds": [
      "riveter-docs-6",
      "riveter-docs-13",
      "riveter-docs-17"
    ]
  },
  {
    "productId": "riveter",
    "storyId": "automation-scheduled-jobs",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Docs state you can 'schedule any project to monitor for changes and keep your data fresh' and refresh as often as every minute, indicating recurring job/workflow scheduling support. However, details are thin — no documentation on schedule configuration (cron-like syntax, timezone, pause/resume), no UI/API endpoint specifics for managing schedules, and no independent or hands-on corroboration. Missing for 10: scheduling API/UI details, configuration options, independent verification of reliability at scale.",
    "evidenceIds": [
      "riveter-docs-13",
      "riveter-docs-17"
    ]
  },
  {
    "productId": "riveter",
    "storyId": "automation-versioned-workflows",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence of version history, review workflows, or rollback capability for automations/enrichments; the pack only covers run execution, credit control, and data enrichment features. Missing for 10: versioning of automation configs, review/approval workflow, rollback/undo mechanism.",
    "evidenceIds": []
  },
  {
    "productId": "riveter",
    "storyId": "batch-scrape-async",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Riveter's enrichment engine explicitly processes rows of URLs with scraping, runs asynchronously (webhook_url on completion), and SDKs handle retries, long-polling, and pagination — all core pieces for async batch scraping. However, there's no explicit documentation of scale limits, concurrency handling, or a tested example at thousands-of-URLs volume. Missing for 10: explicit large-scale (thousands of URLs) benchmarks or case studies, concurrency/rate-limit guidance for very large batches.",
    "evidenceIds": [
      "riveter-docs-1",
      "riveter-docs-3",
      "riveter-docs-6",
      "riveter-docs-11",
      "riveter-docs-16"
    ]
  },
  {
    "productId": "riveter",
    "storyId": "block-ads-for-speed",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "riveter",
    "storyId": "block-images-css-for-speed",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "riveter",
    "storyId": "concurrency-cap-by-plan",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence pack items mention pricing tiers, concurrency/rate limits, or the cost to raise such caps; only credit-cap controls (max_credits) and dry-run estimates are documented, which address per-request cost, not concurrent session limits or tier-based upgrade pricing.",
    "evidenceIds": []
  },
  {
    "productId": "riveter",
    "storyId": "concurrent-sessions-at-scale",
    "verdict": "partial",
    "quality": 5,
    "confidence": "low",
    "rationale": "Riveter's enrichment engine processes many rows in a single run and can chain scrapes/searches (e.g., finding every dental practice then every dentist in one request), implying built-in batch/bulk scraping at scale, and SDKs handle retries/pagination for large jobs. However, there is no explicit documentation of concurrency limits, parallel session management, or throughput guarantees for scraping specifically. Missing for 10: explicit concurrency/session limits, performance benchmarks, and independent evidence of scaling to many simultaneous scrape sessions.",
    "evidenceIds": [
      "riveter-docs-1",
      "riveter-docs-3",
      "riveter-docs-16",
      "riveter-docs-11",
      "riveter-docs-13"
    ]
  },
  {
    "productId": "riveter",
    "storyId": "content-change-monitoring",
    "verdict": "partial",
    "quality": 7,
    "confidence": "medium",
    "rationale": "Riveter explicitly supports scheduling projects to monitor for changes, refreshing as often as every minute, and can POST results to a webhook_url when a run finishes, which together deliver change-monitoring plus notification. However, the webhook fires on run completion rather than a dedicated 'content changed' diff event, and there's no independent/hands-on evidence of this workflow in production. Missing for 10: independent corroboration of the schedule+webhook pipeline in practice, and explicit diff/change-detection logic distinguishing 'changed' vs 'unchanged' pages.",
    "evidenceIds": [
      "riveter-docs-13",
      "riveter-docs-17",
      "riveter-docs-6"
    ]
  },
  {
    "productId": "riveter",
    "storyId": "control-viewport-size",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "riveter",
    "storyId": "crawl-respects-robots-and-rate-limits",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "No evidence anywhere in the docs mentions robots.txt compliance or rate-limit configuration; the pack only covers scraping features, retries, credits, and MCP integration. This is a fair axis for a web-scraping/crawling product, but absence of evidence means it cannot be credited as delivered.",
    "evidenceIds": []
  },
  {
    "productId": "riveter",
    "storyId": "credit-overage-billing",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "The evidence describes credit estimation, dry_run, and max_credits cap that refuses requests at 422 before charging, but there is no mention of plan-level monthly credit/request quotas, nor whether exceeding them triggers overage billing or a hard cutoff. missing for 10: any documentation of monthly plan quotas, overage billing policy, or hard-cutoff behavior when a subscription limit is exceeded.",
    "evidenceIds": [
      "riveter-docs-7",
      "riveter-docs-8"
    ]
  },
  {
    "productId": "riveter",
    "storyId": "css-xpath-extraction",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Riveter's docs describe AI-driven page interpretation and scraping (turning URLs into parseable text, agents reading pages 'the way a person would') rather than CSS/XPath selector rules; no evidence pack item mentions selector-based extraction at all, and one item explicitly frames the AI approach as an alternative to fragile configuration that would break on redesign, which is the kind of setup selectors typically require.",
    "evidenceIds": [
      "riveter-docs-3",
      "riveter-docs-15"
    ]
  },
  {
    "productId": "riveter",
    "storyId": "custom-actor-development",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Riveter's docs show fully managed, serverless-style capabilities (enrichments, scrapes, quick_search, search_agent) that developers configure via natural-language prompts or structured specs and trigger via API/SDK/webhooks with no server management (riveter-docs-1,2,3,4,5,6,11,12). However, this is closer to configuring built-in AI-driven tools than deploying arbitrary custom scraping code/scripts — there's no evidence of a code-upload or custom-script execution environment. Missing for 10: evidence of arbitrary custom code/script deployment (vs. prompt/spec-based enrichment configuration), and independent confirmation of the serverless execution model.",
    "evidenceIds": [
      "riveter-docs-1",
      "riveter-docs-2",
      "riveter-docs-3",
      "riveter-docs-4",
      "riveter-docs-5",
      "riveter-docs-6",
      "riveter-docs-11",
      "riveter-docs-12"
    ]
  },
  {
    "productId": "riveter",
    "storyId": "data-export-portability",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence of any export/portability feature for scraped data or job configs, nor any mention of migration support or standard/open config formats; API docs focus on running enrichments, webhooks, and SDKs, not data portability.",
    "evidenceIds": []
  },
  {
    "productId": "riveter",
    "storyId": "data-quality-monitoring-alerts",
    "verdict": "partial",
    "quality": 5,
    "confidence": "medium",
    "rationale": "Riveter supports webhook alerts on run completion/stop/finish events and scheduled monitoring for data freshness, giving some job-status alerting and monitoring capability, but there is no explicit data-quality validation feature (e.g., schema/anomaly checks) or job performance dashboards described. missing for 10: explicit data quality validation tooling, job performance metrics/dashboard, and independent confirmation of alerting reliability.",
    "evidenceIds": [
      "riveter-docs-6",
      "riveter-docs-13",
      "riveter-docs-7",
      "riveter-docs-8"
    ]
  },
  {
    "productId": "riveter",
    "storyId": "deep-crawl-bfs-with-limit",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "riveter",
    "storyId": "docker-container-deploy",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "riveter",
    "storyId": "documented-rate-limits",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "There is a mention of SDKs handling retries on 429s, implying rate limiting exists, but no documented numeric rate limit (requests per second/minute) is given anywhere in the evidence pack, and probes for API spec/docs return 404s.",
    "evidenceIds": [
      "riveter-docs-11",
      "riveter-probe-1",
      "riveter-probe-2"
    ]
  },
  {
    "productId": "riveter",
    "storyId": "failed-request-billing",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "The docs describe dry_run cost estimation and max_credits caps that prevent overage, but nothing states whether a failed, blocked, or empty-result run still consumes credits. Missing for 10: explicit policy on billing for failed/empty/blocked runs, any refund or non-charge guarantee for zero-result enrichments.",
    "evidenceIds": [
      "riveter-docs-7",
      "riveter-docs-8"
    ]
  },
  {
    "productId": "riveter",
    "storyId": "full-site-crawl",
    "verdict": "partial",
    "quality": 5,
    "confidence": "medium",
    "rationale": "Riveter's docs describe single-URL 'scrape' and 'quick_search' calls, but the marketing example of finding every dental practice in a city and pulling data from each one in a single request shows it can aggregate content across multiple pages/sources in one enrichment run, which approximates whole-site crawling. There is no explicit sitemap-style 'crawl entire website' feature or evidence of full-domain page enumeration. missing for 10: explicit full-site/sitemap crawl feature, evidence of automatically discovering and traversing all pages of a single domain, independent confirmation of multi-page crawl behavior.",
    "evidenceIds": [
      "riveter-docs-3",
      "riveter-docs-16",
      "riveter-docs-18"
    ]
  },
  {
    "productId": "riveter",
    "storyId": "geo-targeted-proxy",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "riveter",
    "storyId": "image-captioning-for-text-llm",
    "verdict": "partial",
    "quality": 3,
    "confidence": "low",
    "rationale": "Riveter's docs mention it 'reads PDFs and images' and combines results with web data (riveter-docs-18), implying some visual-content ingestion, but there is no explicit description of generating captions or text descriptions of images for downstream reasoning by a text-only model. Missing for 10: explicit captioning/description output format, example enrichment showing image-to-text extraction, and any confirmation this text is usable standalone by a text-only model.",
    "evidenceIds": [
      "riveter-docs-18"
    ]
  },
  {
    "productId": "riveter",
    "storyId": "interactive-browser-sandbox",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "riveter",
    "storyId": "js-rendering-spa",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "Riveter is a data-enrichment/scraping/AI-agent tool focused on turning URLs into text and filling data columns; there is no evidence it renders JS-heavy SPAs into fully rendered HTML (e.g., headless browser rendering, DOM snapshot output). The 'scrape' feature converts URLs to 'easily parseable text', not full rendered HTML, so this capability is unevidenced.",
    "evidenceIds": [
      "riveter-docs-3"
    ]
  },
  {
    "productId": "riveter",
    "storyId": "json-schema-extraction",
    "verdict": "partial",
    "quality": 4,
    "confidence": "low",
    "rationale": "Riveter lets you define enrichments via a natural-language prompt or a 'structured spec' with named attributes/columns (riveter-docs-2, riveter-docs-12), which produces structured output, but there is no documented mechanism for passing an arbitrary JSON Schema that the API validates/returns against. missing for 10: explicit JSON Schema input parameter, schema validation of output, and any example showing schema-conformant responses.",
    "evidenceIds": [
      "riveter-docs-2",
      "riveter-docs-12",
      "riveter-docs-1"
    ]
  },
  {
    "productId": "riveter",
    "storyId": "large-table-chunked-extraction",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Riveter's evidence covers enrichment, scraping, search, and workflow automation, but there is no mention of chunking large tables, row batching, pagination for extraction limits, or handling of very large datasets to fit processing constraints. missing for 10: any mention of chunking strategy, table size limits, batching large extractions, or row-splitting logic.",
    "evidenceIds": []
  },
  {
    "productId": "riveter",
    "storyId": "latency-completeness-tradeoff",
    "verdict": "full",
    "quality": 7,
    "confidence": "medium",
    "rationale": "Riveter explicitly exposes multiple latency/completeness tradeoffs: quick_search returns fast synchronous structured snippets, search_agent runs a fuller AI research loop for one question, and full enrichments can be tracked via wait_for_result long-polling or async webhook callbacks — giving a developer direct control over when and how complete the returned content is. missing for 10: no independent/hands-on benchmarks or third-party confirmation of actual latency differences between these modes.",
    "evidenceIds": [
      "riveter-docs-4",
      "riveter-docs-5",
      "riveter-docs-6",
      "riveter-docs-11"
    ]
  },
  {
    "productId": "riveter",
    "storyId": "live-system-dashboard",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "riveter",
    "storyId": "llm-driven-extraction",
    "verdict": "full",
    "quality": 8,
    "confidence": "medium",
    "rationale": "Docs describe enrichments where AI agents interpret pages and fill arbitrary attribute columns from a natural-language prompt or structured spec (no selectors), with scraping/search tools feeding an AI agent loop that adapts to page structure and redesigns. This directly matches the story of an LLM reading a page and deciding what fields to extract without pre-written selectors. Missing for 10: independent hands-on verification of extraction accuracy and no example showing the LLM's field-selection reasoning in practice.",
    "evidenceIds": [
      "riveter-docs-1",
      "riveter-docs-2",
      "riveter-docs-3",
      "riveter-docs-15",
      "riveter-docs-16",
      "riveter-docs-12"
    ]
  },
  {
    "productId": "riveter",
    "storyId": "llm-ready-text-instead-of-raw-html",
    "verdict": "partial",
    "quality": 5,
    "confidence": "medium",
    "rationale": "Docs claim a scrape converts any URL into 'easily parseable text' and that AI agents interpret pages 'the way a person would', directly addressing the ask for clean, LLM-ready text instead of raw HTML. However, all evidence is vendor documentation with no independent hands-on verification of output cleanliness, no example output shown, and no explicit mention of handling JS rendering/blocking obstacles beyond the general claim. Missing for 10: independent corroboration of scrape text quality, concrete example output, and explicit handling of anti-bot/rendering blockers.",
    "evidenceIds": [
      "riveter-docs-3",
      "riveter-docs-15",
      "riveter-docs-18",
      "riveter-docs-4"
    ]
  },
  {
    "productId": "riveter",
    "storyId": "local-llm-extraction-backend",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence anywhere in the docs suggests Riveter allows swapping in a local or self-hosted LLM as the extraction engine; the product is presented as a cloud-only enrichment/extraction service with API keys, credits, and hosted agents. Missing for 10: any mention of local model support, self-hosted backend configuration, or BYO-model options.",
    "evidenceIds": [
      "riveter-docs-1",
      "riveter-docs-9",
      "riveter-docs-10"
    ]
  },
  {
    "productId": "riveter",
    "storyId": "markdown-output",
    "verdict": "partial",
    "quality": 5,
    "confidence": "low",
    "rationale": "Docs state a scrape 'turns a URL into easily parseable text,' implying cleaned output rather than raw HTML, but there's no explicit mention of markdown formatting or output schema. Missing for 10: explicit confirmation that scrape output is markdown-formatted, example output showing markdown structure, independent verification of output cleanliness.",
    "evidenceIds": [
      "riveter-docs-3"
    ]
  },
  {
    "productId": "riveter",
    "storyId": "marketplace-monetization",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "riveter",
    "storyId": "multi-format-choice",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "Riveter's evidence pack covers enrichment, scraping, search, webhooks, and credit controls but never mentions selectable output formats like markdown, HTML, text, or frontmatter for returned data.",
    "evidenceIds": []
  },
  {
    "productId": "riveter",
    "storyId": "nocode-automation-connector",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence of a prebuilt n8n or Zapier connector; only webhook support and MCP/AI-assistant integrations are documented, which are not no-code automation platform connectors.",
    "evidenceIds": []
  },
  {
    "productId": "riveter",
    "storyId": "open-source-library-integration",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "riveter",
    "storyId": "openness-api-parity",
    "verdict": "partial",
    "quality": 5,
    "confidence": "medium",
    "rationale": "Docs show many core capabilities (building enrichments via prompt/spec, scraping, quick_search, search_agent, webhooks, dry_run) are all API-accessible, suggesting broad parity, but there is no explicit statement of full UI/API parity and some UI-highlighted features like scheduling refresh (riveter-docs-13, riveter-docs-17) aren't confirmed as API-exposed. Additionally, probes show no discoverable OpenAPI spec (riveter-probe-2) or llms.txt (riveter-probe-1), undermining confidence that the API surface is fully documented/openly specified. missing for 10: explicit parity statement, API access to scheduling/monitoring feature, published OpenAPI spec for verification.",
    "evidenceIds": [
      "riveter-docs-2",
      "riveter-docs-3",
      "riveter-docs-4",
      "riveter-docs-5",
      "riveter-docs-6",
      "riveter-docs-7",
      "riveter-docs-13",
      "riveter-docs-17",
      "riveter-probe-1",
      "riveter-probe-2"
    ]
  },
  {
    "productId": "riveter",
    "storyId": "openness-full-export",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "No evidence of any data export feature or open-format export capability; the evidence only covers enrichment, scraping, search, and API integration features, with no mention of exporting data or portability guarantees. missing for 10: export functionality documentation, supported open formats (CSV/JSON/etc), any data-portability or account-closure workflow.",
    "evidenceIds": []
  },
  {
    "productId": "riveter",
    "storyId": "openness-open-license",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "riveter",
    "storyId": "openness-self-host",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Riveter is presented as a hosted API/SaaS product (with local MCP server option only for connecting AI clients, not for self-hosting the core enrichment engine); no evidence of open-source code, self-hosting instructions, or a downloadable core product exists in the pack.",
    "evidenceIds": [
      "riveter-docs-9",
      "riveter-docs-10"
    ]
  },
  {
    "productId": "riveter",
    "storyId": "pass-session-cookies",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence in the pack mentions passing custom session cookies, auth headers, or cookie jars for scraping/enrichment requests; the docs describe scrapes, quick_search, and enrichments but not authenticated-page access via user-supplied cookies.",
    "evidenceIds": []
  },
  {
    "productId": "riveter",
    "storyId": "pdf-office-doc-extraction",
    "verdict": "partial",
    "quality": 4,
    "confidence": "low",
    "rationale": "Riveter is delivered as a hosted API/SaaS (no self-hosting required) and docs state it 'reads PDFs and images' as part of enrichment workflows, but there is no evidence it extracts text from Word, Excel, or PowerPoint files specifically. missing for 10: explicit support for .docx/.xlsx/.pptx extraction, any extraction-quality benchmarks or examples for Office file formats.",
    "evidenceIds": [
      "riveter-docs-18"
    ]
  },
  {
    "productId": "riveter",
    "storyId": "per-url-pattern-config",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence describes applying different crawl configurations per URL pattern within one batch/enrichment job; docs mention scraping, searching, and enrichment generally but not per-pattern configuration rules. missing for 10: any mention of per-URL-pattern rules or configuration scoping within a single job, examples or docs showing mixed crawl settings in one batch.",
    "evidenceIds": []
  },
  {
    "productId": "riveter",
    "storyId": "persistent-authenticated-session",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence Riveter offers persistent browser profiles, saved cookies, or login-state reuse across requests; its scraping is described as AI-agent page interpretation, not a session/profile management feature.",
    "evidenceIds": []
  },
  {
    "productId": "riveter",
    "storyId": "pii-filtering-on-extraction",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence anywhere in the pack mentions PII detection, filtering, redaction, or compliance controls for scraped/enriched data; Riveter's documented features cover scraping, enrichment, search, and workflow orchestration but nothing about identifying or removing personal data before storage.",
    "evidenceIds": []
  },
  {
    "productId": "riveter",
    "storyId": "post-render-behind-login",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "riveter",
    "storyId": "prebuilt-scraper-marketplace",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "riveter",
    "storyId": "premium-residential-proxies",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence mentions proxy support (residential or datacenter) or IP rotation for anti-bot bypass; the docs describe scraping and AI agent interpretation but never address proxy infrastructure.",
    "evidenceIds": []
  },
  {
    "productId": "riveter",
    "storyId": "privacy-data-residency",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence in the pack mentions data residency, regional storage options, or compliance controls for where data is stored; the docs focus entirely on enrichment features and API mechanics. Missing for 10: any mention of region selection, data residency options, or storage location controls.",
    "evidenceIds": []
  },
  {
    "productId": "riveter",
    "storyId": "privacy-no-training",
    "verdict": "na",
    "quality": 0,
    "confidence": "high",
    "rationale": "Riveter is a data enrichment/web-scraping tool, not an AI model provider or chat assistant whose data usage/training policies would be relevant here; the evidence contains no mention of AI training data policy or opt-out controls, and this axis is a category error for the product type.",
    "evidenceIds": []
  },
  {
    "productId": "riveter",
    "storyId": "privacy-retention-controls",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence in the pack addresses data retention policies, deletion controls, or data lifecycle management for Riveter's stored enrichment data, run results, or scraped content.",
    "evidenceIds": []
  },
  {
    "productId": "riveter",
    "storyId": "privacy-telemetry-optout",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence pack item mentions telemetry, usage tracking, analytics collection, or any opt-out mechanism for Riveter; the docs focus entirely on enrichment, scraping, and API features. Missing for 10: any mention of telemetry practices, privacy policy, or opt-out settings.",
    "evidenceIds": []
  },
  {
    "productId": "riveter",
    "storyId": "public-status-page-history",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence of a public status page, uptime history, or incident postmortems anywhere in the evidence pack; only product feature docs and API references are present.",
    "evidenceIds": []
  },
  {
    "productId": "riveter",
    "storyId": "ready-made-templates",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "riveter",
    "storyId": "reasoning-effort-control",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence anywhere in the pack of a control that lets users set reasoning effort (low/medium/high) for an agent's data-gathering task; only credit caps and dry-run cost estimation are documented, which are cost controls, not reasoning-effort controls.",
    "evidenceIds": []
  },
  {
    "productId": "riveter",
    "storyId": "research-agent-preset",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "Riveter offers enrichment, search_agent, and scrape tools with structured outputs, but there is no evidence of a preset/template configuration specifically tuned for research agents or citable output formatting; missing for 10: a named preset or template targeting research-agent workflows, citation/source-attribution formatting in outputs, and any documentation referencing 'research agent' presets.",
    "evidenceIds": []
  },
  {
    "productId": "riveter",
    "storyId": "resume-crashed-crawl",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence describes checkpointing or resuming a crashed deep crawl; the docs mention webhooks, dry runs, and credit caps but nothing about saving/resuming crawl state after a crash.",
    "evidenceIds": []
  },
  {
    "productId": "riveter",
    "storyId": "rotating-proxy-pool",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "riveter",
    "storyId": "scheduled-runs",
    "verdict": "partial",
    "quality": 5,
    "confidence": "low",
    "rationale": "Riveter supports scheduling projects to monitor for changes and refresh data as often as every minute, which implies automatic recurring scraping jobs, but there's no detail on specifying exact times/cron-like scheduling, timezone control, or a documented scheduling API/UI. missing for 10: explicit scheduling configuration details (time-of-day, cron syntax, timezone), independent/hands-on confirmation of scheduling reliability, and API endpoint documentation for creating/managing schedules.",
    "evidenceIds": [
      "riveter-docs-13",
      "riveter-docs-17"
    ]
  },
  {
    "productId": "riveter",
    "storyId": "screenshot-capture",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "riveter",
    "storyId": "scripted-page-interactions",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "riveter",
    "storyId": "self-host-open-source",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "Riveter is presented as a hosted API/service (with a local MCP connector for client access to the remote service), but there is no evidence of an open-source, self-hostable version of the scraper itself; docs only describe running a local MCP bridge that still relies on the remote API key.",
    "evidenceIds": [
      "riveter-docs-9",
      "riveter-docs-10"
    ]
  },
  {
    "productId": "riveter",
    "storyId": "semantic-chunked-output",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Riveter's evidence describes enrichments, scrapes, searches, and structured row outputs, but nothing indicates a semantic-chunking output mode designed for retrieval pipelines (e.g., configurable chunk size/overlap, chunk metadata). Structured rows/columns are not the same as semantic chunking for RAG ingestion, and no such feature is documented.",
    "evidenceIds": [
      "riveter-docs-1",
      "riveter-docs-3",
      "riveter-docs-4"
    ]
  },
  {
    "productId": "riveter",
    "storyId": "single-call-html-extraction",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Riveter's scrape endpoint explicitly returns 'easily parseable text' from a URL, not raw HTML — the opposite of what this story asks for, and no evidence shows an option to retrieve unprocessed HTML.",
    "evidenceIds": [
      "riveter-docs-3"
    ]
  },
  {
    "productId": "riveter",
    "storyId": "spend-cap-alerts",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Riveter offers per-request cost control via dry_run (credit estimate before charging) and max_credits (hard ceiling that returns 422 credit_cap_exceeded with nothing charged), which directly prevents a single run from blowing past a set budget. However, there's no evidence of an account-wide spending cap, recurring usage alerts, or a dashboard/notification system for cumulative consumption across runs. Missing for 10: account/org-level budget cap, proactive usage alerts/notifications, historical spend tracking dashboard.",
    "evidenceIds": [
      "riveter-docs-7",
      "riveter-docs-8"
    ]
  },
  {
    "productId": "riveter",
    "storyId": "sticky-session-proxy",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "riveter",
    "storyId": "structured-json-output",
    "verdict": "full",
    "quality": 7,
    "confidence": "medium",
    "rationale": "Riveter's enrichments and scrapes explicitly return structured, parseable data (columns, urls/titles/snippets, webhook payloads of 'full results'), and SDK examples show structured attribute objects returned from calls, indicating outputs are consumable as structured JSON rather than raw text. missing for 10: an explicit statement of JSON schema/response format in docs, and independent/hands-on confirmation of the JSON structure (API docs endpoints 404 in probes).",
    "evidenceIds": [
      "riveter-docs-1",
      "riveter-docs-3",
      "riveter-docs-4",
      "riveter-docs-6",
      "riveter-docs-11",
      "riveter-docs-12"
    ]
  },
  {
    "productId": "riveter",
    "storyId": "team-permissions-management",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence pack items mention team sharing, organizations, workspaces, or role-based access control for Riveter; all evidence covers scraping/enrichment functionality and API mechanics only. Missing for 10: any mention of teams, org management, invites, or RBAC/permissions.",
    "evidenceIds": []
  },
  {
    "productId": "riveter",
    "storyId": "undetected-browser-mode",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence mentions undetected browser mode, bot-detection bypass, proxies, or stealth automation features; Riveter's evidence only covers enrichment, scraping, and search tooling. Missing for 10: any mention of anti-bot/stealth browser capabilities, CAPTCHA handling, or evasion of bot detection.",
    "evidenceIds": []
  },
  {
    "productId": "riveter",
    "storyId": "url-discovery-map",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "riveter",
    "storyId": "wait-for-selector",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "riveter",
    "storyId": "web-search-with-content",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Riveter's quick_search explicitly returns only urls, titles, and snippets (not full page content), and its scrape tool requires a specific URL rather than combining search+content in one call. search_agent returns a single synthesized answer, not full page content per search result, so no evidenced single-call capability matches the story's exact requirement.",
    "evidenceIds": [
      "riveter-docs-3",
      "riveter-docs-4",
      "riveter-docs-5"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "adaptive-stop-crawling",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "ScrapingBee's docs describe single-page scraping, AI-based extraction (ai_query), and cost-optimizing 'auto' mode, but there is no evidence of adaptive multi-step crawling that dynamically decides when enough information has been gathered to stop. No crawling/agentic loop or stopping-criteria feature is documented.",
    "evidenceIds": [
      "scrapingbee-docs-9",
      "scrapingbee-docs-14"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "agentic-agent-docs",
    "verdict": "full",
    "quality": 8,
    "confidence": "high",
    "rationale": "ScrapingBee has a confirmed live llms.txt at the documented URL (HTTP 200) serving an index of its documentation, directly satisfying the story of pointing an agent at agent-oriented docs; it also has an official MCP server further supporting agentic access. Missing for 10: a per-page markdown/docs.md mirror (probe shows 404) and an OpenAPI spec discoverable at standard paths, which would round out machine-readable doc coverage.",
    "evidenceIds": [
      "scrapingbee-probe-1",
      "scrapingbee-probe-2",
      "scrapingbee-probe-4"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "agentic-ai-insights",
    "verdict": "partial",
    "quality": 3,
    "confidence": "low",
    "rationale": "ScrapingBee's `ai_query` parameter lets users ask AI to extract specific information from scraped pages, which is a limited AI capability applied to data the product handles, but it's user-directed extraction rather than proactive AI-generated insights or suggestions surfaced inside the product. Missing for 10: evidence of automated insight generation, trend/anomaly detection, or suggestion features beyond on-demand query-based extraction.",
    "evidenceIds": [
      "scrapingbee-docs-9"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "agentic-autonomous-automation",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "ScrapingBee is an on-demand scraping API/CLI/MCP server; evidence shows only synchronous request-response scraping calls, with no scheduling, triggers, or background job/automation orchestration features documented.",
    "evidenceIds": []
  },
  {
    "productId": "scrapingbee",
    "storyId": "agentic-builtin-assistant",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "scrapingbee",
    "storyId": "agentic-headless",
    "verdict": "full",
    "quality": 7,
    "confidence": "medium",
    "rationale": "ScrapingBee is a pure API service (API key + HTTP calls) designed for programmatic use, and it ships an official CLI (scrapingbee-cli) enabling scripted/headless invocation suitable for CI pipelines. Missing for 10: explicit CI/CD pipeline examples (e.g., GitHub Actions), and no independent hands-on confirmation of CLI use in automation contexts.",
    "evidenceIds": [
      "scrapingbee-docs-1",
      "scrapingbee-probe-5"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "agentic-mcp-client",
    "verdict": "na",
    "quality": 0,
    "confidence": "high",
    "rationale": "ScrapingBee is a web-scraping API/SaaS product, not an agent or orchestration platform that would itself consume other MCP servers' tools; evidence only shows it exposes its own MCP server (mcp.scrapingbee.com), i.e., it is the tool provider, not a tool consumer. Plugging external MCP servers into ScrapingBee to gain their tools is a category error for this kind of product.",
    "evidenceIds": [
      "scrapingbee-probe-4"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "agentic-mcp-server",
    "verdict": "full",
    "quality": 6,
    "confidence": "medium",
    "rationale": "ScrapingBee is a scraping API/service (not itself an agent), so publishing an official MCP server is a valid axis; a probe confirms an official MCP server is documented at mcp.scrapingbee.com. However, there is no first-party documentation detail on the MCP server's tool set, setup, or independent/community corroboration of it working. Missing for 10: detailed official docs on MCP server capabilities/setup, independent hands-on confirmation.",
    "evidenceIds": [
      "scrapingbee-probe-4"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "agentic-nl-commands",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "ScrapingBee's `ai_query` parameter lets users specify what to extract from a page using natural language, and there is a documented official MCP server (mcp.scrapingbee.com) that would let AI agents invoke ScrapingBee via natural-language tool calls. However, the core product interface remains a structured REST API with many typed parameters, not a natural-language command interface itself. Missing for 10: evidence of a chat/NL interface for configuring scrapes beyond ai_query, and independent confirmation the MCP server supports full natural-language operation.",
    "evidenceIds": [
      "scrapingbee-docs-9",
      "scrapingbee-probe-4"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "agentic-official-cli",
    "verdict": "full",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Evidence shows an official CLI repo published by ScrapingBee (scrapingbee-cli on GitHub), directly satisfying the story. However, there's no documentation excerpt describing CLI features, installation, or usage details, nor independent community corroboration of its use. Missing for 10: detailed CLI documentation/usage examples, independent/hands-on validation, and confirmation of active maintenance.",
    "evidenceIds": [
      "scrapingbee-probe-5"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "agentic-public-api",
    "verdict": "full",
    "quality": 8,
    "confidence": "high",
    "rationale": "ScrapingBee's entire product is a documented public REST API with extensive parameter documentation (docs-1 to docs-15) and an llms.txt index for AI discoverability (probe-1), plus official CLI and MCP server (probe-4, probe-5) enabling agentic access. Missing for 10: a machine-readable OpenAPI/Swagger spec (probe-2 and probe-3 both 404) and independent hands-on confirmation of API integration ease.",
    "evidenceIds": [
      "scrapingbee-docs-1",
      "scrapingbee-docs-8",
      "scrapingbee-docs-9",
      "scrapingbee-probe-1",
      "scrapingbee-probe-4",
      "scrapingbee-probe-5",
      "scrapingbee-probe-3"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "agentic-scoped-keys",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "Evidence only shows a single API key model for authentication with no mention of scoped, restricted-permission, or per-agent credential issuance; the community note about using two API keys does not indicate least-privilege scoping. Missing for 10: any documentation of scoped/restricted API keys, role-based permissions, or credential issuance mechanisms for agents.",
    "evidenceIds": [
      "scrapingbee-docs-1",
      "scrapingbee-comm-4"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "agentic-sdks",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "The evidence pack documents ScrapingBee's REST API parameters, an official CLI, and an MCP server, but contains no mention of official SDKs (e.g., Python, Node.js, PHP client libraries) that AI-native developers could build against. Absence of evidence for this applicable capability warrants a 'none' verdict.",
    "evidenceIds": []
  },
  {
    "productId": "scrapingbee",
    "storyId": "agentic-webhooks",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence of any webhook subscription or event notification system in ScrapingBee's documentation; all evidence covers synchronous scraping API parameters, proxies, and rendering options with no mention of webhooks or event-driven callbacks.",
    "evidenceIds": []
  },
  {
    "productId": "scrapingbee",
    "storyId": "ai-natural-language-extraction",
    "verdict": "full",
    "quality": 7,
    "confidence": "medium",
    "rationale": "ScrapingBee's ai_query parameter lets developers specify in natural language the information they want extracted from a webpage, avoiding manual CSS/XPath selectors, as an alternative to the selector-based extract_rules feature. missing for 10: independent/hands-on validation of AI extraction accuracy, and details on structured output schema/reliability beyond the docs blurb.",
    "evidenceIds": [
      "scrapingbee-docs-9",
      "scrapingbee-docs-8"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "api-interactive-docs",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "The evidence pack shows only static parameter documentation and no mention of an interactive API reference, live 'try it' console, or runnable code examples; probes even show no OpenAPI/swagger spec and a 404 on a machine-readable docs endpoint, suggesting no interactive explorer exists.",
    "evidenceIds": [
      "scrapingbee-docs-1",
      "scrapingbee-probe-2",
      "scrapingbee-probe-3"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "api-machine-spec",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "Direct probes for an OpenAPI/Swagger spec at all standard locations returned 404, and no evidence pack item shows a downloadable machine-readable API spec being offered elsewhere; only an llms.txt index and human-readable docs exist.",
    "evidenceIds": [
      "scrapingbee-probe-2",
      "scrapingbee-probe-3"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "api-sandbox",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "scrapingbee",
    "storyId": "api-versioning-policy",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "No evidence of API versioning scheme or a documented deprecation policy; OpenAPI spec probes 404 and docs don't mention versioning/deprecation terms at all.",
    "evidenceIds": [
      "scrapingbee-probe-3",
      "scrapingbee-probe-2"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "auto-captcha-unblock",
    "verdict": "partial",
    "quality": 5,
    "confidence": "medium",
    "rationale": "ScrapingBee provides premium proxies to bypass hard-to-scrape sites and JS 'scenario' scripting to interact with pages (e.g., click/fill forms), which could support login flows, but there is no explicit claim or evidence of automatic CAPTCHA solving or a documented login-automation workflow that removes manual intervention entirely. missing for 10: explicit CAPTCHA-solving mechanism, documented login/form-wall bypass workflow, and independent evidence of successful autonomous bypass.",
    "evidenceIds": [
      "scrapingbee-docs-3",
      "scrapingbee-docs-10",
      "scrapingbee-docs-12"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "auto-cheapest-config",
    "verdict": "full",
    "quality": 8,
    "confidence": "high",
    "rationale": "ScrapingBee's docs explicitly describe a `mode=auto` parameter that lets the API pick the cheapest configuration that still succeeds, directly matching the story. This is first-party documented evidence, though there's no independent/hands-on corroboration of its effectiveness. Missing for 10: independent verification that auto mode reliably picks the cheapest successful config in practice.",
    "evidenceIds": [
      "scrapingbee-docs-14"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "auto-retry-proxy-chain",
    "verdict": "partial",
    "quality": 5,
    "confidence": "low",
    "rationale": "ScrapingBee offers premium_proxy and country_code parameters and an 'auto' mode that picks the cheapest configuration that succeeds, implying some automatic fallback/retry logic, but there's no explicit documentation of a chained multi-proxy retry mechanism specifically triggered by anti-bot detection. missing for 10: explicit documentation of automatic retry chains across multiple proxies upon anti-bot block detection, and independent verification of this retry behavior.",
    "evidenceIds": [
      "scrapingbee-docs-10",
      "scrapingbee-docs-11",
      "scrapingbee-docs-14"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "automation-bulk-operations",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "The evidence pack documents single-page scraping parameters (JS scenarios, extraction rules, proxies, screenshots) but never mentions a batch/bulk API endpoint, concurrent job submission, or a mechanism to process many URLs/items in one call.",
    "evidenceIds": []
  },
  {
    "productId": "scrapingbee",
    "storyId": "automation-rules-engine",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "scrapingbee",
    "storyId": "automation-scheduled-jobs",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "ScrapingBee's evidence pack covers API scraping parameters, JS rendering, proxies, and extraction, but contains no mention of scheduling, recurring jobs, cron-like triggers, or workflow orchestration features.",
    "evidenceIds": []
  },
  {
    "productId": "scrapingbee",
    "storyId": "automation-versioned-workflows",
    "verdict": "na",
    "quality": 0,
    "confidence": "high",
    "rationale": "ScrapingBee is a web scraping API/proxy service, not an automation-building platform with workflows to version or roll back; versioning/review/rollback of automations is a category error for this product type.",
    "evidenceIds": []
  },
  {
    "productId": "scrapingbee",
    "storyId": "batch-scrape-async",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "The evidence pack only documents single-URL synchronous scraping API parameters (JS rendering, extraction rules, proxies, screenshots) with no mention of batch job submission, async processing, concurrency limits, or a queue/webhook system for handling thousands of URLs at scale.",
    "evidenceIds": []
  },
  {
    "productId": "scrapingbee",
    "storyId": "block-ads-for-speed",
    "verdict": "full",
    "quality": 8,
    "confidence": "high",
    "rationale": "Official docs explicitly document the `block_ads=true` parameter to prevent ad loading and speed up scraping requests, directly matching the story. Missing for 10: independent/hands-on corroboration of the speed benefit and no third-party benchmark confirming the claim.",
    "evidenceIds": [
      "scrapingbee-docs-5"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "block-images-css-for-speed",
    "verdict": "full",
    "quality": 9,
    "confidence": "high",
    "rationale": "Official docs explicitly state ScrapingBee blocks all images and CSS by default to speed up requests, with an opt-out via block_resources=false, directly matching the story. Missing for 10: independent/hands-on corroboration beyond vendor docs.",
    "evidenceIds": [
      "scrapingbee-docs-6"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "concurrency-cap-by-plan",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence in the pack specifies concurrent session/request limits per pricing tier or the cost to increase that cap; documentation snippets cover feature parameters (JS scenario, proxies, extraction) but not concurrency caps or upgrade pricing.",
    "evidenceIds": []
  },
  {
    "productId": "scrapingbee",
    "storyId": "concurrent-sessions-at-scale",
    "verdict": "partial",
    "quality": 4,
    "confidence": "low",
    "rationale": "ScrapingBee is inherently an API you can call many times, and docs mention session_id for routing multiple requests through the same IP, but the evidence pack contains no explicit documentation of concurrency limits, parallel-request quotas, or scaling architecture for high-volume data-engineering workloads. Missing for 10: explicit concurrency/rate-limit specs, documented plan-based concurrent request caps, and independent evidence of successful large-scale concurrent scraping.",
    "evidenceIds": [
      "scrapingbee-docs-12",
      "scrapingbee-docs-10",
      "scrapingbee-docs-1"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "content-change-monitoring",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "ScrapingBee is an on-demand scraping API (fetch a page, extract data, render JS) with no evidence of scheduled monitoring, change-detection, diffing, or notification/webhook features for tracking content changes over time. The evidence pack only covers single-request scraping parameters, proxies, and rendering options, not continuous monitoring or alerting.",
    "evidenceIds": []
  },
  {
    "productId": "scrapingbee",
    "storyId": "control-viewport-size",
    "verdict": "full",
    "quality": 9,
    "confidence": "high",
    "rationale": "Official docs explicitly state window_width and window_height parameters let developers change the browser viewport dimensions when rendering the target page. missing for 10: no independent/hands-on corroboration beyond first-party docs.",
    "evidenceIds": [
      "scrapingbee-docs-7"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "crawl-respects-robots-and-rate-limits",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence that ScrapingBee offers robots.txt compliance settings or automatic rate-limit throttling per target site; docs cover proxies, JS rendering, extraction, and viewport settings but nothing about robots.txt or rate-limiting configuration.",
    "evidenceIds": []
  },
  {
    "productId": "scrapingbee",
    "storyId": "credit-overage-billing",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence in the pack addresses billing behavior when exceeding plan credits/requests—no mention of overage charges, hard cutoffs, or quota enforcement policy.",
    "evidenceIds": []
  },
  {
    "productId": "scrapingbee",
    "storyId": "css-xpath-extraction",
    "verdict": "full",
    "quality": 8,
    "confidence": "high",
    "rationale": "Docs explicitly document extract_rules for CSS-based field extraction and confirm the headless browser waits on CSS/XPath selectors, directly supporting structured field extraction. missing for 10: no independent/hands-on corroboration of extraction accuracy or XPath-specific examples.",
    "evidenceIds": [
      "scrapingbee-docs-8",
      "scrapingbee-docs-4"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "custom-actor-development",
    "verdict": "partial",
    "quality": 4,
    "confidence": "medium",
    "rationale": "ScrapingBee is a managed scraping API (no infrastructure to manage) and supports JS 'scenarios' for custom page interaction plus extraction rules, which is a lightweight form of custom scraping logic. However, there is no evidence of a true serverless scripting/deployment platform (e.g., custom code upload, scheduled jobs, or a scripting runtime) — the story's 'build and deploy custom scripts' aspect is only partially matched by parameterized API calls. Missing for 10: evidence of a script/job deployment mechanism, scheduling, or custom code execution beyond JS scenario snippets, and independent developer confirmation of this workflow.",
    "evidenceIds": [
      "scrapingbee-docs-1",
      "scrapingbee-docs-3",
      "scrapingbee-docs-8"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "data-export-portability",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence of any export/migration tooling for scraped data or job configs in a portable format; the docs cover API parameters and scraping features but nothing about data portability or provider migration. missing for 10: export format documentation, job/config export mechanism, migration guides or tooling, any mention of avoiding vendor lock-in.",
    "evidenceIds": []
  },
  {
    "productId": "scrapingbee",
    "storyId": "data-quality-monitoring-alerts",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "Evidence covers scraping features (JS rendering, extraction, proxies) but nothing about job monitoring dashboards, data quality validation, or failure alerting mechanisms; community comments focus on cost/alternatives, not reliability tooling.",
    "evidenceIds": []
  },
  {
    "productId": "scrapingbee",
    "storyId": "deep-crawl-bfs-with-limit",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "ScrapingBee's documented API is per-page scraping (single URL requests with rendering, extraction, proxy options) with no evidence of a crawl orchestration feature supporting breadth-first traversal or a configurable max-page limit for multi-page crawls.",
    "evidenceIds": [
      "scrapingbee-docs-1",
      "scrapingbee-docs-8"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "docker-container-deploy",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "scrapingbee",
    "storyId": "documented-rate-limits",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence pack item mentions a documented rate limit (requests per second/minute) or throttling behavior for API keys; documentation excerpts cover scraping parameters and features but not concurrency/rate-limit thresholds.",
    "evidenceIds": []
  },
  {
    "productId": "scrapingbee",
    "storyId": "failed-request-billing",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "The evidence pack contains no documentation or discussion of billing behavior for failed, blocked, or empty-result requests—no mention of credit refunds, only-charge-on-success policies, or how failed/blocked scrapes affect quota consumption. Community comments discuss cost/pricing generally but not this specific billing mechanic.",
    "evidenceIds": []
  },
  {
    "productId": "scrapingbee",
    "storyId": "full-site-crawl",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "ScrapingBee's API is designed for single-page scraping requests (one URL per call); the evidence shows no crawler feature that follows links across a domain or aggregates content from multiple pages in one request. No mention of a 'crawl' endpoint, sitemap traversal, or multi-page job in a single API call.",
    "evidenceIds": [
      "scrapingbee-docs-1",
      "scrapingbee-docs-2"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "geo-targeted-proxy",
    "verdict": "full",
    "quality": 8,
    "confidence": "high",
    "rationale": "ScrapingBee's docs explicitly document a `country_code` parameter for premium proxy geolocation, directly enabling country-specific proxy requests, alongside `premium_proxy` to enable this feature. missing for 10: independent/hands-on confirmation of geolocation accuracy and no list of supported countries in the evidence.",
    "evidenceIds": [
      "scrapingbee-docs-10",
      "scrapingbee-docs-11"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "image-captioning-for-text-llm",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "No evidence of an image-captioning or alt-text generation feature; ScrapingBee's AI features (ai_query) extract structured data from page text/HTML, not image captions for visual content, and by default it blocks images entirely. Missing for 10: any documented image captioning/vision-to-text capability, alt-text generation, or multimodal image description output.",
    "evidenceIds": [
      "scrapingbee-docs-6",
      "scrapingbee-docs-9"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "interactive-browser-sandbox",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "ScrapingBee's documentation describes a headless browser API for automated scraping (JS scenarios, screenshots, extraction rules) but no evidence of an interactive, manual remote-browser sandbox session a developer could drive by hand.",
    "evidenceIds": [
      "scrapingbee-docs-3",
      "scrapingbee-docs-4",
      "scrapingbee-docs-7"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "js-rendering-spa",
    "verdict": "full",
    "quality": 8,
    "confidence": "high",
    "rationale": "ScrapingBee's docs explicitly describe headless-browser rendering of JS-heavy SPAs built with React/Angular/Vue/JQuery, with support for waiting on selectors and running JS scenarios before returning fully rendered HTML. This directly matches the story's core capability, though evidence lacks independent hands-on corroboration of rendering fidelity. Missing for 10: independent/hands-on verification of rendered output quality, benchmarks against specific SPA frameworks.",
    "evidenceIds": [
      "scrapingbee-docs-2",
      "scrapingbee-docs-3",
      "scrapingbee-docs-4",
      "scrapingbee-docs-1"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "json-schema-extraction",
    "verdict": "partial",
    "quality": 5,
    "confidence": "medium",
    "rationale": "ScrapingBee offers extract_rules (CSS-selector based structured extraction) and ai_query (AI-driven extraction), which let developers get structured data, but there is no evidence of accepting a formal JSON Schema definition that the API validates/conforms output to — extract_rules is a custom stringified JSON of selectors, not a schema spec. missing for 10: explicit JSON Schema input support, schema validation/conformance guarantee, examples of schema-driven structured output.",
    "evidenceIds": [
      "scrapingbee-docs-8",
      "scrapingbee-docs-9"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "large-table-chunked-extraction",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "ScrapingBee's evidence covers web scraping features (JS rendering, proxies, extraction rules, AI queries) but nothing addresses handling very large tables, chunking data to fit processing/token limits, or pagination strategies for oversized datasets. Missing for 10: any mention of table extraction, chunking mechanism, size-limit handling, or pagination/splitting of large data outputs.",
    "evidenceIds": []
  },
  {
    "productId": "scrapingbee",
    "storyId": "latency-completeness-tradeoff",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "ScrapingBee lets developers control timing/completeness tradeoffs via wait-for-selector, JS scenarios, block_ads/block_resources flags, and an 'auto' mode that picks the cheapest successful configuration, giving direct levers over latency vs. completeness. However, this is all documented capability with no independent benchmarking or hands-on confirmation of actual latency impact. Missing for 10: independent/hands-on verification of latency-completeness tradeoffs, explicit 'wait' or timeout parameter documentation, and real-world performance data beyond vendor docs.",
    "evidenceIds": [
      "scrapingbee-docs-3",
      "scrapingbee-docs-4",
      "scrapingbee-docs-5",
      "scrapingbee-docs-6",
      "scrapingbee-docs-14"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "live-system-dashboard",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The evidence pack covers API parameters, docs, and community discussion but contains no mention of a real-time dashboard for monitoring system metrics or worker/browser pool status; ScrapingBee's dashboard (if any) is not documented here.",
    "evidenceIds": []
  },
  {
    "productId": "scrapingbee",
    "storyId": "llm-driven-extraction",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "ScrapingBee has an ai_query parameter that lets an LLM extract requested information from a page without pre-written CSS/XPath selectors, directly matching the story's intent, but this is described only in a single doc line rather than deeply documented with examples of dynamic field discovery. missing for 10: no documentation showing the AI deciding on its own what structured fields/schema to output (vs. a user-specified query), no independent/hands-on evidence of extraction quality or reliability, and no example of full structured JSON field inference without any query guidance.",
    "evidenceIds": [
      "scrapingbee-docs-9",
      "scrapingbee-docs-8"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "llm-ready-text-instead-of-raw-html",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "ScrapingBee offers return_page_markdown to get markdown output plus ai_query for AI-driven extraction and premium proxies/JS rendering to avoid blocking, directly addressing the LLM-ready text need. However, evidence doesn't show a dedicated 'clean text extraction' mode beyond markdown/extract_rules, and no independent benchmarks confirm output quality for LLM consumption. missing for 10: independent validation of markdown/text cleanliness, dedicated boilerplate-removal/reader-mode feature, hands-on confirmation from users of LLM-ready output.",
    "evidenceIds": [
      "scrapingbee-docs-15",
      "scrapingbee-docs-9",
      "scrapingbee-docs-10",
      "scrapingbee-docs-4"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "local-llm-extraction-backend",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "ScrapingBee's AI extraction (ai_query) uses its own cloud-based AI backend with no documented option to plug in a local or self-hosted LLM; evidence shows only a fixed AI extraction parameter, not a configurable backend.",
    "evidenceIds": [
      "scrapingbee-docs-9"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "markdown-output",
    "verdict": "full",
    "quality": 8,
    "confidence": "high",
    "rationale": "ScrapingBee's docs explicitly offer a `return_page_markdown` parameter to return page content as markdown instead of raw HTML, directly matching the story. Missing for 10: independent/hands-on confirmation of markdown output quality and any community corroboration of this specific feature.",
    "evidenceIds": [
      "scrapingbee-docs-15"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "marketplace-monetization",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "scrapingbee",
    "storyId": "multi-format-choice",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "Docs confirm HTML is the default output and a dedicated `return_page_markdown` parameter lets developers get markdown instead, but there's no documented option for a plain-text-only extraction or a frontmatter output format, and extract_rules/ai_query only allow custom JSON-style extraction, not those specific formats. Missing for 10: explicit plain-text output mode, frontmatter output support, independent confirmation of format switching.",
    "evidenceIds": [
      "scrapingbee-docs-1",
      "scrapingbee-docs-15",
      "scrapingbee-docs-8"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "nocode-automation-connector",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence of a prebuilt n8n or Zapier connector; the docs cover API parameters, an MCP server, and a CLI, but nothing about no-code automation platform integrations.",
    "evidenceIds": []
  },
  {
    "productId": "scrapingbee",
    "storyId": "open-source-library-integration",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "The evidence pack describes ScrapingBee's own API parameters (JS scenario, screenshots, extraction rules, proxies) but contains no mention of official integrations, SDKs, or middleware for Playwright, Puppeteer, Selenium, or Scrapy. No documentation, probe, or community evidence shows developers can plug ScrapingBee into these specific open-source automation libraries.",
    "evidenceIds": []
  },
  {
    "productId": "scrapingbee",
    "storyId": "openness-api-parity",
    "verdict": "partial",
    "quality": 5,
    "confidence": "low",
    "rationale": "ScrapingBee is API-first, and the docs show an extensive, feature-rich API surface (JS rendering, screenshots, extraction rules, AI query, proxies, session control) covering essentially all scraping functionality (scrapingbee-docs-1 through 15). However, there is no explicit statement comparing the API's capabilities to what's available in ScrapingBee's dashboard/UI, so full parity can't be confirmed from evidence. Missing for 10: explicit UI-vs-API feature parity documentation, confirmation that dashboard-only tools (e.g. request builder, account settings) have no capabilities absent from the API.",
    "evidenceIds": [
      "scrapingbee-docs-1",
      "scrapingbee-docs-3",
      "scrapingbee-docs-8",
      "scrapingbee-docs-9",
      "scrapingbee-docs-13"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "openness-full-export",
    "verdict": "partial",
    "quality": 4,
    "confidence": "low",
    "rationale": "ScrapingBee returns scraped content in open formats such as raw HTML, JSON (extract_rules) and Markdown (return_page_markdown), so output data is not locked into a proprietary format. However, there is no evidence of account-level data export, no mention of stored user data portability, and no explicit 'leave anytime with your data' commitment—since it's a stateless scraping API, the 'export and leave' framing only partially applies. Missing for 10: account/usage data export tooling, explicit data-portability statement, independent confirmation of format openness beyond docs.",
    "evidenceIds": [
      "scrapingbee-docs-8",
      "scrapingbee-docs-15",
      "scrapingbee-docs-9"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "openness-open-license",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "No evidence ScrapingBee's core product source is available under an open license; it is a closed, paid SaaS API. A community comment even asks whether the vendor plans to open source any part of their stack, implying it currently is not.",
    "evidenceIds": [
      "scrapingbee-comm-3"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "openness-self-host",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "ScrapingBee is a hosted SaaS API; no evidence of any self-hostable core product, on-premise deployment option, or open-source release. Community comment explicitly asks whether ScrapingBee plans to open-source its stack, with no vendor response indicating such an offering exists.",
    "evidenceIds": [
      "scrapingbee-comm-3",
      "scrapingbee-comm-2"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "pass-session-cookies",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "No evidence pack item mentions passing custom cookies or headers for authenticated sessions; docs cover JS rendering, proxies, extraction, screenshots, but nothing about supplying session cookies for authenticated page fetches.",
    "evidenceIds": []
  },
  {
    "productId": "scrapingbee",
    "storyId": "pdf-office-doc-extraction",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "scrapingbee",
    "storyId": "per-url-pattern-config",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "ScrapingBee's API is per-URL request based with configuration parameters set per call; there is no evidence of a 'batch job' concept or a way to define per-URL-pattern rules within a single job. The docs describe single-page scraping options (JS scenario, extract_rules, proxies, etc.) but nothing about batch jobs with pattern-based configuration.",
    "evidenceIds": []
  },
  {
    "productId": "scrapingbee",
    "storyId": "persistent-authenticated-session",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "ScrapingBee's docs mention session_id only for routing requests through the same IP address, not for persisting cookies or login state across requests; no evidence of a saved browser profile or session state reuse mechanism.",
    "evidenceIds": [
      "scrapingbee-docs-12"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "pii-filtering-on-extraction",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence of any PII detection, redaction, or filtering feature in ScrapingBee's documentation or capabilities; the product offers extraction rules and AI query tools but nothing about identifying or stripping personal data before storage.",
    "evidenceIds": []
  },
  {
    "productId": "scrapingbee",
    "storyId": "post-render-behind-login",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "ScrapingBee's JS 'scenario' feature lets you script click/fill actions before the page HTML is returned, and session_id lets you reuse the same IP across multiple API calls to preserve login state — enabling a login-wall workflow. However, evidence shows only a stateless-per-request model (scenario executed once, then HTML returned) rather than a persistent, continuously interactive browser session across multiple later calls. Missing for 10: documentation of a true persistent/interactive session object you can repeatedly command, and any hands-on confirmation this pattern reliably defeats login walls.",
    "evidenceIds": [
      "scrapingbee-docs-3",
      "scrapingbee-docs-4",
      "scrapingbee-docs-12"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "prebuilt-scraper-marketplace",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "Evidence shows only API parameters/docs for building custom scraping requests; there is no marketplace of pre-built, ready-made scrapers a developer could pick and run instead of building their own.",
    "evidenceIds": []
  },
  {
    "productId": "scrapingbee",
    "storyId": "premium-residential-proxies",
    "verdict": "full",
    "quality": 8,
    "confidence": "high",
    "rationale": "Docs explicitly document `premium_proxy` for bypassing hard-to-scrape sites, plus `country_code` for geolocation and `session_id` for sticky IP sessions, directly matching the story. Missing for 10: explicit distinction/documentation of residential vs datacenter proxy types and independent third-party validation of bypass success rates.",
    "evidenceIds": [
      "scrapingbee-docs-10",
      "scrapingbee-docs-11",
      "scrapingbee-docs-12"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "privacy-data-residency",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "Evidence covers proxy geolocation for scraping targets (country_code) but no mention of data residency or storage region controls for ScrapingBee's own data handling/storage; no privacy/compliance documentation is present. Missing for 10: any documentation of data storage regions, residency options, or compliance certifications (e.g., EU data hosting).",
    "evidenceIds": [
      "scrapingbee-docs-11"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "privacy-no-training",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence in the pack addresses data-use, training-data opt-out, or AI-training privacy policies for ScrapingBee's service; nothing documents a mechanism to prevent scraped/customer data from being used to train AI models.",
    "evidenceIds": []
  },
  {
    "productId": "scrapingbee",
    "storyId": "privacy-retention-controls",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence in the pack addresses data retention policies, deletion controls, or privacy/data lifecycle management for ScrapingBee; documentation excerpts focus solely on scraping features and API parameters. Missing for 10: any mention of data retention windows, deletion APIs/requests, privacy policy details, or compliance certifications.",
    "evidenceIds": []
  },
  {
    "productId": "scrapingbee",
    "storyId": "privacy-telemetry-optout",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence pack mentions telemetry, usage tracking, or an opt-out mechanism for ScrapingBee's own product usage; documentation excerpts focus solely on scraping API parameters.",
    "evidenceIds": []
  },
  {
    "productId": "scrapingbee",
    "storyId": "public-status-page-history",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence of a public status page, uptime history, or incident postmortems anywhere in the evidence pack; docs focus on API features and community items discuss cost/alternatives, not reliability transparency.",
    "evidenceIds": []
  },
  {
    "productId": "scrapingbee",
    "storyId": "ready-made-templates",
    "verdict": "none",
    "quality": 0,
    "confidence": "low",
    "rationale": "No evidence of ready-made project templates or scaffolding to jumpstart development; documentation only covers API parameters and usage, not starter templates or boilerplate projects.",
    "evidenceIds": []
  },
  {
    "productId": "scrapingbee",
    "storyId": "reasoning-effort-control",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "The axis applies to this product kind (peer products hold positive or none verdicts on this story), so lack of evidence for an applicable capability is \"none\", never \"na\". (na/none harmonized at arena bring-up — see pipeline/scripts/na-harmonize.ts.)",
    "evidenceIds": []
  },
  {
    "productId": "scrapingbee",
    "storyId": "research-agent-preset",
    "verdict": "partial",
    "quality": 4,
    "confidence": "low",
    "rationale": "ScrapingBee offers markdown output (return_page_markdown), AI-driven extraction (ai_query), and structured extraction (extract_rules) which can produce citable, structured output usable by research agents, plus an MCP server for agentic integration. However, there is no evidence of a dedicated 'preset configuration tuned for research agents' — no named research-agent mode, no citation metadata, and no documentation bundling these features into a single agent-oriented preset. missing for 10: a documented research-agent preset/mode, citation/source-attribution output, and evidence of agent-specific tuning beyond generic AI extraction params.",
    "evidenceIds": [
      "scrapingbee-docs-9",
      "scrapingbee-docs-15",
      "scrapingbee-docs-8",
      "scrapingbee-probe-4"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "resume-crashed-crawl",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence of any crawl checkpoint/resume feature; ScrapingBee's docs describe single-page API requests, sessions, and proxy parameters but nothing about deep crawl state persistence or resuming crashed crawls.",
    "evidenceIds": []
  },
  {
    "productId": "scrapingbee",
    "storyId": "rotating-proxy-pool",
    "verdict": "full",
    "quality": 8,
    "confidence": "high",
    "rationale": "Docs confirm premium/rotating proxy usage (premium_proxy, country_code) to bypass blocks, plus session_id to pin a single IP when needed, indicating an underlying rotating proxy pool by default with control options. Missing for 10: no independent/hands-on evidence confirming rotation effectiveness against real anti-bot defenses, and no explicit documentation describing pool size or rotation algorithm.",
    "evidenceIds": [
      "scrapingbee-docs-10",
      "scrapingbee-docs-11",
      "scrapingbee-docs-12"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "scheduled-runs",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "ScrapingBee's evidence describes only on-demand API scraping (parameters, JS rendering, proxies, extraction) with no mention of a scheduling feature, cron-like triggers, or job scheduler UI. No evidence supports automated, time-based recurring scraping jobs.",
    "evidenceIds": []
  },
  {
    "productId": "scrapingbee",
    "storyId": "screenshot-capture",
    "verdict": "partial",
    "quality": 5,
    "confidence": "medium",
    "rationale": "Docs confirm a `screenshot_selector` parameter for capturing a specific CSS-selected area of a page, directly supporting selected-area screenshots. However, no evidence explicitly documents a full-page screenshot parameter or option, so only half the story is substantiated. Missing for 10: explicit full-page screenshot parameter/documentation, independent/hands-on confirmation of screenshot output quality.",
    "evidenceIds": [
      "scrapingbee-docs-13"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "scripted-page-interactions",
    "verdict": "full",
    "quality": 8,
    "confidence": "high",
    "rationale": "ScrapingBee's docs explicitly describe a 'JavaScript scenario' feature to interact with pages (click, fill, scroll, etc.) before HTML is returned, plus wait-for-selector support to ensure content loads after interactions. This directly matches the story of scripting interactions before content is returned, though evidence lacks a full list of supported actions or independent hands-on confirmation. Missing for 10: detailed enumeration of supported interaction commands (click/fill/scroll) beyond generic 'JavaScript scenario' mention, and independent/community validation of this specific feature.",
    "evidenceIds": [
      "scrapingbee-docs-3",
      "scrapingbee-docs-4",
      "scrapingbee-docs-2"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "self-host-open-source",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "ScrapingBee is a hosted cloud scraping API with no evidence of an open-source, self-hostable version; community comments explicitly ask about open-sourcing the stack, confirming none exists.",
    "evidenceIds": [
      "scrapingbee-comm-3",
      "scrapingbee-comm-2"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "semantic-chunked-output",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "ScrapingBee offers markdown conversion, CSS-based extraction rules, and AI query extraction, but no evidence of semantic/chunked output splitting content into retrieval-ready segments. The docs list output options (HTML, markdown, screenshots, extract_rules) but never mention chunking or segmenting content for RAG pipelines.",
    "evidenceIds": [
      "scrapingbee-docs-8",
      "scrapingbee-docs-9",
      "scrapingbee-docs-15"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "single-call-html-extraction",
    "verdict": "full",
    "quality": 9,
    "confidence": "high",
    "rationale": "Docs confirm a single API call with just an API key and target URL returns the page's HTML, with straightforward defaults (docs-1) and no complex setup required. Additional options (JS rendering, wait selectors, markdown/extract_rules) show this basic case is well-supported and flexible, though there's no independent hands-on confirmation of raw HTML fidelity. Missing for 10: independent/community verification of raw HTML output quality.",
    "evidenceIds": [
      "scrapingbee-docs-1",
      "scrapingbee-docs-3",
      "scrapingbee-docs-4"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "spend-cap-alerts",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence of any spending cap, usage alert, or budget notification feature in ScrapingBee's docs or community reports; community comments even highlight cost as a pain point without mentioning any budget-control tooling.",
    "evidenceIds": [
      "scrapingbee-comm-1"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "sticky-session-proxy",
    "verdict": "full",
    "quality": 9,
    "confidence": "high",
    "rationale": "Official docs explicitly document a `session_id` parameter to route multiple API requests through the same proxy IP, directly matching the story. Missing for 10: independent/hands-on corroboration of session persistence behavior beyond first-party docs.",
    "evidenceIds": [
      "scrapingbee-docs-12"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "structured-json-output",
    "verdict": "partial",
    "quality": 6,
    "confidence": "medium",
    "rationale": "ScrapingBee offers extract_rules for CSS-selector-based structured data extraction and ai_query for AI-driven extraction, plus return_page_markdown for markdown output, indicating structured output beyond raw HTML. However, there's no explicit documented 'return as JSON' toggle or example showing a full JSON schema response, and no independent/community confirmation of structured JSON output quality. Missing for 10: explicit JSON output examples/schema, independent verification of structured JSON extraction reliability.",
    "evidenceIds": [
      "scrapingbee-docs-8",
      "scrapingbee-docs-9",
      "scrapingbee-docs-15"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "team-permissions-management",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "No evidence in the pack addresses team/organization management, sharing scrapers, or role-based permissions; the documentation excerpts focus entirely on API scraping parameters (JS rendering, proxies, extraction rules), not collaboration or account administration features.",
    "evidenceIds": []
  },
  {
    "productId": "scrapingbee",
    "storyId": "undetected-browser-mode",
    "verdict": "partial",
    "quality": 5,
    "confidence": "medium",
    "rationale": "ScrapingBee's docs mention `premium_proxy` explicitly for bypassing 'difficult to scrape websites' and headless browser rendering with JS scenarios, which implies anti-bot capability, but the evidence never uses 'undetected browser' or 'stealth mode' terminology or details specific bot-detection bypass techniques (fingerprint spoofing, TLS/JA3 evasion, etc.). Missing for 10: explicit stealth/undetected-mode documentation, technical detail on fingerprint evasion, and independent verification that it defeats sophisticated bot detection.",
    "evidenceIds": [
      "scrapingbee-docs-10",
      "scrapingbee-docs-3",
      "scrapingbee-docs-4"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "url-discovery-map",
    "verdict": "none",
    "quality": 0,
    "confidence": "high",
    "rationale": "ScrapingBee's evidence covers page scraping, JS rendering, extraction rules, proxies, and AI queries, but nothing describes a sitemap/URL-discovery feature that lists all URLs on a site without crawling each page. No sitemap parsing, URL enumeration, or site-mapping endpoint is documented.",
    "evidenceIds": []
  },
  {
    "productId": "scrapingbee",
    "storyId": "wait-for-selector",
    "verdict": "full",
    "quality": 8,
    "confidence": "medium",
    "rationale": "ScrapingBee's docs explicitly state headless browsers wait for a CSS/XPath selector before returning HTML, directly matching the story. Missing for 10: independent/hands-on confirmation of this specific wait-for-selector behavior beyond vendor docs, and example code showing the parameter in use.",
    "evidenceIds": [
      "scrapingbee-docs-4",
      "scrapingbee-docs-3"
    ]
  },
  {
    "productId": "scrapingbee",
    "storyId": "web-search-with-content",
    "verdict": "none",
    "quality": 0,
    "confidence": "medium",
    "rationale": "Evidence shows ScrapingBee scrapes a given URL (with JS rendering, markdown output, extract_rules, ai_query) but nothing indicates a single API call that performs a web search and returns full page content for each result — the llms.txt probe mentions 'search' only in passing with no supporting detail. Missing for 10: any documented search endpoint, example combining query+results with full page bodies, or independent confirmation of this workflow.",
    "evidenceIds": [
      "scrapingbee-docs-1",
      "scrapingbee-probe-1"
    ]
  }
]
