Platform

Features

Everything Recova does. Organized by capability, tagged by product. Built to stay current as the platform grows.

Automation

Everything that runs without you doing anything. Recova processes failed payments, sends emails, retries charges, handles disputes, and alerts you. All on schedule, all automatically.

soft decline: 7 steps
EmailDay 1
RetryDay 2
EmailDay 3
EmailDay 7
EmailDay 14
RetryDay 21
EmailDay 30
Hourly recovery processingRecovery

Picks due recovery steps and executes them every hour. No delay beyond one hour from any scheduled step.

Hourly dispute processingDisputes

Checks dispute deadlines, fires reminders, auto-submits evidence, cleans up closed disputes.

Hourly win-back processingRecovery

Executes win-back email steps on schedule. Intelligence-prioritized accounts send at 1 hour; others at 4 hours.

Daily expiring card alertsRecovery

Finds every card expiring within 30 days each morning and emails the customer with a Stripe Billing Portal link.

Nightly intelligence scoringIntelligence

Computes health scores and recommended actions for every customer nightly.

Nightly MRR snapshotsIntelligence

Pulls subscription data from Stripe and computes MRR, NRR, GRR, and movement waterfall. Updated every 24 hours.

Monthly recovery billingPlatform

Invoices 20% of payments recovered in the prior month on the 1st of each month.

Monthly audit auto-runAudit

Re-runs your Stripe diagnostic on the 1st of each month and emails you the results. Toggle on in Settings.

Monday unified digestPlatform

Weekly email covering recovery stats, open disputes, and Intelligence high-risk customers.

Nightly demo resetPlatform

Rebuilds all demo account data nightly. Demo accounts never touch live Stripe.

Cron overlap preventionPlatform

Mutex lock per cron via cron_locks table. Overlapping runs are blocked, not queued.

Stale cron alertingPlatform

check-cron-health fires every 6 hours. If any cron has not run within its expected window, you are alerted.

Intelligence

What Recova figures out on its own: about your customers, your payments, and how to handle both.

205082red below 34, amber 34-66, green at or above 67.
Decline classificationRecovery

Maps every Stripe decline code to one of four categories: soft, network, expired, fraud. Different category, different sequence.

Fraud decline detectionRecovery

Fraud-category declines suppress retry steps and flag the customer in Intelligence for dispute risk assessment.

Customer health scoringIntelligence

0-100 score per customer derived from three independent bands: engagement health, recovery history, and customer value.

7 recommendation typesIntelligence

Every customer gets one: personal outreach, continue automated, continue automated (priority), continue automated (deprioritize), accept loss dispute, expansion outreach, or win-back priority.

AI recovery email generationRecovery

Claude Sonnet writes each email. Claude Haiku runs a quality audit pass. Em dash strip, timing-word removal, and a hard strip pass run before send.

AI dispute triageDisputes

0-100 fight/accept score with confidence percentage and reasoning, derived from prior charge history, authentication signals, and dispute reason code.

AI audit summaryAudit

Haiku-generated 2-3 sentence plain-English diagnostic summary at the top of every audit result.

AI nightly analystIntelligence

Haiku writes a plain-English assessment of every at-risk customer nightly. Explains the risk and what the recommended action means in context.

Cross-product dispute signalDisputes

When a dispute closes, won/lost counters and last_dispute_outcome write to customer_context.dispute_signals. Intelligence uses this in scoring.

Fraud to dispute risk flagRecovery

Fraud-category decline writes fraud_decline_flag and fraud_decline_code to customer_context.recovery_signals. Dispute triage reads this as a risk signal.

Dispute loss to recovery suppressionDisputes

Lost dispute sets recovery_suppressed_retries on the customer. Recovery cron skips retry_ steps for suppressed customers. Email steps continue.

Intelligence to recovery deprioritizationIntelligence

continue_automated_deprioritize recommendation delays email steps 48 hours. Applied at cron time. Retry steps are unaffected.

Win-back priority timingIntelligence

winback_priority customers receive their first win-back email at 1 hour. All others receive it at 4 hours.

Card Account Updater advisoryAudit

Audit detects when Stripe's Card Account Updater is available but has not fired for expiring cards. Flags as advisory with count of affected cards.

Renewal noise filteringRecovery

