Which onboarding steps turn trials into paying customers?

Every onboarding flow has steps that matter and steps that don't. The trick is knowing which is which. This skill builds the onboarding funnel, flags who reached a first Stripe payment, and compares people who pay against people who don't, step-by-step.

Example data and how to read it

The Skill looks for patterns like Fig. 1: only 9% of non-payers ever create a second project, versus 52% of payers, the biggest gap in the funnel. Inviting a teammate looks important on its own, but the gap between payers and non-payers is smaller. This tells you to focus on closing the gap for people who don't create a second project.

Onboarding stepPayers who did itNon-payers who did itShare who paid
created_second_project52%9%0.61
invited_teammate78%22%0.41
connected_data_source91%64%0.24
viewed_pricing88%81%0.15
Fig. 1Example data: onboarding actions ranked by how strongly they separate payers from non-payers.

Doing this by hand

  1. Build the funnel natively. Go to Product analytics > Funnels and add your onboarding steps in order. This part needs no join; PostHog does it out of the box.
  2. Connect Stripe via Data pipeline > Sources to get first-payment dates.
  3. Create a "paid" cohort. Under Cohorts > New cohort, match users with a Stripe invoice status = paid (a warehouse condition), then use it as the funnel's breakdown.
  4. Compare completion rates, open the SQL editor, or ask PostHog AI if you want the lift computed for you in one query instead of reading two funnels side by side.

Get an agent to do the work

Copy the Skill below and add it to your agent. The agent finds your signup-to-activation events and each user's first successful Stripe payment, joined on email. From there it either builds a funnel broken down by paid vs unpaid, or computes the completion-rate lift of each step among payers versus non-payers, whichever fits what you asked.

The agent looks at the onboarding path in aggregate. For scoring which individual leads sales should call right now instead, that's Lead scoring.

posthog-onboarding-conversion/SKILL.md
---
name: posthog-onboarding-conversion
description: >
Rank the onboarding and activation steps that best predict a trial becomes a paying customer: build the onboarding
funnel, flag who reached a first Stripe payment, and compare payers versus non-payers, saved as a reusable PostHog
insight. Use this whenever someone asks which onboarding or activation steps lead to paid conversion, what
converting trials do differently, which signup steps predict revenue, or where trials stall before paying.
Triggers on phrasings like 'what makes trials convert', 'onboarding steps that lead to payment', 'activation
actions that predict conversion', 'compare payers vs non-payers by onboarding', or 'where do trials stall'.
Boundary: this analyzes the onboarding PATH to first payment in aggregate. For scoring and prioritizing which
individual LEADS sales should contact, use posthog-lead-scoring. It sets up the Stripe source if needed and
builds the insight end-to-end.
---
# Which onboarding steps turn trials into paying customers?
**Question:** Which onboarding actions best predict that a trial becomes a paying customer?
**For:** Growth · **Difficulty:** Beginner · **Shape:** a funnel + a join
**Data sources:** PostHog funnels (onboarding steps) + Stripe (first successful payment)
## What this produces
A saved PostHog insight comparing onboarding actions completed by users who reached a first Stripe payment against
those who never paid, ranked by how strongly each step predicts conversion — so the user knows which steps to push
everyone toward.
## Workflow
First read `references/posthog-workflow.md` for the shared setup: confirm the PostHog MCP is connected, ensure the
Stripe source exists (set it up via the secure connect-link flow if not), and learn this project's real schema.
Then do the question-specific part below.
### 1. Identify the pieces in this project
- **Onboarding steps.** Use `event-definitions-list` to find signup → activation events. Confirm the intended step
order with the user; onboarding funnels are product-specific.
- **First payment.** Identify each user's first successful payment from Stripe — typically the earliest paid
`stripe_invoice` or successful `stripe_charge` per customer. Join to PostHog people on `lower(email)` (see the
join gotchas in the shared reference).
- **Conversion label.** For each user, a boolean: did they ever reach a first Stripe payment?
### 2. Build and validate the query
Two good approaches — use whichever the user prefers:
- **Funnel insight split by converted vs not** (most native): build the onboarding funnel and break it down by a
"paid" cohort. This shows step-by-step drop-off for payers vs non-payers directly.
- **Comparison query** (ranks predictive steps): compute, per onboarding action, the completion rate among payers
vs non-payers and the lift. Start from this shape and adapt names, then validate with `query-run`:
```sql
-- Completion rate of each onboarding action among payers vs non-payers, with lift.
-- Adapt: onboarding event names, the payment definition, and the email join key.
WITH payers AS (
SELECT DISTINCT lower(email) AS email
FROM stripe_invoice
WHERE status = 'paid'
),
user_actions AS (
SELECT
e.person.id AS person_id,
lower(e.person.properties.email) AS email,
e.event AS action,
min(e.timestamp) AS first_did
FROM events AS e
WHERE e.event IN ('signed_up', 'completed_profile', 'created_project', 'invited_teammate', 'activated')
GROUP BY e.person.id, lower(e.person.properties.email), e.event
)
SELECT
ua.action,
countIf(p.email != '') AS payers_who_did,
countIf(p.email = '') AS nonpayers_who_did,
round(countIf(p.email != '') / nullif(count(), 0), 3) AS share_of_doers_who_paid
FROM user_actions AS ua
LEFT JOIN payers AS p ON ua.email = p.email
GROUP BY ua.action
ORDER BY share_of_doers_who_paid DESC
```
Note the caveat honestly when you report: this is correlation, not proof of causation — steps that correlate with
paying aren't guaranteed to cause it.
### 3. Save the insight
Save as a funnel insight (if you went the funnel route) or a SQL/HogQL table insight named "Onboarding steps that
predict conversion", described with the payment definition and window. Return the URL and tell the user which
steps most separate payers from non-payers.
## Self-driving development (offer this)
With the steps that predict conversion, the user can spot trials stalling before them. Offer to help set up
in-product prompts, a lifecycle email trigger, or an experiment that moves stalled users forward — turning more
trials into customers.
Fig. 2The Skill itself, copy and paste this into your agent to answer the question.