Revenue protection for B2B SaaS

Know which customers are putting your revenue at risk.

Keep connects each customer's revenue, product usage and feedback so your team can act before a cancellation becomes lost MRR — and shows whether the account came back.

  • Never changes anything in your billing
  • See your first scan before you subscribe
Keep's Overview: $11,220.00 of revenue at risk across 8 accounts, $5,610.00 recovered, and the accounts that need attention, led by Acme Analytics — $3,240.00 MRR, Urgent risk, usage dropped 52%, NPS 3, renews in 4 days.
Keep's Overview · Example with demo data

The problem

Every tool knows part of the customer. None tells you who is leaving.

The signs that an account is about to cancel exist — they are just spread across four places, each answering a different question.

Billing

Knows what the customer is worth.

Doesn't know if they still use the product.

Analytics

Knows whether they're engaging.

Doesn't know what that account pays.

CRM

Knows who owns the account.

Doesn't know usage dropped this week.

Surveys

Knows what they think.

Doesn't know the score came from an account renewing in 4 days.

The question none of them answers alone

Which customers are putting revenue at risk right now — and why?

Keep replaces none of them. It brings their signals together around that question and shows your team where to act first.

How it works

Detect, understand, listen, act, recover.

One loop, from the first signal to the account coming back. Every step below is a real product screen.

01Detect

Revenue at risk, with the reason spelled out.

Every day Keep crosses product usage with what each account pays. Accounts that become at risk show up with the reason in words — not a score.

  • Explicit reasons: usage dropped X%, no activity for N days, no activity in 30 days, no visible usage and no recorded contact.
  • The silence threshold is learned from your own users' rhythm (3 to 30 days) and can be adjusted.
  • Revenue at risk is the current MRR of the accounts at risk, each counted once, per currency. Urgent means paying and renewing within 7 days.
Renewals at risk in the next 30 days and what revenue at risk is made of, by reason — usage dropped, no recent activity, no activity in 30 days, no visible usage and no contact — and by level.
Example with demo data

02Understand

Customer 360: the whole account on one page.

Why it is at risk, what it's worth, how it uses the product, what it said, who owns it and what is already being done — without opening five tabs.

  • “Why is this account at risk?”, with each signal: the drop, the last visit, the feature they stopped using, the last contact, the renewal.
  • Revenue (MRR, ARR, plan, invoices), product usage, a timeline and context from HubSpot and Intercom.
  • Ask the agent about the account, notify the team or open an issue right from the page.
Customer 360 for Acme Analytics: $3,240.00 MRR, urgent risk, owner Marina Costa, renews in 4 days, and the signals — usage dropped 52% from the previous week, stopped using reports, last contact recorded 23 days ago.
Example with demo data

03Listen

Feedback weighted by who answered.

NPS, CSAT, CES or custom surveys inside your product, with Keep's widget. Every answer lands next to the account's MRR, risk and renewal.

  • A builder with a live preview of the real widget: question, scale, follow-up question, appearance, audience and triggers.
  • An async widget of ~8 KB, in Shadow DOM, compatible with strict CSP and cookie-free. Identity verified with HMAC.
  • Create an issue from an answer, and see your highest-MRR detractors first.
Keep's NPS widget asking “How likely are you to recommend our product to a friend or colleague?”, with the 0 to 10 scale.
The widget, inside your product · preview

The same score, without context

3

NPS 3 · Detractor

A respondent

One more detractor in this quarter's average.

In Keep

3

Acme Analytics

NPS 3 · Detractor

MRR
$3,240
Risk
Urgent
Usage
down 52%
Renewal
in 4 days

Two facts side by side. Keep shows the score next to the account — it never claims one caused the other.

An NPS 3 answer from Acme Analytics with its comment and the account context: $3,240.00 MRR, renews in 4 days, urgent risk, usage dropped 52%.
Example with demo data

04Act

From alert to action, with no spreadsheet in between.

When an account becomes at risk, Keep alerts the team, opens the issue and starts the playbook for that kind of risk.

  • Playbooks per risk type — Renewal coming up, Usage drop, Customer went quiet, Never used it, No contact — started automatically and measured by recoveries.
  • Issues with two-way Linear sync. A repeated alert becomes a comment, and the issue closes itself when the account recovers.
  • Slack alerts with buttons, or email when Slack isn't connected.
The “Usage drop” playbook started automatically for Acme Analytics, 1 of 4 steps done, and issue CS-42 synced with Linear.
Example with demo data

05Recover

Revenue at risk on one side, recovered MRR on the other.

