> ## Documentation Index
> Fetch the complete documentation index at: https://docs.mad-kitty.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Asking Opti for custom tracking

> How to get the choices you care about tracked, and how to ask analytics questions in business terms

The funnel runtime tracks screens, navigation, A/B exposures, and the whole checkout on its own — see [What's tracked by default](/team/opti/tracking/events-and-pixel). Everything that happens *inside* a screen is Opti's job: quiz answers, plan-card taps, FAQ expands, video plays, "maybe later" clicks. Opti wires those as it builds, and you can always ask for more. A few habits make that conversation work — they're the same principles as [Working with the Kitties](/concepts/working-with-kitties).

## Ask by intent, not by mechanism

Tell Opti what you want to *learn*; it decides which events and properties make that answerable. Naming a button and a tracking call gets you exactly that button — naming the question gets you the whole path.

> ❌ *"add a tracking call to the continue button on the goal screen"*
>
> ✅ *"I want to know whether people who pick 'sleep' as their goal buy more than people who pick 'stress' — make sure the quiz answers are tracked so we can split conversion by them"*

> ❌ *"log when the video plays"*
>
> ✅ *"I suspect the testimonial video on the result screen matters — track whether people play it and how far they get, so we can compare buyers vs non-buyers"*

## Ask questions in business terms

You don't need to know event names to get answers. Opti maps the question to the data — screens, branches, checkout steps, custom events, and real sales — and tells you which numbers it used.

> ✅ *"which quiz step loses the most people?"*
>
> ✅ *"do visitors from ad HRT-0019 skip the trust screen more than the others?"*
>
> ✅ *"conversion per arm on the paywall test — and net revenue per visitor, not just checkout rate"*
>
> ✅ *"how many card checkouts fail at the decline stage vs the card form, last 14 days?"*

If a question can't be answered because the choice was never tracked, Opti will say so — and that's the moment to ask for the tracking (it starts collecting from the next publish).

## Naming and conventions

Opti's default naming is short, past-tense, `snake_case` — `quiz_answered`, `plan_selected`, `faq_expanded` — with one event reused across screens and the specifics carried as properties (one `quiz_answered` for the whole quiz, with `question` and `answer`), so funnels stay comparable. If you already have a naming convention or a list of events from another product, paste it — Opti will match it.

> ✅ *"here's the event taxonomy from our app — use the same names for the funnel so the two line up in our reports"*

## Attaching data to purchases

Analytics events describe visitor *behaviour*. Sometimes you want a fact stamped **on the sale itself** — the quiz result the buyer got, a partner code, a lead source — so it travels with the customer record. That's a separate mechanism, and Opti only uses it when you ask explicitly.

> ✅ *"attach the quiz result and the selected goal to every purchase — we need it in our CRM"*

## Custom pixel behaviour

Under the hood every funnel is a real codebase and Opti is a real engineer in it, so tracking beyond the defaults is a prompt away — describe what you have and what should fire when.

> ✅ *"add our TikTok pixel alongside the built-in tracking"*
>
> ✅ *"send quiz completion to Meta as a custom event"*
>
> ✅ *"here's our analytics snippet — mirror screen views and checkout events into it"*

Opti keeps the same safety rules for anything it adds: nothing fires from previews or test checkouts, and a broken third-party script can never break the funnel.

## Bringing your own analytics & pixels

<Note>
  **Coming soon.** A first-class way to declare your own Meta / TikTok / GA4 pixels and analytics destinations per funnel — with per-event control over what each one receives — is on the way. Until then, the prompts above are the path: ask Opti, and it wires it in.
</Note>
