Revenue

Subscription revenue health

Track MRR movement, churn, subscriptions that failed to renew, failed payments and refunds to separate genuine growth from collection problems.

  • What's our MRR movement this month?
  • How much churn was failed payments, not cancellations?
  • What's our refund and dispute rate?

The playbook

Headline MRR hides the mechanics. Growth built on new signups while existing customers churn is a very different business from growth built on retention, and involuntary churn (failed cards) is a fixable problem often misread as customers leaving.

Steps

  1. Prefer pre-computed metrics when available. If Polar is connected, polar.get_metrics returns MRR, ARR, and subscription counts as a time series — use it rather than recomputing from raw orders. Set interval to month for trend, day for a recent window.

  2. Pull the subscription base. stripe.list_subscriptions, polar.list_subscriptions or dodo_payments.list_subscriptions filtered by status. Count active, trialing, past_due, and canceled separately. past_due is the number to watch — those are customers who intend to pay but whose payment failed. On Dodo the equivalent state is on_hold, and cancel_at_next_billing_date: true marks subscriptions that are still active but already lost.

  3. Compute the MRR movement breakdown. Decompose the period's change into new, expansion, contraction, and churned MRR. A single net number is nearly useless; the composition is the analysis.

  4. Separate voluntary from involuntary churn. Cross-reference cancellations against failed payments — polar.list_payments and dodo_payments.list_payments (with status: "failed", which also returns the error_code) expose failed attempts directly; on Stripe, past_due and unpaid subscription statuses plus unpaid invoices serve the same purpose. Involuntary churn is a dunning and card-updater problem, not a product problem, and conflating them sends the team to fix the wrong thing.

  5. Net out refunds and disputes. polar.list_refunds and polar.list_disputes, dodo_payments.list_refunds and dodo_payments.list_disputes, or stripe.list_charges filtered to refunded. Gross revenue that ignores refunds overstates the business, and a rising dispute rate is an early warning worth surfacing on its own.

  6. Report. A monthly table: starting MRR, new, expansion, contraction, churn, ending MRR, plus active subscriber count and churn rate. Then flag the involuntary churn share and the refund rate.

Gotchas

  • All three APIs return integer minor units (cents, or the currency's smallest unit). Divide by 100 exactly once, and never sum across currencies without converting — report per currency if several appear.
  • Normalize billing intervals before summing. Annual plans must be divided by 12 to contribute to MRR. Summing raw amounts across monthly and annual plans inflates MRR badly, and it's the single most common error here.
  • Trials aren't revenue. Exclude trialing subscriptions from MRR; count them separately as pipeline.
  • cancel_at_period_end means still active. Those customers are still paying and still counted in MRR until the period closes — but they're the leading indicator of next month's churn, so report them separately.
  • Paginate fully. These list endpoints cap per page; a partial pull produces a confidently wrong MRR. Page until exhausted, or state the limit you applied.
  • If more than one billing provider is connected, do not add them together without checking whether they bill the same customers. Ask which is authoritative.

Sequel CLI

Install Sequel skills into your agent

One command connects your agent to Sequel and installs the Sequel skill, so it knows this playbook exists and reads it when a question matches. The CLI signs you in, provisions a scoped API key and writes the config for you.

Already have an MCP client?

https://api.sequel.sh/mcp

Point it at this URL and sign in when prompted, or send an API key from Settings as a Bearer token. Skills come with it; nothing else to install. Manual setup per client

  1. 1

    Install the Sequel CLI

    One line installs the latest CLI with whatever package manager you have.

    curl -fsSL https://sequel.sh/install | sh
  2. 2

    Sign in

    Authenticate in your browser and pick an organization.

    sequel login
  3. 3

    Install into your agent

    Writes the MCP config and installs the Sequel skill file for agents that support skills. Pick an agent from the list, or target one directly by its slug.

    sequel install
    • Claude Code
      sequel install claude-code
    • Claude
      sequel install claude
    • Cursor
      sequel install cursor
    • VS Code
      sequel install vscode
    • Windsurf
      sequel install windsurf
    • Zed
      sequel install zed
    • Codex
      sequel install codex
    • OpenClaw
      sequel install openclaw
    • Hermes
      sequel install hermes

FAQ

Frequently asked questions

What metrics define subscription revenue health?
Monthly recurring revenue, its growth rate, churn rate (both by count and by revenue), expansion revenue from upgrades, net revenue retention, and the ratio of new MRR to churned MRR. A business growing but losing more than it gains from existing customers has a structural problem even if MRR looks healthy.
What is net revenue retention and why does it matter?
Net revenue retention is the MRR from a cohort of customers at the end of a period divided by their MRR at the start, including expansion and excluding new customers. Above 100% means existing customers are growing faster than they churn. It is the most reliable predictor of long-term subscription business health.
What is the difference between customer churn and revenue churn?
Customer churn counts the percentage of customers who cancelled. Revenue churn counts the MRR lost to cancellations. A business where large accounts cancel has low customer churn but high revenue churn. Revenue churn is the number that matters for the income statement.
How do I calculate MRR from Stripe or Dodo Payments data?
Sum the monthly amount of all active subscriptions as of the measurement date. Divide annual plan amounts by 12. Exclude one-off payments and trials that have not converted. Stripe amounts are in minor units (pence, cents), so divide by 100 and report per currency separately.
Can an AI agent report subscription revenue health?
Yes. With Stripe or Dodo Payments connected, the agent computes MRR, churn, expansion, and net revenue retention for the requested period. Sequel provides both payment connections over MCP and the subscription-revenue-health playbook.

Put this playbook to work

Connect a source, ask the question, and the agent follows these steps. Free to start.