Copy as markdown[View .md](https://docs.funnelfizz.com/concepts/conversion "View the raw markdown for this page")[Open in Claude](https://claude.ai/new?q=Read%20https%3A%2F%2Fdocs.funnelfizz.com%2Fconcepts%2Fconversion.md%20and%20help%20me%20with%20this%20FunnelFizz%20topic%3A%20Conversion "Open this page in Claude with context")[Open in ChatGPT](https://chat.openai.com/?q=Read%20https%3A%2F%2Fdocs.funnelfizz.com%2Fconcepts%2Fconversion.md%20and%20help%20me%20with%20this%20FunnelFizz%20topic%3A%20Conversion "Open this page in ChatGPT with context")

# Conversion

A **conversion** is the transition from one stage to the next. Because there are four stages, there are exactly three conversions — the slices you care about most when you look at your funnel.

```
AWARENESS  ●  CONSIDERATION  ●  TRIAL  ●  CUSTOMER

    │      position 0        position 1     position 2
```

Each conversion position has a **method** that defines what counts as a conversion. The defaults cover 90% of cases; you can override any of them.

## The three positions[​](#the-three-positions "Direct link to The three positions")

### Position 0: AWARENESS → CONSIDERATION[​](#position-0-awareness--consideration "Direct link to Position 0: AWARENESS → CONSIDERATION")

**Default method: Site visit** (via tracking code).

This is the easiest one: anyone who lands on your site with the tracking script installed converts. There's no work to do beyond [installing tracking](https://docs.funnelfizz.com/quickstart/install-tracking.md).

Alternative methods:

* **Email signup form** — a form post with an email field on your marketing site (bypasses the site visit requirement, useful if you have a form-first landing page).

### Position 1: CONSIDERATION → TRIAL[​](#position-1-consideration--trial "Direct link to Position 1: CONSIDERATION → TRIAL")

**Default method: Stripe trial** (`status = "trialing"` on a subscription).

Works out of the box once you've [connected Stripe](https://docs.funnelfizz.com/quickstart/connect-stripe.md) and mapped your product.

Alternative methods:

* **Custom signup event** (HOBBY+) — call `funnelfizz('event', 'signup')` from your app or site. Useful if your product has self-serve signup without Stripe (free plan signups, "book a demo" flows, email gated downloads).
* **Email signup form** — form post with an email field on a deeper page (not your landing).

### Position 2: TRIAL → CUSTOMER[​](#position-2-trial--customer "Direct link to Position 2: TRIAL → CUSTOMER")

**Default method: Stripe paid** (`status = "active"`).

Works automatically after Stripe connect.

Alternative methods:

* **App Store / Play Store download** (HOBBY+) — uses a referral parameter on the store link to attribute mobile downloads. Good if your conversion event is "installed the mobile app" instead of "started a paid subscription."

## Configuring a conversion[​](#configuring-a-conversion "Direct link to Configuring a conversion")

On the canvas, click the round conversion bubble between any two stages. A drawer opens with:

* **Label** — how it shows up in the dashboard ("Signup", "Started trial", "Paid").
* **Method** — pick from the available options for that position.
* **Configuration** — method-specific fields (Stripe product ID, form ID, event name).

### Method reference[​](#method-reference "Direct link to Method reference")

Site visit (tracking code)

**Fields:** tracking site ID (auto-filled if you have one), domain.

**What it counts:** any `pageview` event from a unique visitor. No extra config needed.

Email signup form

**Fields:** form ID (any identifier you want), email field name (the `name` attribute of the email input — defaults to `email`).

**What it counts:** a `form_submit` event where the form contains an email-shaped value in the named field. The tracking script auto-fires `form_submit` on every form on your site; you pick which form counts by ID.

Stripe trial

**Fields:** Stripe integration (auto-filled), product ID, price ID.

**What it counts:** subscription with `status = "trialing"` on the specified product/price.

**Config tip:** if you have multiple trial tiers, point each conversion at the specific price ID you care about. If you just want "any trial counts," leave price ID blank.

Stripe paid

**Fields:** Stripe integration, source product IDs (what they came from — optional), target product IDs (what counts as paid).

**What it counts:** subscription with `status = "active"` on one of the target products, at any price.

**Config tip:** the "source" filter is for funnel chaining — "only count people who upgraded from the Hobby tier." Leave it empty to count anyone who becomes a paying customer regardless of prior history.

Custom signup event

**Fields:** event name, optional expected properties.

**What it counts:** a matching call to `funnelfizz('event', '<event name>', {...})` from a unique visitor. Properties let you filter further — e.g., only count events where `plan: 'pro'`.

Example:

```
// Fires from your app's signup success handler

funnelfizz('event', 'signup', {

  plan: 'pro',

  source: 'pricing_page'

});
```

Then configure the conversion with event name `signup` and (optionally) expected property `plan: pro`.

App Store / Play Store download

**Fields:** store (`app_store`, `play_store`, or `both`), referral parameter name.

**What it counts:** a redirect from your site to a store link with the tracked referral param present. We record the click-out; the store attribution happens on your side via the referral parameter decoding in your onboarding analytics (Branch, AppsFlyer, Adjust, or native store referrer APIs).

## Conversion rates[​](#conversion-rates "Direct link to Conversion rates")

For each position, FunnelFizz computes:

* **Count** — how many unique profiles made the transition in the period.
* **Rate** — count divided by the source-stage count, expressed as a percentage.
* **Trend** — period-over-period delta (up/down arrow, % change).

Rates are computed *after* split filters are applied, so each split branch has its own conversion rates separate from the main funnel.

## Under the hood[​](#under-the-hood "Direct link to Under the hood")

Every successful conversion writes a **journey event** with `eventType = "converted"` and metadata about the method. Journey events have unique constraints per (funnel, visitor, stage, eventType) so a visitor can't be double-counted.

This means: if the same user comes back next month and converts again, they don't get double-counted in that funnel. But they *do* get counted in a different funnel if you run multiple funnels for the same workspace.

***

**Next:** [Full funnel tracking →](https://docs.funnelfizz.com/concepts/full-funnel-tracking.md) — how anonymous visitors get stitched together into identified customer journeys.
