{
  "id": "acp.analytics.utm",
  "protocol": "acp",
  "layer": "foundation",
  "role": "merchant",
  "status": "recommended",
  "title": "Tag ChatGPT feed URLs with your own required UTMs",
  "description": "OpenAI's products spec requires url to be the stable product page with the variant selected. It does not document any UTM tag added by ChatGPT, so shops tag their own feed URLs and also segment on the referrer.",
  "goal": "Attribute ChatGPT visits and revenue per product with tags you control.",
  "note": "The products spec neither allows nor forbids extra query parameters in url. Using chatgpt.com as utm_source keeps it aligned with the referrer hostname. Templates follow Simon Vreeman's convention (vreeman.com/utm): required utm_source and utm_medium; optional utm_campaign, utm_content, utm_term, utm_source_platform, utm_creative_format and utm_marketing_tactic. For AI assistants choose the medium yourself (not referral). Templates use {ai_medium}. Option A: utm_medium=ai-assistant lands in GA4's built-in AI Assistant default channel with no setup (support.google.com/analytics/answer/9756891). Option B: your own medium (for example ai) plus a GA4 custom channel group placed above Referral; without that group the traffic lands in Unassigned. Recommendation, not an OpenAI rule. The audit only checks that source and medium are present and lowercase; it does not enforce a specific medium value.",
  "how_to_implement": {
    "steps": [
      "Required: append ?utm_source=chatgpt.com&utm_medium={ai_medium} to every url (use & if a query string exists), all lowercase. Replace {ai_medium} with your choice (Option A or B).",
      "Optional: also add utm_campaign=chatgpt-shopping, utm_content={item_id}, utm_source_platform=openai (and other optional UTMs when useful).",
      "Keep values static per item so url stays stable.",
      "Do not strip UTM parameters in redirects.",
      "Also segment on referrer chatgpt.com; if you pick Option B, create a GA4 custom channel group (see measurement.referrer-segments)."
    ]
  },
  "resources": [
    {
      "label": "OpenAI file upload: products spec",
      "url": "https://developers.openai.com/commerce/specs/file-upload/products",
      "type": "spec",
      "publisher": "OpenAI"
    },
    {
      "label": "Simon Vreeman: GA4 UTM convention and builder",
      "url": "https://vreeman.com/utm",
      "type": "docs",
      "publisher": "Simon Vreeman (convention)"
    },
    {
      "label": "GA4 default channel group",
      "url": "https://support.google.com/analytics/answer/9756891",
      "type": "docs",
      "publisher": "Google"
    }
  ],
  "audit": {
    "method": "feed_check",
    "automatable": true,
    "expect": {
      "url_fields": [
        "url"
      ],
      "query_params": {
        "utm_source": "chatgpt.com"
      },
      "required_params": [
        "utm_source",
        "utm_medium"
      ],
      "optional_params": [
        "utm_campaign",
        "utm_content",
        "utm_term",
        "utm_source_platform",
        "utm_creative_format",
        "utm_marketing_tactic"
      ],
      "lowercase": true,
      "no_duplicate_params": true,
      "http_status": 200
    },
    "human": "Every OpenAI feed row's url carries utm_source=chatgpt.com and a utm_medium value (any lowercase value; the audit does not enforce a specific medium), no duplicates, and returns 200. Optional UTMs (campaign, content, term, source_platform, creative_format, marketing_tactic) are reported as info only."
  },
  "how_to_verify": "Every OpenAI feed row's url carries utm_source=chatgpt.com and a utm_medium value (any lowercase value; the audit does not enforce a specific medium), no duplicates, and returns 200. Optional UTMs (campaign, content, term, source_platform, creative_format, marketing_tactic) are reported as info only.",
  "artifacts": [
    "utm_source=chatgpt.com",
    "utm_medium",
    "{ai_medium}"
  ],
  "depends_on": [
    "measurement.utm.feed-links"
  ],
  "status_note": "The products spec neither allows nor forbids extra query parameters in url. Using chatgpt.com as utm_source keeps it aligned with the referrer hostname. Templates follow Simon Vreeman's convention (vreeman.com/utm): required utm_source and utm_medium; optional utm_campaign, utm_content, utm_term, utm_source_platform, utm_creative_format and utm_marketing_tactic. For AI assistants choose the medium yourself (not referral). Templates use {ai_medium}. Option A: utm_medium=ai-assistant lands in GA4's built-in AI Assistant default channel with no setup (support.google.com/analytics/answer/9756891). Option B: your own medium (for example ai) plus a GA4 custom channel group placed above Referral; without that group the traffic lands in Unassigned. Recommendation, not an OpenAI rule. The audit only checks that source and medium are present and lowercase; it does not enforce a specific medium value.",
  "verified": true,
  "slug": "acp-analytics-utm",
  "category": "foundation",
  "url": "https://vreeman.ai/commerce/checklist#acp.analytics.utm",
  "updated": "2026-10-12",
  "sources": [
    {
      "label": "OpenAI file upload: products spec",
      "url": "https://developers.openai.com/commerce/specs/file-upload/products",
      "type": "spec",
      "publisher": "OpenAI"
    },
    {
      "label": "Simon Vreeman: GA4 UTM convention and builder",
      "url": "https://vreeman.com/utm",
      "type": "docs",
      "publisher": "Simon Vreeman (convention)"
    },
    {
      "label": "GA4 default channel group",
      "url": "https://support.google.com/analytics/answer/9756891",
      "type": "docs",
      "publisher": "Google"
    }
  ],
  "related_slugs": [
    "measurement-utm-feed-links"
  ]
}