is_renewal_noise flag on failed_payments. Prevents duplicate sequences on Stripe's own retry events.

Email and communication

How Recova communicates with your customers, and how you control what it says.

Per-category email sequencesRecovery

Soft, network, expired, and fraud each receive different email sequences. Timing, tone, and retry strategy differ by decline type.

AI-written subject linesRecovery

Each email gets an AI-generated subject line tuned to the decline category and customer history.

Brand voice configurationRecovery

Set the tone for recovery emails per decline category, or globally. Stored in Settings then Brand Voice.

Merchant contextRecovery

Add a plain-English description of your product. Recova uses it in email copy and dispute evidence.

Fallback templatesRecovery

If Claude fails, a category-appropriate fallback email sends. Sequences never stall on an AI failure.

Custom body overrideRecovery

Any pending email step can have its body replaced before it sends. Editable from the payment detail timeline.

Open and click trackingRecovery

Every sent email tracks opens, clicks, time-to-open, send hour, and send day of week via Resend webhooks.

Email suppressionRecovery

email_suppressions table checked before every send. Bounced, complained, or unsubscribed addresses never receive a recovery email.

Resend retry with backoffRecovery

Three send attempts with 1s/2s exponential backoff on failure. Sentry captures on final failure. Sequences do not silently stop.

Win-back email sequencesRecovery

Three-step post-cancellation sequence (step 1 at 1h or 4h, step 2 at 4 days, step 3 at 14 days).

Expiring card emailRecovery

Templated email with a Stripe Billing Portal link. Unique constraint prevents duplicate alerts per (customer, card, expiry).

Weekly unified digestPlatform

Monday morning email: recovery stats, open disputes, and Intelligence high-risk customers. One email, all products.

Dispute deadline remindersDisputes

Reminder emails at 3 days and 1 day before the dispute evidence deadline.

List-Unsubscribe headersPlatform

All outbound emails include RFC 8058 List-Unsubscribe headers for CAN-SPAM compliance.

Signed unsubscribe tokensPlatform

Unsubscribe links use signed tokens. Clicking adds the address to email_suppressions immediately.

Visibility

Everything you can see: across your payments, sequences, customers, disputes, and platform health.

Recovery rate
26.6%
Recovered
$6,884
Recovery dashboardRecovery

Stat cards, ROI widget, 5 charts, recovery queue, deliverability panel. Range: 7d / 30d / 90d / all.

Recovery rate chartRecovery

Cumulative area chart. Rate never exceeds 100%. Color threshold: green at or above 36%, amber 21-35%, red below 21%.

Recovery timing chartRecovery

Bar chart showing when-in-sequence recoveries occur. How many recover on step 1, step 2, and so on.

Email category chartRecovery

Open rate and click rate per decline category. Shows which category your customers respond to most.

Decline breakdownRecovery

Category distribution with per-category recovery rate and sparklines.

Payment detail timelineRecovery

Every step in a payment's sequence: scheduled, sent, pending. Exact timestamps, results, and email preview.

Email preview in timelineRecovery

Full subject line and rendered email body visible on every completed email step.

Sequence performance pageRecovery

Grouped bar chart showing open/click/recovery rate per email step number across all sequences.

Disputes dashboardDisputes

Open disputes, triage scores, deadline proximity, historical win rate. Intelligence health badge per customer.

Dispute evidence stagingDisputes

Full evidence panel before submission: prior charges, emails, AVS/CVV/Radar signals, 3DS, structured evidence JSON.

Intelligence dashboardIntelligence

MRR, NRR trend, MRR movement waterfall, portfolio health distribution, monthly AI narrative.

Customer health indexIntelligence

All customers sorted by health score ascending. Worst-health customers surface first.

Customer detail pageIntelligence

Health sparkline (30-day), signal cards, IntegrityLayerBanner, AI assessment, recovery history link.

Churn risk pageIntelligence

High/medium/healthy band summary, churn rate trend chart (90 days), high-risk customer table sorted by MRR.

MRR movement waterfallIntelligence

New, expansion, reactivation vs contraction, churn. Week by week.

Audit results pageAudit

Four scopes: failed invoices, expiring cards, open disputes, business health. AI summary at top.

Expiring cards timelineAudit

Bar chart grouping upcoming card expirations by month. Peak risk month highlighted in red.

