More in Product analytics
- Autocapture and the AI event inbox
- Build a funnel that explains drop-off
- Identify users across web, app and mini-programs
- What is autocapture, and how does it work?
- How do I review and accept events in the inbox?
- What are unplanned events, and how do I manage them?
- When should I use a funnel instead of a goal or path?
- How do I build a funnel?
- How do I read where a funnel drops off?
- What is identified mode, and should I turn it on?
- How do I call login to identify a user?
- How is one person merged across devices?
- How does identity work on apps and mini-programs?
- How do I track clicks on outbound links?
- How do I track file downloads?
- How do I track form submissions?
- How do I track custom events?
- How do I track button clicks?
- How do I create a heatmap?
- How do I track scroll depth?
- How do I track ecommerce purchases and revenue?
- How do I set up goals and track conversions?
- How do I query my data with SQL?
- How do I create a custom metric?
- How do I analyze accounts with groups?
- How do I connect AI agents with MCP?
- How do I ask the AI assistant about my data?
- How do I create user segments?
- How do I run an RFM analysis?
- How do I record and watch session replays?
- How do I analyze user paths?
- How do I build a retention report?
- How do I analyze how an event is distributed?
- How do I view a user’s profile and activity?
- How do I read the lifecycle report (new, returning, resurrecting, dormant)?
- How do I compare attribution models for a conversion?
- All guides in this category
Still have a question?
Could not find it? A person reads every message, usually within a few hours on business days.
Chat with usShort answer
Open All-platform analytics › Data › Tracking plan and click New event for each event you intend to collect: name, display name, category, platforms, trigger, properties (with type, required and example), owner, developer and status. Move each row from Proposed to Developing, Accepting and Live as it is built and checked. Turn on Live verification (24 h) to see whether each event is arriving and whether its required properties are filled.
A tracking plan is the agreed list of events and properties before anyone writes tracking code. It keeps names consistent across web, apps and the server and gives developers and analysts one source to check against.
Before you start
- Start from questions, not events. List the 5–10 questions the team needs to answer (for example "Where do trial users drop off before paying?"), then the events needed to answer them.
- Agree on naming. Use one style, such as
object_actionin snake_case:signup_completed,report_exported. Avoid putting values in names (clicked_blue_button); use properties instead. - Check what already exists. Autocapture and preset events (pageviews, screens, clicks, app starts) may already cover part of the plan.
Create plan rows
| Field | What to enter |
|---|---|
| Event name | The exact name code will send, for example checkout_started |
| Display name | A readable label for reports |
| Category | Group such as Acquisition, Activation, Revenue |
| Platforms | web, ios, android, harmony, mp, server |
| Trigger | When exactly it fires: "after the payment API returns success," not "on checkout" |
| Properties | Name, type, required, recommended, description and example for each |
| Owner / developer | Who decides on the event and who implements it |
| Status | Proposed, Developing, Accepting, Live or Deprecated |
| Notes | Edge cases, links to tickets |
You can also Import a CSV or a previously exported JSON. Rows match on event name, and you choose whether existing rows are overwritten or skipped. In CSV, separate properties with | and mark required ones with *.
If events are already being sent, click Generate from definitions to fill the plan from existing event definitions. It does not overwrite rows that already use the same name.
Track status through delivery
| Status | Meaning |
|---|---|
| Proposed | Agreed in principle, not built |
| Developing | A developer is implementing it |
| Accepting | Events have arrived; you are checking properties |
| Live | Verified and in use |
| Deprecated | No longer sent or used |
Sync to definitions links plan rows to event definitions that already exist. A row marked Live marks its definition live. Event definitions themselves live on the Definitions tab of Data › Event inbox, together with events that nobody has claimed yet.
Verify events with live verification
Turn on Live verification (24 h). Two columns appear: hits in the last 24 hours and the completeness of required properties. Use them before moving a row to Live:
- No hits: the event is not firing, or the name differs from the plan.
- Low completeness: some events arrive without a required property. This is a warning only; events are not blocked.
There is no QR-code check on this page; verification is the 24-hour count. For rules that block or quarantine bad data, see property definitions and Data › Data quality.
Share the plan
Export XLSX to hand the plan to developers or attach it to a ticket. Anyone in the project can view the plan; creating, editing, importing, syncing and deleting need the Analyst role or above. Deleting a plan row does not delete the event definition or any data.
Related
Did this answer your question?
We use your answers to fix and expand this page.
Couldn’t send. Please try again in a minute.
Thanks for the feedback. We’ll use it to improve this page.You’ve already sent feedback on this page. Thanks.