How to write a tracking plan for GA4 and the Meta Pixel, with a CSV template
A tracking plan, or measurement plan, lists the events a site should send and what each one must contain. Without one, "is the tracking right?" has no answer: you can only compare what fires with what someone remembers. A plan kept as a CSV file can be read by anyone, versioned like code and checked against a real journey.
What the plan should say about each event
- Platform and exact name. GA4 event names are case-sensitive (
purchaseis notPurchase), and Meta’s standard events have their own names (Purchase,AddToCart…). - Required parameters. For example, Google’s ecommerce reference lists
transaction_id,value,currency(required when you sendvalue) anditemsfor a GA4purchase; Meta requiresvalueandcurrencyforPurchase. - Value rules. For example: a three-letter ISO 4217 currency code, an
item_idoritem_namefor each GA4 item, andvalue > 0if your plan excludes zero-value orders. - How many times it may fire. Once per order, at least once, any number of times, or never (an event that must not reach the live site, such as a test event).
- Consent checks. Tracklint’s consent template checks
analytics_storagefor GA4 andad_storagefor Meta Pixel events. The Meta check uses Google’s consent signal as a reference: your site must explicitly connect that state to whether the pixel may fire. In advanced Consent Mode, GA4 can send cookieless pings whileanalytics_storageis denied. - Where it fires, and a note for the people who implement and test it.
The CSV format
We keep plans as plain CSV files, one row per event. These rows come from the e-commerce template in our tracking-plan-templates repository (CC0, in English and Spanish):
platform,event,required,rules,count,consent,note
ga4,purchase,transaction_id;currency;value;items,currency is iso4217; value > 0; each item has item_id|item_name,once,,Order confirmation
meta,Purchase,value;currency,currency is iso4217; value > 0,once,,Order confirmation. Add event_id if you also use the Conversions API
platform:ga4ormeta.event: the name exactly as sent.required: parameters that must be present, separated by;.rules: value rules separated by;, such ascurrency is iso4217,value > 0,currency in EUR|USD|MXNoreach item has item_id|item_name.count:once,at_least_once(the default when empty),anyornever.consent:ad_storage,analytics_storage,ad_user_dataorad_personalization, separated by;.note: free text. Two optional columns narrow a row down:id(the measurement ID or pixel ID the event must go to) andurl(text the page URL must contain, or a pattern with*).
Lines that start with # are comments; # name: My plan names the plan and
# consent_mode: advanced (or basic) records which Consent Mode the site uses. The Spanish
files use ; as the separator, which Excel recognizes directly when its regional settings use a semicolon as the list separator, with the
required and rules fields in quotes.
Tips
- Start from the platforms’ references (Google’s recommended events, Meta’s standard events) and add custom events only when someone will use them in a report.
- If the site sends to more than one GA4 property or pixel, fill in the
idcolumn so each row checks the right destination. - Keep the plan next to the site’s code or in a shared folder, review it with the developer before implementing it, and update it whenever the site changes.
- Test it: record a journey and compare each row with what the browser sent. The GA4 tracking QA checklist covers what else to look at.