Both ends of the retention stack

Both ends of the retention stack: the engine that watches and decides, and the surfaces your customers actually see. Checkout in early access closes the loop.

Five things keep users. Nobody sells them together.

So you wire up four vendors, skip the fifth because it doesn't exist at any price, and your customers are gone by day three anyway.

Service worker

Workbox — free, if you know what one is

No service worker means no install prompt, no offline, no push. Chrome blocks Add to Home Screen silently if it's missing.

Push infrastructure

OneSignal — a pipe

VAPID keys, subscription churn, payload encryption, token rotation, iOS quirks. It sends what you tell it, and assumes you know what to send.

Behavioural analytics

PostHog — diagnoses only

Shows you the curve dying, in beautiful detail. Does nothing about it.

Lifecycle retention

Braze — $50k/year

Built for marketing departments. Needs staff to operate. Won't return your email.

"Do I have PMF?"

nobody — at any price

Which segment of your customers actually sticks, and should you go buy more of them? No tool answers this.

Works where your customers are: web and PWA fully; the same line inside WebView-wrapped iOS/Android builds; React Native via a headless core. And for everything else — Swift, Kotlin, Flutter, Unity, your backend — a plain HTTP API: if it can make a web request, it can be measured. (Automatic plays are JS-side today; server-side plays are on the roadmap, and we say so rather than pretend.)
One integration. All five — and checkout on the way. No charge until $2,500/mo tracked revenue.
It runs on autopilot: sensible defaults, tuned per user, tapering on its own. The best setting is the one you never touch.

Launch faster with pre-built, configurable templates.

Don't design a habit loop. Pick one that already works.

Every business that installs Retain teaches the network which play saves which kind of user in which kind of business. Business number 1,001 inherits all of it on day zero, with no data of its own.

hook fires only if drifting we go quiet — habit carries them
What you can tune — no code
Retain.init({ appKey: "rk_live_…", template: "daily_ritual" }). These are not mockups. Pick one, publish it today, change it later from the dashboard without an app update.

This is what your customers see. Pick a look.

Finished components, not a design task: the hook card, the streak badge, the progress mirror. One accent colour makes it yours. A polished card says "real product", a homemade toast says "side project".

Your 6-day streak is safe until midnightOne session keeps it alive.
Pick it back upNot now
Clean ui: { theme: "clean" }
Still unfinishedYou were mid-run. It's exactly where you left it.
Jump back inNot now
Midnight ui: { theme: "midnight" }
37 plays, best streak 6That took real time to build.
One more runNot now
Neon ui: { theme: "neon", accent: "#00ffff" }

Plus the mountable widgets, streak badge and progress card, in the same look. The styling is remote-configurable: restyle every card your customers see without releasing an update.

Pick it. Then make it yours.

Every play is a starting point, not a cage. Tune it without touching code, and every change is measured against the holdout, so you find out whether your edit actually helped or you just liked it better.

  • The copy, your voice, not our defaults
  • The timing, when a hook arms, how long it waits, when it gives up
  • The thresholds, what counts as drifting for your business
  • The taper, how fast we back off as the habit forms
  • Fork any template and A/B it against the original. If yours wins, it becomes yours.
  • Publish remotely. Every knob above changes server-side. Your customers get the new play on their next visit, no app update.

Your edits teach everyone. Anonymously.

When a customer's variant outperforms the standard template across enough businesses, it graduates into the library, credited, never containing a single one of your customers.

That's the difference between a preset and a platform: the library improves through use rather than through release cycles.

Coming: publish your own plays. If a growth consultant builds a template that works, they should be able to sell it, and we take a cut, not the credit.

The templates get smarter. Your team does not have to.

Each play carries the difference it actually made across every business of your type, and the number is proof, not coincidence, because a random slice of users always gets nothing at all. That's how you know it actually worked.

You can't build this alone: you have one business's worth of data. Competitors can't copy it: they have no network. Every customer makes it better for every other customer.

Nobody's identity ever crosses an app.

There is no global users table. A user exists only as (app_id, uid). The same human in two Retain apps is two unrelated rows with no key to join on.

Cross-app identity isn't disallowed by our policy, it's unrepresentable in our schema. The network learns from behavioural shapes. Never from people.

Maximise revenue with A/B testing.

Learn what drives growth with remotely configurable experiments and full-funnel analytics, and unlike anyone else's A/B tool, every play here ships with its own control group, so every number you see is proof, not coincidence.

Test anything. Remotely.

Change the copy, the timing, the thresholds, the taper, no code, no app update. Fork a template and run it head-to-head against the original.

  • Every variant measured against users we left alone, so a win is a real win
  • Full-funnel: drift → hook → return → revenue, not just opens
  • We tell you when the sample is too small to call, no coin-flip verdicts

Optimise for every audience

