Measurement / prompt / Free to use
Payment Recovery Cohort Review Prompt
Turn a fixed-window recovery export into a structured evidence review, with explicit cohort checks, reconciliation, unknowns and a bounded next action.
Growthcraft Editorial ยท 2026-09-24. AI-assisted research and implementation. Examples are synthetic; Akshay's personal review is not claimed.
Copyable template
Select and copy the complete template below. With JavaScript enabled, you can edit, copy and download it in the interactive workspace.
ROLE: Skeptical billing-measurement reviewer, not a debt collector or autonomous billing operator.
OBJECTIVE: Explain a fixed-window failed-invoice recovery cohort and identify the next evidence needed.
NAMED INPUTS
SCOPE = {{currency, invoice type, first-failure cohort dates, extraction timestamp/timezone}}
CONTRACT = {{first failure, frozen balance, full-settlement definition, exclusions, window W}}
COHORT_JSON = {{aggregate calculator JSON in explicitly stated minor units}}
SOURCE_CHECKS = {{completeness, deduplication, cutoff checks, aggregate reconciliation}}
COMPARISON = {{optional prior cohort with identical contract; unknown if absent}}
PROPOSED_ACTION = {{policy change, owner, costs, customer guardrails, approval; unknown if absent}}
PRIVACY: Remove names, emails, card data, customer IDs, access tokens and private URLs. Use aggregate or synthetic evidence only.
METHOD
1. Check scope, currency and fixed observation age. Treat absent evidence as unknown, not zero.
2. Recompute mature count = within-window + late + unpaid and the same identity for balances.
3. Verify count and amount rates; return null for no mature invoices. Exclude ALL immature invoices, including early payments.
4. Keep late payments outside the W-day numerator. Do not confuse executed charges with scheduled attempts.
5. Separate observed recovery from incremental impact, retained MRR and profit. Never invent a benchmark or customer intent.
6. HOLD if the data contract or completeness is missing. INVESTIGATE if arithmetic and source checks pass but a decision-relevant uncertainty remains.
7. Do not send messages, charge cards, change retries or approve spend. Recommend evidence collection with a named owner, not an automated intervention.
OUTPUT valid JSON:
{"status":"HOLD or INVESTIGATE","scope_findings":[],"arithmetic":{"counts_balance":true,"amounts_balance":true,"count_rate":null,"amount_rate":null},"observations":[],"hypotheses":[],"blockers":[],"next_step":{"task":"","owner":null,"due_date":null},"limitations":[]}
Then write a maximum 120-word memo with evidence labels from the inputs.
RUBRIC: All six must pass: correct mature population; correct units/math; late/immature exclusions; facts separate from hypotheses; visible unknowns; no invented authority or sensitive details. Any failure requires revision.
REFINEMENT: Ask for the smallest missing aggregate evidence, update only affected conclusions, and list changes.
DEPENDENCIES: No browsing required when inputs are supplied. Use the deterministic calculator for arithmetic. Model outputs require human review; this prompt is not certified across all LLMs.Review evidence without running a billing workflow
Copy this prompt into an approved assistant or use it manually. It has no integration, does not run AI on this page and does not require a paid API. Its job is to expose incomplete measurement and unsupported conclusions. It is not permission to contact customers, retry payments or change a subscription.
Filled-in synthetic inputs
SCOPE: EUR renewals, failures during August 2026, cutoff 5 September UTC. CONTRACT: 30 days, first qualifying failure, fixed outstanding amount, full settlements only. COHORT_JSON: matureCount 4, recoveredCount 2, lateCount 1, unpaidCount 1; eligibleMinor 100000, recoveredMinor 30000, lateMinor 60000, unpaidMinor 10000; immatureCount 1, immatureMinor 10000. SOURCE_CHECKS: synthetic fixture complete; live export reconciliation unknown. COMPARISON: unknown. PROPOSED_ACTION: increase retries, owner and approval unknown.
Reference output, not a claimed model execution
{"status":"HOLD","scope_findings":["Synthetic EUR renewal cohort; 30-day window"],"arithmetic":{"counts_balance":true,"amounts_balance":true,"count_rate":0.5,"amount_rate":0.3},"observations":["2+1+1=4 mature invoices","30000+60000+10000=100000 minor units","Immature invoice excluded"],"hypotheses":[],"blockers":["No live source-completeness evidence","No evidence supporting a retry-policy change"],"next_step":{"task":"Reconcile failed-invoice export to the frozen cohort","owner":null,"due_date":null},"limitations":["Not a causal estimate or net-cash report"]}Example memo: The synthetic cohort balances in both counts and amounts. It shows 50% invoice-count recovery but 30% amount recovery within 30 days. The large late settlement remains outside that numerator, and the immature invoice remains outside the cohort. These observations do not prove additional retries will help. Hold the proposal pending source reconciliation and evidence about eligible failures.
Evaluation and refinement
Check the six criteria independently. An elegant memo fails if it counts the immature paid invoice or relabels 600 in late settlement as 30-day recovery. A model that invents a cause fails even when arithmetic is correct. The reference answer was checked against the calculator, not against a live LLM invocation.
For a second pass, supply an approved aggregate export reconciliation and a documented breakdown of failure eligibility. If completeness now passes, request a specific investigation and preserve unknown causality. Missing comparison data cannot be repaired by substituting a vendor marketing percentage. Keep the original and revised memo with the evidence versions.
Sources and boundaries
Primary documentation checked 24 September 2026: Stripe payment retries explains that scheduled attempts and executed charges can differ; Paddle Payment Recovery describes a default 30-day dunning period. Neither source validates this original cross-provider measurement convention or guarantees a recovery rate. Dates of these living pages are not stated. Check your actual account configuration.