Set up SaveMRR. Fast and clear.
Connect Stripe with a restricted API key. Most engines need zero code. Cancel Shield requires one small JS snippet. This guide covers every step.
Getting Started
Here's the big picture. SaveMRR connects to your Stripe account via a restricted API key, watches for failed payments and cancellation signals, then automatically sends recovery emails and shows cancel-save offers. Most engines (dunning, churn radar, win back) need zero code. Cancel Shield requires adding a small JavaScript snippet to your app to intercept cancel clicks.
Create your account
Go to app.savemrr.co and sign up with your email. Takes 30 seconds.
Paste your Stripe API key
We'll walk you through creating a restricted key with only the permissions we need. No full access required.
Configure your engines
Turn on the engines you want (dunning, cancel shield, win back, etc.), customize email templates, and set your preferences.
You're done
SaveMRR monitors your Stripe account 24/7 and takes action automatically. Check your dashboard anytime to see recovered revenue.
Stripe API Key Setup
SaveMRR needs a restricted Stripe API key to read your subscription data and send recovery actions. Here's how to create one:
Open Stripe Dashboard
Log in to your Stripe account. Click Developers in the left sidebar, then API keys.
Create a restricted key
Click Create restricted key. Name it something like "SaveMRR" so you know what it's for.
Set permissions
Set ONLY the permissions listed in the next section. Everything else stays at "None." This keeps your account safe.
Copy and paste into SaveMRR
Copy the key (starts with rk_live_). Go to your SaveMRR dashboard → Settings → paste it in the Stripe API Key field.
sk_live_). SaveMRR only needs a restricted key with limited permissions. Your key is encrypted with AES-256 and never stored in plain text.Stripe Permissions
When creating your restricted key, set exactly these permissions. Everything else should be "None."
| Permission | Access | Why we need it |
|---|---|---|
| Customers | Read | See who your customers are and their subscription status |
| Subscriptions | Read | Monitor active subscriptions and detect cancellations |
| Invoices | Read | Track payment failures and recovery attempts |
| Charges | Read | Understand payment history and failure patterns |
| Products | Read | Display correct plan names in emails and cancel flows |
| Prices | Read | Show accurate pricing in offers and discount flows |
| Coupons | Write | Create discount offers for cancel shield and win back |
| Promotion Codes | Write | Generate unique promo codes for retention offers |
| Customer Portal | Write | Enable card update pages for failed payment recovery |
| Webhook Endpoints | Write | Set up real time event listening for payment events |
Email Templates
SaveMRR comes with 17 pre-written email templates across all engines. Every template is customizable. Edit the subject, body, and timing to match your brand voice.
Dunning Emails (Failed Payment Recovery)
Automatically sent when a customer's payment fails. These are spaced out over days to recover the payment without annoying your customer.
- Email 1: Sent immediately after failure. Friendly heads-up.
- Email 2: Sent 3 days later. Reminder with update link.
- Email 3: Sent 7 days later. Urgency, subscription at risk.
- Email 4: Final notice before cancellation.
Pre-Expiration Alerts (Card Expiry)
Sent when a customer's card is about to expire. Catches the problem before the payment fails.
- 30-day warning: Early heads-up with one click card update link.
- 7-day warning: Urgent reminder.
- Expiry day: Last chance to update before payment fails.
Engagement Emails (Churn Prevention)
Sent to customers showing signs of disengagement, before they even think about canceling.
- Low-usage alert: "We noticed you haven't logged in recently"
- Feature highlight: Showcase features they haven't tried
- Check-in: Personal outreach from the founder
Win-Back Emails (After Cancellation)
Sent after a customer cancels. Timed sequence to bring them back with the right offer at the right time.
- Day 1: Acknowledgment + "door is always open"
- Day 7: Share what's new since they left
- Day 14: Special comeback offer (discount or extended trial)
- Day 30: Final reach-out
SaveMRR Widget
The SaveMRR widget is one small script that does two things:
- Cancel Flow: Shows a retention offer when a customer tries to cancel
- Login Tracking: Tracks when customers log in, powering the Churn Radar and Engagement Engine
1Add the script to your site
Copy this snippet and paste it into your site. This is the same code for every platform.
<script src="https://cdn.savemrr.co/w.js" defer></script>This loads the SaveMRR widget. It doesn't do anything visible yet. You'll activate it in Step 2.
Where to paste this on your platform:
| Platform | Where to paste |
|---|---|
| HTML / JavaScript | Paste before the closing </body> tag in your HTML file |
| React / Next.js | Add to your index.html, or paste in your root layout's <head> section |
| Vue / Nuxt | Add to your index.html, or use the nuxt.config head option |
| WordPress | Go to Appearance → Theme Editor → header.php, paste before </head>. Or use a plugin like "Insert Headers and Footers" |
| Webflow | Go to Project Settings → Custom Code → Footer Code, paste it there |
| Framer | Click the page → Settings → Custom Code → End of <body> tag |
| Bubble | Go to Settings → SEO/Meta Tags → Script/meta tags in header |
| Squarespace | Go to Settings → Advanced → Code Injection → Footer |
| Shopify | Go to Online Store → Themes → Edit Code → theme.liquid, paste before </body> |
| Other | Look for a "Custom Code", "Scripts", or "Header/Footer Code" option in your platform's settings |
2Initialize the widget after your customer logs in
After the script loads and your customer is logged in, call SaveMRR.init() with your API key and the customer's Stripe IDs. This activates both login tracking and the cancel flow.
SaveMRR.init({
key: "YOUR_API_KEY", // from Settings → Widget in your dashboard
customer: {
stripeId: "cus_...", // this customer's Stripe ID
subscriptionId: "sub_..." // this customer's subscription ID
}
});YOUR_API_KEY with your actual Widget API key. To find it: open your SaveMRR dashboard → click Settings in the sidebar → scroll to the Widget section → copy the key shown there. It looks something like wk_live_abc123...The stripeId and subscriptionId come from your own app's database. They're the IDs Stripe gave you when this customer subscribed. Your app already has these if you're using Stripe for billing.
3Trigger the cancel flow (when a customer clicks "Cancel")
When a customer clicks your cancel button, call this instead of immediately canceling:
SaveMRR.showCancelFlow({
stripeId: "cus_...", // this customer's Stripe ID
subscriptionId: "sub_..." // this customer's subscription ID
});This opens the cancel flow widget. It asks why they're leaving, shows a personalized offer, and handles everything. If they accept the offer, their subscription is saved in Stripe automatically. If they decline, normal cancellation proceeds.
What's required vs optional?
- Step 1 (script tag): Required. Loads the widget code.
- Step 2 (init): Required. Activates the widget with your API key and enables login tracking. Without this, the script does nothing.
- Step 3 (cancel flow): Optional. Call
showCancelFlow()when a customer clicks cancel. Skip if you only want login tracking.
How Login Tracking Works Behind the Scenes
When you call SaveMRR.init() with a customer's Stripe ID, the widget sends a single lightweight ping (~200 bytes) to SaveMRR. That's all it does on your customer's end. Behind the scenes:
What we store per customer
- Last seen date: When they last loaded your app
- Total sessions: How many times they've logged in
That's it. No page views, no clicks, no mouse tracking, no personal data beyond their Stripe customer ID.
Silent Churn Radar (runs every 6 hours)
Uses login data + Stripe signals to detect at risk customers:
- No login in 14 days → flags customer as at risk, sends re engagement email
- No login in 30 days → escalated alert, stronger email
- Card expiring → sends one click card update link before payment fails
- Subscription downgraded → sends check in email
- Cancel scheduled → sends save offer automatically
- Dispute filed → alerts you immediately
Deduplication built in: the same signal won't trigger duplicate emails within 14 days.
Engagement Engine (runs every 6 hours)
Uses login data to catch customers who signed up but aren't engaging:
- Never logged in after subscribing → activation emails at Day 1, 3, and 7
- Logged in once or twice but stopped → "you're almost there" onboarding nudge at Day 2
- Was active (10+ sessions) then went quiet → usage drop off re engagement email
All emails stop automatically if the customer starts engaging again or unsubscribes.
Privacy & Compliance
- No personal data collected: Only Stripe customer ID, last seen timestamp, and session count. No names, no emails, no IP addresses, no device fingerprinting.
- No cookies: The widget doesn't set any cookies on your customers' browsers.
- No third party sharing: Login data is never sold or shared. It stays in your SaveMRR account.
- GDPR compliant: Processing based on legitimate interest. Customer data can be deleted on request.
- No performance impact: One ~200 byte POST request per page load. Rate limited.
- DPA available: Data Processing Agreement on request for EU-based businesses.
Tier Availability
| Feature | Starter | Growth |
|---|---|---|
| Cancel Flow Widget | ✓ | ✓ |
| Churn Radar (Stripe signals) | ✓ | ✓ |
| Churn Radar (Login tracking) | . | ✓ |
| Engagement Engine | ✓ | ✓ |
| Login-based inactivity alerts | . | ✓ |
Custom SMTP (Optional)
By default, emails are sent through SaveMRR's built in email service. If you want emails to come from your own domain (recommended for better deliverability), set up custom SMTP.
Go to Settings → SMTP
In your SaveMRR dashboard, navigate to the Settings page and find the SMTP section.
Enter your SMTP details
Fill in these fields:
- SMTP Host: e.g.,
smtp.resend.com,smtp.sendgrid.net - SMTP Port: Usually
587(TLS) or465(SSL) - Username: Your SMTP username (often your email or API key)
- Password: Your SMTP password or API key
- From Email: e.g.,
billing@yourcompany.com - From Name: e.g., "YourCompany Billing"
Send a test email
Click "Send Test Email" to verify everything works. You should receive a test email within seconds.
Twilio SMS (Optional)
Add SMS as a recovery channel. When emails don't get a response, a well timed text message can recover the payment. This is optional but powerful.
Create a Twilio account
Go to twilio.com and sign up. You'll get a free trial with some credits to test.
Get your credentials
From your Twilio dashboard, copy these three things:
- Account SID: Starts with
AC - Auth Token: Your secret token
- Phone Number: The Twilio number you'll send SMS from (buy one for ~$1/month)
Add to SaveMRR
Go to Settings → SMS in your SaveMRR dashboard. Paste your Account SID, Auth Token, and From Number.
Send a test SMS
Enter your phone number and click "Send Test SMS" to verify it works.
Slack Notifications (Optional)
Get real time alerts in Slack when payments fail, customers are recovered, or someone cancels. Perfect for staying in the loop without checking the dashboard.
Create a Slack webhook
In Slack, go to your workspace settings → Apps → search for Incoming Webhooks → add it to a channel (e.g., #revenue-alerts).
Copy the webhook URL
It looks like: https://hooks.slack.com/services/T.../B.../xxx
Paste into SaveMRR
Go to Settings → Slack and paste the webhook URL. That's it!
Cancel Shield Offers
Cancel Shield intercepts cancellation requests and presents a tailored offer based on why the customer wants to leave. Here's how to configure your offers:
Cancellation Reasons
When a customer clicks cancel, they choose a reason. You can map each reason to a different offer:
- "Too expensive" → Offer a discount (e.g., 20% off for 3 months)
- "Not using it enough" → Offer a pause (1-3 months) instead of cancel
- "Missing features" → Show upcoming features or offer a call with the founder
- "Switching to competitor" → Offer an exclusive deal or extended trial of premium features
- "Other" → Default offer (discount or pause)
Setting Up Offers
Go to Settings → Cancel Shield in your dashboard. For each cancellation reason, you can configure:
- Offer type: Discount, pause, free month, or custom message
- Discount amount: Percentage off (e.g., 20%, 30%, 50%)
- Duration: How long the offer lasts (1 month, 3 months, forever)
- Headline & body text: What the customer sees
Win-Back Campaigns
When a customer cancels despite the cancel shield, the win back engine kicks in. It sends a timed series of emails over the next 30 days to bring them back.
How It Works
- Customer cancels their subscription
- SaveMRR automatically starts the win back sequence
- Emails are sent at Day 1, 7, 14, and 30 (customizable)
- Each email can include a different offer, escalating from gentle to compelling
- If the customer resubscribes, the sequence stops automatically
Configuring Win-Back
Go to Settings → Win-Back. You can customize:
- Email timing: When each email in the sequence sends
- Email content: Subject and body for each email
- Offers: Discount codes or free months to include
- Enable/disable: Turn individual emails on or off
Engine Settings
Each of SaveMRR's 6 engines can be turned on or off independently. Go to Settings → Engines to control them.
💸Revenue Rescue
Failed payment recovery with smart dunning emails and card update pages
📡Silent Churn Radar
Pre-expiration alerts that catch expiring cards before they fail
🛡️Cancel Shield
Intercepts cancellation and shows a save offer via the widget
💓Engagement Pulse
Re engagement emails for customers showing disengagement signals
🔄Win-Back Engine
Automated email sequences to recover customers after cancellation
🧠AI Cancel Insights
AI analysis of cancellation reasons to spot patterns and trends
Gift Coupons
SaveMRR can automatically create Stripe coupons and promotion codes for your cancel shield and win back offers. Here's how it works:
- When you configure a discount offer in Cancel Shield or Win-Back, SaveMRR creates a Stripe coupon automatically
- Each customer gets a unique, single-use promotion code, so there's no sharing or abuse
- Coupons are applied directly to the Stripe subscription, so you don't need to do anything manually
- All coupons and their usage are tracked in your SaveMRR dashboard
Still have questions?
Chat with the Churn Doctor on our homepage, email us at support@savemrr.co, or check the FAQ.
Get Started Free