Your customers aren't one crowd. Retain segments them by behaviour, and each segment gets the play that works for people like them.

  • Ritualists, daily rhythm, streak-driven. Streak plays land hard.
  • Weekenders, 7-day rhythm. Pinging them on day 2 gets you uninstalled.
  • Sprinters, intense start, fast decay. Day-1 anchor or they're gone.
  • Ghosts, installed, never activated. No hook fixes this; we tell you what will.

Every interaction makes the whole network smarter.

Each event any app sends sharpens the templates for every other business, which play, for which segment, in which kind of business, proven against a holdout. You join with one business's worth of data and inherit a thousand businesses' worth of lessons. That's what your free tier buys the community, and what the community pays you back.

Your data leaves as easily as it arrives

Every event is yours. Export the raw table as CSV or JSON from the dashboard at any time, or read it straight from the HTTP API. No lock-in, no export fee, and one call erases everything we hold. The API docs are public.

Targeting the users who respond

Standard churn prediction answers "who is likely to leave". That is the wrong question, because it includes users who were leaving no matter what you did, and users who would have stayed if you had said nothing. Acting on that list wastes money in both directions.

The right question is who changes behaviour when reached. Answering it requires comparing users who received a play against users who did not, on the same play, at the same time. We collect that comparison by default, permanently, on every business running Retain.

Send less, keep more

When you only reach the group that responds, message volume falls sharply and retention improves at the same time. Those two usually move in opposite directions.

Stop causing your own churn

Some users leave because they were contacted. Left alone they would have stayed. No tool that lacks a control group can identify them, which is why over-messaging is the most common self-inflicted retention wound.

Spend where it works

The same logic applied to acquisition: buy more of the segment that responds and pays, stop buying the segment that does neither.

Resolution improves with volume. With a new business this reads at segment level using patterns learned across businesses of its type; with sustained data it sharpens toward the individual. The dashboard states which regime it is in.

What happened, what happens next,
and whether we were right last time

A dashboard nobody opens is worth nothing, which is the quiet way most analytics tools fail. So the main surface is a report that arrives. Half of it looks back at what your plays actually caused. The other half looks forward, because the same mathematics that measures a difference can predict one.

What worked, and what did not

Each play with its measured difference against the group left alone. Plays that produced nothing are listed as producing nothing, because that is the finding you can act on fastest.

Who responded

Which behavioural segments moved and which ignored it entirely. Over a few reports this stops being interesting and starts being an acquisition strategy.

Who leaves next, and who buys next

Named customers whose trajectory points out, ranked by value, while they are still recoverable. Alongside them, the ones whose behaviour matches your past buyers with the window still open.

What to run, and what it is worth

The play with the highest expected difference for that segment, the segments to leave alone, and the revenue sitting in the drifting group.

Every forecast is marked

Of the customers we said would leave last month, we tell you how many left. Of those we said would buy, how many bought. Of the difference we expected from a play, how much arrived. Almost no one grades their own predictions, because grading them requires holding a group back and comparing, and we already do that on every play. Where our accuracy is poor, the report says so and downgrades the recommendation rather than quietly repeating it.

Reports also state what the data cannot yet answer. Where volume is too thin for a conclusion it says so, rather than dressing a weak signal as a result.

Compass — who to keep, who to chase, who to stop paying for

Analytics tells you what happened. Compass reads your customers' behaviour and tells you which way to go. Every reading comes from events the SDK already collects; nothing extra to instrument.

Who your product is really for

Your customers split into behavioural segments, and usually only one of them flattens into a durable base. Compass names that segment, so acquisition spend goes toward the people who stay, and stops going toward the people who never will.

What your keepers did differently

The activation signature: what users who stayed did in their first session that the leavers didn't. That is the single change most likely to move your curve, read from behaviour rather than guessed.

Where you will plateau, weeks early

Your curve's shape, fitted against businesses like yours, gives a predicted floor at day 14 instead of day 90. If the honest answer is that the product is not holding yet, it says so.

One limit, stated plainly: Compass reads what people do, not what they say they want. We collect no content and run no surveys. Revealed preference is the more reliable signal, and it is the only one we sell.

You will never think about VAPID keys again.

Web push is the only channel that survives a closed tab, and setting it up is genuinely miserable. It is not "register a service worker and you're done."

What we take off your desk

  • Service worker registration, lifecycle, cache strategy, scope traps
  • VAPID key pairs, payload encryption, token rotation
  • Push subscription churn and silent expiry
  • The install prompt, fired at the right moment, which is a retention decision, not a UI one
  • iOS: push only works once a user adds to home screen. We're the thing that gets them there.
  • Platform changes, forever. That's our problem now.
7–15%

vs 1–4% for email

Installed-PWA push open rates against email, per send, the most effective re-engagement channel there is.

But only if you have a service worker, a valid manifest, HTTPS, and a user who installed. Miss any one and Chrome silently blocks the install prompt, and you never find out why.

That is the gap that quietly kills most businesses, and it closes when you install Retain.

See it running on your business

Evaluating it does not cost you a development week. The integration details are handled.

Request access