Audit historyAudit

Authenticated accounts see all past audit runs at /audit/dashboard with persistent historical results.

Platform status in HelpPlatform

Live cron health (last-run timestamps + green/amber/red status) visible at /help.

Admin webhook logPlatform

Full webhook event log with filter, errors-only toggle, and JSON expand.

Admin audit logPlatform

Last 100 admin actions with actor, action, and metadata.

Cron health tablePlatform

All 15 crons with last-run status in /admin/operations.

Control

What you can configure, override, or stop. Recova runs automatically. You have explicit control over everything it does.

Sequence pause and resumeRecovery

Pause any active recovery sequence from the payment detail page. Resume when you're ready.

Sequence cancelRecovery

Cancel a sequence permanently. No further steps will run.

Trigger immediate retryRecovery

Insert an immediate retry step for any payment in an active sequence.

Override next stepRecovery

Replace the next scheduled step with a different step type.

Resend email stepRecovery

Re-queue any email step by clearing its execution state.

Custom email bodyRecovery

Replace the AI-generated body on any pending email step before it sends.

Manual payment recoveryRecovery

Trigger a Stripe invoice retry manually from the payment detail page.

Payment notesRecovery

Add a note to any payment visible in the timeline.

Submit dispute evidenceDisputes

Review staged evidence, edit the uncategorized text field, attach files, and submit to Stripe.

Accept disputeDisputes

Close a dispute without submitting evidence. No Recova fee on accepted disputes.

Dispute auto-submit toggleDisputes

Enable automatic submission 24 hours before the deadline for all fight-recommendation disputes.

Dismiss recommendationIntelligence

Clear an Intelligence recommendation for a customer.

Snooze recommendationIntelligence

Defer recalculation of an Intelligence recommendation by N days.

Customer notesIntelligence

Add freeform notes to any Intelligence customer record.

Audit lookback daysAudit

Configure the lookback window (default 90 days) for your Stripe diagnostic.

Audit auto-run toggleAudit

Enable monthly auto-run in Settings. Audit runs on the 1st and emails you results.

Processing pausePlatform

processing_paused flag on your account suspends all cron activity immediately.

Alert thresholdsPlatform

Configure metric alerts (11 metrics) with custom thresholds, directions, and channels (email or Slack).

Email settingsPlatform

Sender name, reply-to address, and notification email per Stripe account.

Brand voiceRecovery

Per-decline-category tone configuration. Influences AI email generation.

Merchant contextRecovery

Product description and ships-physical-goods flag. Used in email copy and dispute evidence.

Theme togglePlatform

Dark/light mode toggle in nav and Settings. Persists to DB for authenticated users, cookie for unauthenticated.

Team seatsPlatform

Unlimited team seats. Add members from Settings then Team.

Integration

How Recova connects to your existing stack. Read-only by default. Never touches your billing configuration.

Stripe Connect OAuthPlatform

Read-only OAuth connection to your Stripe account. Connects in under 60 seconds.

Multi-account supportPlatform

Connect multiple Stripe accounts. Pricing is per connected account. Switch between accounts from the nav.

AES-256-GCM token encryptionPlatform

All Stripe access tokens encrypted at rest in stripe_connections table.

Stripe webhook processingPlatform

Handles invoice.payment_failed/succeeded, subscription events, and charge.dispute.* events.

Resend email deliveryPlatform

All outbound emails sent via Resend. Delivery, open, click, bounce, and spam events tracked via webhook.

MCP Merchant connectorPlatform

Full platform access via Claude.ai. OAuth 2.1 with PKCE S256. 50+ tools across Recovery, Disputes, Intelligence, and Audit. URL: mcp.recovamrr.com/mcp

MCP Admin connectorPlatform

Platform-wide admin access via Claude.ai. Separate endpoint, admin OAuth scope only. URL: mcp.recovamrr.com/mcp/admin

OAuth 2.1 authorization serverPlatform

Full RFC 8414 + RFC 9728 + RFC 7591 compliant authorization server. PKCE S256 enforced. Authorization codes single-use, 10-minute expiry.

Refresh token rotationPlatform

Every refresh token use issues a new refresh token. Old token invalidated.

API keysPlatform

SHA-256 hashed API keys with merchant/operator/admin scopes. Manage from Settings then API Keys.

