On this page
On a SaaS the five events worth tracking are signup, activation (the first moment a person gets value), pricing intent (a click on a plan), checkout started, and payment. Each is one line of code or one attribute on a button, each becomes a goal with a conversion rate, and because every event carries the visitor's source, the five together give you a funnel per traffic source: which channel brings people who sign up, which brings people who stay, and which brings people who pay.
The short version. Fire signup, activated, pricing_cta, checkout_started and let the payment webhook record the sale. Make each a goal. Read the conversion rate of each goal by source.
Why pageviews are not enough
A pageview says someone arrived. It does not say whether they understood the product, created an account, hit the moment where it clicked, or paid. Two sources with the same number of visitors can differ ten times in signups, and two sources with the same signups can differ ten times in payments. Goals turn the dashboard from "how many came" into "how many did the thing", and the source filter turns that into "and who sent them".
The five events
1. Signup
Fire it once, when the account exists, on the page the person lands on after registering or from the code that creates the account. Do not fire it on the form's submit button: a failed validation would count as a signup.
glai('signup', { plan: 'free', method: 'google' })
2. Activation
Pick the one action that means the product worked for this person: the first site added, the first campaign sent, the first file uploaded. Fire it once per account, from your code, when that thing has really happened. It is the event most teams skip and the one that explains churn best.
glai('activated', { what: 'first_site' })
3. Pricing intent
A click on a plan button on the pricing page. No code needed: tag the button and the click is sent with the plan as a property.
<button data-glai-event="pricing_cta" data-glai-prop-plan="growth">Start Growth</button>
4. Checkout started
Fire it when you create the checkout session, right before sending the person to the payment page. The gap between this event and a payment is your checkout drop-off.
glai('checkout_started', { plan: 'growth', interval: 'yearly' })
5. Payment
Do not fire this one from the browser. Payments come from the provider's webhook, after the money has moved, with refunds subtracted; a browser event fires before the card is approved and never hears about refunds. If you also want a client-side marker, give the event a value and it is counted as event revenue, separately from real payments.
Turning events into goals
- Create a goal for each event in the app: a name and the event name it matches. A goal can also match a page, such as
/welcome*, for a thank-you page you cannot add code to. - Give value only where it is real. A fixed value per conversion makes sense for a lead; for a SaaS leave it empty and let the payment webhook carry the money.
- Read the rate, not the count. Each goal shows visitors who converted, conversions and the conversion rate against all visitors of the range.
- Filter by source. Click a source and the goals re-count for its visitors. That is the funnel per channel.
Reading the funnel
| Step | Healthy sign | What a bad number usually means |
|---|---|---|
| Visit to signup | Steady across sources | The landing page does not match what the source promised |
| Signup to activation | Most accounts within a day | Onboarding asks for too much before the first win |
| Activation to pricing intent | Rises with usage | The free plan is enough, or the value is unclear |
| Pricing intent to checkout | Close to one | The plan page raises questions it does not answer |
| Checkout to payment | Close to one | Checkout friction, or the price is a surprise |
Compare the steps by source rather than the totals. A community launch often converts well to signup and badly to activation; an AI assistant referral often does the opposite, with few signups and a high rate all the way to payment. The post on AI traffic has more on why.
Mistakes to avoid
- Too many events. Twenty events nobody reads is worse than five everyone does. Start with these, add one when a question needs it.
- Personal data in properties. Never put an email or a name in an event property. Use the identify call for that, once, after sign-in, if you need journeys with names.
- Firing on the wrong side. Signup and activation belong in your server code or the page after success; buttons belong in the page. A payment belongs to the webhook.
- Renaming events. An event name is history; rename it and the old conversions vanish from the goal. Pick names once.
What Glai does
Events are counted with pageviews towards the plan's monthly allowance; identify calls and webhook payments are free. Each goal is per site, and the number of goals per site is set by the plan, which you can see on the pricing page. Every event carries the visitor's first source, so the goal table and the revenue attribution read from the same visits. The install guide has the exact syntax for events, properties and the data attribute. Then create a free account, add the signup event, and watch the first goal convert.
Questions people ask
Do custom events count towards my monthly events?
Yes. A pageview, a custom event, a tagged button click and an outbound link click each count as one event. Identify calls do not, bots that are filtered do not, and payments from a webhook do not. Plans differ only in events a month.
Can a goal match a page instead of an event?
Yes. A page goal matches a path pattern such as /thanks or /welcome*, so a thank-you page counts as a conversion without any code. An event goal matches an event name. Both show visitors, conversions and the conversion rate by source.
Should I fire the payment event from the browser?
No. Let the payment provider's webhook report it after the money has moved, with refunds subtracted. A browser event fires before the card is approved and never hears about refunds. Use a browser event only as a checkout-started marker.
How many properties can an event carry?
Up to 20 keys, each value up to 200 characters, on an event name of up to 60 characters. Properties are shown on the visitor's journey, so keep them to things like the plan, the method or the feature, never an email address.