{"id":"de9d1c97-b759-4eb1-947f-0dff7555a7ce","shortId":"y7FxTn","kind":"skill","title":"utm-builder","tagline":"UTM Parameter Strategy & Builder — naming conventions, GA4 channel grouping rules, auto-tagging, common mistakes, and BigQuery validation queries","description":"# UTM Parameter Strategy & Builder Reference\n\nComplete guide to UTM parameter strategy, naming conventions, GA4 default channel grouping rules, auto-tagging behavior, common mistakes, and BigQuery validation queries for marketing attribution.\n\nFull docs: https://cogny.com/docs/utm-strategy\n\n## Usage\n\n```\n/utm-builder                          # Full UTM strategy overview\n/utm-builder naming conventions       # Show naming convention rules\n/utm-builder channel grouping         # GA4 default channel grouping rules\n/utm-builder meta ads                 # Meta Ads UTM template\n/utm-builder audit                    # BigQuery validation queries\n/utm-builder build google cpc         # Generate UTM URL for Google Ads\n```\n\n## Instructions\n\nYou are a UTM strategy and marketing attribution expert. Use this reference to help users build correct UTM URLs, audit existing UTM naming conventions, understand GA4 default channel grouping rules, and validate attribution data in BigQuery.\n\nWhen the user asks a question, find the relevant section below and provide precise, actionable answers. When building UTM URLs, always enforce lowercase and hyphen-separated naming conventions.\n\nIf the user provides a specific topic as an argument, focus on that area. Otherwise, provide an overview of UTM strategy fundamentals.\n\nWhen connected to Cogny MCP tools, you can pull live GA4 data and Google Ads data to audit real UTM implementations.\n\n---\n\n## The Five UTM Parameters\n\n| Parameter | Required | Purpose | Example |\n|-----------|----------|---------|---------|\n| `utm_source` | Yes | Platform or publisher sending traffic | `google`, `facebook`, `linkedin`, `newsletter` |\n| `utm_medium` | Yes | Marketing channel type | `cpc`, `paid-social`, `email`, `organic-social` |\n| `utm_campaign` | Yes | Specific campaign name | `spring-sale-2025`, `brand-awareness-q1` |\n| `utm_term` | No | Paid search keywords | `running+shoes`, `crm+software` |\n| `utm_content` | No | Creative variant or link placement | `hero-banner`, `sidebar-cta`, `blue-variant` |\n\n### Parameter Details\n\n**utm_source** — Where did the click physically happen?\n```\nutm_source=google          # Google Ads or Google organic\nutm_source=facebook        # Meta Ads (Facebook/Instagram)\nutm_source=linkedin        # LinkedIn Ads or organic\nutm_source=klaviyo         # Email via Klaviyo\nutm_source=tiktok          # TikTok Ads\nutm_source=partner-blog    # A specific referral partner\n```\n\n**utm_medium** — The channel type. This is the most important parameter for GA4 default channel grouping. If utm_medium is wrong, traffic lands in the wrong channel.\n```\nutm_medium=cpc             # Cost-per-click (paid search)\nutm_medium=paid-social     # Paid social ads\nutm_medium=email           # Email marketing\nutm_medium=organic-social  # Organic social posts\nutm_medium=display         # Display/banner ads\nutm_medium=affiliate       # Affiliate traffic\nutm_medium=referral        # Partner/referral traffic\nutm_medium=video           # Video ads\n```\n\n**utm_campaign** — Campaign name with consistent structure:\n```\nutm_campaign=spring-sale-2025\nutm_campaign=brand-awareness-q1-2025\nutm_campaign=retargeting-cart-abandoners\n```\n\n**utm_term** — Keyword or targeting term:\n```\nutm_term=running-shoes\nutm_term=best-crm-software\n```\n\n**utm_content** — Creative variant or placement:\n```\nutm_content=hero-image-v1\nutm_content=sidebar-cta\nutm_content=video-30s\n```\n\n## GA4 Default Channel Grouping Rules\n\nGA4 classifies every session into a default channel group based on `source`, `medium`, and `campaign` values. These rules determine how traffic appears in GA4 standard reports.\n\n| Channel | Medium Must Match |\n|---------|-------------------|\n| **Direct** | source = `(direct)` AND medium is `(not set)` or `(none)` |\n| **Organic Search** | medium = `organic` |\n| **Paid Search** | medium matches `^(cpc\\|ppc\\|paidsearch)$` |\n| **Display** | medium matches `^(display\\|cpm\\|banner)$` |\n| **Paid Social** | medium matches `^(paid-social\\|paidsocial\\|paid_social)$` |\n| **Organic Social** | medium matches `^(social\\|social-network\\|social-media\\|sm\\|organic-social)$` |\n| **Email** | medium = `email` |\n| **Affiliates** | medium = `affiliate` |\n| **Referral** | medium = `referral` |\n| **Audio** | medium = `audio` |\n| **SMS** | medium matches `^(sms\\|sms_message)$` |\n| **Video** | medium matches `^(video\\|youtube)$` |\n| **Cross-network** | campaign name contains `cross-network` |\n| **Unassigned** | Does not match any rule above |\n\n**Critical:** If `utm_medium` does not match any pattern above, traffic falls into **Unassigned**.\n\n## GA4 Source/Medium Mapping in BigQuery\n\nUTM values appear in multiple locations in the GA4 BigQuery export:\n\n| UTM Parameter | BigQuery Location | Scope |\n|---------------|-------------------|-------|\n| `utm_source` | `traffic_source.source` | User (first-touch) |\n| `utm_medium` | `traffic_source.medium` | User (first-touch) |\n| `utm_campaign` | `traffic_source.name` | User (first-touch) |\n| `utm_source` | Event param `source` on `session_start` | Session |\n| `utm_medium` | Event param `medium` on `session_start` | Session |\n| `utm_campaign` | Event param `campaign` on `session_start` | Session |\n\n**Session-level source/medium query:**\n```sql\nSELECT\n  (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'source') as session_source,\n  (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'medium') as session_medium,\n  (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'campaign') as session_campaign,\n  COUNT(*) as sessions\nFROM `project.analytics_123456789.events_*`\nWHERE _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY))\n                        AND FORMAT_DATE('%Y%m%d', CURRENT_DATE() - 1)\n  AND event_name = 'session_start'\nGROUP BY 1, 2, 3\nORDER BY sessions DESC\n```\n\n## Naming Conventions\n\n### Rules\n\n1. **Lowercase everything.** GA4 is case-sensitive. `Facebook` and `facebook` are separate sources.\n2. **Use hyphens as word separators.** Not spaces (become `%20`) or special characters.\n3. **No special characters.** Stick to `a-z`, `0-9`, and `-`.\n4. **Be specific but concise.** `paid-social` not `ps`.\n5. **Include time identifiers in campaigns.** `spring-sale-2025` not `spring-sale`.\n\n### Recommended Taxonomy\n\n| Parameter | Convention | Examples |\n|-----------|-----------|---------|\n| `utm_source` | Platform name, lowercase | `google`, `facebook`, `linkedin`, `klaviyo` |\n| `utm_medium` | Channel type matching GA4 rules | `cpc`, `paid-social`, `email`, `display` |\n| `utm_campaign` | `name-date` or `name-quarter` | `spring-sale-2025`, `retarget-cart-q1` |\n| `utm_term` | Keyword or targeting | `running-shoes`, `brand-keyword` |\n| `utm_content` | Creative variant or placement | `video-30s-v2`, `hero-banner`, `cta-red` |\n\n## UTM Templates by Channel\n\n### Google Ads (Search)\n```\n?utm_source=google&utm_medium=cpc&utm_campaign={campaign_name}&utm_term={keyword}&utm_content={ad_variant}\n```\n\n### Google Ads (Display)\n```\n?utm_source=google&utm_medium=display&utm_campaign={campaign_name}&utm_content={creative_variant}\n```\n\n### Meta Ads (Facebook/Instagram)\n```\nutm_source=facebook&utm_medium=paid-social&utm_campaign={{campaign.name}}&utm_content={{ad.name}}&utm_term={{adset.name}}\n```\nMeta dynamic parameters: `{{campaign.name}}`, `{{campaign.id}}`, `{{adset.name}}`, `{{adset.id}}`, `{{ad.name}}`, `{{ad.id}}`, `{{placement}}`, `{{site_source_name}}`.\n\n### LinkedIn Ads\n```\nutm_source=linkedin&utm_medium=paid-social&utm_campaign={{CAMPAIGN_NAME}}&utm_content={{CREATIVE_NAME}}\n```\nLinkedIn macros: `{{CAMPAIGN_ID}}`, `{{CAMPAIGN_NAME}}`, `{{CAMPAIGN_GROUP_ID}}`, `{{CAMPAIGN_GROUP_NAME}}`, `{{CREATIVE_ID}}`, `{{CREATIVE_NAME}}`.\n\n### Email\n```\n?utm_source={esp_name}&utm_medium=email&utm_campaign={email_campaign_name}&utm_content={link_placement}\n```\n\n### Organic Social\n```\n?utm_source={platform}&utm_medium=organic-social&utm_campaign={post_theme}&utm_content={post_variant}\n```\n\n### Influencer\n```\n?utm_source=creator-{name}&utm_medium=paid-social&utm_campaign=influencer-{campaign}-{date}&utm_content={platform}-{format}\n```\n\n### Affiliate\n```\n?utm_source=partner-{name}&utm_medium=affiliate&utm_campaign=affiliate-program-{year}&utm_content={placement}\n```\n\n## Auto-Tagging vs Manual Tagging\n\n### Google Ads (gclid)\n- Auto-tagging appends `gclid` to every click URL\n- GA4 attributes the session to Google Ads automatically with campaign, ad group, keyword data\n- Source/medium set to `google / cpc` automatically\n- **If both gclid and UTMs present, GA4 prioritizes gclid** — UTMs are ignored for GA4 attribution\n\n**When you still need UTMs with Google Ads:**\n- CRM systems that parse UTM parameters (HubSpot, Salesforce)\n- Third-party analytics tools (Mixpanel, Amplitude)\n- Cross-platform dashboards that cannot read gclid\n- Custom BigQuery attribution models using `page_location`\n\n### Meta Ads (fbclid)\n- GA4 does **not** natively parse `fbclid` for attribution\n- Without UTMs, Meta traffic appears as `facebook.com / referral` or `l.facebook.com / referral`\n- **You must use UTM parameters** for correct Meta Ads attribution in GA4\n\n### LinkedIn Ads\n- LinkedIn Insight Tag tracks conversions but does not provide click-level GA4 attribution\n- **You must use UTM parameters** for correct LinkedIn Ads attribution in GA4\n\n### When to Use Both\n- Google Ads + CRM integration: gclid feeds GA4, UTMs feed CRM\n- Cross-platform dashboards that need UTMs\n- Custom BigQuery attribution models\n\n**Warning:** For Google Ads, ensure \"Allow manual tagging to override auto-tagging\" is **unchecked** in GA4 settings unless you specifically want UTMs to override gclid.\n\n## Common UTM Mistakes\n\n### 1. Inconsistent Naming\nGA4 treats each unique string as a separate source:\n```\nutm_source=Facebook       # WRONG: capital F\nutm_source=facebook       # CORRECT\nutm_source=fb             # WRONG: abbreviation\n```\n\n### 2. UTMs on Internal Links\nAdding UTMs to links within your own site resets session source and inflates session counts. Never do this:\n```html\n<!-- WRONG -->\n<a href=\"/pricing?utm_source=homepage&utm_medium=banner\">Pricing</a>\n```\n\n### 3. Missing utm_medium\nWithout utm_medium, traffic falls into Unassigned:\n```\n# BAD: No medium\n?utm_source=facebook&utm_campaign=spring-sale\n\n# GOOD: Medium present\n?utm_source=facebook&utm_medium=paid-social&utm_campaign=spring-sale\n```\n\n### 4. URL-Encoded Special Characters\n```\n# BAD\nutm_campaign=Spring Sale 2025    # Becomes Spring%20Sale%202025\n\n# GOOD\nutm_campaign=spring-sale-2025\n```\n\n### 5. UTMs on Organic/SEO Pages\nNever add UTM parameters to pages search engines crawl — splits page authority and creates duplicate content.\n\n### 6. Not Including Date in Campaign Names\n```\n# BAD: Cannot distinguish quarters\nutm_campaign=brand-search\n\n# GOOD: Time-scoped\nutm_campaign=brand-search-q1-2025\n```\n\n## BigQuery Validation Queries\n\n### All Unique Source/Medium Combinations\n```sql\nSELECT\n  traffic_source.source,\n  traffic_source.medium,\n  COUNT(DISTINCT user_pseudo_id) as users,\n  MIN(PARSE_DATE('%Y%m%d', event_date)) as first_seen,\n  MAX(PARSE_DATE('%Y%m%d', event_date)) as last_seen\nFROM `project.analytics_123456789.events_*`\nWHERE _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 90 DAY))\n                        AND FORMAT_DATE('%Y%m%d', CURRENT_DATE() - 1)\nGROUP BY 1, 2\nORDER BY users DESC\n```\n\n### Find Inconsistent Source Naming\n```sql\nWITH source_variants AS (\n  SELECT\n    LOWER(traffic_source.source) as normalized_source,\n    traffic_source.source as original_source,\n    COUNT(DISTINCT user_pseudo_id) as users\n  FROM `project.analytics_123456789.events_*`\n  WHERE _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 90 DAY))\n                          AND FORMAT_DATE('%Y%m%d', CURRENT_DATE() - 1)\n    AND traffic_source.source IS NOT NULL\n  GROUP BY 1, 2\n)\nSELECT\n  normalized_source,\n  ARRAY_AGG(STRUCT(original_source, users) ORDER BY users DESC) as variants,\n  COUNT(*) as variant_count\nFROM source_variants\nGROUP BY 1\nHAVING COUNT(*) > 1\nORDER BY variant_count DESC\n```\n\n### Predict Channel Grouping Assignment\n```sql\nSELECT\n  traffic_source.source,\n  traffic_source.medium,\n  CASE\n    WHEN traffic_source.source = '(direct)' AND (traffic_source.medium IS NULL OR traffic_source.medium IN ('(not set)', '(none)')) THEN 'Direct'\n    WHEN traffic_source.medium = 'organic' THEN 'Organic Search'\n    WHEN REGEXP_CONTAINS(traffic_source.medium, r'^(cpc|ppc|paidsearch)$') THEN 'Paid Search'\n    WHEN REGEXP_CONTAINS(traffic_source.medium, r'^(display|cpm|banner)$') THEN 'Display'\n    WHEN REGEXP_CONTAINS(traffic_source.medium, r'^(paid-social|paidsocial|paid_social)$') THEN 'Paid Social'\n    WHEN REGEXP_CONTAINS(traffic_source.medium, r'^(social|social-network|social-media|sm|social_network|social_media|organic-social)$') THEN 'Organic Social'\n    WHEN traffic_source.medium = 'email' THEN 'Email'\n    WHEN traffic_source.medium = 'affiliate' THEN 'Affiliates'\n    WHEN traffic_source.medium = 'referral' THEN 'Referral'\n    WHEN traffic_source.medium = 'audio' THEN 'Audio'\n    WHEN REGEXP_CONTAINS(traffic_source.medium, r'^(sms|sms_message)$') THEN 'SMS'\n    WHEN REGEXP_CONTAINS(traffic_source.medium, r'^(video|youtube)$') THEN 'Video'\n    WHEN REGEXP_CONTAINS(IFNULL(traffic_source.name, ''), r'cross-network') THEN 'Cross-network'\n    ELSE 'Unassigned'\n  END as predicted_channel_group,\n  COUNT(DISTINCT user_pseudo_id) as users\nFROM `project.analytics_123456789.events_*`\nWHERE _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY))\n                        AND FORMAT_DATE('%Y%m%d', CURRENT_DATE() - 1)\nGROUP BY 1, 2, 3\nORDER BY users DESC\n```\n\n### Find Internal UTM Pollution\n```sql\nSELECT\n  (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'page_location') as landing_page,\n  (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'page_referrer') as referrer,\n  (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'source') as session_source,\n  (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'medium') as session_medium,\n  COUNT(*) as sessions\nFROM `project.analytics_123456789.events_*`\nWHERE _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY))\n                        AND FORMAT_DATE('%Y%m%d', CURRENT_DATE() - 1)\n  AND event_name = 'session_start'\n  -- Replace example.com with your domain\n  AND REGEXP_CONTAINS(\n    (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'page_referrer'),\n    r'example\\.com'\n  )\n  AND REGEXP_CONTAINS(\n    (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'page_location'),\n    r'utm_'\n  )\nGROUP BY 1, 2, 3, 4\nORDER BY sessions DESC\n```\n\n### Find Sessions Missing utm_medium\n```sql\nSELECT\n  (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'source') as source,\n  (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'campaign') as campaign,\n  COUNT(*) as sessions\nFROM `project.analytics_123456789.events_*`\nWHERE _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY))\n                        AND FORMAT_DATE('%Y%m%d', CURRENT_DATE() - 1)\n  AND event_name = 'session_start'\n  AND (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'source') IS NOT NULL\n  AND (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'source') != '(direct)'\n  AND (\n    (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'medium') IS NULL\n    OR (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'medium') IN ('(not set)', '(none)', '')\n  )\nGROUP BY 1, 2\nORDER BY sessions DESC\n```\n\n## Spreadsheet Builder Formula\n\nGoogle Sheets formula to generate UTM URLs from columns (A=URL, B=source, C=medium, D=campaign, E=term, F=content):\n```\n=A2&\"?utm_source=\"&B2&\"&utm_medium=\"&C2&\"&utm_campaign=\"&D2&IF(E2<>\"\",\"&utm_term=\"&E2,\"\")&IF(F2<>\"\",\"&utm_content=\"&F2,\"\")\n```\n\n## Resources\n\n- **Google UTM Builder:** https://ga-dev-tools.google/ga4/campaign-url-builder/\n- **GA4 Default Channel Grouping:** https://support.google.com/analytics/answer/9756891\n- **GA4 BigQuery Export Schema:** https://support.google.com/analytics/answer/7029846\n- **Google Ads Auto-Tagging:** https://support.google.com/google-ads/answer/3095550\n- **Meta URL Parameters:** https://www.facebook.com/business/help/1016122818401732\n- **Full Cogny Docs:** https://cogny.com/docs/utm-strategy","tags":["utm","builder","claude","code","marketing","skills","cognyai","agent-skills","ai-agents","claude-code","claude-skills","cluade-mcp"],"capabilities":["skill","source-cognyai","skill-utm-builder","topic-agent-skills","topic-ai-agents","topic-claude-code","topic-claude-skills","topic-cluade-mcp","topic-cursor","topic-geo","topic-growth-hacking","topic-llm","topic-marketing","topic-mcp","topic-seo"],"categories":["claude-code-marketing-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/cognyai/claude-code-marketing-skills/utm-builder","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add cognyai/claude-code-marketing-skills","source_repo":"https://github.com/cognyai/claude-code-marketing-skills","install_from":"skills.sh"}},"qualityScore":"0.471","qualityRationale":"deterministic score 0.47 from registry signals: · indexed on github topic:agent-skills · 42 github stars · SKILL.md body (16,481 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-01T06:56:28.073Z","embedding":null,"createdAt":"2026-04-18T22:23:42.889Z","updatedAt":"2026-05-01T06:56:28.073Z","lastSeenAt":"2026-05-01T06:56:28.073Z","tsv":"'-9':818 '/analytics/answer/7029846':2156 '/analytics/answer/9756891':2149 '/business/help/1016122818401732':2170 '/docs/utm-strategy':58,2176 '/ga4/campaign-url-builder/':2142 '/google-ads/answer/3095550':2164 '/utm-builder':60,65,72,80,87,92 '0':817 '1':763,771,781,1301,1528,1531,1589,1597,1623,1626,1812,1815,1910,1956,2024,2086 '2':772,795,1328,1532,1598,1816,1957,2087 '20':804 '202025':1406 '2025':254,426,433,839,883,1402,1413,1461 '20sale':1405 '3':773,808,1353,1817,1958 '30':753,1802,1900,2014 '30s':478,907 '4':820,1391,1959 '5':830,1414 '6':1435 '90':1518,1579 'a-z':814 'a2':2116 'abandon':439 'abbrevi':1327 'action':153 'ad':82,84,101,204,300,308,314,327,380,398,413,920,937,940,957,990,1101,1118,1122,1154,1186,1215,1220,1243,1252,1275,1333,2158 'ad.id':984 'ad.name':972,983 'add':1420 'adset.id':982 'adset.name':975,981 'affili':401,402,569,571,1077,1084,1088,1727,1729 'affiliate-program':1087 'agg':1603 'allow':1277 'alway':159 'amplitud':1169 'analyt':1166 'answer':154 'appear':505,626,1200 'append':1106 'area':181 'argument':177 'array':1602 'ask':142 'assign':1635 'attribut':53,110,135,1113,1146,1180,1195,1216,1234,1244,1270 'audio':575,577,1737,1739 'audit':88,122,207 'author':1430 'auto':15,42,1095,1104,1283,2160 'auto-tag':14,41,1094,1103,1282,2159 'automat':1119,1131 'awar':257,431 'b':2106 'b2':2119 'bad':1364,1397,1442 'banner':279,540,911,1680 'base':493 'becom':803,1403 'behavior':44 'best':454 'best-crm-softwar':453 'bigqueri':20,48,89,138,623,633,637,1179,1269,1462,2151 'blog':332 'blue':284 'blue-vari':283 'brand':256,430,897,1449,1458 'brand-awareness-q1':255,429 'brand-keyword':896 'brand-search':1448 'brand-search-q1':1457 'build':93,118,156 'builder':3,7,26,2093,2139 'c':2108 'c2':2122 'campaign':246,249,415,416,422,428,435,498,592,655,680,683,730,733,835,872,929,930,949,950,968,1000,1001,1009,1011,1013,1016,1032,1034,1051,1069,1071,1086,1121,1371,1387,1399,1409,1440,1447,1456,1992,1994,2111,2124 'campaign.id':980 'campaign.name':969,979 'cannot':1175,1443 'capit':1317 'cart':438,886 'case':787,1640 'case-sensit':786 'channel':11,38,73,77,130,235,340,351,363,481,491,510,860,918,1633,1777,2145 'charact':807,811,1396 'classifi':485 'click':293,370,1110,1231 'click-level':1230 'cogni':193,2172 'cogny.com':57,2175 'cogny.com/docs/utm-strategy':56,2174 'column':2103 'com':1937 'combin':1468 'common':17,45,1298 'complet':28 'concis':824 'connect':191 'consist':419 'contain':594,1664,1675,1685,1699,1742,1752,1761,1923,1940 'content':270,458,464,470,475,900,936,953,971,1004,1037,1055,1074,1092,1434,2115,2134 'convent':9,35,67,70,126,167,779,847 'convers':1225 'correct':119,1213,1241,1322 'cost':368 'cost-per-click':367 'count':734,1347,1473,1556,1614,1617,1625,1630,1779,1881,1995 'cpc':95,237,366,532,865,927,1130,1667 'cpm':539,1679 'crawl':1427 'creat':1432 'creativ':272,459,901,954,1005,1019,1021 'creator':1061 'critic':605 'crm':267,455,1155,1253,1260 'cross':590,596,1171,1262,1766,1770 'cross-network':589,595,1765,1769 'cross-platform':1170,1261 'cta':282,473,913 'cta-r':912 'current':750,761,1515,1526,1576,1587,1799,1810,1897,1908,2011,2022 'custom':1178,1268 'd':747,760,1485,1496,1512,1525,1573,1586,1796,1809,1894,1907,2008,2021,2110 'd2':2125 'dashboard':1173,1264 'data':136,201,205,1125 'date':744,748,751,757,762,875,1072,1438,1482,1487,1493,1498,1509,1513,1516,1522,1527,1570,1574,1577,1583,1588,1793,1797,1800,1806,1811,1891,1895,1898,1904,1909,2005,2009,2012,2018,2023 'day':754,1519,1580,1803,1901,2015 'default':37,76,129,350,480,490,2144 'desc':777,1536,1611,1631,1821,1963,2091 'detail':287 'determin':502 'direct':514,516,1643,1655,2055 'display':396,535,538,870,941,947,1678,1682 'display/banner':397 'distinct':1474,1557,1780 'distinguish':1444 'doc':55,2173 'domain':1920 'duplic':1433 'dynam':977 'e':2112 'e2':2127,2130 'els':1772 'email':241,320,383,384,566,568,869,1023,1030,1033,1722,1724 'encod':1394 'end':1774 'enforc':160 'engin':1426 'ensur':1276 'esp':1026 'event':663,672,681,700,713,726,765,1486,1497,1833,1847,1860,1873,1912,1929,1946,1976,1988,2026,2036,2050,2062,2075 'everi':486,1109 'everyth':783 'exampl':218,848,1936 'example.com':1917 'exist':123 'expert':111 'export':634,2152 'f':1318,2114 'f2':2132,2135 'facebook':228,306,789,791,855,961,1315,1321,1369,1380 'facebook.com':1202 'facebook/instagram':309,958 'fall':616,1361 'fb':1325 'fbclid':1187,1193 'feed':1256,1259 'find':145,1537,1822,1964 'first':645,652,659,1489 'first-touch':644,651,658 'five':212 'focus':178 'format':743,756,1076,1508,1521,1569,1582,1792,1805,1890,1903,2004,2017 'formula':2094,2097 'full':54,61,2171 'fundament':189 'ga-dev-tools.google':2141 'ga-dev-tools.google/ga4/campaign-url-builder/':2140 'ga4':10,36,75,128,200,349,479,484,507,619,632,784,863,1112,1138,1145,1188,1218,1233,1246,1257,1288,1304,2143,2150 'gclid':1102,1107,1134,1140,1177,1255,1297 'generat':96,2099 'good':1375,1407,1451 'googl':94,100,203,227,298,299,302,854,919,924,939,944,1100,1117,1129,1153,1251,1274,2095,2137,2157 'group':12,39,74,78,131,352,482,492,769,1014,1017,1123,1529,1595,1621,1634,1778,1813,1954,2084,2146 'guid':29 'happen':295 'help':116 'hero':278,466,910 'hero-bann':277,909 'hero-image-v1':465 'html':1351 'hubspot':1161 'hyphen':164,797 'hyphen-separ':163 'id':1010,1015,1020,1477,1560,1783 'identifi':833 'ifnul':1762 'ignor':1143 'imag':467 'implement':210 'import':346 'includ':831,1437 'inconsist':1302,1538 'inflat':1345 'influenc':1058,1070 'insight':1222 'instruct':102 'integr':1254 'intern':1331,1823 'interv':752,1517,1578,1801,1899,2013 'key':703,716,729,1836,1850,1863,1876,1932,1949,1979,1991,2039,2053,2065,2078 'keyword':264,442,890,898,934,1124 'klaviyo':319,322,857 'l.facebook.com':1205 'land':359,1840 'last':1500 'level':690,1232 'link':275,1038,1332,1336 'linkedin':229,312,313,856,989,993,1007,1219,1221,1242 'live':199 'locat':629,638,1184,1838,1951 'lower':1547 'lowercas':161,782,853 'm':746,759,1484,1495,1511,1524,1572,1585,1795,1808,1893,1906,2007,2020 'macro':1008 'manual':1098,1278 'map':621 'market':52,109,234,385 'match':513,531,537,544,554,580,586,601,611,862 'max':1491 'mcp':194 'media':561,1708,1713 'medium':232,338,355,365,374,382,387,395,400,405,410,496,511,518,526,530,536,543,553,567,570,573,576,579,585,608,648,671,674,717,720,859,926,946,963,995,1029,1046,1064,1083,1356,1359,1366,1376,1382,1877,1880,1968,2066,2079,2109,2121 'messag':583,1747 'meta':81,83,307,956,976,1185,1198,1214,2165 'min':1480 'miss':1354,1966 'mistak':18,46,1300 'mixpanel':1168 'model':1181,1271 'multipl':628 'must':512,1208,1236 'name':8,34,66,69,125,166,250,417,593,766,778,852,874,878,931,951,988,1002,1006,1012,1018,1022,1027,1035,1062,1081,1303,1441,1540,1913,2027 'name-d':873 'name-quart':877 'nativ':1191 'need':1150,1266 'network':558,591,597,1705,1711,1767,1771 'never':1348,1419 'newslett':230 'none':523,1653,2083 'normal':1550,1600 'null':1594,1647,2043,2068 'order':774,1533,1608,1627,1818,1960,2088 'organ':243,303,316,389,391,524,527,551,564,1040,1048,1658,1660,1715,1718 'organic-soci':242,388,563,1047,1714 'organic/seo':1417 'origin':1554,1605 'otherwis':182 'overrid':1281,1296 'overview':64,185 'page':1183,1418,1424,1429,1837,1841,1851,1933,1950 'paid':239,262,371,376,378,528,541,546,549,826,867,965,997,1066,1384,1671,1689,1692,1695 'paid-soci':238,375,545,825,866,964,996,1065,1383,1688 'paidsearch':534,1669 'paidsoci':548,1691 'param':664,673,682,701,714,727,1834,1848,1861,1874,1930,1947,1977,1989,2037,2051,2063,2076 'paramet':5,24,32,214,215,286,347,636,846,978,1160,1211,1239,1422,2167 'pars':1158,1192,1481,1492 'parti':1165 'partner':331,336,1080 'partner-blog':330 'partner/referral':407 'pattern':613 'per':369 'physic':294 'placement':276,462,904,985,1039,1093 'platform':222,851,1044,1075,1172,1263 'pollut':1825 'post':393,1052,1056 'ppc':533,1668 'precis':152 'predict':1632,1776 'present':1137,1377 'price':1352 'priorit':1139 'program':1089 'project.analytics_123456789.events':738,1503,1564,1787,1885,1999 'provid':151,171,183,1229 'ps':829 'pseudo':1476,1559,1782 'publish':224 'pull':198 'purpos':217 'q1':258,432,887,1460 'quarter':879,1445 'queri':22,50,91,692,1464 'question':144 'r':1666,1677,1687,1701,1744,1754,1764,1935,1952 'read':1176 'real':208 'recommend':844 'red':914 'refer':27,114 'referr':335,406,572,574,1203,1206,1732,1734,1852,1854,1934 'regexp':1663,1674,1684,1698,1741,1751,1760,1922,1939 'relev':147 'replac':1916 'report':509 'requir':216 'reset':1341 'resourc':2136 'retarget':437,885 'retarget-cart-q1':884 'retargeting-cart-abandon':436 'rule':13,40,71,79,132,483,501,603,780,864 'run':265,449,894 'running-sho':448,893 'sale':253,425,838,843,882,1374,1390,1401,1412 'salesforc':1162 'schema':2153 'scope':639,1454 'search':263,372,525,529,921,1425,1450,1459,1661,1672 'section':148 'seen':1490,1501 'select':694,695,708,721,1470,1546,1599,1637,1827,1828,1842,1855,1868,1924,1941,1970,1971,1983,2031,2045,2057,2070 'send':225 'sensit':788 'separ':165,793,800,1311 'session':487,667,669,676,678,685,687,689,706,719,732,736,767,776,1115,1342,1346,1866,1879,1883,1914,1962,1965,1997,2028,2090 'session-level':688 'set':521,1127,1289,1652,2082 'sheet':2096 'shoe':266,450,895 'show':68 'sidebar':281,472 'sidebar-cta':280,471 'site':986,1340 'skill' 'skill-utm-builder' 'sm':562,1709 'sms':578,581,582,1745,1746,1749 'social':240,244,377,379,390,392,542,547,550,552,555,557,560,565,827,868,966,998,1041,1049,1067,1385,1690,1693,1696,1702,1704,1707,1710,1712,1716,1719 'social-media':559,1706 'social-network':556,1703 'softwar':268,456 'sourc':220,289,297,305,311,318,324,329,495,515,641,662,665,704,707,794,850,923,943,960,987,992,1025,1043,1060,1079,1312,1314,1320,1324,1343,1368,1379,1539,1543,1551,1555,1601,1606,1619,1864,1867,1980,1982,2040,2054,2107,2118 'source-cognyai' 'source/medium':620,691,1126,1467 'space':802 'special':806,810,1395 'specif':173,248,334,822,1292 'split':1428 'spreadsheet':2092 'spring':252,424,837,842,881,1373,1389,1400,1404,1411 'spring-sal':251,423,836,841,880,1372,1388,1410 'sql':693,1469,1541,1636,1826,1969 'standard':508 'start':668,677,686,768,1915,2029 'stick':812 'still':1149 'strategi':6,25,33,63,107,188 'string':1308 'struct':1604 'structur':420 'sub':749,1514,1575,1798,1896,2010 'suffix':741,1506,1567,1790,1888,2002 'support.google.com':2148,2155,2163 'support.google.com/analytics/answer/7029846':2154 'support.google.com/analytics/answer/9756891':2147 'support.google.com/google-ads/answer/3095550':2162 'system':1156 'tabl':740,1505,1566,1789,1887,2001 'tag':16,43,1096,1099,1105,1223,1279,1284,2161 'target':444,892 'taxonomi':845 'templat':86,916 'term':260,441,445,447,452,889,933,974,2113,2129 'theme':1053 'third':1164 'third-parti':1163 'tiktok':325,326 'time':832,1453 'time-scop':1452 'tool':195,1167 'topic':174 'topic-agent-skills' 'topic-ai-agents' 'topic-claude-code' 'topic-claude-skills' 'topic-cluade-mcp' 'topic-cursor' 'topic-geo' 'topic-growth-hacking' 'topic-llm' 'topic-marketing' 'topic-mcp' 'topic-seo' 'touch':646,653,660 'track':1224 'traffic':226,358,403,408,504,615,1199,1360 'traffic_source.medium':649,1472,1639,1645,1649,1657,1665,1676,1686,1700,1721,1726,1731,1736,1743,1753 'traffic_source.name':656,1763 'traffic_source.source':642,1471,1548,1552,1591,1638,1642 'treat':1305 'type':236,341,861 'unassign':598,618,1363,1773 'uncheck':1286 'understand':127 'uniqu':1307,1466 'unless':1290 'unnest':699,712,725,1832,1846,1859,1872,1928,1945,1975,1987,2035,2049,2061,2074 'url':98,121,158,1111,1393,2101,2105,2166 'url-encod':1392 'usag':59 'use':112,796,1182,1209,1237,1249 'user':117,141,170,643,650,657,1475,1479,1535,1558,1562,1607,1610,1781,1785,1820 'utm':2,4,23,31,62,85,97,106,120,124,157,187,209,213,219,231,245,259,269,288,296,304,310,317,323,328,337,354,364,373,381,386,394,399,404,409,414,421,427,434,440,446,451,457,463,469,474,607,624,635,640,647,654,661,670,679,849,858,871,888,899,915,922,925,928,932,935,942,945,948,952,959,962,967,970,973,991,994,999,1003,1024,1028,1031,1036,1042,1045,1050,1054,1059,1063,1068,1073,1078,1082,1085,1091,1136,1141,1151,1159,1197,1210,1238,1258,1267,1294,1299,1313,1319,1323,1329,1334,1355,1358,1367,1370,1378,1381,1386,1398,1408,1415,1421,1446,1455,1824,1953,1967,2100,2117,2120,2123,2128,2133,2138 'utm-build':1 'v1':468 'v2':908 'valid':21,49,90,134,1463 'valu':499,625,697,710,723,1830,1844,1857,1870,1926,1943,1973,1985,2033,2047,2059,2072 'value.string':696,709,722,1829,1843,1856,1869,1925,1942,1972,1984,2032,2046,2058,2071 'variant':273,285,460,902,938,955,1057,1544,1613,1616,1620,1629 'via':321 'video':411,412,477,584,587,906,1755,1758 'video-30s':476 'video-30s-v2':905 'vs':1097 'want':1293 'warn':1272 'within':1337 'without':1196,1357 'word':799 'wrong':357,362,1316,1326 'www.facebook.com':2169 'www.facebook.com/business/help/1016122818401732':2168 'y':745,758,1483,1494,1510,1523,1571,1584,1794,1807,1892,1905,2006,2019 'year':1090 'yes':221,233,247 'youtub':588,1756 'z':816","prices":[{"id":"ee92dad1-8f6d-484b-ab48-26f48be855bc","listingId":"de9d1c97-b759-4eb1-947f-0dff7555a7ce","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"cognyai","category":"claude-code-marketing-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T22:23:42.889Z"}],"sources":[{"listingId":"de9d1c97-b759-4eb1-947f-0dff7555a7ce","source":"github","sourceId":"cognyai/claude-code-marketing-skills/utm-builder","sourceUrl":"https://github.com/cognyai/claude-code-marketing-skills/tree/main/skills/utm-builder","isPrimary":false,"firstSeenAt":"2026-04-18T22:23:42.889Z","lastSeenAt":"2026-05-01T06:56:28.073Z"}],"details":{"listingId":"de9d1c97-b759-4eb1-947f-0dff7555a7ce","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"cognyai","slug":"utm-builder","github":{"repo":"cognyai/claude-code-marketing-skills","stars":42,"topics":["agent-skills","ai-agents","claude-code","claude-skills","cluade-mcp","cursor","geo","growth-hacking","llm","marketing","mcp","seo","vibe","windsurf"],"license":null,"html_url":"https://github.com/cognyai/claude-code-marketing-skills","pushed_at":"2026-04-29T13:43:50Z","description":"Marketing skills for Claude Code — SEO audits and implementation, ad analysis, ad optimization. Free skills need no account. $9/mo for live Search Console, Bing & LinkedIn data.","skill_md_sha":"ad8d5cdafa35c9378994aa0f2412b56ef9eac0a9","skill_md_path":"skills/utm-builder/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/cognyai/claude-code-marketing-skills/tree/main/skills/utm-builder"},"layout":"multi","source":"github","category":"claude-code-marketing-skills","frontmatter":{"name":"utm-builder","description":"UTM Parameter Strategy & Builder — naming conventions, GA4 channel grouping rules, auto-tagging, common mistakes, and BigQuery validation queries"},"skills_sh_url":"https://skills.sh/cognyai/claude-code-marketing-skills/utm-builder"},"updatedAt":"2026-05-01T06:56:28.073Z"}}