Anthropic APIPlatform

Claude Sonnet for email generation and dispute evidence. Claude Haiku for quality audits and nightly analyst.

SupabasePlatform

PostgreSQL + Auth + Row Level Security. All 39 tables have RLS enabled.

VercelPlatform

Auto-deploy from GitHub main. Edge network.

SentryPlatform

Error tracking with source maps. All cron failures captured.

UpstashPlatform

Rate limiting on public API routes.

Security and compliance

What protects you, your customers, and your Stripe data.

Read-only Stripe scopePlatform

Recova requests read-only Stripe Connect access. It reads your data. It never writes to or modifies your Stripe configuration.

Row Level SecurityPlatform

RLS enabled on all 39 Supabase tables. No query can access data outside the authenticated account.

AES-256-GCM encryptionPlatform

All Stripe access tokens encrypted at rest. Decrypted only in memory during cron execution.

Stripe webhook verificationPlatform

All incoming Stripe webhooks verified with constructEvent signature verification. Replay window enforced.

Resend webhook HMACPlatform

Resend delivery events verified with HMAC-SHA256 signatures.

CRON_SECRET validationPlatform

All 15 cron routes validate CRON_SECRET header. Direct HTTP execution blocked.

PKCE S256 enforcedPlatform

OAuth authorization codes require code_verifier proof. Interception attacks blocked.

Single-use authorization codesPlatform

OAuth codes expire in 10 minutes and are invalidated on first use.

Refresh token rotationPlatform

Every token refresh issues a new refresh token and invalidates the old one.

Admin scope double-gatePlatform

Admin OAuth scope: requires isAdminEmail check on consent page UI and again on the API route. Neither alone is sufficient.

Rate limitingPlatform

Upstash rate limiting on audit endpoint and public API routes.

CAN-SPAM compliancePlatform

List-Unsubscribe headers, signed unsubscribe tokens, email_suppressions table, physical address in all commercial emails.

WCAG 2.2 compliancePlatform

66 contrast pairs audited, 0 failures, no exemptions. prefers-reduced-motion, prefers-contrast: more, and forced-colors all implemented.

CVD accessibilityPlatform

Error token adjusted from #e05252 to #db5757 for deuteranopia simulation compliance. Green/amber distinction uses icon+label, not color alone.

Disposable email blocklistPlatform

Disposable email domains blocked at signup.

Platform

The infrastructure and data layer underneath everything.

39 database tablesPlatform

Full schema: accounts, stripe_connections, failed_payments (42 columns), recovery_steps (24 columns), disputes (44 columns), customer_context (23 columns), mrr_snapshots (21 columns), audit_runs (31 columns), and 31 more.

15 cron jobsPlatform

All 15 running. Scheduled from hourly to monthly. Full status visible at /help.

Network Intelligence LayerPlatform

outcomes table records every material event across all products. Foundation for cross-product scoring and benchmarking.

Cross-product integration pointsPlatform

29 documented integration points between Recovery, Disputes, and Intelligence. Dispute outcomes affect Intelligence scoring. Fraud declines suppress recovery retries. Intelligence scores affect dispute triage.

Outcomes tablePlatform

Every recovery, dispute, and intelligence event written to outcomes for cross-product pattern learning.

Demo systemPlatform

Two demo accounts (Teamflow, Bolt Analytics) with 200 realistic customers each. Full surface parity with live accounts. Nightly reset.

AI cost trackingPlatform

ai_calls table tracks every Anthropic API call with model, tokens, and cost. Per-account and platform-wide views.

Benchmark dataPlatform

benchmark_data table aggregates cross-merchant patterns. Empty until real merchant volume accumulates. Foundation for industry benchmarks.

A/B test infrastructurePlatform

ab_test_group field on failed_payments, ab_variant field on recovery_steps. Infrastructure ready for sequence testing.

Soft deletesPlatform

deleted_at on failed_payments and recovery_steps. Records preserved for audit trail.

Renewal noise filteringPlatform

is_renewal_noise flag prevents duplicate sequences on Stripe's own retry events.

Last visited pathPlatform

accounts.last_visited_path and last_visited_product. Authenticated users return to where they left off.

See what your Stripe account is leaking. Free diagnostic, no account required.

Run your free audit