Plain-language questions
Ask for failed payment recovery rate per month, customer or product in the SQL Explorer with AI. The AI writes the SQL, you see the query and run it yourself; the AI only receives metadata.
KPI · Subscriptions and SaaS
Failed payment recovery rate is the number (or value) of failed subscription payments you still collect within a set period, divided by all failed payments. Payments fail because of an expired card, insufficient funds or a reversed direct debit, for example. Every unrecovered payment risks becoming an involuntary cancellation.
Recovered failed payments ÷ all failed payments × 100%
In August, 80 payments worth €7,600 in total fail at Acme's subscription service. Within thirty days, 52 are paid after all, worth €5,320. Recovery rate by count is 52 ÷ 80 × 100% = 65%, and by value €5,320 ÷ €7,600 × 100% = 70%.
Fictitious figures for Acme Groothandel, a sample wholesaler.
A higher recovery rate means fewer customers leave unintentionally because a payment went wrong. Compare it by payment method and failure reason, and track it after changes to your reminder emails or retry schedule. A gap between count and value shows whether you mainly win back large or small payments.
SQL & DAX
Two examples on a fictitious data warehouse for Acme Groothandel: a PostgreSQL query and a measure for a Power BI model. Adjust table and column names to your own model.
SELECT date_trunc('month', failed_at) AS month,
COUNT(*) AS failed_invoices,
COUNT(*) FILTER (WHERE recovered_at IS NOT NULL) AS recovered,
ROUND(100.0 * COUNT(*) FILTER (WHERE recovered_at IS NOT NULL)
/ NULLIF(COUNT(*), 0), 1) AS recovery_rate_count_pct,
ROUND(100.0 * SUM(amount) FILTER (WHERE recovered_at IS NOT NULL)
/ NULLIF(SUM(amount), 0), 1) AS recovery_rate_value_pct
FROM invoices_failed
WHERE failed_at < current_date - interval '30 days'
GROUP BY 1
ORDER BY 1;Recovery Rate (count) =
DIVIDE(
CALCULATE(COUNTROWS(FailedInvoices), NOT ISBLANK(FailedInvoices[recovered_at])),
COUNTROWS(FailedInvoices)
)
Recovery Rate (value) =
DIVIDE(
CALCULATE(SUM(FailedInvoices[amount]), NOT ISBLANK(FailedInvoices[recovered_at])),
SUM(FailedInvoices[amount])
)In ENABLE
Ask for failed payment recovery rate per month, customer or product in the SQL Explorer with AI. The AI writes the SQL, you see the query and run it yourself; the AI only receives metadata.
Define the KPI as a measure in your Power BI model and show it in the portal, with "Last refreshed" next to it. Access profiles and optional row-level security decide who sees which figures.
Add the KPI as a tile to a custom dashboard, compared with last year. The Dashboard Builder is a pilot and can be switched on per client.
With the built-in Targets app you set a target for the KPI per month, so you see actuals and target side by side.
FAQ
Divide the number of failed payments collected within a set period by the total number of failed payments in the same period. With 120 failed and 84 recovered payments, recovery rate is 70%. Calculate it by value as well.
Involuntary churn is the loss of customers who did not cancel themselves, but whose payment failed and was not recovered. Think of an expired credit card or a blocked direct debit. A higher recovery rate directly reduces involuntary churn.
Common measures are automatic retries at different times, reminder emails with a direct payment link, warning customers before their card expires and offering an alternative payment method. Measure how many extra payments each measure recovers. Many payment providers and subscription billing systems have settings for this.
In an online demo we show how ENABLE makes your data securely available and how you build on it: describing an app in the AI Builder, plain-language questions, dashboards and APIs. And how we set it up and manage it for you.