Personalised onboarding
In-app onboarding forms that know who the user is, change with what they answer, run as A/B tests and report to PostHog.
What you can build
| Piece | What it does | Read more |
|---|---|---|
| Attributes | Typed, read-only facts about the user (plan, role, first name) from the URL, the SDK or a lookup. Usable in logic, text and visibility. | Attributes and recall |
| Profile lookup | Your backend or PostHog fills attributes and prefill when the form loads, for a signed user id. | Profile lookups and signed identity |
| Skip if known | A question whose answer you already have is not asked, but the value is stored. | Attributes and recall |
| Resume by user | Progress follows the user across devices for a time you set. | Profile lookups and signed identity |
| Adaptive AI | One AI follow-up question, answer classification, personalised copy. Opt in per form. | Adaptive AI questions |
| Journeys and decide | Stages that open on events or days; one call that says what a user should see now. | Journeys and the decide endpoint |
For product teams
Start from Create form, then Onboarding flow with experiment. Describe your app and who uses it. FormFlow drafts an onboarding form, two or three alternative versions each with a stated hypothesis, and a suggested experiment: the main metric, guardrails and which answers to send to PostHog as person properties. Everything is a draft. Nothing goes live until you publish it and start the experiment.
Open the form to declare the attributes your app will send, choose which questions to skip when the answer is known, and turn on AI features. The experiment page shows results in plain language and the themes view groups open-text answers by variant. Autopilot can propose the next variant to test; each proposal waits in an approval queue and nothing is applied without a person approving it, unless you switch on auto-apply and set its limits.
For developers
Your app sends uid, uid_sig (an HMAC your server computes) and attrs.<key> values. The mobile SDKs and the Embed SDK already do this. For fully native screens call POST /public/onboarding/decide and render the returned definition yourself.