{
 "slug": "plausible",
 "name": "Plausible Analytics",
 "url": "https://plausible.io",
 "domain": "plausible.io",
 "category": "web-analytics",
 "category_name": "Web analytics",
 "tested_at": "2026-10-11",
 "run": "20261011T161046Z",
 "draft": false,
 "reviewed": true,
 "owner_verified": null,
 "origin": "editorial",
 "history": [
  {
   "run": "20261001T085925Z",
   "date": "2026-10-01",
   "level": 3,
   "engine": {
    "runner": "omp",
    "model": null,
    "driver": null,
    "signed": true,
    "inbox": [
     "matfy.com"
    ],
    "robots": "start"
   }
  },
  {
   "run": "20261001T204914Z",
   "date": "2026-10-01",
   "level": 2,
   "engine": {
    "runner": "omp",
    "model": null,
    "driver": null,
    "signed": true,
    "inbox": null,
    "robots": "start"
   },
   "why": "product"
  },
  {
   "run": "20261002T212446Z",
   "date": "2026-10-02",
   "level": 3,
   "engine": {
    "runner": "omp",
    "model": "claude-opus-5-5",
    "driver": 2,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "start"
   },
   "why": "product"
  },
  {
   "run": "20261011T161046Z",
   "date": "2026-10-11",
   "level": 3,
   "engine": {
    "runner": "omp",
    "model": "claude-opus-5-5",
    "driver": 3,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "obey"
   }
  }
 ],
 "level": 3,
 "level_name": "Does the work",
 "level_selfhost": null,
 "entry": "self-start",
 "door": {
  "passed": 3,
  "tries": 3,
  "self_start": true
 },
 "badges": [
  "agent-can-leave"
 ],
 "stages": [
  {
   "key": "in",
   "label": "Access",
   "state": "yes",
   "text": "Gets in on its own: sign-up in a browser"
  },
  {
   "key": "work",
   "label": "Use",
   "state": "part",
   "text": "Work done: 75% of the core"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "Payment not reached",
   "value": "unreached",
   "route": "card_checkout"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "yes",
   "text": "Leaves on its own: nothing to cancel, deletes its account",
   "left": "deleted"
  }
 ],
 "outcomes": [
  {
   "key": "find",
   "label": "Find",
   "state": "no",
   "text": "No llms.txt, OpenAPI or MCP server",
   "have": []
  },
  {
   "key": "access",
   "label": "Access",
   "state": "yes",
   "text": "Gets in on its own: sign-up in a browser",
   "stage": "in"
  },
  {
   "key": "use",
   "label": "Use",
   "state": "part",
   "text": "Work done: 75% of the core",
   "stage": "work"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "Payment not reached",
   "value": "unreached",
   "route": "card_checkout",
   "stage": "pay"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "yes",
   "text": "Leaves on its own: nothing to cancel, deletes its account",
   "left": "deleted",
   "stage": "leave"
  }
 ],
 "access": [
  {
   "key": "browser_signup",
   "label": "Sign-up in a browser",
   "routes": [],
   "minutes": 5,
   "core": "6/8"
  }
 ],
 "minutes": 5,
 "next": {
  "to": 4,
  "text": "Next: do 80% of the core work (now 75%)"
 },
 "stop": null,
 "core": "6/8",
 "scores": {
  "coverage": 56,
  "reliability": 80,
  "resilience": null,
  "setup": 30,
  "surface_coverage": null,
  "docs_accuracy": null,
  "docs_completeness": null
 },
 "parts": {
  "holds_up": null,
  "docs_match": null,
  "setup": 30,
  "security": null,
  "standards": [
   {
    "standard": "MCP client registration",
    "state": "current",
    "behind": null,
    "value": "cimd"
   }
  ]
 },
 "reliability_method": "first-try",
 "resilience": null,
 "stress": [],
 "surface_audit": null,
 "coverage_core": 75,
 "after_wall": null,
 "coverage_source": "computed",
 "driver": {
  "version": 3,
  "model": "claude-opus-5-5",
  "profile": "full",
  "assisted": false,
  "handoff": false,
  "prompt_sha": "076cd4c65a1a",
  "kb_version": "3+overlay-1353601952",
  "identity": "e8a92f24a9a8"
 },
 "methodology": 15,
 "rules_date": "2026-10-15",
 "engine": {
  "runner": "omp",
  "model": "claude-opus-5-5",
  "driver": 3,
  "signed": true,
  "inbox": [
   "agentdrives.com"
  ],
  "robots": "obey"
 },
 "same_level_drives": 2,
 "drives": 4,
 "works_assisted": null,
 "freshness": "fresh",
 "nothing_to_pay": false,
 "core_gated": false,
 "profiles": {},
 "agent_check": null,
 "agent_pass": {
  "rung": "signup",
  "vendor": "Friendly Captcha",
  "signed": true
 },
 "who_gets_in": {
  "server": {
   "state": "in"
  },
  "signed": {
   "state": "page",
   "kind": "signup",
   "at": "2026-10-12"
  },
  "browser": {
   "state": "in",
   "measured": false
  },
  "our_key": "pending",
  "robots": null,
  "tip": false
 },
 "ladder": {
  "docs": {
   "status": "headless",
   "note": "Stats, Sites and Events API references fetched headless (/docs/stats-api, /docs/sites-api, /docs/events-api). No OpenAPI file, no llms.txt, no markdown pages."
  },
  "signup": {
   "status": "browser",
   "note": "LiveView web form at /register (name, email, password) with an invisible Friendly Captcha that let our agent's browser through. No API or CLI sign-up."
  },
  "verify": {
   "status": "browser",
   "note": "A 4-digit code arrived by mail in about a minute; typed on /activate."
  },
  "credentials": {
   "status": "browser",
   "note": "Stats API key made in Settings > API keys (web only; docs give no API route). On the trial the Sites API key type is refused: 'Your current subscription plan does not include Sites API access.'",
   "via": ""
  },
  "first_call": {
   "status": "headless",
   "note": "GET /api/v1/sites with the Stats API key -> 200 with our site; POST /api/v2/query -> 200."
  },
  "first_action": {
   "status": "browser",
   "note": "Site added in the web UI. Creating sites or goals over the API needs a Sites API key (Enterprise): POST /api/v1/sites and PUT /api/v1/sites/goals answered 401 with the trial's Stats key."
  },
  "pay": {
   "status": "browser",
   "grade": "P1",
   "rails": [
    "Paddle hosted checkout (per docs/billing)"
   ],
   "rail_ids": [
    "paddle"
   ],
   "first_party": false,
   "rail_scope": "none",
   "trial_path": "no-card trial",
   "note": "No 402 on any host, no registry listing, no /.well-known/ucp, no billing API; we paid nothing. 30-day trial needs no card. Upgrading is a web flow (docs/trial-to-paid) through Paddle, which the docs name as the payment processor; checkout not opened, so whether an agent could finish it alone with a given card is unknown."
  },
  "cancel": {
   "status": "n/a",
   "note": "Nothing to cancel: our agent started no paid plan.",
   "docs_note": "not tested: no plan or trial was started that renews. docs/trial: the trial 'never converts into a paid subscription automatically ... there's nothing to cancel'. Paid plans cancel in Account Settings > Subscription > Cancel plan (web UI, docs/cancel-subscription).",
   "docs_grade": "",
   "nothing": "no_plan"
  },
  "delete": {
   "status": "browser",
   "note": "Settings > Danger zone > Delete my account (one confirm). Login afterwards: 'Incorrect email or password.' No API route.",
   "left": "deleted",
   "account": true
  }
 },
 "routes": [],
 "checkout": null,
 "docs": null,
 "claims": null,
 "pay_options": {
  "checked": "2026-10-11",
  "source": "probe",
  "options": [],
  "agentic": [],
  "paid": null,
  "exercised": null,
  "detected_grade": null,
  "trial": {
   "no_card": true,
   "card_required": null,
   "free_plan": null
  },
  "owner_fixes": [
   {
    "title": "Accept x402 or MPP on your API",
    "how": "Answer an unpaid call with 402 and a payment challenge, so an agent pays per call or buys credits without an account or a card."
   },
   {
    "title": "List your plans on Stripe Projects",
    "how": "Agents buy a plan with `stripe projects add`, paid with a token under a spend cap the owner sets (projects.dev)."
   }
  ]
 },
 "surfaces": {
  "api": true,
  "openapi": false,
  "cli": false,
  "sdk": false,
  "mcp": "none",
  "llms_txt": false,
  "webhooks": false,
  "sandbox": false
 },
 "surface_notes": {
  "api": "REST: Stats API v2 (POST /api/v2/query, Business), Stats API v1, Events API (no key), Sites API (Enterprise); 600 req/h per key",
  "mcp": "/mcp endpoint with OAuth metadata exists but answers not_implemented; not in docs"
 },
 "can_do": [
  "Query stats for its own site over the Stats API on the trial: aggregates, dimensions, filters, channels, scroll depth, goal conversions",
  "Read current visitors over GET /api/v1/stats/realtime/visitors",
  "List its sites and goals with a Stats API key",
  "Add a site, create, rename and delete goals and funnels in the web UI",
  "Create a shared dashboard link in the web UI and open it without a session",
  "Delete its account in the web UI"
 ],
 "cannot_do": [
  {
   "what": "Record events over the Events API from its own server",
   "why": "Bot filtering drops events with an automated agent User-Agent from a datacenter IP: 202 'ok' with x-plausible-dropped: 1"
  },
  {
   "what": "Sign up, make an API key or delete the account headless",
   "why": "Web forms only; no API or CLI for these steps"
  },
  {
   "what": "Create sites, goals or shared links over the API",
   "why": "Sites API needs an Enterprise plan; refused on the trial"
  },
  {
   "what": "Use the MCP server",
   "why": "https://plausible.io/mcp answers 501 not_implemented and is not documented"
  }
 ],
 "blockers": [
  "Write API (Sites API) is Enterprise-only, so setup is web-only on the trial",
  "Events API silently drops our agent's events (x-plausible-dropped: 1)"
 ],
 "tips_for_owner": [
  "Open the Sites API to self-serve plans",
  "Ship and document the MCP server",
  "Let agents create API keys headless",
  "Return an error when the Events API drops an event",
  "Publish llms.txt, markdown docs and an OpenAPI file"
 ],
 "tips_for_agents": [
  "Sign-up, keys, sites, goals and funnels are web UI; the Stats API (POST /api/v2/query) works on the 30-day no-card trial.",
  "A Stats API key can also read the Sites API list endpoints (sites, goals).",
  "Goal filters in /api/v2/query match the goal's display name, not its event name.",
  "Realtime is GET /api/v1/stats/realtime/visitors; v2 has no 'realtime' date_range.",
  "Events API answers 202 even when it drops an event: check the x-plausible-dropped header.",
  "In the settings UI the 'Add goal' dropdown opened for us only by keyboard (ArrowDown) after a reload."
 ],
 "selfhost": {
  "install": {
   "status": "skipped",
   "minutes": 0,
   "note": "no docker in the drive sandbox (Plausible Community Edition exists, not installed)"
  }
 },
 "summary": "An agent can open a 30-day trial (no card) in a browser and then read its stats headless over the Stats API. Setup is web-only on the trial: sites, goals, funnels, shared links, API keys and account delete. The write API (Sites API) is Enterprise only. The Events API silently drops events from our agent (202 with `x-plausible-dropped: 1`). Core coverage: 5 of 8 core capabilities done and verified (, 03, 04, 05 and 07). was partial, failed, and (funnel analysis) is also partial: the funnel's CRUD steps (create/rename/delete) were done, but the dashboard funnel report itself, the capability's defining check, timed out when opened and was never verified.",
 "wall": "Write API is Enterprise only; setup is web-only",
 "plan_scope": "no-card trial (30 days, Business plan features)",
 "robots_stop": null,
 "robots": null,
 "plain": {
  "summary": "Plausible is a privacy-focused web analytics tool. An agent on its own could sign up for a free 30-day trial in a browser and then pull stats headless through the API, but every setup step (adding sites, goals, funnels, API keys, deleting the account) had to be done by hand in the web dashboard. The agent stopped because Plausible's own bot filter quietly dropped the test events it sent, so there was never any real traffic to analyze, and the write-capable API is locked to an Enterprise plan the trial doesn't include.",
  "can_do": [
   "Query its own site's stats automatically once set up, including visitor counts, filters, traffic sources and goal conversions",
   "Read back site, key and goal information automatically after a human sets them up in the dashboard",
   "See a live visitor counter and compare time periods",
   "Open a shareable dashboard link without logging in"
  ],
  "cannot_do": [
   {
    "what": "Send real visit or click events from its own traffic",
    "why": "the site's bot filter silently drops events from an automated agent"
   },
   {
    "what": "Sign up, create an API key, or delete the account without a browser",
    "why": "those steps only exist as web forms"
   },
   {
    "what": "Create sites, goals or shared links through the API",
    "why": "that API is locked to an Enterprise-level paid plan"
   },
   {
    "what": "Use the MCP integration",
    "why": "the endpoint exists but isn't finished or documented yet"
   }
  ]
 },
 "plan_gated": [
  {
   "capability": "Add a website (API route)",
   "plan": "Enterprise",
   "evidence": "docs/sites-api: 'Sites API is an Enterprise plan feature'; Sites API key type refused on trial; POST /api/v1/sites -> 401"
  },
  {
   "capability": "Create goals over the API",
   "plan": "Enterprise",
   "evidence": "PUT /api/v1/sites/goals -> 401 with Stats key; Sites API key refused on trial"
  },
  {
   "capability": "Manage site settings over the API",
   "plan": "Enterprise",
   "evidence": "docs/sites-api"
  },
  {
   "capability": "Remove a site over the API",
   "plan": "Enterprise",
   "evidence": "docs/sites-api DELETE /api/v1/sites/:site_id"
  },
  {
   "capability": "SSO",
   "plan": "Enterprise",
   "evidence": "docs"
  },
  {
   "capability": "Raw event data exports",
   "plan": "Enterprise",
   "evidence": "contact sales"
  }
 ],
 "reply": null,
 "capabilities": [
  {
   "id": "cap-01",
   "group": "core",
   "capability": "Add a website to track",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v1/sites",
    "mcp": null,
    "cli": null,
    "ui": "Dashboard → Add a website"
   },
   "check": "GET /api/v1/sites shows the new domain, or dashboard site list includes it",
   "source": "https://plausible.io/docs/add-website; https://plausible.io/docs/sites-api"
  },
  {
   "id": "cap-02",
   "group": "core",
   "capability": "Install tracking script on a site",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Site settings → Tracking script / integration guides"
   },
   "check": "Visiting the tracked site produces a pageview event in Plausible within a few seconds",
   "source": "https://plausible.io/docs/plausible-script; https://plausible.io/docs/troubleshoot-integration"
  },
  {
   "id": "cap-03",
   "group": "core",
   "capability": "View the stats dashboard for a site",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v2/query",
    "mcp": null,
    "cli": null,
    "ui": "Dashboard"
   },
   "check": "Dashboard renders visitors, pageviews, bounce rate etc. for the selected date range; equivalent POST /api/v2/query returns metrics JSON",
   "source": "https://plausible.io/docs/guided-tour; https://plausible.io/docs/stats-api"
  },
  {
   "id": "cap-04",
   "group": "core",
   "capability": "Filter and segment traffic by dimension",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v2/query (filters, dimensions)",
    "mcp": null,
    "cli": null,
    "ui": "Dashboard → filter bar / segments"
   },
   "check": "Applying a filter (e.g. country, page, source) narrows the dashboard numbers; same filter in query body returns a matching subset",
   "source": "https://plausible.io/docs/filters-segments; https://plausible.io/docs/stats-api"
  },
  {
   "id": "cap-05",
   "group": "core",
   "capability": "Track a custom goal/conversion",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "PUT /api/v1/sites/goals (Enterprise) / POST /api/event",
    "mcp": null,
    "cli": null,
    "ui": "Site settings → Goals"
   },
   "check": "GET /api/v1/sites/goals?site_id=... lists the goal; dashboard Goals report shows conversions for it",
   "source": "https://plausible.io/docs/goal-conversions; https://plausible.io/docs/sites-api"
  },
  {
   "id": "cap-06",
   "group": "core",
   "capability": "Send a pageview or custom event via the Events API",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/event",
    "mcp": null,
    "cli": null,
    "ui": null
   },
   "check": "Response is 202 without x-plausible-dropped header; event appears in dashboard/API shortly after",
   "source": "https://plausible.io/docs/events-api"
  },
  {
   "id": "cap-07",
   "group": "core",
   "capability": "See real-time current visitors",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v2/query (realtime date_range)",
    "mcp": null,
    "cli": null,
    "ui": "Dashboard → Realtime"
   },
   "check": "Realtime panel visitor count matches a real-time date_range query result",
   "source": "https://plausible.io/docs/realtime-dashboard"
  },
  {
   "id": "cap-08",
   "group": "core",
   "capability": "Run funnel analysis across a defined sequence of steps",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Dashboard → Funnels"
   },
   "check": "Created funnel shows a visitor count and drop-off percentage at each step in the dashboard",
   "source": "https://plausible.io/docs/funnel-analysis; https://plausible.io/docs/subscription-plans"
  },
  {
   "id": "cap-09",
   "group": "secondary",
   "capability": "Compare a period against a previous period",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Dashboard → date picker → Compare"
   },
   "check": "Dashboard shows side-by-side or delta metrics for current vs. previous period",
   "source": "https://plausible.io/docs/compare-stats"
  },
  {
   "id": "cap-10",
   "group": "secondary",
   "capability": "Annotate the chart with an event (e.g. deploy, campaign)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Dashboard → chart → Add annotation"
   },
   "check": "A marker with the annotation text appears on the visitor chart at the chosen date",
   "source": "https://plausible.io/docs/annotations"
  },
  {
   "id": "cap-11",
   "group": "secondary",
   "capability": "View a consolidated dashboard across multiple sites",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Dashboard → Consolidated view"
   },
   "check": "Consolidated view lists combined totals across the selected sites",
   "source": "https://plausible.io/docs/consolidated-views"
  },
  {
   "id": "cap-12",
   "group": "secondary",
   "capability": "See acquisition channels, sources and campaigns",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v2/query (visit:source, visit:channel, utm dimensions)",
    "mcp": null,
    "cli": null,
    "ui": "Dashboard → Top Sources"
   },
   "check": "Top Sources report lists referrers/channels; equivalent query with visit:channel dimension returns matching breakdown",
   "source": "https://plausible.io/docs/top-referrers"
  },
  {
   "id": "cap-13",
   "group": "secondary",
   "capability": "See scroll depth on pages",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v2/query (scroll_depth metric)",
    "mcp": null,
    "cli": null,
    "ui": "Dashboard → Pages report"
   },
   "check": "Pages report shows a scroll depth percentage per page, matching the scroll_depth metric value",
   "source": "https://plausible.io/docs/scroll-depth"
  },
  {
   "id": "cap-14",
   "group": "secondary",
   "capability": "Connect Google Search Console for search query data",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Site settings → Search Console"
   },
   "check": "Dashboard's Search Console panel shows real search queries after connecting an account",
   "source": "https://plausible.io/docs/google-search-console-integration"
  },
  {
   "id": "cap-15",
   "group": "secondary",
   "capability": "Build custom reports via Looker Studio connector",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "External: Google Looker Studio"
   },
   "check": "Looker Studio report populated with fields pulled live from the connector shows current site metrics",
   "source": "https://plausible.io/docs/looker-studio"
  },
  {
   "id": "cap-16",
   "group": "secondary",
   "capability": "Exclude pages or traffic segments from stats",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Site settings → Exclusions"
   },
   "check": "Traffic matching the exclusion rule (e.g. own IP, path) stops incrementing the dashboard counts",
   "source": "https://plausible.io/docs/excluding"
  },
  {
   "id": "cap-17",
   "group": "secondary",
   "capability": "Embed the dashboard on another page",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "PUT /api/v1/sites/shared-links",
    "mcp": null,
    "cli": null,
    "ui": "Site settings → Visibility → Embed"
   },
   "check": "The generated shared-link URL/iframe renders the live dashboard when loaded",
   "source": "https://plausible.io/docs/embed-dashboard"
  },
  {
   "id": "cap-18",
   "group": "secondary",
   "capability": "Get traffic spike notifications",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Site settings → Notifications → Traffic spikes"
   },
   "check": "A configured spike alert sends an email when hourly visitors exceed the threshold",
   "source": "https://plausible.io/docs/traffic-spikes"
  },
  {
   "id": "cap-19",
   "group": "secondary",
   "capability": "Import historical data from Google Analytics",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Site settings → Imports → Google Analytics"
   },
   "check": "Dashboard shows historical data points predating the Plausible install date after import completes",
   "source": "https://plausible.io/docs/google-analytics-import"
  },
  {
   "id": "cap-20",
   "group": "secondary",
   "capability": "Import stats from a CSV file",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Site settings → Imports → CSV"
   },
   "check": "Imported CSV data appears as historical stats in the dashboard",
   "source": "https://plausible.io/docs/csv-import"
  },
  {
   "id": "cap-21",
   "group": "secondary",
   "capability": "Export stats as CSV",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Dashboard → Export"
   },
   "check": "Downloaded ZIP contains CSV files matching the filtered dashboard numbers",
   "source": "https://plausible.io/docs/export-stats"
  },
  {
   "id": "cap-22",
   "group": "secondary",
   "capability": "Track outbound link clicks",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/event (custom event)",
    "mcp": null,
    "cli": null,
    "ui": "Site settings → Tracked events"
   },
   "check": "Clicking an outbound link on the tracked site creates an 'Outbound Link: Click' event visible in Goals report",
   "source": "https://plausible.io/docs/outbound-link-click-tracking"
  },
  {
   "id": "cap-23",
   "group": "secondary",
   "capability": "Track file downloads",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/event (custom event)",
    "mcp": null,
    "cli": null,
    "ui": "Site settings → Tracked events"
   },
   "check": "Downloading a tracked file type creates a 'File Download' event visible in the Goals report",
   "source": "https://plausible.io/docs/file-downloads-tracking"
  },
  {
   "id": "cap-24",
   "group": "secondary",
   "capability": "Track form submissions",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/event (custom event)",
    "mcp": null,
    "cli": null,
    "ui": "Site settings → Tracked events"
   },
   "check": "Submitting a form on the tracked site creates a 'Form: Submission' event visible in the Goals report",
   "source": "https://plausible.io/docs/form-submissions-tracking"
  },
  {
   "id": "cap-25",
   "group": "secondary",
   "capability": "Track 404 error pages",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Site settings → 404 error pages"
   },
   "check": "Visiting a non-existent path records a '404' event showing the path in the Goals/Pages report",
   "source": "https://plausible.io/docs/error-pages-tracking-404"
  },
  {
   "id": "cap-26",
   "group": "secondary",
   "capability": "Attach custom properties to events",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "POST /api/event (props); POST /api/v1/sites custom_properties",
    "mcp": null,
    "cli": null,
    "ui": "Dashboard → Custom properties breakdown"
   },
   "check": "Dashboard breakdown by a custom property shows the values sent in the 'props' field of recorded events",
   "source": "https://plausible.io/docs/custom-props/introduction"
  },
  {
   "id": "cap-27",
   "group": "secondary",
   "capability": "Track ecommerce revenue attribution",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "POST /api/event (revenue)",
    "mcp": null,
    "cli": null,
    "ui": "Dashboard → Revenue goal report"
   },
   "check": "Revenue goal report shows total/average revenue matching the amounts sent via the revenue field",
   "source": "https://plausible.io/docs/ecommerce-revenue-tracking"
  },
  {
   "id": "cap-28",
   "group": "secondary",
   "capability": "Explore user journeys (visitor paths)",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Dashboard → User journeys"
   },
   "check": "User journeys view displays a flow diagram of page sequences visitors actually took",
   "source": "https://plausible.io/docs/user-journeys"
  },
  {
   "id": "cap-29",
   "group": "secondary",
   "capability": "Schedule recurring email reports",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Site settings → Email reports"
   },
   "check": "A configured recipient receives a periodic stats email matching the site's dashboard numbers",
   "source": "https://plausible.io/docs/email-reports"
  },
  {
   "id": "cap-30",
   "group": "secondary",
   "capability": "Send recurring Slack reports",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Site settings → Slack reports"
   },
   "check": "Connected Slack channel receives a scheduled stats message matching the site's dashboard numbers",
   "source": "https://plausible.io/docs/slack-reports"
  },
  {
   "id": "cap-31",
   "group": "secondary",
   "capability": "Invite team members and assign roles",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "POST site guest invitations (Enterprise Sites API)",
    "mcp": null,
    "cli": null,
    "ui": "Team settings → Users and roles"
   },
   "check": "Invited user appears in the team member list with the assigned role (Admin/Editor/Viewer/Billing)",
   "source": "https://plausible.io/docs/users-roles"
  },
  {
   "id": "cap-32",
   "group": "secondary",
   "capability": "Create a publicly shareable dashboard link",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "PUT /api/v1/sites/shared-links",
    "mcp": null,
    "cli": null,
    "ui": "Site settings → Visibility → Shared links"
   },
   "check": "The generated share URL loads the dashboard for an unauthenticated visitor",
   "source": "https://plausible.io/docs/shared-links"
  },
  {
   "id": "cap-33",
   "group": "secondary",
   "capability": "Query stats programmatically via the Stats API",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "POST /api/v2/query",
    "mcp": null,
    "cli": null,
    "ui": null
   },
   "check": "A POST to /api/v2/query with a Stats API key returns JSON results matching the dashboard for the same filters",
   "source": "https://plausible.io/docs/stats-api"
  },
  {
   "id": "cap-34",
   "group": "peripheral",
   "capability": "Manage site settings (domain, timezone, tracker config)",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": "PUT /api/v1/sites/:site_id (Enterprise)",
    "mcp": null,
    "cli": null,
    "ui": "Site settings → General"
   },
   "check": "GET /api/v1/sites/:site_id reflects the updated domain/timezone/tracker_script_configuration",
   "source": "https://plausible.io/docs/sites-api; https://plausible.io/docs/website-settings"
  },
  {
   "id": "cap-35",
   "group": "peripheral",
   "capability": "Remove a site and its data",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": "DELETE /api/v1/sites/:site_id (Enterprise)",
    "mcp": null,
    "cli": null,
    "ui": "Site settings → Danger zone → Delete site"
   },
   "check": "GET /api/v1/sites/:site_id for the deleted domain returns not found; site disappears from dashboard site list",
   "source": "https://plausible.io/docs/sites-api"
  },
  {
   "id": "cap-36",
   "group": "peripheral",
   "capability": "Set up Single Sign-On (SSO)",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Team settings → SSO"
   },
   "check": "A team member can log in via the configured SAML identity provider instead of email/password",
   "source": "https://plausible.io/docs/sso"
  },
  {
   "id": "cap-37",
   "group": "peripheral",
   "capability": "Customize dashboard appearance (light/dark mode)",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Account settings → Appearance"
   },
   "check": "Dashboard theme switches to the selected light/dark/system mode and persists across sessions",
   "source": "https://plausible.io/docs/dashboard-appearance"
  },
  {
   "id": "cap-38",
   "group": "peripheral",
   "capability": "Enable two-factor authentication",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Account settings → Security → 2FA"
   },
   "check": "Login subsequently requires a TOTP code after password entry",
   "source": "https://plausible.io/docs/2fa"
  },
  {
   "id": "cap-39",
   "group": "peripheral",
   "capability": "View and download billing invoices",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Account settings → Subscription → Invoices"
   },
   "check": "Invoice list contains a downloadable PDF for each past billing period",
   "source": "https://plausible.io/docs/download-invoices"
  },
  {
   "id": "cap-40",
   "group": "peripheral",
   "capability": "Set up scheduled raw event data exports to object storage",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Contact sales (Enterprise setup)"
   },
   "check": "Configured S3-compatible bucket receives a new daily raw event/session data file",
   "source": "https://plausible.io/docs/raw-data-export"
  }
 ],
 "attempts": [
  {
   "t": "01:40",
   "cap": "discovery",
   "capability": "docs",
   "task": "Find API docs",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "https://plausible.io/docs/stats-api, /docs/sites-api, /docs/events-api all 200; docs sitemap 134 pages; Stats API is Business plan, Sites API (write) Enterprise; 600 req/h per key",
   "notes": "No OpenAPI found (/openapi.json 404)"
  },
  {
   "t": "01:40",
   "cap": "discovery",
   "capability": "llms.txt",
   "task": "llms.txt",
   "route": "api",
   "documented": true,
   "result": "failed",
   "verified": true,
   "evidence": "/llms.txt 404, /docs/llms.txt 404"
  },
  {
   "t": "01:40",
   "cap": "discovery",
   "capability": "markdown docs",
   "task": "Accept: text/markdown and .md",
   "route": "api",
   "documented": true,
   "result": "failed",
   "verified": true,
   "evidence": "/docs/stats-api with Accept: text/markdown -> text/html, vary: Accept-Encoding only; /docs/stats-api.md 404"
  },
  {
   "t": "01:40",
   "cap": "discovery",
   "capability": "robots/aipref",
   "task": "robots.txt Content-Usage",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "https://plausible.io/robots.txt: only 'Sitemap:' line, no Content-Usage/Content-signal; /docs/robots.txt Disallow: /docs/search; no Content-Usage header"
  },
  {
   "t": "01:40",
   "cap": "discovery",
   "capability": "cards",
   "task": "AI catalog / agent card / server card",
   "route": "api",
   "documented": true,
   "result": "failed",
   "verified": true,
   "evidence": "/.well-known/ai-catalog.json 404 html, /.well-known/agent-card.json 404 html, /mcp/server-card 404"
  },
  {
   "t": "01:40",
   "cap": "pay",
   "capability": "pay probes",
   "task": "402 challenges, registries, checkout",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "pay_probe.json: no 402 anywhere, no registry listings, /.well-known/ucp 404; pay_tx.json refused: no 402 asking USDC. docs/trial: 'We don't ask for a credit card when you register'; docs/billing: Paddle is payment processor; upgrade via web (docs/trial-to-paid)"
  },
  {
   "t": "02:35",
   "cap": "signup",
   "capability": "sign up",
   "task": "Register at /register",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Phoenix LiveView form (name, email, password) with Friendly Captcha (frc-captcha, invisible); submit enabled after ~8s, no visible challenge; redirected to /activate?flow=register",
   "notes": "No documented headless sign-up (no API/CLI). LiveView form not plain-POSTable. Friendly Captcha let our agent's browser through."
  },
  {
   "t": "02:35",
   "cap": "verify",
   "capability": "verify email",
   "task": "Enter 4-digit code from mail",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Mail '7368 is your Plausible email verification code' arrived within ~1 min; code entered on /activate -> /sites/new?flow=register"
  },
  {
   "t": "02:35",
   "cap": "cap-01",
   "capability": "Add a website to track",
   "task": "Check API route for site creation",
   "route": "api",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "docs/sites-api: 'Sites API is an Enterprise plan feature. Contact us'",
   "quality": {
    "docs_url": "https://plausible.io/docs/sites-api"
   }
  },
  {
   "t": "03:38",
   "cap": "cap-01",
   "capability": "Add a website to track",
   "task": "Add an inbox.agentdrives.com",
   "step": "create",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "/sites/new form: domain an inbox.agentdrives.com -> redirected to /an inbox.agentdrives.com/installation (site exists)",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://plausible.io/docs/add-website",
    "verify_route": "yes"
   }
  },
  {
   "t": "03:38",
   "cap": "cap-02",
   "capability": "Install tracking script on a site",
   "task": "Get the tracking snippet for the new site",
   "step": "read",
   "route": "browser",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "Installation page shows snippet <script async src=\"https://plausible.io/js/pa-_-4X7cE4SnyIq1eCdmzCz.js\"> + plausible.init; options Script/WordPress/GTM/NPM",
   "notes": "We host no page on that domain, so the snippet could not be installed and 'I've installed it' verification not run",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://plausible.io/docs/plausible-script"
   }
  },
  {
   "t": "03:38",
   "cap": "cap-06",
   "capability": "Send a pageview or custom event via the Events API",
   "task": "POST /api/event pageview for our site",
   "step": "create",
   "route": "api",
   "documented": true,
   "result": "failed",
   "verified": true,
   "evidence": "POST https://plausible.io/api/event {name:pageview,url:https://an inbox.agentdrives.com/,domain:an inbox.agentdrives.com} -> 202 'ok' with x-plausible-dropped: 1. AgentDrivesAgent/1.0) + X-Forwarded-For 167.233.145.55 (our real egress IP): both dropped",
   "notes": "Docs: 'Plausible's bot filtering will drop the event. The API still returns HTTP 202 with no obvious error ... x-plausible-dropped: 1'. Agent traffic from a datacenter IP with an automated agent UA is filtered as bot; we did not fake a UA or IP.",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://plausible.io/docs/events-api",
    "error_legibility": "vague",
    "recoverable": "no",
    "verify_route": "yes"
   }
  },
  {
   "t": "04:59",
   "cap": "credentials",
   "capability": "API key",
   "task": "Create a Stats API key",
   "key": "create",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Settings > API keys > New API Key (type Stats API) -> listed 'agentdrives-test 1BYDkD*** Stats API'. Sites API type refused: 'Your current subscription plan does not include Sites API access. Contact us if interested.'",
   "notes": "No documented API/CLI route to create a key; docs say log in and use Settings > API Keys"
  },
  {
   "t": "04:59",
   "cap": "credentials",
   "capability": "API key headless",
   "task": "Create key headless",
   "key": "create",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "docs/stats-api 'To create a Stats API key: Log in ... go to API Keys. Click New API Key'; docs/sites-api same; no key endpoint in either reference"
  },
  {
   "t": "04:59",
   "cap": "credentials",
   "capability": "API key",
   "task": "Use key",
   "key": "use",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "GET /api/v1/sites with Bearer key -> 200 {sites:[{domain:an inbox.agentdrives.com,timezone:UTC}]}"
  },
  {
   "t": "04:59",
   "cap": "first_call",
   "capability": "first API call",
   "task": "GET /api/v1/sites",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "200 lists our site; read-only Sites endpoints work with a Stats API key as docs say"
  },
  {
   "t": "04:59",
   "cap": "cap-01",
   "capability": "Add a website to track",
   "task": "Read back site via API",
   "step": "read",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "GET /api/v1/sites/an inbox.agentdrives.com -> 200 tracker_script_configuration id pa-_-4X7cE4SnyIq1eCdmzCz",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://plausible.io/docs/sites-api",
    "verify_route": "yes"
   }
  },
  {
   "t": "04:59",
   "cap": "cap-01",
   "capability": "Add a website to track",
   "task": "Create a second site via API",
   "step": "create",
   "route": "api",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "POST /api/v1/sites with Stats key -> 401 'Invalid API key. Please make sure you're using a valid API key with access to the resource you've requested.' Sites API keys need Enterprise",
   "quality": {
    "docs_url": "https://plausible.io/docs/sites-api",
    "error_legibility": "vague"
   }
  },
  {
   "t": "04:59",
   "cap": "cap-03",
   "capability": "View the stats dashboard for a site",
   "task": "Aggregate visitors/pageviews/bounce 7d",
   "step": "read",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /api/v2/query -> 200 results metrics [0,0,0] (no data: our events were dropped as bot)",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://plausible.io/docs/stats-api",
    "verify_route": "yes"
   }
  },
  {
   "t": "04:59",
   "cap": "cap-33",
   "capability": "Query stats programmatically via the Stats API",
   "task": "v2 query on trial (Business features)",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /api/v2/query 200 for aggregate, dimensions, filters; error on bad metric 400 {\"error\":\"#/metrics/0: Invalid metric \\\"visitorz\\\"\"}",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://plausible.io/docs/stats-api",
    "error_legibility": "clear"
   }
  },
  {
   "t": "04:59",
   "cap": "cap-04",
   "capability": "Filter and segment traffic by dimension",
   "task": "visitors by country filtered to Desktop",
   "step": "read",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /api/v2/query dimensions [visit:country_name] filters [[is,visit:device,[Desktop]]] -> 200 results [] (query echoed back, no data)",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://plausible.io/docs/stats-api"
   }
  },
  {
   "t": "04:59",
   "cap": "cap-07",
   "capability": "See real-time current visitors",
   "task": "realtime visitors",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "v2 date_range 'realtime' -> 400 Invalid date range (the map's guess; not in v2 docs). Documented GET /api/v1/stats/realtime/visitors?site_id=... -> 200 '0'",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://plausible.io/docs/stats-api-v1",
    "error_legibility": "clear"
   }
  },
  {
   "t": "04:59",
   "cap": "cap-12",
   "capability": "See acquisition channels, sources and campaigns",
   "task": "visitors by visit:channel 30d",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /api/v2/query dimensions [visit:channel] -> 200 results []",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://plausible.io/docs/stats-api"
   }
  },
  {
   "t": "04:59",
   "cap": "cap-13",
   "capability": "See scroll depth on pages",
   "task": "scroll_depth by event:page",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /api/v2/query metrics [scroll_depth] dimensions [event:page] -> 200 results []",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://plausible.io/docs/stats-api"
   }
  },
  {
   "t": "08:55",
   "cap": "cap-05",
   "capability": "Track a custom goal/conversion",
   "task": "Create goal via Sites API",
   "step": "create",
   "route": "api",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "PUT /api/v1/sites/goals with Stats key -> 401 'Invalid API key...'; Sites API key type refused on trial ('Your current subscription plan does not include Sites API access')",
   "quality": {
    "docs_url": "https://plausible.io/docs/sites-api",
    "error_legibility": "vague"
   }
  },
  {
   "t": "08:55",
   "cap": "cap-05",
   "capability": "Track a custom goal/conversion",
   "task": "Create custom event goal 'AgentDrives Signup' in Site settings > Goals",
   "step": "create",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "GET /api/v1/sites/goals -> new goal id 3024695 'AgentDrives Signup'",
   "notes": "Add goal dropdown opened only by keyboard (ArrowDown) after a reload; event name is a combobox needing the 'Create \"…\"' option",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://plausible.io/docs/custom-event-goals",
    "verify_route": "yes"
   }
  },
  {
   "t": "08:55",
   "cap": "cap-05",
   "capability": "Track a custom goal/conversion",
   "task": "Read goal",
   "step": "read",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "GET /api/v1/sites/goals?site_id=an inbox.agentdrives.com 200 lists 3024695",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://plausible.io/docs/custom-event-goals",
    "verify_route": "yes"
   }
  },
  {
   "t": "08:55",
   "cap": "cap-05",
   "capability": "Track a custom goal/conversion",
   "task": "Rename display name to 'AgentDrives Signup v2'",
   "step": "update",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "GET goals -> 3024695 display_name 'AgentDrives Signup v2', event_name unchanged",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://plausible.io/docs/custom-event-goals",
    "verify_route": "yes"
   }
  },
  {
   "t": "08:55",
   "cap": "cap-05",
   "capability": "Track a custom goal/conversion",
   "task": "Query conversions filtered by goal",
   "step": "use",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "filter event:goal 'AgentDrives Signup' (event name) -> 400 'Invalid filters. The goal `AgentDrives Signup` is not configured for this site...'; with display name 'AgentDrives Signup v2' -> 200 metrics [0,0]",
   "notes": "Goal filter matches the display name, not the event name; error names the fix with a docs link",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://plausible.io/docs/custom-event-goals",
    "verify_route": "yes",
    "error_legibility": "clear",
    "recoverable": "yes"
   }
  },
  {
   "t": "08:55",
   "cap": "cap-05",
   "capability": "Track a custom goal/conversion",
   "task": "Delete goal",
   "step": "delete",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Trash icon delete-goal-3024695 + confirm; GET goals no longer lists 3024695",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://plausible.io/docs/custom-event-goals",
    "verify_route": "yes"
   }
  },
  {
   "t": "08:55",
   "cap": "cap-22",
   "capability": "Track outbound link clicks",
   "task": "Check the tracker config and goal exist for our site",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "GET /api/v1/sites/an inbox.agentdrives.com: tracker_script_configuration outbound_links/file_downloads/form_submissions/track_404_pages true; GET goals lists 'Outbound Link: Click'",
   "notes": "Enabled by default at site creation; no real event could be recorded (events API drops our agent traffic)",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://plausible.io/docs/sites-api"
   }
  },
  {
   "t": "08:55",
   "cap": "cap-23",
   "capability": "Track file downloads",
   "task": "Check the tracker config and goal exist for our site",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "GET /api/v1/sites/an inbox.agentdrives.com: tracker_script_configuration outbound_links/file_downloads/form_submissions/track_404_pages true; GET goals lists 'File Download'",
   "notes": "Enabled by default at site creation; no real event could be recorded (events API drops our agent traffic)",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://plausible.io/docs/sites-api"
   }
  },
  {
   "t": "08:55",
   "cap": "cap-24",
   "capability": "Track form submissions",
   "task": "Check the tracker config and goal exist for our site",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "GET /api/v1/sites/an inbox.agentdrives.com: tracker_script_configuration outbound_links/file_downloads/form_submissions/track_404_pages true; GET goals lists 'Form: Submission'",
   "notes": "Enabled by default at site creation; no real event could be recorded (events API drops our agent traffic)",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://plausible.io/docs/sites-api"
   }
  },
  {
   "t": "08:55",
   "cap": "cap-25",
   "capability": "Track 404 error pages",
   "task": "Check the tracker config and goal exist for our site",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "GET /api/v1/sites/an inbox.agentdrives.com: tracker_script_configuration outbound_links/file_downloads/form_submissions/track_404_pages true; GET goals lists '404'",
   "notes": "Enabled by default at site creation; no real event could be recorded (events API drops our agent traffic)",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://plausible.io/docs/sites-api"
   }
  },
  {
   "t": "11:55",
   "cap": "cap-08",
   "capability": "Run funnel analysis",
   "task": "Create 2-step funnel File Download -> Form: Submission",
   "step": "create",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Settings > Funnels > Add funnel; list shows 'AgentDrives funnel 2-step funnel' (id 33234)",
   "notes": "On the 30-day trial (Business features); no API for funnels",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://plausible.io/docs/funnel-analysis",
    "verify_route": "yes"
   }
  },
  {
   "t": "11:55",
   "cap": "cap-08",
   "capability": "Run funnel analysis",
   "task": "Read funnel list",
   "step": "read",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "funnels settings page lists AgentDrives funnel",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://plausible.io/docs/funnel-analysis",
    "verify_route": "yes"
   }
  },
  {
   "t": "11:55",
   "cap": "cap-08",
   "capability": "Run funnel analysis",
   "task": "Rename funnel",
   "step": "update",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "edit-funnel -> list shows 'AgentDrives funnel v2'",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://plausible.io/docs/funnel-analysis",
    "verify_route": "yes"
   }
  },
  {
   "t": "11:55",
   "cap": "cap-08",
   "capability": "Run funnel analysis",
   "task": "Open funnel on dashboard",
   "step": "use",
   "route": "browser",
   "documented": true,
   "result": "partial",
   "verified": false,
   "evidence": "Dashboard shows a FUNNELS tab; clicking it via getByText timed out, funnel report not opened; no data anyway",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://plausible.io/docs/funnel-analysis",
    "verify_route": "yes"
   }
  },
  {
   "t": "11:55",
   "cap": "cap-08",
   "capability": "Run funnel analysis",
   "task": "Delete funnel",
   "step": "delete",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "delete-funnel-33234 + confirm; after reload page shows 'Create your first funnel'",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://plausible.io/docs/funnel-analysis",
    "verify_route": "yes"
   }
  },
  {
   "t": "11:55",
   "cap": "cap-03",
   "capability": "View the stats dashboard for a site",
   "task": "Open dashboard last 30 days",
   "step": "use",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "https://plausible.io/an inbox.agentdrives.com?period=30d shows '0 current visitors', UNIQUE VISITORS 0 ... CHANNELS/SOURCES/TOP PAGES/GOALS/FUNNELS/EXPLORE tabs",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://plausible.io/docs/guided-tour"
   }
  },
  {
   "t": "11:55",
   "cap": "cap-09",
   "capability": "Compare a period against a previous period",
   "task": "Dashboard 7d vs previous period",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "?period=7d&comparison=previous_period shows 'Last 7 days vs Previous period', '4 Oct - 10 Oct' vs '27 Sep - 3 Oct'",
   "quality": {
    "docs_match": "match"
   }
  },
  {
   "t": "11:55",
   "cap": "cap-28",
   "capability": "Explore user journeys",
   "task": "Check Explore tab on trial",
   "route": "browser",
   "documented": true,
   "result": "partial",
   "verified": false,
   "evidence": "Dashboard lists an EXPLORE tab on the trial; not opened (no data)"
  },
  {
   "t": "11:55",
   "cap": "cap-07",
   "capability": "See real-time current visitors",
   "task": "Dashboard realtime counter",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Dashboard header '0 current visitors'"
  },
  {
   "t": "11:55",
   "cap": "cap-02",
   "capability": "Install tracking script on a site",
   "task": "Snippet read via API",
   "route": "api",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "GET /api/v1/sites/{domain} returns tracker_script_configuration.id pa-_-4X7cE4SnyIq1eCdmzCz (script URL https://plausible.io/js/<id>.js); installing needs a site we host",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://plausible.io/docs/sites-api"
   }
  },
  {
   "t": "12:52",
   "cap": "cap-32",
   "capability": "Create a publicly shareable dashboard link",
   "task": "Add shared link and open it logged out",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Visibility > Add shared link 'agentdrives-share' -> https://plausible.io/share/an inbox.agentdrives.com?auth=••••.",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://plausible.io/docs/shared-links"
   }
  },
  {
   "t": "12:52",
   "cap": "cap-17",
   "capability": "Embed the dashboard on another page",
   "task": "Generate embed code from shared link",
   "route": "browser",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "Embed form exists ('Enter shared link (only public shared links without password can be embedded)', Generate embed code); filling the input timed out in our agent's browser; shared link with &embed=true answers 200",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://plausible.io/docs/embed-dashboard"
   }
  },
  {
   "t": "13:52",
   "cap": "cap-21",
   "capability": "Export stats as CSV",
   "task": "Export stats as CSV",
   "route": "browser",
   "documented": true,
   "result": "partial",
   "verified": false,
   "evidence": "Imports & exports > 'Prepare download' clicked; after 6s the page still showed the button, no zip link appeared within our wait"
  },
  {
   "t": "13:52",
   "cap": "cap-16",
   "capability": "Exclude pages or traffic segments from stats",
   "task": "Exclude pages or traffic segments from stats",
   "route": "browser",
   "documented": true,
   "result": "failed",
   "verified": false,
   "evidence": "Shields > Pages > Add page: our fill went to the wrong input, form answered \"can't be blank\" (clear error); not retried for budget"
  },
  {
   "t": "13:53",
   "cap": "cap-29",
   "capability": "Schedule recurring email reports",
   "task": "Schedule recurring email reports",
   "route": "browser",
   "documented": true,
   "result": "partial",
   "verified": false,
   "evidence": "Settings > Email reports page shows 'Send a weekly email report every Monday' / monthly toggles on the trial; not switched on"
  },
  {
   "t": "13:53",
   "cap": "cap-18",
   "capability": "Get traffic spike notifications",
   "task": "Get traffic spike notifications",
   "route": "browser",
   "documented": true,
   "result": "partial",
   "verified": false,
   "evidence": "Email reports page shows 'Traffic spike notifications ... Send notifications of traffic spikes' and drop notifications on the trial; not switched on"
  },
  {
   "t": "13:53",
   "cap": "cap-14",
   "capability": "Connect Google Search Console",
   "task": "Connect Google Search Console",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Integrations: 'Continue with Google' needs a Google account with the site verified in Search Console; we have neither"
  },
  {
   "t": "13:53",
   "cap": "cap-15",
   "capability": "Build custom reports via Looker Studio connector",
   "task": "Build custom reports via Looker Studio connector",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Integrations lists 'Google Data Studio Connector'; needs a Google account"
  },
  {
   "t": "13:53",
   "cap": "cap-19",
   "capability": "Import historical data from Google Analytics",
   "task": "Import historical data from Google Analytics",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Imports & exports 'Import from' offers Google Analytics, needs a Google account with GA data"
  },
  {
   "t": "13:53",
   "cap": "cap-20",
   "capability": "Import stats from a CSV file",
   "task": "Import stats from a CSV file",
   "route": "browser",
   "documented": true,
   "result": "partial",
   "verified": false,
   "evidence": "Imports & exports shows 'Import from CSV' (up to 5 imports); not run, we have no exported CSV"
  },
  {
   "t": "13:54",
   "cap": "cap-26",
   "capability": "Attach custom properties to events",
   "task": "Attach custom properties to events",
   "route": "browser",
   "documented": true,
   "result": "partial",
   "verified": false,
   "evidence": "Custom properties page: 'Add property' available on trial; events carrying props are dropped for our agent traffic"
  },
  {
   "t": "13:54",
   "cap": "cap-27",
   "capability": "Track ecommerce revenue attribution",
   "task": "Track ecommerce revenue attribution",
   "route": "browser",
   "documented": true,
   "result": "partial",
   "verified": false,
   "evidence": "Goal modal has 'Enable revenue tracking' toggle on the trial; no revenue events could be recorded"
  },
  {
   "t": "13:54",
   "cap": "cap-31",
   "capability": "Invite team members and assign roles",
   "task": "Invite team members and assign roles",
   "route": "browser",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "People > 'Invite new guest' exists; not used: an invite mails a person, and we have no second account in this drive"
  },
  {
   "t": "13:54",
   "cap": "cap-30",
   "capability": "Send recurring Slack reports",
   "task": "Send recurring Slack reports",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No Slack option on the site's settings pages we opened (email-reports, integrations); needs a Slack workspace we do not have"
  },
  {
   "t": "13:54",
   "cap": "cap-11",
   "capability": "View a consolidated dashboard across multiple sites",
   "task": "View a consolidated dashboard across multiple sites",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Needs several sites; adding a second site works only in the browser and the Sites API is Enterprise; not tried for budget"
  },
  {
   "t": "13:54",
   "cap": "cap-10",
   "capability": "Annotate the chart with an event",
   "task": "Annotate the chart with an event",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No annotation control seen on the dashboard text snapshot; not found in docs sitemap either"
  },
  {
   "t": "13:54",
   "cap": "cap-34",
   "capability": "Manage site settings",
   "task": "Check in docs/settings",
   "route": "none",
   "documented": true,
   "result": "plan_gated",
   "verified": false,
   "evidence": "Settings > General shows 'Site domain ... Change' and Reporting timezone; PUT /api/v1/sites/:site_id is Sites API (Enterprise)"
  },
  {
   "t": "13:54",
   "cap": "cap-35",
   "capability": "Remove a site and its data",
   "task": "Check in docs/settings",
   "route": "none",
   "documented": true,
   "result": "plan_gated",
   "verified": false,
   "evidence": "Site settings > Danger zone; DELETE /api/v1/sites/:site_id documented (Sites API, Enterprise)"
  },
  {
   "t": "13:54",
   "cap": "cap-36",
   "capability": "Set up SSO",
   "task": "Check in docs/settings",
   "route": "none",
   "documented": true,
   "result": "plan_gated",
   "verified": false,
   "evidence": "Docs sitemap; Enterprise; not tried"
  },
  {
   "t": "13:54",
   "cap": "cap-37",
   "capability": "Customize dashboard appearance",
   "task": "Check in docs/settings",
   "route": "none",
   "documented": true,
   "result": "done",
   "verified": false,
   "evidence": "Account settings > Preferences; docs 'Choose between dark or light theme'"
  },
  {
   "t": "13:54",
   "cap": "cap-38",
   "capability": "Enable two-factor authentication",
   "task": "Check in docs/settings",
   "route": "none",
   "documented": true,
   "result": "done",
   "verified": false,
   "evidence": "Account settings > Security; docs /docs/2fa"
  },
  {
   "t": "13:54",
   "cap": "cap-39",
   "capability": "View and download billing invoices",
   "task": "Check in docs/settings",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "docs/billing: 'Paddle ... emails you an invoice ... You can also open past invoices from your account settings'; none on a trial"
  },
  {
   "t": "13:54",
   "cap": "cap-40",
   "capability": "Scheduled raw event data exports",
   "task": "Check in docs/settings",
   "route": "none",
   "documented": true,
   "result": "plan_gated",
   "verified": false,
   "evidence": "Contact sales (Enterprise); docs sitemap lists event data exports"
  },
  {
   "t": "14:02",
   "cap": "first_action",
   "capability": "first real action",
   "task": "Add a site",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Site an inbox.agentdrives.com added in /sites/new; read back by GET /api/v1/sites. Headless creation (POST /api/v1/sites, PUT goals) refused with the trial's Stats key (401); Sites API is Enterprise"
  },
  {
   "t": "14:02",
   "cap": "cancel",
   "capability": "cancel",
   "task": "Cancel trial/plan",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "docs/trial: 'Your trial never converts into a paid subscription automatically. This also means there's nothing to cancel.' docs/cancel-subscription: Account Settings > Subscription > Cancel plan (web UI). No plan started.",
   "notes": "not tested: no plan or trial was started that renews"
  },
  {
   "t": "14:34",
   "cap": "credentials",
   "capability": "API key",
   "task": "Revoke key",
   "key": "revoke",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Settings > API keys > revoke (confirm 'Are you sure you want to revoke this key?'); GET /api/v1/sites with the key -> 401 'Invalid API key...'",
   "notes": "No API route to revoke"
  },
  {
   "t": "15:12",
   "cap": "delete",
   "capability": "delete account",
   "task": "Delete account in Settings > Danger zone",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "'Delete my account' (DELETE /me with confirm 'Deleting your account will also delete all the sites and data that you own...') -> redirected to https://plausible.io/; login with same credentials -> 'Incorrect email or password. Please try again.'",
   "notes": "Documented at /docs/delete-account; web only, no API"
  }
 ],
 "stale": false,
 "icon": "/logos/plausible.png",
 "monitored": false,
 "verdict": "Gets in on its own: L3 · Does the work. No stop: an invisible challenge at signup let our agent through, and it reached every checkpoint through account deletion. Once in, it added a site through the web and read stats headless over the Stats API. Creating sites or goals through the API answered 401 on the trial key. Events API calls came back dropped. The funnel report timed out and was never confirmed. No card is asked to start, upgrading runs through a payment processor the docs name, and deleting the account is a single confirm with no API route.",
 "page": "https://agentdrives.com/tools/plausible?via=api"
}