- Agent-Ready SaaS Index
Methodology
How we score 25,000 SaaS for agent-readiness
Public methodology for the Agent-Ready SaaS Index. Every dimension, weight, threshold, and well-known endpoint we probe is documented here. Companies who think their score is wrong can appeal.
What we mean by “agent-ready”
A SaaS is agent-ready when an autonomous AI buyer — acting on its own credentials, with no human in the loop — can complete the six-step purchase flow:
- Discover the price — pricing URL resolves with public numbers.
- Select a plan — at least two differentiable tiers visible.
- Pay per task — per-unit price published (not just per-seat or per-month).
- Avoid sales — at least one paid tier is self-serve.
- Read API docs without auth — public docs URL, no login wall.
- Estimate cost up front — per-unit × expected volume = forecastable spend.
Rubric — 7 dimensions out of 100, plus modifiers
Two weight schedules. Tier 1 (listing-derived) and Tier 2 (live pricing-page parse) score the same dimensions, but Tier 1 redistributes the unreachable per-unit weight to dimensions a directory listing can surface. Tier 2 is the canonical schedule.
| Dimension | Tier 1 | Tier 2 | What it scores |
|---|---|---|---|
public_pricing | 20 | 15 | Pricing page resolves with at least 2 differentiable tier cards visible. |
usage_based | 10 | 25 | Per-unit price published — $X / call, request, run, token, image, etc. Seat/period pricing does not count. |
self_serve_checkout | 22 | 15 | Self-serve CTAs ("Start free", "Sign up") on the paid tiers; no mandatory sales call for at least one tier. |
public_api | 22 | 15 | Public API documentation reachable without auth wall. |
low_minimum | 10 | 10 | Free tier OR lowest paid entry ≤ $10/mo. |
automated_payment_unauth | 16 | 10 | Anonymous purchase path advertised; partial credit when self-serve + per-unit are both present. |
machine_readable_pricing | 0 | +5 bonus | `/.well-known/ai-pricing.json` published with pricing structure. |
quality_modifier | +0..20 | — | Listing maturity boost from saasScore + ratings, gated on pricing_visible. |
ai_space_modifier | +0..5 | — | Small head-start for companies in the AI/agent space. |
pricing_visible AND tier_count >= 1 — popularity does not boost sales-led pages whose door is closed.Bands and thresholds
| Band | Tier 1 cutoff | Tier 2 cutoff | Public label |
|---|---|---|---|
| verified | ≥ 72 | ≥ 80 | Agent-Ready Verified |
| approaching | 65–71 | 65–79 | Approaching Agent-Ready |
| partial | 55–64 | 50–64 | Partially Agent-Ready |
| not_yet | < 55 | < 50 | Not Agent-Ready Yet |
Evidence tiers
Every score is accompanied by an evidence tier so readers know what was actually observed.
| Tier | Source | Signals captured | Score ceiling |
|---|---|---|---|
| Tier 1 | SaaSworthy listing data | pricing_visible, free_tier, sales_only, public_api flag | Up to ~75 reachable on listing data alone (without per-unit / anon-purchase). |
| Tier 2 | Live pricing-page fetch + parse + 11 well-known probes | per_unit_price, lowest_paid_entry, tier_count, agent_infra block | Full 0-100 range reachable. |
| Tier 3 | Manual / Playwright | JS-walled pages, post-purchase credentialing, idempotency from docs | Premium audit; not yet shipped. |
| Tier 4 | Claimed + xpay widget installed | Site publishes ai-pricing.json under their root | Manifest-verified — the strongest signal we recognize. |
Well-known endpoints we probe
Every Tier 2 scan probes 11 well-known endpoints. Probes use GET with body validation (not HEAD) so soft-404 responses don’t produce false positives. We align with the broader Cloudflare AGENTS framework on infrastructure-side checks, while keeping our score focused on the commerce slice (does an agent actually buy?).
| Path | Purpose | Validation |
|---|---|---|
/.well-known/ai-pricing.json | Machine-readable pricing manifest | Content-Type: json, parses as object, has tiers/models/prices/units/provider/products/plans/pricing key. |
/.well-known/agents.txt or /agents.txt | Agent directives (User-agent / Allow / Disallow / Pricing) | Text-like, contains at least one valid directive line, no soft-404 phrases. |
/.well-known/mcp/server-card.json | MCP Server Card (SEP-1649) | JSON object with serverInfo. |
/.well-known/agent-skills/index.json | Agent Skills index (Cloudflare RFC v0.2) | JSON with skills[] array. |
/.well-known/api-catalog | API Catalog (RFC 9727) | application/linkset+json with linkset[] array. |
/.well-known/openid-configuration or /.well-known/oauth-authorization-server | OAuth/OIDC discovery (RFC 8414) | JSON with issuer + authorization_endpoint or token_endpoint. |
/.well-known/oauth-protected-resource | OAuth Protected Resource Metadata (RFC 9728) | JSON with resource + authorization_servers[]. |
/robots.txt | Content-Signal directive (contentsignals.org) | Body matches Content-Signal[s]: regex. |
Site root with Accept: text/markdown | Markdown content negotiation (Cloudflare AGENTS) | Response Content-Type: text/markdown. |
/docs, /developers, /api, /reference (etc.) | First public API docs URL | 200 + body ≥ 200 bytes + title/h1 not "404"/"page not found"; auth-walled detected via login-prompt markers. |
Per-unit price detection
Per-unit pricing is the headline agent-readiness signal. We use a strict regex with a ±200-character context window to avoid false positives like seat or month pricing.
rejected):unit_class (token, api_call, task, query, lookup, message, media_unit, transcription, data_volume, compute_time, document, other) and an agent_task_price_forecastable verdict (yes / partial / no).Appeals and corrections
Scores are observational, not authoritative. If your scorecard is wrong, you have three paths:
- Quick correction — email hello@xpay.sh with the slug and the field that’s wrong (pricing URL, score, badge, diagnostic). We patch via the overrides JSON and ISR-revalidate within minutes.
- Delisting — request
hidden: truein the override file. We respect delisting requests within 48 hours; the slug returns 410 withX-Robots-Tag: noindex. - Improve your score — publish
/.well-known/ai-pricing.jsonand embed the xpay agent-checkout widget. That promotes you to Manifest-Verified — the strongest band — automatically on the next crawl.
Methodology version: v1.2-tier1 · Generated 2026-05-07 · Source code: xpaysh/xpay-agent-ready-index-setup · Rubric:
scripts/saasworthy/generate_scorecards.py · Parser: backend/agent-ready-index-setup/src/lib/parse-pricing-page.mjs
