{
 "slug": "pirsch",
 "name": "Pirsch",
 "url": "https://pirsch.io",
 "domain": "pirsch.io",
 "category": "web-analytics",
 "category_name": "Web analytics",
 "tested_at": "2026-10-12",
 "run": "20261012T095747Z",
 "draft": false,
 "reviewed": true,
 "owner_verified": null,
 "origin": "editorial",
 "history": [
  {
   "run": "20261006T030620Z",
   "date": "2026-10-06",
   "level": 1,
   "engine": {
    "runner": "omp",
    "model": "claude-opus-5-5",
    "driver": 2,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "start"
   }
  },
  {
   "run": "20261012T095747Z",
   "date": "2026-10-12",
   "level": 1,
   "engine": {
    "runner": "omp",
    "model": "claude-opus-5-5",
    "driver": 3,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "obey"
   }
  }
 ],
 "level": 1,
 "level_name": "Needs a person",
 "level_selfhost": null,
 "entry": "closed",
 "door": {
  "passed": 0,
  "tries": 2,
  "self_start": false
 },
 "badges": [],
 "stages": [
  {
   "key": "in",
   "label": "Access",
   "state": "no",
   "text": "Can't get in on its own",
   "at": "signup"
  },
  {
   "key": "work",
   "label": "Use",
   "state": "unreached",
   "text": "Work not measured"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "Payment not reached",
   "value": "unreached",
   "route": "card_checkout"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "unreached",
   "text": "Leaving not reached",
   "how": "no-account"
  }
 ],
 "outcomes": [
  {
   "key": "find",
   "label": "Find",
   "state": "part",
   "text": "Some docs agents can read: an MCP server",
   "have": [
    "mcp"
   ]
  },
  {
   "key": "access",
   "label": "Access",
   "state": "no",
   "text": "Can't get in on its own",
   "at": "signup",
   "stage": "in"
  },
  {
   "key": "use",
   "label": "Use",
   "state": "unreached",
   "text": "Work not measured",
   "stage": "work"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "Payment not reached",
   "value": "unreached",
   "route": "card_checkout",
   "stage": "pay"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "unreached",
   "text": "Leaving not reached",
   "how": "no-account",
   "stage": "leave"
  }
 ],
 "access": [
  {
   "key": "person",
   "label": "A person sets it up",
   "routes": [],
   "minutes": null,
   "core": null
  }
 ],
 "minutes": null,
 "next": {
  "to": 2,
  "text": "Next: let an agent sign up on its own"
 },
 "stop": "signup",
 "core": null,
 "scores": {
  "coverage": null,
  "reliability": null,
  "resilience": null,
  "setup": 45,
  "surface_coverage": null,
  "docs_accuracy": null,
  "docs_completeness": null
 },
 "parts": {
  "holds_up": null,
  "docs_match": null,
  "setup": 45,
  "security": null,
  "standards": [
   {
    "standard": "MCP",
    "state": "current",
    "behind": null,
    "value": "2026-07-28"
   },
   {
    "standard": "MCP discovery",
    "state": "current",
    "behind": null,
    "value": "ok"
   }
  ]
 },
 "reliability_method": null,
 "resilience": null,
 "stress": [],
 "surface_audit": null,
 "coverage_core": null,
 "after_wall": null,
 "coverage_source": "reported",
 "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": 2,
 "works_assisted": null,
 "freshness": "fresh",
 "nothing_to_pay": false,
 "core_gated": false,
 "profiles": {},
 "agent_check": {
  "rung": "signup",
  "vendor": "ALTCHA (proof of work)",
  "visible": true,
  "type": "challenge",
  "human": null,
  "how": "Skip the CAPTCHA for signed agents (valid Web Bot Auth signature), or offer a documented sign-up API.",
  "signed": true
 },
 "agent_pass": null,
 "who_gets_in": {
  "server": {
   "state": "captcha"
  },
  "signed": {
   "state": "page",
   "kind": "signup",
   "at": "2026-10-12"
  },
  "browser": {
   "state": "captcha",
   "measured": false
  },
  "our_key": "pending",
  "robots": null,
  "tip": false
 },
 "ladder": {
  "docs": {
   "status": "headless",
   "note": "Public docs at docs.pirsch.io: API v1 reference (~150 REST endpoints) and API guide, fetched headless. No OpenAPI file, no llms.txt, no Markdown versions of pages."
  },
  "signup": {
   "status": "human",
   "note": "Sign-up is a web form at pirsch.io/signup with an ALTCHA 'I'm not a robot' checkbox. The agent does not tick a bot check itself. No sign-up API is documented."
  },
  "verify": {
   "status": "",
   "note": "Not reached: sign-up stopped at the ALTCHA checkbox.",
   "reached": false
  },
  "credentials": {
   "status": "",
   "note": "Not reached. OAuth clients and access keys are made in the dashboard or with POST /api/v1/client, both need an account.",
   "via": "",
   "reached": false
  },
  "first_call": {
   "status": "",
   "note": "Not reached. Without a client, GET /api/v1/billing answers 401 'the token is not a valid bearer token'.",
   "reached": false
  },
  "first_action": {
   "status": "",
   "note": "Not reached: no account.",
   "reached": false
  },
  "pay": {
   "status": "",
   "grade": "P2",
   "rails": [
    "Stripe Checkout (hosted), cancel in the Stripe portal"
   ],
   "rail_ids": [
    "stripe-checkout"
   ],
   "first_party": true,
   "rail_scope": "none",
   "trial_path": "no-card trial",
   "note": "No 402, x402, MPP or registry listing; we paid nothing. docs.pirsch.io/billing: plans are bought on a Stripe checkout page; the 30-day trial needs no card. GET /api/v1/billing only reads usage. Not reached in the drive: no account.",
   "reached": false
  },
  "cancel": {
   "status": "",
   "note": "Not tested: Pirsch has recurring paid plans and none was started (no account reached past the sign-up wall). Docs: change or cancel in the Stripe portal; marking the account for deletion cancels the subscription.",
   "docs_grade": "",
   "reached": false
  },
  "delete": {
   "status": "",
   "note": "No account to delete. Docs: DELETE /api/v1/user/account deletes the account after a one-week grace period (needs an account-level client).",
   "account": false,
   "reached": false
  }
 },
 "routes": [],
 "checkout": null,
 "docs": null,
 "claims": null,
 "pay_options": {
  "checked": "2026-10-12",
  "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": true,
  "mcp": "third-party",
  "llms_txt": false,
  "webhooks": true,
  "sandbox": false
 },
 "surface_notes": {
  "api": "REST v1, about 150 documented operations incl. account delete and client creation",
  "openapi": "none published",
  "mcp": "third-party stdio, 3 read-only tools",
  "sdk": "official SDKs listed on docs.pirsch.io/api-sdks/sdks (not driven)"
 },
 "can_do": [
  "Read the full API v1 reference and guide without an account",
  "Install and list the tools of the docs-linked MCP server"
 ],
 "cannot_do": [
  {
   "what": "Create an account",
   "why": "The sign-up form has an ALTCHA 'I'm not a robot' checkbox and there is no sign-up API"
  },
  {
   "what": "Get API credentials, send page views or events, read statistics",
   "why": "Every one needs an account and a client made after sign-up"
  }
 ],
 "blockers": [
  "ALTCHA 'I'm not a robot' checkbox on pirsch.io/signup"
 ],
 "tips_for_owner": [
  "Let signed agents past the bot check on sign-up: Skip the CAPTCHA for signed agents (valid Web Bot Auth signature), or offer a documented sign-up API.",
  "Add a documented sign-up route for agents",
  "Publish an OpenAPI file and llms.txt",
  "Serve Markdown docs pages",
  "Accept an agent payment rail on the API"
 ],
 "tips_for_agents": [
  "Sign-up needs a person to tick the ALTCHA box; after that everything is in the REST API v1 at api.pirsch.io/api/v1",
  "Use an oAuth client (POST /api/v1/token) to read statistics; pa_ access keys are write-only (hits, events, sessions)",
  "Rate limit headers are X-RateLimit-*; login/security endpoints allow 10 requests a minute",
  "The MCP server @charpeni/pirsch-mcp is third-party, stdio and read-only"
 ],
 "selfhost": null,
 "summary": "Pirsch has a large, well documented REST API (about 150 operations, including account delete) and a docs-linked third-party MCP server that speaks MCP (the 28 Jul 2026 spec), but an agent cannot get in: sign-up is a web form with an ALTCHA 'I'm not a robot' checkbox and there is no sign-up API. So no capability was driven. Paying is a hosted Stripe checkout; the 30-day trial needs no card.",
 "wall": "ALTCHA checkbox on the sign-up form",
 "plan_scope": "",
 "robots_stop": null,
 "robots": null,
 "plain": {
  "summary": "Pirsch is a web analytics tool with a big, well-documented API and a basic read-only helper tool (MCP) linked from its docs. An agent could read all the documentation and install that helper on its own, but it got stuck right at account creation because the sign-up page has an 'I'm not a robot' checkbox that only a person can tick.",
  "can_do": [
   "Read the full developer documentation without needing an account",
   "Install and inspect the docs-linked read-only helper tool"
  ],
  "cannot_do": [
   {
    "what": "Create an account",
    "why": "The sign-up page has a human-only 'I'm not a robot' checkbox and there's no other way to sign up"
   },
   {
    "what": "Get API keys, send analytics data, or view statistics",
    "why": "All of this requires an account, which the agent could not create"
   }
  ]
 },
 "plan_gated": [],
 "reply": null,
 "capabilities": [
  {
   "id": "cap-01",
   "group": "Tracking",
   "capability": "Track page views from a website or backend",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v1/hit (and /api/v1/hit/batch)",
    "mcp": null,
    "cli": null,
    "ui": "JS snippet on Integration settings page"
   },
   "check": "GET /api/v1/statistics/visitor shows the new view counted for the domain id",
   "source": "https://docs.pirsch.io/get-started/backend-integration; https://docs.pirsch.io/api-sdks/api-v1"
  },
  {
   "id": "cap-02",
   "group": "Tracking",
   "capability": "Track custom events (clicks, signups, purchases)",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v1/event (and /api/v1/event/batch)",
    "mcp": null,
    "cli": null,
    "ui": "Events panel on dashboard"
   },
   "check": "GET /api/v1/statistics/event shows the event name with an incremented count",
   "source": "https://docs.pirsch.io/advanced/events; https://docs.pirsch.io/api-sdks/api-v1"
  },
  {
   "id": "cap-03",
   "group": "Dashboard",
   "capability": "View traffic dashboard with filters and time-period comparison",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "GET /api/v1/statistics/* (visitor, overview, total, page, utm/*, etc.)",
    "mcp": "pirsch_query_statistics",
    "cli": null,
    "ui": "Main dashboard"
   },
   "check": "GET /api/v1/statistics/overview?id=<domain> returns visitors/views for the dashboard",
   "source": "https://pirsch.io/; https://docs.pirsch.io/api-sdks/api-v1"
  },
  {
   "id": "cap-04",
   "group": "Dashboard",
   "capability": "Explore individual visitor session journeys",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "GET /api/v1/statistics/... with visitor_id and session_id filters",
    "mcp": null,
    "cli": null,
    "ui": "Session analysis panel"
   },
   "check": "Querying statistics endpoints with matching visitor_id+session_id returns the ordered hit/event sequence for that session",
   "source": "https://pirsch.io/; https://docs.pirsch.io/api-sdks/api-v1"
  },
  {
   "id": "cap-05",
   "group": "Conversion",
   "capability": "Create and monitor conversion goals (path or event based)",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "GET/POST goal endpoints under /api-sdks/api",
    "mcp": null,
    "cli": null,
    "ui": "Settings > Goals"
   },
   "check": "Conversion Goals panel on dashboard shows new goal with non-zero conversion rate after matching traffic",
   "source": "https://docs.pirsch.io/advanced/conversion-goals"
  },
  {
   "id": "cap-06",
   "group": "Conversion",
   "capability": "Track custom metrics (e.g. e-commerce revenue) on a goal",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": "event metadata (numeric) attached to a conversion goal",
    "mcp": null,
    "cli": null,
    "ui": "Conversion goal editor, custom metric fields"
   },
   "check": "Dashboard goal panel shows custom_metric_total/custom_metric_avg graphs matching summed event metadata",
   "source": "https://docs.pirsch.io/advanced/conversion-goals"
  },
  {
   "id": "cap-07",
   "group": "Conversion",
   "capability": "Build and evaluate multi-step marketing funnels",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": "/api-sdks/api#managing-funnels",
    "mcp": "pirsch_query_statistics (funnels)",
    "cli": null,
    "ui": "Funnels page, Add Funnel"
   },
   "check": "Funnel card shows per-step visitor counts and drop-off rates matching known test traffic through the configured steps",
   "source": "https://docs.pirsch.io/advanced/funnels"
  },
  {
   "id": "cap-08",
   "group": "Segmentation",
   "capability": "Segment visitors and run A/B tests with custom tags",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": "tags field on /api/v1/hit and /api/v1/event; data-tag-* script attributes",
    "mcp": "pirsch_query_statistics (tags)",
    "cli": null,
    "ui": "Tags panel"
   },
   "check": "Tags panel/filter shows the tag key=value with correct visitor count after tagged traffic is sent",
   "source": "https://docs.pirsch.io/advanced/segmentation-tags"
  },
  {
   "id": "cap-09",
   "group": "Migration",
   "capability": "Import historical data from Google Analytics, Plausible, or Fathom",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Import / Export settings page"
   },
   "check": "Dashboard visitor time series shows historical data points predating Pirsch installation after import completes",
   "source": "https://docs.pirsch.io/get-started/ga-import; https://docs.pirsch.io/get-started/plausible-import; https://docs.pirsch.io/get-started/fathom-import; https://pirsch.io/pricing"
  },
  {
   "id": "cap-10",
   "group": "Links",
   "capability": "Shorten and track links with the built-in URL shortener",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Links page, Add Link"
   },
   "check": "GET the short link redirects to target URL and a corresponding non-interactive custom event appears in dashboard stats",
   "source": "https://docs.pirsch.io/advanced/url-shortener"
  },
  {
   "id": "cap-11",
   "group": "Links",
   "capability": "Configure advanced link rules (geo/OS redirect, expiration, password, custom social preview)",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Links page, Show Advanced Options"
   },
   "check": "Visiting the link from a matching country/OS redirects to the configured target, or expired/protected link blocks access as configured",
   "source": "https://docs.pirsch.io/advanced/url-shortener"
  },
  {
   "id": "cap-12",
   "group": "Automation",
   "capability": "Trigger webhooks when a custom event fires",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings > Integration > Webhooks"
   },
   "check": "Configured HTTPS endpoint receives an HTTP POST with the event JSON body after the named event is triggered",
   "source": "https://docs.pirsch.io/advanced/webhooks"
  },
  {
   "id": "cap-13",
   "group": "Automation",
   "capability": "Schedule automatic email reports to recipients",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "lockable via API per docs.pirsch.io/api-sdks/api",
    "mcp": null,
    "cli": null,
    "ui": "Reports Settings page, Add Reports"
   },
   "check": "Recipient inbox receives a report email on the configured interval linking to the dashboard",
   "source": "https://docs.pirsch.io/advanced/email-reports"
  },
  {
   "id": "cap-14",
   "group": "Automation",
   "capability": "Get notified if a site stops receiving traffic",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Reports settings page, traffic threshold"
   },
   "check": "Administrator receives a warning email once the configured no-traffic day threshold elapses",
   "source": "https://docs.pirsch.io/advanced/traffic-alerts"
  },
  {
   "id": "cap-15",
   "group": "Data",
   "capability": "Export aggregated statistics to CSV",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Import / Export settings page"
   },
   "check": "Downloaded CSV file contains rows matching the selected period and data type from the dashboard",
   "source": "https://docs.pirsch.io/get-started/export; https://pirsch.io/pricing"
  },
  {
   "id": "cap-16",
   "group": "Collaboration",
   "capability": "Invite members and assign dashboard roles",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Dashboard Access settings, Invite Member"
   },
   "check": "Invited member's account gains Viewer or Administrator-level access to the dashboard matching the assigned role",
   "source": "https://docs.pirsch.io/advanced/access"
  },
  {
   "id": "cap-17",
   "group": "Collaboration",
   "capability": "Share dashboards via public access or unique access links",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Access settings, Public Access / Access Links"
   },
   "check": "Opening the generated access link or the public subdomain without logging in shows the live dashboard",
   "source": "https://docs.pirsch.io/advanced/access"
  },
  {
   "id": "cap-18",
   "group": "Collaboration",
   "capability": "Organize multiple sites and clients under a Team",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Teams page (user menu)"
   },
   "check": "Team member list shows added members with Owner/Administrator/Viewer roles and access to all team dashboards",
   "source": "https://docs.pirsch.io/advanced/teams"
  },
  {
   "id": "cap-19",
   "group": "Integration",
   "capability": "Connect Google Search Console to see search keywords",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Dashboard Settings > Search Console"
   },
   "check": "A Keywords panel appears on the dashboard listing search queries pulled from the linked Search Console property",
   "source": "https://docs.pirsch.io/integrations/search-console"
  },
  {
   "id": "cap-20",
   "group": "Integration",
   "capability": "Track multiple hostnames on one dashboard or roll up several dashboards",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "data-domain / data-path-prefix script attributes, or server-side client",
    "mcp": null,
    "cli": null,
    "ui": "Additional Domains settings"
   },
   "check": "GET /api/v1/statistics/hostname on the rollup dashboard id lists visitor counts broken down per added hostname",
   "source": "https://docs.pirsch.io/advanced/domains-rollup"
  },
  {
   "id": "cap-21",
   "group": "Integration",
   "capability": "Issue API access keys or OAuth clients for programmatic access",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v1/token (client credentials); access key generation",
    "mcp": null,
    "cli": null,
    "ui": "Settings > Integration > Clients"
   },
   "check": "POST to /api/v1/token with the created client_id/secret returns a valid access_token",
   "source": "https://docs.pirsch.io/get-started/backend-integration"
  },
  {
   "id": "cap-23",
   "group": "Dashboard",
   "capability": "Automatically track outbound links, file downloads, and 404 pages",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Dashboard panels: Outbound Links, Downloads, 404 Pages"
   },
   "check": "Clicking an outbound link, downloading a tracked file extension, or hitting a non-existent page produces a corresponding event in its dashboard panel",
   "source": "https://docs.pirsch.io/advanced/outbound-links; https://docs.pirsch.io/advanced/file-downloads; https://docs.pirsch.io/advanced/not-found-tracking"
  },
  {
   "id": "cap-24",
   "group": "Customization",
   "capability": "Create and apply custom white-label themes to a dashboard",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Theme settings page, Add Theme"
   },
   "check": "Opening the dashboard shows the configured logo, colors, and border radius instead of Pirsch defaults",
   "source": "https://docs.pirsch.io/advanced/theme"
  },
  {
   "id": "cap-25",
   "group": "Customization",
   "capability": "Serve the dashboard and tracking script from a custom domain",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Dashboard General settings, Custom Domain"
   },
   "check": "Visiting the configured custom domain over HTTPS serves the Pirsch dashboard with a valid SSL certificate",
   "source": "https://docs.pirsch.io/advanced/custom-domains"
  },
  {
   "id": "cap-26",
   "group": "Account",
   "capability": "Subscribe to or change a billing plan",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Billing settings page"
   },
   "check": "Account billing page reflects the newly selected plan (Standard/Plus) and page-view limit",
   "source": "https://pirsch.io/pricing; https://docs.pirsch.io/billing"
  },
  {
   "id": "cap-27",
   "group": "Account",
   "capability": "Request Enterprise setup (on-premise install, managed cloud, SAML SSO)",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Enterprise plan 'Request a Quote' (sales contact)"
   },
   "check": "Enterprise agreement delivers a self-hosted/on-premise Pirsch instance or SSO-enabled account per the signed quote",
   "source": "https://pirsch.io/pricing"
  }
 ],
 "attempts": [
  {
   "t": "00:30",
   "cap": "discovery",
   "capability": "robots.txt and aipref",
   "task": "Read robots.txt on pirsch.io, docs and dashboard",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "pirsch.io/robots.txt and docs.pirsch.io/robots.txt: 'User-agent: * / Disallow:' (allow all), no Content-Usage line; dashboard.pirsch.io/robots.txt returns the SPA HTML (no robots file)",
   "notes": "No Content-Usage header either"
  },
  {
   "t": "00:35",
   "cap": "discovery",
   "capability": "llms.txt, agent cards, AI catalog",
   "task": "Probe /llms.txt, /.well-known/ai-catalog.json, agent-card.json, oauth-protected-resource, openapi.json",
   "route": "api",
   "documented": true,
   "result": "failed",
   "verified": true,
   "evidence": "pirsch.io/llms.txt 404, docs.pirsch.io/llms.txt 404, /.well-known/ai-catalog.json 404, /.well-known/agent-card.json 404, api.pirsch.io/.well-known/oauth-protected-resource 404, api.pirsch.io/openapi.json 404",
   "notes": "No machine-readable spec; API v1 reference is a VitePress HTML page"
  },
  {
   "t": "00:40",
   "cap": "discovery",
   "capability": "Markdown docs",
   "task": "GET docs page with Accept: text/markdown and the .md URL",
   "route": "api",
   "documented": true,
   "result": "failed",
   "verified": true,
   "evidence": "docs.pirsch.io/integrations/mcp with Accept: text/markdown -> content-type text/html, vary: Origin; /integrations/mcp.md -> 404",
   "notes": ""
  },
  {
   "t": "00:50",
   "cap": "docs",
   "capability": "API docs",
   "task": "Read API v1 reference and guide",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "https://docs.pirsch.io/api-sdks/api-v1 lists ~150 REST endpoints (hit, event, session, statistics/*, domain, goal, funnel, link, webhook, report, traffic/warning, member, invitation, client, user/account incl. DELETE). Guide v1 explains clients (oAuth client vs write-only access key pa_), POST /api/v1/token, rate limits (X-RateLimit-*). API v2 page: 'work and progess and will most likely be released at the end of 2026'",
   "notes": "Docs say clients are created in the dashboard UI; no sign-up endpoint is documented",
   "quality": {
    "docs_match": "match",
    "docs_url": "https://docs.pirsch.io/api-sdks/api-guide-v1"
   }
  },
  {
   "t": "02:30",
   "cap": "discovery",
   "capability": "MCP server",
   "task": "Install the docs-linked MCP server @charpeni/pirsch-mcp 1.0.0 (stdio) and POST server/discover, then initialize, tools/list",
   "route": "mcp",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "server/discover -> supportedVersions ['2026-07-28'], serverInfo pirsch 1.0.0; initialize offering 2026-07-28 answered protocolVersion 2025-11-25; tools/list: pirsch_get_domain, pirsch_list_domains, pirsch_query_statistics",
   "notes": "Third-party (charpeni), linked from docs.pirsch.io/integrations/mcp; stdio only; read-only; needs an OAuth client id+secret from the dashboard. Installed in run dir (npm --prefix mcp)"
  },
  {
   "t": "01:10",
   "cap": "signup",
   "capability": "Sign up",
   "task": "Create an account at pirsch.io/signup with the agent's inbox",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "dashboard.pirsch.io/signup redirects to /login; 'Sign Up' leads to https://pirsch.io/signup: one email field plus an ALTCHA 'I'm not a robot' checkbox ('Protected by ALTCHA') before 'Create Account'. No sign-up endpoint in the API docs. Agent did not tick the 'I'm not a robot' box (that is a bot check).",
   "notes": "ALTCHA checkbox on sign-up",
   "quality": {
    "docs_url": "https://docs.pirsch.io/get-started/website-integration"
   }
  },
  {
   "t": "02:30",
   "cap": "verify",
   "capability": "verify",
   "task": "verify",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Email verification not reached: sign-up stopped at the ALTCHA checkbox",
   "notes": "behind the sign-up wall (ALTCHA)"
  },
  {
   "t": "02:30",
   "cap": "credentials",
   "capability": "credentials",
   "task": "credentials",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account, so no OAuth client or access key can be created (clients are made in the dashboard or with POST /api/v1/client, which needs an account token)",
   "notes": "behind the sign-up wall (ALTCHA)"
  },
  {
   "t": "02:30",
   "cap": "first_call",
   "capability": "The first call",
   "task": "The first call",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Authenticated call not possible without a client; unauthenticated GET /api/v1/billing -> 401 {\"error\":[\"the token is not a valid bearer token\"]}",
   "notes": "behind the sign-up wall (ALTCHA)"
  },
  {
   "t": "02:30",
   "cap": "first_action",
   "capability": "The first action",
   "task": "The first action",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Nothing created: no account",
   "notes": "behind the sign-up wall (ALTCHA)"
  },
  {
   "t": "02:30",
   "cap": "credentials",
   "key": "create",
   "capability": "Create a scoped key headless",
   "task": "Create a scoped client via POST /api/v1/client",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "POST /api/v1/client is documented (scopes scope_hit, scope_event, scope_statistics, ... read/write) but needs a user client token; no account",
   "notes": ""
  },
  {
   "t": "02:30",
   "cap": "pay",
   "capability": "Pay step public probes",
   "task": "Read pay_probe.json/pay_tx.json; probe 402 on api, /.well-known/ucp, auth.md, x402. subdomain, billing docs",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "pay_probe: no 402 challenges, no registry listings, trial quote 'free 30-day trial with no credit card required'; pay_tx: refused, 'no 402 on the product's own domain asks for USDC'. api /api/v1/billing 401 (no 402); /.well-known/ucp 404; /auth.md 404; x402.pirsch.io serves the dashboard SPA (wildcard). docs.pirsch.io/billing: 'This will take you to our checkout page. Payments, subscriptions and credit card numbers are handled by Stripe'; cancel 'click the ... button. This will take you to the Stripe portal'. GET /api/v1/billing is a read-only usage report",
   "notes": "Hosted Stripe checkout; no agent rail; trial without card"
  },
  {
   "t": "02:30",
   "cap": "cancel",
   "capability": "Cancel plan",
   "task": "Cancel a plan",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "Not tested: no plan or trial was started. docs.pirsch.io/billing: cancel via the Stripe portal; marking the account for deletion cancels the subscription",
   "notes": "Per docs"
  },
  {
   "t": "02:30",
   "cap": "delete",
   "capability": "Delete account",
   "task": "Delete the account",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account was created. Docs: POST/DELETE /api/v1/user/account 'deletes the entire user account after a one week grace time' with a user client",
   "notes": "nothing to delete"
  }
 ],
 "stale": false,
 "icon": "/logos/pirsch.png",
 "monitored": false,
 "verdict": "Needs a person · L1 stops our agent cold. It read the public docs headlessly, then reached pirsch.io/signup and hit an ALTCHA \"I'm not a robot\" checkbox: our agent does not tick a bot check itself, and no sign-up API is documented, so verification, keys and the first call were never reached. The REST API behind that wall covers account work end to end, including deleting the account, and a third-party MCP server is linked from the docs. None of it was exercised: work done stayed at nothing. Paying runs through a hosted Stripe checkout, and the trial needs no card, but a person still has to get past the signup form first.",
 "page": "https://agentdrives.com/tools/pirsch?via=api"
}