+2
Product Analytics

Is our retention curve flattening

Do users keep coming back, or do they drift away after the first week or month? Builds the cohort retention curve for your key action at its natural frequency and judges whether it flattens to a plateau or decays to zero, covering N-day versus unbounded retention, repeat usage, leaky bucket diagnosis and how the plateau compares to published benchmarks.

  • +3
    Has our weekly retention curve flattened, and at what level?
  • +3
    Compare the retention of the March signup cohort to the May one
  • +3
    Is our MAU growth real or are we just replacing churned users?

The playbook

The pass condition for a retention curve is a plateau, not a level. Almost every false "we have no retention" verdict comes from drawing the curve at the wrong frequency, including the in-flight period, or comparing an N-day number to a benchmark that was measured unbounded.

Steps

  1. Discover the events and the instrumentation history first. posthog.list_events, amplitude.list_events or mixpanel.list_events to find the real name of the signup event and of the candidate key action. Then check min(timestamp) and max(timestamp) per event name: an event renamed six months ago silently truncates older cohorts to zero and turns a rename into a fake retention collapse. Also call posthog.list_insights to reuse the team's existing retention insight definition where one exists, so your number matches what leadership already sees.

  2. Set the interval from the observed frequency, not from habit. Compute the median gap between consecutive key actions for users who are still active after 8 weeks, using posthog.query (HogQL) or mixpanel.export_events on a sample. Set the period to that: weekly for most B2B SaaS, monthly for infrequent transactional products. State the interval and the reason in the output. Getting this wrong is the single biggest source of fake-bad curves.

  3. Build the curve twice, once N-day and once unbounded, and label both. amplitude.retention_report with the start event as signup or first key action, the return event as the key action, and the interval from step 2. Produce both modes explicitly. On PostHog use posthog.query with first-ever-occurrence cohorting, which is the correct semantic for new-user retention: PostHog's recurring counts any occurrence of the start event in the period, first time only counts it if it was the user's first within the insight date range. Mixpanel's API equivalents are retention_type=birth and retention_type=compounded. Exclude any period whose end is in the future.

  4. Read the shape, then check cohort over cohort. For each cohort, find the period where the curve stops falling and record that plateau level and the period it was reached. Then compare plateaus across signup cohorts: consistent flattening of successive cohorts plus growth in new users every month is the product market fit signal. Compare plateaus, never day-1 values, which move with acquisition mix.

  5. Decompose the aggregate into a lifecycle view. posthog.query or mixpanel.segmentation for new, returning, resurrecting and dormant counts per period. This is what answers the leaky bucket question, which a retention table alone cannot: a flat MAU made of 10 new and 10 churned users per month looks identical to real growth in the headline number. Note that PostHog users cannot exist in more than one cohort, so a resurrected user never re-enters a later signup cohort and is only visible here.

  6. Segment the curve and hold acquisition mix fixed. amplitude.retention_report with a breakdown, or posthog.query with GROUP BY, across plan, acquisition channel, platform and company size. Re-run the newest cohort's curve holding channel fixed before claiming retention improved. Optionally overlay revenue retention on the same cohorts with stripe.list_subscriptions or a warehouse postgres.query so the curve can be shown in revenue terms.

  7. Report. One table per cohort: cohort month, cohort size, retention definition used (N-day or unbounded), the value at each period, plateau level, period at which it flattened, and whether it beats the prior cohort. Then one sentence stating whether the curve flattens, at what level, which benchmark category it belongs to, and the explicit caveat that a lower plateau can still be fine when acquisition is cheap and loop-driven.

Gotchas

  • Never compare an unbounded number to an N-day benchmark or the reverse. The published good and great tables are "signed up and still active 6 months later", which is a bracket or unbounded read. An Amplitude day-180 N-day number will be dramatically lower and is not comparable. Print the definition every time.
  • Trailing incomplete periods manufacture a collapse. PostHog marks in-progress periods and notes they will update as more data arrives. Including the in-flight period makes the newest cohort look like a cliff. Exclude any period whose end is in the future.
  • The PostHog breakdown trap. Both the start event and the return event must carry the same breakdown value, so breaking down by browser, device or country undercounts retention for anyone who switched between the two events. Break down by stable person or group properties, not by event properties.
  • A later period higher than an earlier one is not growth. Users can appear in multiple return periods, so this shape is legitimate, and it means your interval is probably too short. Report it as an interval problem, not as improving retention.
  • Weighted average curves hide per-cohort improvement. PostHog's average retention row defaults to a weighted mean, so one large recent cohort of low-intent signups drags the average down while every individual cohort got better. Report per-cohort, or report both and say which is which.
  • Survivorship bias from current-state tables. Building cohorts from the users table as it stands today removes deleted accounts and hard-bounced signups, which inflates the retained share. Build cohorts from the event stream or from an immutable signups table.
  • Mind the connector you actually have, and never merge two of them. Amplitude only is the strongest single-tool fit, since N-day, unbounded and bracket are first-class and amplitude.retention_report takes breakdowns; approximate the lifecycle view with amplitude.event_segmentation. PostHog only gives full fidelity plus a native lifecycle insight. Mixpanel only expresses unbounded through rolling mode, but when the birth event and the return event are the same the birth event counts toward the streak, so day-1 numbers will not match Amplitude's. Do not query two tools and merge: they count users differently and will not reconcile. GA4 is disqualified outright, because google_analytics.run_report applies sampling, thresholding and the (other) row, has no user-level export, and cannot express a custom key action; degrade to returning users by cohort week and say the number is not comparable to any benchmark above.

