How to stop enrollment while tracking long-term metrics

Contents

Some experiments need more time for metrics to mature than you want to keep enrolling new users. For example, you're testing two price points and want to measure 90-day revenue and long-term retention. You've reached a good sample size after two weeks, but the metrics won't be meaningful for months. Keeping the experiment running means every new user continues to get randomly assigned to a variant, including potentially worse ones, just so you can keep measuring.

There are two tools for this, and they solve different problems:

  • Freeze exposure stops new users from entering the experiment at the feature flag level. Use it when you want to stop enrollment entirely and aren't rolling out a winner yet.
  • A HogQL timestamp filter on your exposure criteria freezes the analysis window at query time. It doesn't touch the flag, so new users are still served variants, they're just excluded from the results. Use it when you want to roll out the winning variant now while the original participants' metrics keep maturing.

Stopping enrollment: freeze exposure

The freeze exposure action snapshots your currently-enrolled users into a static cohort and narrows the experiment's feature flag to that cohort, so new users can't enter the experiment while already-enrolled users keep their variants and metrics keep updating.

  1. Go to your running experiment.
  2. Click the actions menu and select Freeze exposure.
  3. Confirm in the dialog and wait for it to complete. Freezing takes longer the more exposed users the experiment has, up to tens of seconds for tens of thousands of users.

Once frozen, the experiment status changes to Exposure frozen, existing users keep their assigned variants, and long-term results (revenue, LTV, renewals, retention) continue to accumulate. You can ship a winning variant at any time from the frozen state, which removes the freeze as part of the rollout. Ending without shipping leaves the flag narrowed to the snapshot cohort, so unfreeze or ship first.

When freeze exposure won't be offered

The action is hidden or disabled for experiments that can't be frozen:

  • The experiment isn't running – draft experiments have no exposures yet, ended experiments are complete, and paused experiments need to be resumed first.
  • Group-aggregated experiments – the experiment targets groups, not persons, and a person-based cohort can't freeze group-based matching.
  • Holdouts and early access conditions – both are evaluated before release conditions, so narrowing the release conditions can't stop enrollment through those paths.

When a freeze can be rejected after you confirm

Some checks require scanning the exposure data, so they only run once you confirm the dialog:

  • Very large experiments – the exposure scan is bounded by a cap on the number of exposed users and a timeout.
  • Anonymous or logged-out traffic – if more than about 5% of exposed users have no person profile, freezing is rejected because those users would silently lose their variant.
  • No exposures yet – there's no one to snapshot.

These rejections are structural, so retrying won't help. See the full limitations of freezing exposure.

Rolling out the winner: HogQL timestamp filter

To ship the winning variant to everyone now while the original participants' metrics keep maturing, freeze the analysis window with a HogQL timestamp filter on your exposure criteria. This doesn't stop new users from being served variants, it excludes them from the experiment's results.

Step 1: Note the cutoff timestamp

Decide when you want to stop counting new enrollments. This is typically "now", the moment you're happy with your sample size and want to lock it in.

Step 2: Edit exposure criteria

  1. Go to your experiment and click Edit exposure criteria.
  2. If you're using the default $feature_flag_called event, switch to Custom event and select $feature_flag_called.
  3. Add a property filter with type HogQL and the expression:
timestamp < '2026-03-23 15:44:00'

Replace the timestamp with your cutoff date.

This tells PostHog to only count exposures before the cutoff. Users exposed after this point won't be included in the experiment results, even though the experiment is still running.

Step 3: Roll out the winning variant

With the exposure filter in place, you can safely change your feature flag to roll out the winning variant to all users. New users get the variant, but they won't appear in the experiment results because their exposures are after the cutoff.

Your existing participant groups stay frozen, and their metrics continue to mature over time.

Community questions

Was this page useful?