Keep records each account's risk day by day and shows who left it — so you know whether your team's work brought the revenue back.

  • Recovered MRR, recovered accounts and average time to recover.
  • Recovery rate, once there are enough ended episodes for it to mean something.
  • History starts when you connect — Keep doesn't invent the past.

Revenue at risk

The MRR of the accounts at risk today, each counted once.

Recovered

The account left risk and is still paying.

Never counts as a recovery

A cancellation. A closed issue. Only the account's state decides.

Recovery over the last 90 days: $7,640.00 of MRR recovered across 5 accounts, 20.2 days on average to recover, an 83% rate, and the recently recovered accounts.
Example with demo data

What's new

Keep your customers in the loop.

Announce new features and product changes inside your SaaS, then see who viewed and who clicked — next to the revenue, usage and risk Keep already shows for each account.

  • New feature, Improvement, Announcement or Maintenance: a title, a short text and, if you like, an image and a button. Save it as a draft, publish it, archive it.
  • Show it to everyone, to identified users, or only to certain plans or companies — decided on Keep's server from what your app passes to Keep.identify.
  • The same keep.js as the surveys. Any element with data-keep-updates opens the panel and gets the unread count.
  • Unique views, unique clicks, CTR and reactions (😞 😐 😍 or emojis) for each update — viewers never see counts, only their own pick. When a person is matched to an account, Customer 360 shows it in the account’s activity, as “Saw ‘Introducing AI Workflows’”.
Keep's What's new panel open inside a fictional app called Acme, with three updates: “Introducing AI Workflows” (New feature, with an image of the workflow editor, a Try it now button and the 😞 😐 😍 reactions), “Faster CSV exports” (Improvement) and “New data region in Frankfurt” (Announcement).
The real keep.js panel, over a fictional app · example data

One account, from what you ship to whether it stays.

  1. 01Announce

    You publish an update inside your product.

  2. 02Engage

    Who saw it and who clicked.

  3. 03Usage

    What the account does in your product.

  4. 04Feedback

    What they told you in a survey.

  5. 05Risk

    Whether the account is at risk, and why.

  6. 06Action

    The alert, the issue, the playbook.

  7. 07Recovery

    Whether it left risk and is still paying.

Highlighted: what product updates add. The rest is what Keep already shows for the account.

Each step is a separate fact about the same account. A click is engagement, not proof that anyone adopted the feature — and Keep never claims an update caused a recovery.

The Updates list in Keep: “Introducing AI Workflows” with 412 views, 97 clicks and a 23.5% CTR, “Faster CSV exports” with 688 views, “New data region in Frankfurt” with 903 views and 58 clicks, and a maintenance notice still in draft.
Example with demo data

Alerts

The alert arrives with the context — and the reply.

Every risk alert states the reason, the MRR at stake, the last visit, the renewal and the contact. The buttons record what the team decided, right in Slack.

Already talked to them
Silences the account for 14 days, or until it gets worse.
Not a risk
Only alerts again if the risk gets worse.
Remind me in 7 days
Parks the alert and brings it back in 7 days, or sooner if it gets worse.
cs-alerts

KeepAPP09:12

Account at risk · Acme Analytics
Usage dropped 52% last week. Stopped using reports, the feature it used most.

MRR at stake
$3,240.00/month

Last seen
2 days ago

Renewal
in 4 days

Contact
john@acmeanalytics.com

Already talked to themNot a riskRemind me in 7 days

Found by crossing product usage with your recurring revenue · Keep

Generated by the same code that sends the alerts · Example with demo data

Every alert

  • Cancellation
  • Downgrade
  • Payment failed
  • Trial ended without a card
  • Account at risk
  • Daily digest

Without Slack connected — or if delivery fails — alerts go by email. Cancellations and downgrades arrive in real time.

The same account is only mentioned again after an interval (14 days by default), unless it gets worse. A channel that shouts all the time is a muted channel.

Integrations

Connects to what you already use.

Keep doesn't replace Stripe, PostHog, HubSpot or Linear. It reads each one's signals and brings them together around retention.

Revenue

What each account pays, plan, renewal and changes. Never writes to your billing.

  • Stripe
  • AbacatePay
  • Asaas

Product usage

Who showed up, when, and in which feature.

  • PostHog
  • Keep API

CRM & support

Account owner, stage, last contact and open conversations.

  • HubSpot
  • Intercom

Communication

Where alerts arrive, with the reply buttons.

  • Slack
  • Email

Action

Issues synced both ways with your team, and your customer base kept current in Notion.

  • Linear
  • Notion

Feedback

NPS, CSAT, CES and custom surveys inside your app.

  • Keep widget

No PostHog? Send usage from your backend.

The Activity API takes one event per login or action, authenticated with your own key. Sending the stripeCustomerId makes the match with the paying account exact.

