23Peaks
← Case studies
Medical Aesthetics · SaaS

How The Social Spa cut subscriber churn from 22% to 9% with a custom behavior analytics engine.

We built ground-up user behavior telemetry, content performance dashboards, and an AI trend agent, so every monthly content drop starts from evidence instead of instinct.

Services
Data & InsightsProduct AnalyticsApplied AICustom Software
Stack
Next.jsSupabaseStripeVercelAlgolia
The content performance dashboard we built, showing a table of templates and trends with views, clicks, and downloads per piece of content. Titles and metrics anonymized.
Subscriber churn
Net Promoter Score
Cost of goods sold
Free-to-paid conversion
The situation

The Social Spa is a social media content subscription company that helps medical aesthetic providers take control of their digital marketing: social templates, stock images and video, and guides for running a clinic's online presence. Every month, they publish a new batch of content for members to put to work.

The business was doing well: over 2,000 monthly active members on a modern custom stack. But growth was leaking out the back door. Subscriber churn exceeded 22%.

The Social Spa logo
The problem

The team was relying on out-of-the-box telemetry from Microsoft Clarity and Vercel Analytics. Those tools could show traffic, sessions, and heatmaps. What they couldn't do was speak the language of the business.

The creative team was producing a full batch of new content every month with no way of knowing which of last month's content earned its keep. Four simple questions had no answers:

The decision

The obvious move was to add another analytics subscription. But general-purpose tools share the same blind spot: they instrument pages, not products. They'd never know what a template is, what a download means, or which member persona is engaging with which trend.

The Social Spa runs on a custom stack of Next.js, Supabase, Stripe, Vercel, and Algolia, which meant the behavioral data already flowed through systems they owned. The questions they needed answered were specific to their business; the system that answers them should be too.

So 23Peaks built it fully custom, from the ground up: telemetry that tracks user behavior in the platform's own domain language, with dashboards designed for the people making content decisions, not for analysts.

Next.js logo
Next.js
Application framework
Supabase logo
Supabase
Database & auth
Stripe logo
Stripe
Subscriptions & billing
Vercel logo
Vercel
Hosting & deployment
Algolia logo
Algolia
Search
What we built

The engine has four parts: an event tracking pipeline woven through the product, behavior profiles for every member, content performance dashboards for the creative team, and an AI agent that turns all of it into direction.

First-party behavioral telemetry built into the product itself. Every view, search, click, and download is captured in The Social Spa's own domain language: templates, trends, personas, and tiers.

Every member gets a living profile with their plan, status, activity heatmap, and full event timeline, so the team can see exactly how power users, at-risk users, and free-tier users actually behave.

Views, clicks, and downloads for every piece of content, sliceable by type, persona, and tier. Each monthly content drop becomes a measurable experiment.

An agent that ingests usage trends from the platform and monitors what's performing on social channels in the wild, guiding the creative team's decisions about what to make next.

A member behavior profile showing account details, plan and billing status, a year-long activity heatmap, and a timestamped event timeline. Member details anonymized.
Every member gets a behavior profile: plan, status, a year of activity at a glance, and the full event timeline behind it. Member details anonymized.
The content performance dashboard, listing every template and trend with views and clicks by member tier, filterable by content type, persona, and date. Titles anonymized.
Content performance, piece by piece: views and clicks split by free and paying members, filterable by type, persona, and date. Titles anonymized.
The results

With the engine live, the creative team stopped guessing. They doubled down on the content members demonstrably wanted, cut what nobody used, and let the AI trend agent point each monthly drop at what was working, both on the platform and in the wild.

Subscriber churn fell from over 22% to 9%, a 59% reduction visible directly in the billing data.

Stripe billing chart of subscriber churn rate falling from around 20% to 9.36% between December 2025 and March 2026.
Subscriber churn rate from the client's billing dashboard, down to 9.36% within a quarter of launch.

Subscriber churn fell from over 22% to 9% as the team doubled down on the content members demonstrably wanted most, measured directly in billing data.

More relevant content each month lifted satisfaction from a score that signals trouble to one that signals advocacy.

Contractor hours spent researching new content ideas dropped, because the data and the AI trend agent now do that research continuously.

A product built around what members actually use converted more free-tier users into paying subscribers.

Measurement note: churn and conversion are taken from the client's billing data. NPS was surveyed before and after the engagement. Cost of goods sold reflects reduced contractor hours spent researching new content ideas.

Why it worked

Generic analytics count page views. This engine counts template downloads, persona engagement, and content-type performance: the units the business actually makes decisions in. That's why the creative team could act on it immediately.

The audience wasn't engineers. It was the people deciding what content to make next month. Every dashboard answers one of the four questions they couldn't answer before, with no analyst in the loop.

Collecting behavior is half the job. The AI trend agent closes the loop by combining what members use with what's performing in the wild, then turns that into direction for the next monthly drop.

Similar problem?