Recurring revenue movement explorer for subscription billing

By General Input

See how recurring revenue moved across any month or quarter, split by new, expansion, contraction, churn and reactivation, with the customers behind every bar.

Integrations

  • Chargebee
  • Google Sheets
  • Slack Bot

Type

App

Categories

  • Finance
  • Operations

Build me an app that explains how our recurring revenue moved over a period, using our Chargebee subscription billing data. Chargebee's own reporting will not break recurring revenue into movement types, so our finance lead rebuilds this in a spreadsheet every single month. The audience is finance and leadership, so every screen has to be readable by someone who did not build it.

The main view is the movement explorer. At the top I pick a period: a calendar month, a quarter, or a custom start and end date, plus a currency. Below that, show a waterfall that starts at opening recurring revenue for the period and ends at closing recurring revenue, with bars in between for new, expansion, contraction, churn and reactivation. Under the chart, repeat the same figures as a summary table with net new recurring revenue and the percentage change from opening to closing.

Handlers compute the movement from Chargebee's List Subscriptions, List Customers, List Invoices and List Item Prices. The buckets come from comparing subscription state and mrr across the period boundary: a subscription that activated inside the period is new; an existing subscription whose mrr went up is expansion, counting only the increase; an existing subscription whose mrr went down is contraction, counting only the decrease; a subscription cancelled inside the period is churn; and a previously cancelled subscription that is active again is reactivation. Use List Customers to resolve names and emails for display, and List Invoices to sanity check what was actually billed inside the period.

Every bar in the waterfall is clickable. Clicking opens a drill-down table of the exact customers and amounts sitting behind that bucket: customer name, subscription, item price, amount before, amount after, the difference, and the date the change happened. Sort by the size of the change descending so the largest movers are at the top, and let me search and re-sort the table. This is the whole point of the app. When contraction spikes I want to see which accounts downgraded and by how much rather than guessing.

A second view is a comparison: two periods side by side, for example this quarter against last quarter, showing each movement bucket for both plus the difference between them. In this view, segment the movement by plan using item prices from List Item Prices, so I can tell which plans are genuinely growing and which are quietly shrinking. Each plan row expands to the customer level the same way the waterfall bars do.

Any finished table, in either the drill-down or the comparison view, can be exported to Google Sheets using Append Values, appending to a spreadsheet and tab I choose so the board pack builds up over time. From the main view I can also post the headline movement summary, meaning opening, each movement bucket, closing and net change, to a leadership channel using Slack Bot's Send a Message, with a short preview before it sends.

Platform nuance to bake in. Chargebee money amounts are integers in the currency's smallest unit, so divide before display and never sum across currencies blindly: either filter to one currency or group by currency. Timestamps are Unix epoch seconds and support operator suffixes like updated_at[after], which is how the handlers should scope a period. This is a Product Catalog 2.0 site, so segment by item price rather than legacy plans. List endpoints page via next_offset with a limit of up to 100, and live sites cap around 150 calls per minute, so page deliberately and back off on rate limit errors.

Compute a period once on the server and cache the result, keyed by period and currency, so clicking through bars and drill-downs reads the cached computation instead of refetching Chargebee on every click. Show when the figures were last computed and give me a refresh button. Remember my last selected period, currency, export spreadsheet and Slack channel between visits.

Related prompts

Explore more prompts
Call overdue Xero customers with an AI collections agentLocal listing health board for every location you manageLet support send one-off Loops emails without an engineerA brand asset library your marketing team actually searchesTurn Mailjet email clicks into ranked HubSpot follow-upsClean out the Looker dashboards and Looks nobody opensStop cold emails to anyone with a live deal in PipedriveLiveKit live operations console for room moderationWake up dormant Keap leads with a researched reasoniMessage campaign console with pre-flight checks and delivery board