One event or a batch of up to 500. The feature field is optional, and it's what lets Keep say which feature an account stopped using.

POST /api/v1/activityup to 500 per request
curl -X POST https://usekeep.dev/api/v1/activity \
  -H "Authorization: Bearer kp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "stripeCustomerId": "cus_Q8f2…",
    "email": "john@acmeanalytics.com",
    "feature": "reports",
    "at": "2026-09-28T12:00:00Z"
  }'

Security

Built to read, not to touch.

Keep needs to see your revenue and your usage. What it does with that access is written below — no badge we don't have.

  • Never writes to your billing

    Reads subscriptions, invoices and plan changes. Never creates a charge, cancels or changes anything in Stripe, AbacatePay or Asaas.

  • Encrypted secrets

    Integration keys and tokens stored with AES-256-GCM.

  • Isolation in the database

    Row-level security on every table: each account only sees its own data.

  • Verified webhooks

    Stripe, Slack, Linear, AbacatePay and Asaas have their signature or token checked on every call.

  • Hashed API keys

    The Activity API key is shown once and stored only as a hash.

  • Your data, your call

    Export everything Keep stores as JSON, or delete your account. LGPD and GDPR in the privacy policy.

Getting started

From connecting to the first alert.

You see your at-risk accounts before you choose a plan.

  1. 1

    Connect revenue

    Stripe, AbacatePay or Asaas.

  2. 2

    Connect usage

    PostHog, or Keep's Activity API.

  3. 3

    See the first scan

    The accounts that were at risk in the last 30 days, with the reason and the MRR — before you pay.

  4. 4

    Choose a plan

    Every plan has the whole product. 14-day money-back guarantee.

  5. 5

    Turn on alerts

    In Slack or by email.

  6. 6

    Collect feedback and track recovery

    Publish a survey in your product and see which accounts left risk.

Pricing

You pay for the revenue Keep watches.

Your tier is the MRR we monitor, adding up what you charge across all your revenue sources — not your headcount. All three plans ship the whole product; what changes is how much revenue fits inside.

No contract, no lock-in. Connect your revenue, see the first scan of at-risk accounts, then subscribe — and cancel from your own dashboard whenever you want.

No cut-off

Going over your tier turns nothing off.

If your MRR grows past your plan's limit, we say so in the dashboard and suggest moving up. Nothing stops working. Cutting off a retention tool exactly when you're growing would be the worst possible moment.

Starter

$39

/month

For teams starting to watch revenue who want the first alert working today.

Up to $10,000 of monitored MRR


Up to 3 team members

Overview: revenue at risk, renewals and what changed

Accounts and Customer 360, with why each one is at risk

Slack and email alerts with the reason and the MRR at stake

Playbooks and issues, with two-way Linear sync

Recovery: the MRR that came back, account by account

NPS, CSAT and CES surveys inside your product

What's new panel inside your product, with views and clicks

Ask the agent about any account

Stripe, AbacatePay, Asaas · PostHog or API · HubSpot, Intercom

Subscribe

14-day money-back guarantee · Cancel anytime · All major cards

★ Recommended

Pro

$119

/month

For operations already losing large accounts that need to know who to call first.

Up to $50,000 of monitored MRR


Up to 5 team members

Overview: revenue at risk, renewals and what changed

Accounts and Customer 360, with why each one is at risk

Slack and email alerts with the reason and the MRR at stake

Playbooks and issues, with two-way Linear sync

Recovery: the MRR that came back, account by account

NPS, CSAT and CES surveys inside your product

What's new panel inside your product, with views and clicks

Ask the agent about any account

Stripe, AbacatePay, Asaas · PostHog or API · HubSpot, Intercom

Subscribe

14-day money-back guarantee · Cancel anytime · All major cards

Business

$249

/month

For larger revenue bases that want a direct line to whoever built it.

Up to $200,000 of monitored MRR


Up to 10 team members

Overview: revenue at risk, renewals and what changed

Accounts and Customer 360, with why each one is at risk

Slack and email alerts with the reason and the MRR at stake

Playbooks and issues, with two-way Linear sync

Recovery: the MRR that came back, account by account

NPS, CSAT and CES surveys inside your product

What's new panel inside your product, with views and clicks

Ask the agent about any account

Stripe, AbacatePay, Asaas · PostHog or API · HubSpot, Intercom

Direct support from whoever built it

Subscribe

14-day money-back guarantee · Cancel anytime · All major cards

Above $200,000 in MRR, talk to us.

Questions

Before you connect.

How does Keep detect that an account is at risk?

