Billing & Subscriptions — procurement report
ProductArena · rankings as of 2026-09-15 · evidence as of 2026-09-15 · 7 products · 53 judged requirements · 371 judged cells
Methodology: Every product is judged against a shared taxonomy of user stories using cited evidence — hands-on probes > repository code > independent community sources > vendor claims — never opinion. Full writeup: https://ultrametric.ai/productarena/methodology
Leaderboard
| # | Product | PA Score | Coverage score | Applicable cells | Confidence |
|---|---|---|---|---|---|
| 1 | Lago | 45.6 | 29.4 | 52/53 | B |
| 2 | Chargebee | 29.0 | 23.6 | 53/53 | B |
| 3 | Stripe Billing | 28.2 | 29.0 | 50/53 | B |
| 4 | RevenueCat | 26.3 | 20.1 | 50/53 | B |
| 5 | Metronome | 20.7 | 18.6 | 50/53 | B |
| 6 | Recurly | 18.9 | 20.2 | 51/53 | B |
| 7 | Orb | 17.6 | 23.9 | 49/53 | C |
PA Score = agent-readiness blend (see methodology). Coverage score = weighted share of judged requirements met. Confidence = how much of the score rests on tested vs claimed evidence (A–D).
Uncertainty note
The current #1/#2 gap in this arena is not close enough to qualify for the multi-judge uncertainty pass (or the pass has not covered it yet) — no extra caveat applies beyond the per-product confidence grades above.
Buyer checklist (RFP)
The arena's 53 judged user stories as requirements, grouped by theme. Priorities mirror the story weights our scoring uses (3 = must-have, 2 = should-have, 1 = nice-to-have). Interactive version with per-requirement verdicts for the top products: /arena/billing-subscriptions/checklist
Agenticness — how well agents can access and operate the productAgenticness
How well agents can access and operate the product
- ai-native userPlug MCP servers into this product so it can use their toolsmust-have
- ai-native userConnect an agent via an official MCP servermust-have
- ai-native userDrive the product through a documented public APImust-have
- ai-native userDelegate tasks to a built-in AI assistant inside the productmust-have
- ai-native userPoint an agent at llms.txt or agent-oriented docsshould-have
- ai-native userRun the product headlessly / in CI for automationshould-have
- ai-native userUse an official CLIshould-have
- ai-native userIssue scoped/least-privilege API credentials for an agentshould-have
- ai-native userBuild against official SDKsshould-have
- ai-native userSubscribe to events via webhooksshould-have
- ai-native userGet AI-generated insights and suggestions from my data inside the productshould-have
- ai-native userSet up automations that run autonomously in the backgroundshould-have
- ai-native userOperate the product with natural-language commandsshould-have
- ai-native userExplore an interactive API reference with runnable examplesshould-have
- ai-native userDownload a machine-readable API spec (OpenAPI or equivalent)should-have
- ai-native userRely on versioned APIs with a documented deprecation policyshould-have
- ai-native userTest against a sandbox environment without touching production datanice-to-have
Automation depth — how much of the product can run unattendedAutomation depth
How much of the product can run unattended
- ai-native userDefine rules that trigger actions automatically on eventsmust-have
- ai-native userPerform bulk operations across many items at onceshould-have
- ai-native userSchedule recurring jobs or workflowsshould-have
- ai-native userVersion, review, and roll back my automationsnice-to-have
Billing agent access — stories about billing agent access in this arenaBilling agent access
Stories about billing agent access in this arena
- ai-native userAn agent can operate my billing — create a subscription, apply a credit, change a plan — through a programmatic surface with scoped permissionsmust-have
- ai-native userAn agent can answer questions about my billing state — MRR, delinquent accounts, upcoming renewals, a customer's invoices — by querying the platform directlyshould-have
Billing math — stories about billing math in this arenaBilling math
Stories about billing math in this arena
- finance leadMid-cycle upgrades and downgrades are prorated with documented, auditable math — credits, partial periods, and invoice line items that reconcile to the pennymust-have
- ops userControl billing anchors and cycles — calendar vs anniversary billing, alignment across a customer's subscriptions, custom invoice datesshould-have
Dunning recovery — stories about dunning recovery in this arenaDunning recovery
Stories about dunning recovery in this arena
- finance leadFailed renewal payments are retried automatically on an ML- or schedule-optimized cadence that measurably recovers involuntary churnmust-have
- ops userExpiring or replaced cards update themselves — network account updater, backup payment methods, and hosted update-payment pagesshould-have
- ops userConfigure automated dunning sequences — branded emails, in-app banners, grace periods, and final-state rules like cancel vs unpaidshould-have
Entitlements — stories about entitlements in this arenaEntitlements
Stories about entitlements in this arena
- developerFeatures and limits are modeled as entitlements attached to plans, and my application can check a customer's entitlements at runtime via API or SDKmust-have
- ops userChange pricing without breaking existing subscribers — versioned plans, grandfathering, and bulk migration tools for moving cohorts to new pricesshould-have
Invoicing tax — stories about invoicing tax in this arenaInvoicing tax
Stories about invoicing tax in this arena
- ops userThe platform generates compliant invoices, credit notes, and receipts — sequential numbering, custom fields, memos — delivered to customers automaticallyshould-have
- finance leadBill customers in their local currency with per-currency price points and consolidated reporting in my home currencyshould-have
- finance leadSales tax, VAT, and GST are calculated on every invoice — natively or through a first-class tax integration — with the right registrations and ratesshould-have
Migration portability — stories about migration portability in this arenaMigration portability
Stories about migration portability in this arena
- ops userMigrate live subscriptions in from a spreadsheet or a competing platform — including PCI-compliant card data transfer — without customers noticingmust-have
- finance leadExport every subscription, invoice, and usage record — and port stored payment methods out to another provider — if I choose to leaveshould-have
Openness — open source, data portability, and self-hosting storiesOpenness
Open source, data portability, and self-hosting stories
- ai-native userExport all of my data in open formats and leavemust-have
- ai-native userSelf-host the core productmust-have
- ai-native userDo everything through the API that I can do in the UIshould-have
- ai-native userRead the product's source under an open licenseshould-have
Privacy posture — data-handling and privacy storiesPrivacy posture
Data-handling and privacy stories
- ai-native userPrevent my data from being used to train AI modelsmust-have
- ai-native userChoose where my data is stored (region/residency)should-have
- ai-native userControl data retention and deletionshould-have
- ai-native userOpt out of telemetry and usage trackingshould-have
Revenue recognition — stories about revenue recognition in this arenaRevenue recognition
Stories about revenue recognition in this arena
- finance leadRevenue is recognized on an ASC 606 / IFRS 15 basis — deferred revenue schedules and audit-ready recognition reports straight from billing datamust-have
- founderI get MRR, churn, cohort retention, and LTV analytics computed from the billing source of truth, not a bolted-on BI exportshould-have
- finance leadInvoices, payments, and recognition entries sync to my general ledger or ERP — QuickBooks, Xero, NetSuite — so the close doesn't need CSV surgeryshould-have
Subscription lifecycle — stories about subscription lifecycle in this arenaSubscription lifecycle
Stories about subscription lifecycle in this arena
- developerCreate, update, pause, and cancel subscriptions through a documented API — the full lifecycle without touching a dashboardmust-have
- developerEvery subscription state change — renewal, upgrade, payment failure, cancellation — emits a webhook or event my systems can act on reliablyshould-have
- founderMy customers can upgrade, downgrade, or cancel themselves through a hosted portal or embeddable components, without a support ticketshould-have
- ops userRun free trials, coupons, and promotion codes with automatic conversion to paid — including trial-end notifications required by card-network rulesshould-have
Usage metering — stories about usage metering in this arenaUsage metering
Stories about usage metering in this arena
- developerStream high-volume usage events — API calls, tokens, compute-seconds — into a metering pipeline with idempotent ingestion and backdating supportmust-have
- finance leadPrice with tiered, volume, graduated, per-unit, and hybrid subscription-plus-usage models — including credits, commitments, and overage — without custom codemust-have
- ops userCustomers and my team can see current-cycle usage and accrued cost in real time, with thresholds and alerts before an invoice surprises anyoneshould-have
Appendix: recorded probes
Hands-on probe recordings — transcripts/videos a human can replay, the strongest evidence tier. Watch them at https://ultrametric.ai/productarena/proofs
- Chargebee
curl -si https://test.chargebee.com/api/v2/customers | grep -i 'HTTP/\|api_authentication' # keyless → 401 with Chargebee's api_authentication_required codeterminal · recorded 2026-09-14 · exit 0 - Chargebee
curl -si -X POST https://mcp.chargebee.com/mcp -H 'Content-Type: application/json' -d '<jsonrpc initialize>' # Chargebee's hosted MCP, OAuth-gated with a tool:invoke scopeterminal · recorded 2026-09-14 · exit 0 - Chargebee
curl -s https://raw.githubusercontent.com/chargebee/openapi/main/spec/chargebee_api_v2_pc_v2_spec.json | head -c 120terminal · recorded 2026-09-14 · exit 0 - Chargebee
curl -sL https://www.chargebee.com/llms.txt | head -3terminal · recorded 2026-09-14 · exit 0 - Lago
curl -s https://api.getlago.com/api/v1/customers # hosted API, keyless → {"status":401,"error":"Unauthorized"}terminal · recorded 2026-09-14 · exit 0 - Lago
curl -s -X POST https://getlago.com/mcp -H 'Content-Type: application/json' -d '<jsonrpc initialize>' # keyless MCP initialize completes — serverInfo comes backterminal · recorded 2026-09-14 · exit 0 - Lago
curl -s https://swagger.getlago.com/openapi.yaml | head -3terminal · recorded 2026-09-14 · exit 0 - Metronome
curl -si https://api.metronome.com/v1/customers | grep -i 'HTTP/\|errortype\|Unauthorized' # keyless → 401 UnauthorizedExceptionterminal · recorded 2026-09-14 · exit 0 - Metronome
curl -s https://docs.metronome.com/openapi.json | head -c 150terminal · recorded 2026-09-14 · exit 0 - Orb
curl -s https://api.withorb.com/v1/customers # keyless → 401 with a docs-linked error bodyterminal · recorded 2026-09-14 · exit 0 - Orb
curl -sL https://docs.withorb.com/llms.txt | head -3terminal · recorded 2026-09-14 · exit 0 - Recurly
curl -si https://v3.recurly.com/accounts -H 'Accept: application/vnd.recurly.v2021-02-25' # versioned keyless call → 401 Bearer challengeterminal · recorded 2026-09-14 · exit 0 - Recurly
curl -si -X POST https://mcp.recurly.com/mcp -H 'Content-Type: application/json' -d '<jsonrpc initialize>' # the Compass public MCP server Recurly documentsterminal · recorded 2026-09-14 · exit 0 - Recurly
curl -sL https://recurly.com/llms.txt | head -3terminal · recorded 2026-09-14 · exit 0 - RevenueCat
curl -si https://api.revenuecat.com/v2/projectsterminal · recorded 2026-09-15 · exit 0 - RevenueCat
curl -s https://www.revenuecat.com/docs/tools/mcp.md | head -5terminal · recorded 2026-09-15 · exit 0 - RevenueCat
curl -si -X POST https://mcp.revenuecat.ai/mcp -H 'Content-Type: application/json' -d '<jsonrpc initialize>'terminal · recorded 2026-09-15 · exit 0 - Stripe Billing
curl -si https://api.stripe.com/v1/subscriptions | head -4 # the subscription-lifecycle API, keyless → 401terminal · recorded 2026-09-14 · exit 0 - Stripe Billing
curl -sL https://docs.stripe.com/llms.txt | head -3terminal · recorded 2026-09-14 · exit 0 - Stripe Billing
curl -si -X POST https://mcp.stripe.com/ -H 'Content-Type: application/json' -d '<jsonrpc initialize>' # the remote MCP server Stripe documents at docs.stripe.com/mcpterminal · recorded 2026-09-14 · exit 0 - Stripe Billing
curl -s https://raw.githubusercontent.com/stripe/openapi/master/openapi/spec3.json | head -c 200terminal · recorded 2026-09-14 · exit 0
Cite as: ProductArena by Ultrametric Inc, Billing & Subscriptions arena, rankings as of 2026-09-15 — https://ultrametric.ai/productarena/arena/billing-subscriptions
License: © 2026 Ultrametric Inc. Brief quotation of individual verdicts, scores, or evidence excerpts is permitted with attribution to "ProductArena by Ultrametric Inc (ultrametric.ai/productarena)", as is use of the data to evaluate, contest, or contribute corrections. Bulk copying, redistribution, or use to build competing datasets requires prior written permission (see DATA-LICENSE in the repository).
No liability: rankings, verdicts, and scores are research outputs derived from the cited evidence at a point in time, provided "as is", without warranties. Ultrametric Inc accepts no responsibility for procurement, purchasing, or other decisions made in reliance on them — verify against the cited evidence before acting (https://ultrametric.ai/productarena/terms).