Copy as markdown[View .md](https://docs.funnelfizz.com/tutorials/tracking-custom-events "View the raw markdown for this page")[Open in Claude](https://claude.ai/new?q=Read%20https%3A%2F%2Fdocs.funnelfizz.com%2Ftutorials%2Ftracking-custom-events.md%20and%20help%20me%20with%20this%20FunnelFizz%20topic%3A%20Tracking%20%26%20custom%20events%20setup "Open this page in Claude with context")[Open in ChatGPT](https://chat.openai.com/?q=Read%20https%3A%2F%2Fdocs.funnelfizz.com%2Ftutorials%2Ftracking-custom-events.md%20and%20help%20me%20with%20this%20FunnelFizz%20topic%3A%20Tracking%20%26%20custom%20events%20setup "Open this page in ChatGPT with context")

# Tracking & custom events setup

*\~15 minutes · Intermediate*

The basic pageview tracking is free with the install. Custom events are where the *interesting* funnel analysis happens — "who clicked pricing," "who started onboarding," "who hit the activation moment."

## Who this is for[​](#who-this-is-for "Direct link to Who this is for")

* You've installed tracking.
* You want to instrument your app beyond pageviews.

## The events to fire (outline)[​](#the-events-to-fire-outline "Direct link to The events to fire (outline)")

### Universal events every SaaS should fire[​](#universal-events-every-saas-should-fire "Direct link to Universal events every SaaS should fire")

| Event            | When to fire                                         | Why                                                   |
| ---------------- | ---------------------------------------------------- | ----------------------------------------------------- |
| `identify`       | On every login / page-load-after-auth                | Stitches anonymous sessions to the user               |
| `signup`         | Right after user creates their account               | TRIAL stage entry                                     |
| `pricing_viewed` | On pricing page load                                 | High-intent filter                                    |
| `trial_started`  | When they start a trial                              | Redundant with Stripe but useful for non-Stripe flows |
| `activation`     | When they do "the one thing" that predicts retention | Churn modeling                                        |

### How to fire them[​](#how-to-fire-them "Direct link to How to fire them")

```
// After signup succeeds

funnelfizz('identify', { userId: 'user_123', email: 'sam@example.com' });

funnelfizz('event', 'signup', { plan: 'hobby', source: 'pricing_page' });



// On pricing page

funnelfizz('event', 'pricing_viewed');



// When they create their first widget (activation)

funnelfizz('event', 'activation', { widgetType: 'funnel' });
```

### The activation metric[​](#the-activation-metric "Direct link to The activation metric")

"Activation" is the one action that, in your data, correlates most strongly with retention. For most SaaS products it's something like:

* Created their first 3 things (projects, forms, docs, whatever your unit is).
* Invited 1+ teammates.
* Connected their first data source / integration.

Find yours, fire the event, then split your funnel by people who activated vs. who didn't. The gap is huge.

### What NOT to fire[​](#what-not-to-fire "Direct link to What NOT to fire")

* **Every click.** Track intent events, not mouse telemetry.
* **Scroll percentages** (beyond the automatic 25/50/75/90 milestones the tracking script already reports).
* **Every keystroke in forms.** Use the auto form tracking — `form_start` and `form_submit` are fired automatically.

### Using events in splits[​](#using-events-in-splits "Direct link to Using events in splits")

Once you've fired an event for a visitor, FunnelFizz lets you split by it. "Only users who fired `pricing_viewed`" becomes a branch on the canvas.

See [Features → Splitting (custom event)](https://docs.funnelfizz.com/features/splitting.md#custom-event).

### Using events in automations[​](#using-events-in-automations "Direct link to Using events in automations")

In a CONDITIONAL\_SPLIT step, the condition can reference any event the profile has fired.

```
CONDITIONAL_SPLIT: event_count('activation') > 0

    ├── yes → skip "getting started" email

    └── no  → send "getting started" email
```

***

**Related:**

* [Quickstart → Install tracking](https://docs.funnelfizz.com/quickstart/install-tracking.md)
* [Concepts → Full funnel tracking](https://docs.funnelfizz.com/concepts/full-funnel-tracking.md)
* [Features → Splitting](https://docs.funnelfizz.com/features/splitting.md)