Every day Keep looks at each account's usage and what it pays. An account becomes at risk for an explicit reason: usage dropped (the last week fell below half of the one before), it has been inactive for longer than is normal for your base (a threshold learned from your users' rhythm, between 3 and 30 days, adjustable), it had no activity in 30 days, or it shows no visible usage and no recorded contact in the CRM. Usage is summed per company, so colleagues count. There is no machine-learning score: every at-risk account comes with its reason in words.

What is “revenue at risk”?

The current MRR of the accounts at risk right now, each account counted once, per currency — never converted. The Overview shows that number, how much of it renews in the next 7 days, and the accounts ranked by urgency: Urgent means paying and renewing within 7 days; then High, Medium and Low.

Does Keep change anything in my billing?

No. Keep reads subscriptions, invoices and plan changes and never creates, changes or cancels anything. With Stripe the connection goes through Stripe Connect — Stripe only offers a read-and-write permission, and Keep only ever reads. With AbacatePay and Asaas it's an API key, stored encrypted.

Where does product usage come from?

From PostHog (a read-only OAuth connection) or from Keep's Activity API, which takes events from your backend. Each event is matched to the paying account by stripeCustomerId, email or company domain. If you send the feature field, Keep can also tell which feature an account stopped using.

Can I run NPS inside my SaaS?

Yes. You build the survey — NPS, CSAT, CES or custom — in the builder, with a live preview, and install Keep's widget with a snippet. It loads asynchronously (~8 KB), runs in Shadow DOM, works with strict CSP and uses no cookies. You choose the audience (everyone, identified users, new users, plans or companies) and the trigger (immediately, after a delay, after page views, manually or on an event).

How does feedback connect to revenue?

Every answer sits next to the MRR, risk and renewal of the respondent's account. An NPS 3 from a $3,240/month account renewing in 4 days calls for a different action than an NPS 3 from a healthy account. Insights show revenue by answer type (each account counted once) and your highest-MRR detractors. Keep shows the facts side by side and never claims one caused the other.

Can I announce new features inside my product?

Yes. You write the update in Keep — New feature, Improvement, Announcement or Maintenance, with an optional button to an https link — and move it from draft to published to archived. It runs on the same keep.js snippet as the surveys: Keep.init with your workspace's public key and updates: true, and any element with data-keep-updates (or Keep.showUpdates()) opens the panel. The audience — everyone, identified users, certain plans or certain companies — is decided on Keep's server from what your app passes to Keep.identify. Each update can have an image (PNG, JPG, WebP or GIF, up to 2 MB, served by Keep itself, with required alt text) and reactions — 😞 😐 😍, read as negative, neutral and positive sentiment, or 👍 ❤️ 🎉 🔥 👀; one per person, and viewers never see counts. For each update you see unique views, unique clicks, CTR and the reactions, and when a person is matched to an account, Customer 360 shows it in the account's activity. A click is counted as a click: Keep doesn't report it as adoption of the feature.

Which tools does Keep integrate with?

Revenue: Stripe, AbacatePay and Asaas. Usage: PostHog and Keep's Activity API. CRM and support: HubSpot and Intercom. Alerts: Slack and email. Action: Linear, with two-way sync. Feedback: Keep's own survey widget.

How does Keep measure recovery?

Keep records each account's risk state every day. An account is recovered when it leaves risk and is still paying — a cancellation never counts, and neither does closing an issue. The Recovery screen shows recovered MRR, recovered accounts, average time to recover and, once there are enough ended episodes, the recovery rate. History starts when you connect.

Does Keep replace my CRM or Linear?

No. HubSpot stays your CRM and Linear stays where the team works. Keep reads the account owner, stage and last contact from HubSpot and syncs issues with Linear both ways. Its job is to bring the signals together around retention, not to become one more place to maintain.

What data does Keep store?

Customers and subscriptions from your billing (name, email, MRR, plan and change history), activity days per user and company, survey answers (score, comment and, when identified, the respondent's email), views and clicks on your product updates, risk cases and history, issues, playbooks and your conversations with the agent. Integration secrets are encrypted. You can export everything as JSON or delete your account at any time, and the subprocessor list is public.

How much does it cost, and how do refunds work?

Pricing follows the MRR Keep monitors, and every plan has the whole product — the table above shows the amounts. There is no free trial: you connect, see the first scan with your own at-risk accounts, and only then choose a plan. If it isn't a fit, there's a 14-day money-back guarantee, and you cancel from the dashboard.

Find out which accounts are at risk before you subscribe.

Connect revenue and usage. The first scan shows the accounts at risk in the last 30 days, with the reason and the amount.

  • Never changes anything in your billing
  • First scan before the plan
  • 14-day money-back guarantee