Sequel CLI

Install Sequel skills into your agent

One command connects your agent to Sequel and installs the Sequel skill, so it knows this playbook exists and reads it when a question matches. The CLI signs you in, provisions a scoped API key and writes the config for you.

Already have an MCP client?

https://api.sequel.sh/mcp

Point it at this URL and sign in when prompted, or send an API key from Settings as a Bearer token. Skills come with it; nothing else to install. Manual setup per client

  1. 1

    Install the Sequel CLI

    One line installs the latest CLI with whatever package manager you have.

    curl -fsSL https://sequel.sh/install | sh
  2. 2

    Sign in

    Authenticate in your browser and pick an organization.

    sequel login
  3. 3

    Install into your agent

    Writes the MCP config and installs the Sequel skill file for agents that support skills. Pick an agent from the list, or target one directly by its slug.

    sequel install
    • Claude Code
      sequel install claude-code
    • Claude
      sequel install claude
    • Cursor
      sequel install cursor
    • VS Code
      sequel install vscode
    • Windsurf
      sequel install windsurf
    • Zed
      sequel install zed
    • Codex
      sequel install codex
    • OpenClaw
      sequel install openclaw
    • Hermes
      sequel install hermes

More like this

Other Product Analytics skills

Can we trust our product metrics

Two tools show different numbers for the same metric and nobody knows which to trust. Reconciles the disputed figure against a system of record such as Stripe or the application database, then finds the instrumentation defect behind it: duplicate and near-duplicate event names, events that silently stopped firing, missing properties and system-fired events counted as user actions.

Feature launch impact readout

Measure whether a feature we just shipped actually landed: adoption against an eligible denominator of users who could even reach it, breadth, depth and sustained use after the release, a pre and post impact estimate with or without a control group, and a keep, iterate or sunset call.

Find our activation moment

Discover the aha moment: which early in-product action, taken in the first session or first week, most separates users who stay from users who vanish, how to score candidate first actions by retention lift, and what share of new signups ever reach it. Covers activation metric definition, activation rate and time to value.

Read out an A/B test honestly

Is this A/B test result real, or statistically significant only by accident? Runs the validity gates before reporting anything (sample ratio mismatch, peeking, power and minimum detectable effect, novelty), then gives absolute and relative lift with a confidence interval, a ship or kill call, and the winning variant extended through to revenue instead of stopping at the proxy metric.

Signup funnel drop-off analysis

Find the step where the most users abandon signup or onboarding, and how that varies by segment.

FAQ

Frequently asked questions

What is the difference between N-day, unbounded and bracket retention?
N-day retention is the share of users who returned exactly on day N. Unbounded retention, which PostHog calls on-or-after and Amplitude describes as the opposite of your churn rate, is the share who returned on day N or any day later. Bracket retention buckets days, for example day 0, days 1 to 7, days 8 to 14. The three produce very different numbers from the same data, so always print which one you used.
What does a flattening retention curve actually mean?
Casey Winters' formulation is that a flattened retention curve of your key action at its designated frequency, combined with month-over-month growth in new customers, is the best available measure of product market fit. The pass condition is a plateau, not a level: a curve that settles at 25% and stays there is healthier than one that is at 40% and still falling.
What is a good 6-month retention rate?
Lenny Rachitsky and Casey Winters' survey of more than 20 named growth practitioners gives good and great 6-month user retention as roughly 25% and 45% for consumer social, 30% and 50% for consumer transactional, 40% and 70% for consumer SaaS, 60% and 80% for SMB and mid-market SaaS, and 70% and 90% for enterprise SaaS. These are closest to an unbounded or bracket read, so do not compare a day-180 N-day number to them.
Why does my retention curve decay straight to zero?
Most often the interval is wrong. A weekly curve on a product people genuinely use monthly produces a textbook decay-to-zero and a false no-product-market-fit verdict. Measure the median gap between consecutive key actions for retained users first, then set the interval from that observed frequency and state what you chose and why.
Can an AI agent run a cohort retention analysis?
Yes. With Amplitude, PostHog or Mixpanel connected, the agent sets the interval from the observed inter-event gap, produces both N-day and unbounded curves with the definition labelled, adds the new, returning, resurrecting and dormant decomposition, and compares cohort plateaus rather than day-1 values. Sequel provides the product analytics and warehouse connections over MCP and the retention-curve-analysis playbook.

Put this playbook to work

Connect a source, ask the question, and the agent follows these steps. Free to start.