{"id":13334,"plugin_id":"plugin_asdk_app_698a0208e7d881919cc8d52147cb0331","kind":"skill","collection_source":null,"comparison_source":null,"observed_at":"2026-09-30T23:07:18.936Z","digest":"0984a604e67732c74de82a30e3535a76d6526cdcba96df76d096d15b6b4d4e26","against":null,"payload":{"name":"tracking-plan-builder","description":"This skill should be used when the user asks to \"build a tracking plan\", \"map business goals to conversion events\", \"audit what events to track\", \"define event naming conventions\", or mentions \"measurement strategy\", \"cross-platform event mapping\", or \"KPI to event mapping\". Do NOT use for: GTM tag/trigger implementation (use gtm-conversion-setup-guide), server-side tagging (use gtm-server-side-tagging-guide), or consent/privacy setup (use gtm-consent-mode-guide).","included_files":[],"skill_md_contents":"---\nname: tracking-plan-builder\ndescription: \"This skill should be used when the user asks to \\\"build a tracking plan\\\", \\\"map business goals to conversion events\\\", \\\"audit what events to track\\\", \\\"define event naming conventions\\\", or mentions \\\"measurement strategy\\\", \\\"cross-platform event mapping\\\", or \\\"KPI to event mapping\\\". Do NOT use for: GTM tag/trigger implementation (use gtm-conversion-setup-guide), server-side tagging (use gtm-server-side-tagging-guide), or consent/privacy setup (use gtm-consent-mode-guide).\"\n---\n\n# Tracking Plan Builder\n\nA tracking plan is the single source of truth for what your website or app measures. Without one, you end up with duplicate events, missing parameters, inconsistent naming, and ad platforms that cannot optimize because they never receive the signals they need. This skill walks you through creating a tracking plan from business goals down to individual event parameters, then maps those events to every ad platform you run.\n\n## Step 1: Identify Your Business Model\n\nYour business model determines which events matter most. Start here before touching any tool.\n\n### Business Model Decision Tree\n\n```\nWhat does the user DO on your site?\n|\n+-- Buys a product online -----------> E-COMMERCE\n|\n+-- Fills out a form / requests quote -> LEAD GENERATION\n|\n+-- Signs up for a trial / subscribes -> SaaS\n|\n+-- Calls, visits store, books appt --> LOCAL BUSINESS\n|\n+-- Multiple of the above -----------> HYBRID (pick primary, layer secondary)\n```\n\n## Step 2: Map Goals to KPIs to Events\n\n### E-Commerce Tracking Plan\n\n| Business Goal | KPI | GA4 Event | Key Parameters |\n|---|---|---|---|\n| Revenue | Total revenue | `purchase` | `value`, `currency`, `transaction_id`, `items[]` |\n| Cart performance | Cart-to-purchase rate | `add_to_cart` | `value`, `currency`, `items[]` |\n| Checkout drop-off | Checkout completion rate | `begin_checkout` | `value`, `currency`, `items[]`, `coupon` |\n| Product interest | Product view rate | `view_item` | `value`, `currency`, `items[]` |\n| Discovery | List engagement | `view_item_list` | `item_list_id`, `item_list_name`, `items[]` |\n| Promotions | Promo click rate | `select_promotion` | `promotion_id`, `promotion_name`, `creative_name` |\n| Shipping info | Shipping step rate | `add_shipping_info` | `value`, `currency`, `shipping_tier` |\n| Payment info | Payment step rate | `add_payment_info` | `value`, `currency`, `payment_type` |\n| Refunds | Refund rate | `refund` | `value`, `currency`, `transaction_id`, `items[]` |\n| Wishlists | Wishlist engagement | `add_to_wishlist` | `value`, `currency`, `items[]` |\n\n### Lead Generation Tracking Plan\n\n| Business Goal | KPI | GA4 Event | Key Parameters |\n|---|---|---|---|\n| Lead volume | Total leads | `generate_lead` | `value`, `currency`, `lead_type` |\n| Form engagement | Form start rate | `form_start` (custom) | `form_id`, `form_name`, `form_location` |\n| Contact requests | Contact form submissions | `contact_form_submit` (custom) | `form_id`, `lead_type` |\n| Phone calls | Call click rate | `click_to_call` (custom) | `phone_number`, `page_location` |\n| Content downloads | Download rate | `file_download` | `file_name`, `file_extension`, `link_url` |\n| Demo requests | Demo booking rate | `demo_request` (custom) | `value`, `service_type` |\n| Quote requests | Quote request rate | `quote_request` (custom) | `value`, `service_category` |\n\n### SaaS Tracking Plan\n\n| Business Goal | KPI | GA4 Event | Key Parameters |\n|---|---|---|---|\n| Sign-ups | Registration rate | `sign_up` | `method` |\n| Trial starts | Trial activation rate | `trial_start` (custom) | `plan_name`, `trial_length` |\n| Activation | Feature adoption | `feature_use` (custom) | `feature_name`, `feature_category` |\n| Subscription | Conversion to paid | `purchase` | `value`, `currency`, `plan_name`, `billing_cycle` |\n| Upgrades | Upgrade rate | `plan_upgrade` (custom) | `old_plan`, `new_plan`, `value` |\n| Engagement | DAU/MAU ratio | `login` | `method` |\n| Onboarding | Onboarding completion | `tutorial_complete` | `step_count` |\n\n### Local Business Tracking Plan\n\n| Business Goal | KPI | GA4 Event | Key Parameters |\n|---|---|---|---|\n| Store visits | Direction clicks | `get_directions` (custom) | `store_id`, `store_name` |\n| Phone calls | Call clicks | `click_to_call` (custom) | `phone_number`, `store_id` |\n| Appointments | Booking rate | `book_appointment` (custom) | `service_type`, `value`, `store_id` |\n| Online orders | Order value | `purchase` | `value`, `currency`, `transaction_id` |\n| Reservations | Reservation rate | `reserve` (custom) | `party_size`, `date`, `store_id` |\n| Contact | Inquiry rate | `generate_lead` | `value`, `lead_type`, `store_id` |\n\n## Step 3: Event Naming Conventions\n\nConsistent naming prevents chaos at scale. Adopt one convention and enforce it everywhere.\n\n### Recommended Convention: snake_case (GA4 standard)\n\n```\n{object}_{action}\n\nExamples:\n  form_submit         (not formSubmit, not Form Submit)\n  video_play          (not videoPlay)\n  click_to_call       (not clickToCall)\n  product_view        (not productView)\n```\n\n### Rules\n\n| Rule | Good | Bad |\n|---|---|---|\n| Use snake_case | `form_submit` | `formSubmit`, `Form Submit` |\n| Max 40 characters | `newsletter_signup` | `user_newsletter_email_signup_completed` |\n| No spaces or special characters | `add_to_cart` | `add to cart`, `add-to-cart` |\n| Start with noun or verb | `purchase`, `view_item` | `1_purchase`, `_view` |\n| No PII in event names | `form_submit` | `john_form_submit` |\n| Use GA4 recommended names when they exist | `purchase` | `completed_order` |\n| Prefix custom events consistently | `custom_quiz_complete` | `quiz_complete` (ambiguous origin) |\n\n### Parameter Naming\n\n```\n{object}_{descriptor}\n\nExamples:\n  item_id             (not itemId)\n  item_name           (not itemName)\n  form_id             (not formID)\n  lead_type           (not leadType)\n  button_text         (not buttonText)\n```\n\n### Reserved Parameter Names (GA4)\n\nDo not create custom parameters with these names -- they are already used by GA4:\n\n`page_location`, `page_referrer`, `page_title`, `screen_name`, `engagement_time_msec`, `session_id`, `user_id`, `debug_mode`\n\n## Step 4: Priority Matrix\n\nNot every event deserves equal attention. Use this matrix to decide implementation order.\n\n### Priority Levels\n\n| Priority | Label | Definition | Timeline |\n|---|---|---|---|\n| P0 | Must Track | Revenue/conversion events that ad platforms need for optimization | Week 1 |\n| P1 | Should Track | Funnel events that explain drop-offs and inform bidding | Week 1-2 |\n| P2 | Nice to Have | Engagement events for audience building and analysis | Week 2-4 |\n| P3 | Future | Advanced events for mature measurement setups | Month 2+ |\n\n### E-Commerce Priority Matrix\n\n| Priority | Events |\n|---|---|\n| P0 | `purchase`, `add_to_cart`, `begin_checkout` |\n| P1 | `view_item`, `add_payment_info`, `add_shipping_info` |\n| P2 | `view_item_list`, `select_item`, `add_to_wishlist`, `select_promotion` |\n| P3 | `view_cart`, `remove_from_cart`, `refund`, `view_promotion` |\n\n### Lead Gen Priority Matrix\n\n| Priority | Events |\n|---|---|\n| P0 | `generate_lead` (main form), `purchase` (if applicable) |\n| P1 | `form_start`, `click_to_call`, `demo_request` |\n| P2 | `file_download`, `video_play`, `page_scroll` (key pages) |\n| P3 | `newsletter_signup`, `social_share`, `chat_open` |\n\n### SaaS Priority Matrix\n\n| Priority | Events |\n|---|---|\n| P0 | `sign_up`, `purchase` (subscription), `trial_start` |\n| P1 | `login`, `feature_use` (core feature), `plan_upgrade` |\n| P2 | `tutorial_complete`, `invite_sent`, `integration_connected` |\n| P3 | `settings_changed`, `export_data`, `support_ticket` |\n\n## Step 5: Platform-Specific Event Mapping\n\nEach ad platform needs specific events sent in specific formats. This table maps your GA4 events to every platform.\n\n### Cross-Platform Event Map\n\n| GA4 Event | Meta Pixel | Google Ads | LinkedIn | TikTok |\n|---|---|---|---|---|\n| `purchase` | `Purchase` | `purchase` / Conversion Action | `conversion` (custom) | `CompletePayment` |\n| `add_to_cart` | `AddToCart` | `add_to_cart` | -- | `AddToCart` |\n| `begin_checkout` | `InitiateCheckout` | `begin_checkout` | -- | `InitiateCheckout` |\n| `view_item` | `ViewContent` | `view_item` | -- | `ViewContent` |\n| `generate_lead` | `Lead` | `submit_lead_form` | `conversion` (custom) | `SubmitForm` |\n| `sign_up` | `CompleteRegistration` | `sign_up` | `conversion` (custom) | `CompleteRegistration` |\n| `add_payment_info` | `AddPaymentInfo` | `add_payment_info` | -- | `AddPaymentInfo` |\n| `search` | `Search` | -- | -- | `Search` |\n| `contact` | `Contact` | -- | -- | `Contact` |\n| `page_view` | `PageView` (auto) | `page_view` (auto) | `pageview` (auto) | `PageView` (auto) |\n\n### Platform-Specific Parameter Requirements\n\n#### Meta Pixel Parameters\n\nMeta requires these parameters for optimization to work:\n\n| Parameter | Required For | Format |\n|---|---|---|\n| `value` | Purchase, AddToCart, InitiateCheckout | Float (e.g., 49.99) |\n| `currency` | Any event with value | ISO 4217 (e.g., \"EUR\", \"USD\") |\n| `content_ids` | Dynamic Product Ads | Array of product IDs matching catalog |\n| `content_type` | Dynamic Product Ads | \"product\" or \"product_group\" |\n| `content_name` | ViewContent optimization | Product/page name string |\n| `num_items` | AddToCart optimization | Integer count |\n\n#### Google Ads Parameters\n\n| Parameter | Required For | Format |\n|---|---|---|\n| `value` | Smart Bidding (tROAS) | Float |\n| `currency` | Smart Bidding (tROAS) | ISO 4217 |\n| `transaction_id` | Deduplication | Unique string |\n| `send_to` | Conversion tracking | \"AW-XXXXXXXXX/XXXXXX\" |\n| `new_customer` | New Customer Acquisition goal | Boolean |\n\n#### LinkedIn Parameters\n\n| Parameter | Required For | Format |\n|---|---|---|\n| `conversionId` | Conversion tracking | LinkedIn conversion ID |\n| `value` | Revenue tracking | Float |\n| `currency` | Revenue tracking | ISO 4217 |\n\n#### TikTok Parameters\n\n| Parameter | Required For | Format |\n|---|---|---|\n| `value` | Value-based optimization | Float |\n| `currency` | Value-based optimization | ISO 4217 |\n| `content_id` | Dynamic Showcase Ads | Product ID string |\n| `content_type` | Dynamic Showcase Ads | \"product\" or \"product_group\" |\n| `content_name` | Reporting | String |\n| `quantity` | Reporting | Integer |\n\n## Step 6: The items[] Array (E-Commerce)\n\nThe `items[]` array is shared across GA4, Google Ads, and (in adapted form) Meta and TikTok. Get this right once and every platform benefits.\n\n### Standard items[] Object\n\n```json\n{\n  \"item_id\": \"SKU-12345\",\n  \"item_name\": \"Blue Running Shoe\",\n  \"item_brand\": \"BrandName\",\n  \"item_category\": \"Shoes\",\n  \"item_category2\": \"Running\",\n  \"item_category3\": \"Men\",\n  \"item_variant\": \"Blue / Size 10\",\n  \"price\": 129.99,\n  \"quantity\": 1,\n  \"discount\": 10.00,\n  \"coupon\": \"SUMMER10\",\n  \"index\": 0,\n  \"item_list_id\": \"category_shoes\",\n  \"item_list_name\": \"Shoes Category Page\"\n}\n```\n\n### Minimum Viable items[] (P0)\n\nIf you cannot populate every field, these are the absolute minimum:\n\n```json\n{\n  \"item_id\": \"SKU-12345\",\n  \"item_name\": \"Blue Running Shoe\",\n  \"price\": 129.99,\n  \"quantity\": 1\n}\n```\n\n## Step 7: Tracking Plan Spreadsheet Template\n\nUse this structure in Google Sheets or Excel. One row per event.\n\n### Column Structure\n\n| Column | Description | Example |\n|---|---|---|\n| Event Name | snake_case event name | `purchase` |\n| Event Type | Standard or Custom | Standard |\n| Priority | P0 / P1 / P2 / P3 | P0 |\n| Description | What triggers this event | User completes checkout |\n| Trigger Location | Page or element | /checkout/confirmation |\n| Parameters | JSON-like list | `value`, `currency`, `transaction_id`, `items[]` |\n| GA4 | Checkmark if sent to GA4 | Yes |\n| Meta | Matching Meta event name | `Purchase` |\n| Google Ads | Matching conversion action | `purchase` |\n| LinkedIn | Matching conversion name | `conversion` |\n| TikTok | Matching TikTok event | `CompletePayment` |\n| Data Source | Where the data comes from | Data Layer / URL / DOM |\n| Owner | Who implements | Developer / Agency |\n| Status | Not Started / In Progress / Live / QA | Live |\n| Notes | Implementation notes | Fires after payment confirmation |\n\n### Example Row\n\n| Event Name | Type | Priority | Description | Trigger | Parameters | GA4 | Meta | Google Ads | LinkedIn | TikTok | Source | Owner | Status |\n|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n| `purchase` | Standard | P0 | Order confirmed | /thank-you | value, currency, transaction_id, items[] | Yes | Purchase | purchase | conversion | CompletePayment | Data Layer | Dev | Live |\n| `generate_lead` | Standard | P0 | Contact form submit | /contact | value, lead_type | Yes | Lead | submit_lead_form | conversion | SubmitForm | Form Submit | Dev | QA |\n| `form_start` | Custom | P1 | User begins form | /contact | form_id, form_name | Yes | -- | -- | -- | -- | JS listener | Dev | Not Started |\n\n## Step 8: Data Layer Design\n\nThe data layer is the bridge between your website and your tags. A well-structured data layer makes GTM implementation straightforward.\n\n### Standard Data Layer Push (E-Commerce Purchase)\n\n```javascript\nwindow.dataLayer = window.dataLayer || [];\nwindow.dataLayer.push({\n  event: 'purchase',\n  ecommerce: {\n    transaction_id: 'T-20260403-001',\n    value: 149.99,\n    currency: 'EUR',\n    tax: 26.05,\n    shipping: 5.99,\n    coupon: 'SPRING10',\n    items: [\n      {\n        item_id: 'SKU-12345',\n        item_name: 'Blue Running Shoe',\n        item_brand: 'BrandName',\n        item_category: 'Shoes',\n        price: 129.99,\n        quantity: 1,\n        discount: 10.00\n      }\n    ]\n  }\n});\n```\n\n### Standard Data Layer Push (Lead Gen)\n\n```javascript\nwindow.dataLayer.push({\n  event: 'generate_lead',\n  lead_type: 'contact_form',\n  form_id: 'contact-main',\n  value: 50,\n  currency: 'EUR'\n});\n```\n\n### Data Layer Validation Checklist\n\n- [ ] `dataLayer` is initialized before GTM snippet loads\n- [ ] All monetary values are numbers (not strings)\n- [ ] Currency is ISO 4217 (3-letter code)\n- [ ] `transaction_id` is unique per transaction\n- [ ] `items[]` array is present for all e-commerce events\n- [ ] Each item has at minimum `item_id`, `item_name`, `price`, `quantity`\n- [ ] No PII (names, emails, phone numbers) in the data layer\n- [ ] Custom event names follow snake_case convention\n- [ ] Events fire at the correct moment (after action, not on page load)\n\n## Step 9: Audit Your Current Setup\n\nUse the Ad Superpowers MCP tools to audit what you currently have:\n\n### Available MCP Tools\n\n1. **`gtm_list_containers`** -- List all GTM containers to identify which accounts and containers exist. Start here to get your container IDs.\n\n2. **`gtm_audit`** -- Audit a GTM container to see all tags, triggers, and variables currently configured. Compare this against your tracking plan to find gaps.\n\n3. **`ga4_run_report`** -- Pull GA4 reports to verify which events are actually arriving and with what parameters. Cross-reference with your tracking plan to find events that are planned but not firing, or firing but not planned.\n\n### Audit Workflow\n\n```\n1. gtm_list_containers\n   -> Get container ID and account ID\n\n2. gtm_audit(container_path=\"accounts/123456/containers/789012\")\n   -> Export all tags, triggers, variables\n   -> Compare against tracking plan\n\n3. ga4_run_report(\n     property_id=\"...\",\n     dimensions=[\"eventName\"],\n     metrics=[\"eventCount\"],\n     start_date=\"28daysAgo\",\n     end_date=\"today\"\n   )\n   -> See which events actually fire\n   -> Check for events in GA4 not in your plan (rogue events)\n   -> Check for events in your plan not in GA4 (missing events)\n```\n\n### Common Audit Findings\n\n| Finding | Severity | Action |\n|---|---|---|\n| P0 event missing entirely | Critical | Implement immediately |\n| P0 event fires but missing `value` parameter | High | Add parameter to data layer |\n| Duplicate events (same event, different tags) | High | Consolidate into single tag |\n| Events with wrong naming convention | Medium | Rename and migrate |\n| Rogue events not in tracking plan | Low | Document or remove |\n| P2/P3 events not yet implemented | Low | Schedule for next sprint |\n\n## Step 10: Maintenance and Governance\n\nA tracking plan is a living document. Without governance, it rots within months.\n\n### Quarterly Review Checklist\n\n- [ ] All P0 events verified firing correctly (check GA4 real-time)\n- [ ] New features/pages assessed for tracking needs\n- [ ] Removed pages/features: decommission orphaned events\n- [ ] Ad platform conversion actions match tracking plan\n- [ ] Data layer schema matches tracking plan parameters\n- [ ] GTM container audit shows no unauthorized tags\n- [ ] Consent mode functioning (check consent rates)\n- [ ] Cross-platform conversion counts reconciled\n\n### Change Management Process\n\n```\n1. Request: \"We need to track X\"\n2. Add to tracking plan spreadsheet (event name, parameters, platforms, priority)\n3. Review: Does this duplicate an existing event? Is naming consistent?\n4. Implement: Data layer push + GTM tags\n5. QA: Verify in GTM Preview, GA4 DebugView, platform event managers\n6. Document: Update tracking plan status to \"Live\"\n7. Monitor: Check event counts after 48 hours\n```\n\n### Version History\n\nKeep a changelog tab in your tracking plan:\n\n| Date | Change | Reason | Author |\n|---|---|---|---|\n| 2026-04-01 | Added `quiz_complete` event | New quiz feature launch | Dev team |\n| 2026-03-15 | Removed `old_form_submit` | Form redesigned | Marketing |\n| 2026-03-01 | Added `value` to `generate_lead` | Enable Google Ads tROAS bidding | PPC team |\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}