You’ll set up two automations that reliably cut involuntary churn:
Renewal reminders (before a charge happens)
Dunning emails (after a payment fails)
What you’ll achieve
Reduce surprise renewals and card failures by warning customers and making payment updates painless
Recover failed payments with a respectful, well-timed sequence
Track impact with clear KPIs and an instrumentation checklist
Time and difficulty
Time: 2–5 hours for a first implementation, plus ongoing iteration
Difficulty: Intermediate (requires access to your subscription platform, ESP, and DNS)
Prerequisites
A subscription/billing platform (e.g., Shopify Subscriptions + Recharge, Stripe Billing)
An ESP that supports transactional emails (e.g., Klaviyo, customer.io) and domain authentication
Access to billing events (e.g., upcoming invoice, payment failure) and a way to embed secure “manage/update” links
Note on scope
Examples reference Shopify/Recharge and Stripe Billing, but the principles work for most ecommerce/SaaS stacks.
Definitions (keep it simple)
Renewal reminder (pre-charge): A transactional notice sent days before auto-renewal. Goal: disclose date/amount, let customers manage or update payment, and avoid surprises.
Dunning (post-failure): A short sequence sent after a payment fails. Goal: help customers quickly update payment and recover service without friction. For clarity on purpose and tone, see Stripe’s plain-language overview in Dunning emails 101 (2023–2025 resource).
Step 1 — Build your renewal reminder sequence (pre-charge)
Set up one sequence for monthly plans and a slightly longer one for annual plans. Treat the timing below as a starting point; adjust for your brand, grace periods, and plan types.
Monthly cadence (example)
7 days before charge
3 days before
1 day before (final reminder)
Annual cadence (example)
30 days before
14–10 days before
7–3 days before (final reminder)
What to include in each email
Subject lines (clear and transactional)
“Your [Plan] renews on [Date] — $[Amount]”
“Heads up: Renewal on [Date]. Manage or update payment.”
Above-the-fold essentials
Renewal date, amount, and plan name
Primary CTA: “Manage subscription” (pause/skip/change/cancel per policy)
Secondary CTA: “Update payment method” if your platform supports pre-emptive updates (great for cards near expiry; see Stripe’s guidance on managing expired cards for recurring payments, 2023)
Support channel (email/chat) and expected response time
UX and accessibility
Mobile-first, single clear CTA, and plain-text fallback
Descriptive link text; adequate contrast and readable sizes in line with W3C WCAG 2.1 guidance (2018)
Verify before you go live
Send to seed inboxes (Gmail/Outlook/Yahoo); confirm inbox placement and rendering
Click “Manage subscription” and “Update payment” from mobile and desktop; ensure deep links land the user in the right authenticated context
Check tracking: link parameters/ESP tracking work as intended without breaking secure flows
If X then Y
If complaints/unsubscribes spike: tighten transactional tone, reduce body length, and ensure the subject line clearly signals a billing notice
If open rates are low: re-check deliverability/authentication (see Step 3), and avoid sending during quiet hours
Step 2 — Build your dunning sequence (after a failure)
Align your emails to your billing platform’s retry logic so customers aren’t bombarded between automated retries.
Suggested cadence (adapt to your retry window)
Immediate notice (within minutes of failure): “We couldn’t process your payment — update your payment method.”
Follow-up 1 (Day 2–3): Reinforce deadline, include next retry date/time if known.
Follow-up 2 (Day 7–10): Final reminder before account pause/cancellation.
Optional final notice (if your policy calls for it): “Your subscription will pause/cancel on [Date] unless payment is updated.”
Content essentials
State the issue briefly: amount, invoice/plan, and what happens next
Primary CTA: “Update payment method” with a direct, secure link
Alternative methods: If you accept alternatives (PayPal, wallet), mention them
Consequences timeline: grace period → limited access → pause/cancel (keep it factual, not punitive)
Tone: helpful and respectful; Stripe recommends clarity over pressure in dunning messages (see their overview in Dunning emails 101)
Make payment updates frictionless
Stripe Billing: Use the customer portal link to take users straight to a secure payment update screen. Stripe’s card network tools (e.g., account updater, tokens) can reduce failures without user action; see the overview on expired cards for recurring payments (2023) for why this matters.
Recharge (Shopify Subscriptions): Use secure deep links such as Recharge Quick Action URLs to jump users directly into “update payment” in their portal; see the official guide to Creating Recharge Quick Action URLs.
Verify before you go live
Trigger a test failure and confirm the immediate email fires, links resolve, and the message aligns with your retry schedule
Confirm the grace-period logic and final-state automation (pause/cancel) match your policy and copy
Ensure your support team has macros/SLAs for payment issues
If X then Y
If failure recovery is low: enable or review card updater/network tokens (where available) and test alt payment methods
If users say links “don’t work”: re-check personalization tokens and authentication for portal deep links; add a plain URL fallback line
If customers feel spammed: shorten the sequence to 2–3 emails and align precisely to major retry attempts
Step 3 — Ensure deliverability and domain authentication (transactional domain)
Inbox placement is make-or-break for renewal and dunning notices.
What to configure
SPF and DKIM: Authenticate your sending infrastructure and message integrity
DMARC: Align the From: domain with SPF or DKIM and publish a DMARC policy; start with p=none for monitoring, then move toward quarantine/reject once stable
Optional: BIMI once DMARC enforcement is in place
Helpful references and why they matter
Mailgun’s primer explains why SPF/DKIM/DMARC are your “ID card” for sending and how to implement them in practice; see their overview on email authentication basics.
Valimail summarizes how DMARC alignment and enforcement can improve trust and inbox placement; see how DMARC improves deliverability.
If you use Klaviyo, set up a branded sending domain so your From: domain aligns properly; see Klaviyo’s guide on branded sending domains.
Verify
Send seed tests and confirm SPF/DKIM pass and DMARC alignment on headers
Test from your transactional subdomain specifically (e.g., notices.yourbrand.com)
Watch complaint rates and reply-to handling; keep transactional emails concise and non-promotional
Step 4 — Respect compliance (informational, not legal advice)
CAN-SPAM (US): Transactional emails must use truthful headers, non-deceptive subject lines, and include a physical address; if you mix in promotional content, the message may be deemed commercial and require opt-out handling. See the FTC’s CAN-SPAM Act compliance guide.
Negative Option Rule (FTC, 2024): Emphasizes clear disclosure of auto-renewal terms, easy cancellation via the same medium as sign-up, and recordkeeping. Review the 2024 final rule notice in the Federal Register: Negative Option Rule.
GDPR/PECR (EU): Transactional notices typically rely on performance of a contract or legitimate interests; avoid bundling marketing content without consent. Consult counsel for your jurisdictions.
Practical tips
Keep renewal and dunning emails strictly transactional in tone and content
Always show an obvious manage/cancel path consistent with your policy
Step 5 — Measure impact and iterate
Track both outcomes and process health.
Core KPIs and formulas
Renewal Rate = Renewed customers ÷ Customers up for renewal × 100
Use server-side events (e.g., paid invoice/renewal success, payment failed) to attribute outcomes
UTM-tag “Manage subscription” and “Update payment” links when it does not add friction or leak sensitive context; rely on ESP link tracking otherwise
Maintain cohorts: monthly vs. annual, by plan, by retry outcome, and by segment (e.g., high LTV)
Verify
Dashboards reflect cohorts “up for renewal” vs. “renewed” by week
You can segment recovery by failure reason (expired vs. insufficient funds) to guide experiments
Practical example: segment and attribute your renewal/dunning program
Attribuly can support segmentation and measurement for Shopify/DTC stacks by syncing ecommerce events and cohorts to your ESP.
Disclosure: Attribuly is our product.
What this looks like in practice
Build cohorts like “up for renewal in 7 days” and “payment failed in last 3 days” off Shopify/Stripe events, then sync to Klaviyo for tailored reminders and dunning.
Use branded, trackable links for “Manage subscription” and “Update payment” to see which messages/segments drive successful renewals.
Compare Renewal Rate and Dunning Recovery Rate for exposed cohorts vs. your pre-program baseline.
Simulate real billing events and verify the full loop from trigger to conversion.
Payment flow testing (Stripe Billing)
Use test mode and official test cards (e.g., insufficient funds, expired card) to simulate failures and recoveries; see Stripe’s canonical list in their testing overview and test cards (updated regularly).
Use Test Clocks to advance time and trigger renewals/failures without waiting; confirm webhooks fire and emails send on schedule.
Inbox and rendering
Seed Gmail/Outlook/Yahoo addresses and confirm inbox placement on your transactional subdomain
Check mobile and dark-mode rendering; ensure plain-text fallbacks match the HTML content
Link and security checks
Verify deep links (e.g., Recharge Quick Action URLs) resolve to the correct customer context and load over HTTPS
Add a plain URL fallback below buttons in case images/HTML are disabled
Accessibility quick pass
Ensure sufficient color contrast, single-column layout on mobile, descriptive link text, and alt text for any informative images, echoing WCAG 2.1 guidance
Troubleshooting playbook (If X then Y)
Low inbox placement
Re-check SPF/DKIM pass and DMARC alignment (Step 3). Reduce frequency and promotional wording. Test from a transactional subdomain.
High rate of soft/hard declines
Enable card account updater/network tokens where supported; emphasize the “Update payment method” CTA in reminders; consider alternative payment methods.
Users report broken or generic links
Audit personalization tokens and secure portal links; include a secondary plaintext URL; test on mobile and desktop.
Complaint/unsubscribe spikes
Shorten the cadence, clarify the billing purpose in the subject line, and make manage/cancel paths obvious.
Sequence not firing
Check event mapping (upcoming invoice, payment failure), ESP flow filters, suppression lists, and any quiet-hour rules.
Next steps
Launch the renewal reminder flow for monthly and annual plans, then add the dunning sequence aligned to your retry logic. Baseline your KPIs, ship, and iterate every two weeks based on recovery and complaints data.