{
  "name": "GTM Experiment Registry",
  "nodes": [
    {
      "id": "e371659c-c3b2-444e-97b9-d93f7cb57b7f",
      "name": "Register GTM Experiment",
      "type": "n8n-nodes-base.formTrigger",
      "typeVersion": 2.6,
      "position": [0, 0],
      "parameters": {
        "formTitle": "Register a GTM Experiment",
        "formDescription": "Register a growth/GTM experiment with a defined success metric, control group, and end date. It will be auto-tracked and auto-sunset with a results digest posted to Slack.",
        "formFields": {
          "values": [
            {"fieldLabel": "Experiment Name", "fieldType": "text", "requiredField": true},
            {"fieldLabel": "Hypothesis", "fieldType": "textarea", "requiredField": true},
            {"fieldLabel": "Success Metric", "fieldType": "text", "requiredField": true},
            {"fieldLabel": "Metric Source", "fieldType": "dropdown", "requiredField": true, "fieldOptions": {"values": [{"option": "salesforce"}, {"option": "hubspot"}, {"option": "clay"}]}},
            {"fieldLabel": "Control Group Definition", "fieldType": "textarea", "requiredField": true},
            {"fieldLabel": "Treatment Group Definition", "fieldType": "textarea", "requiredField": true},
            {"fieldLabel": "Success Threshold", "fieldType": "number", "requiredField": true, "placeholder": "Minimum percentage-point lift required to ship"},
            {"fieldLabel": "End Date", "fieldType": "date", "requiredField": true},
            {"fieldLabel": "Registered By", "fieldType": "text", "requiredField": true}
          ]
        },
        "options": {"appendAttribution": false, "path": "register-experiment"}
      },
      "webhookId": "52e237a5-ed1f-43b2-be5a-2ff59f5bf037"
    },
    {
      "id": "8e0484b7-941d-4bdc-95c4-2eb44fe99aa8",
      "name": "Build Registry Row",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [224, 0],
      "parameters": {
        "jsCode": "const f = $json;\nfunction slugify(s) { return (s || '').toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/(^-|-$)/g, ''); }\nreturn [{ json: {\n  experimentId: slugify(f['Experiment Name']) + '-' + Date.now().toString(36),\n  experimentName: f['Experiment Name'],\n  hypothesis: f['Hypothesis'],\n  successMetric: f['Success Metric'],\n  metricSource: (f['Metric Source'] || '').toLowerCase(),\n  controlGroupDefinition: f['Control Group Definition'],\n  treatmentGroupDefinition: f['Treatment Group Definition'],\n  successThresholdPct: Number(f['Success Threshold']),\n  endDate: f['End Date'],\n  status: 'active',\n  registeredBy: f['Registered By'],\n  registeredAt: new Date().toISOString()\n} }];"
      }
    },
    {
      "id": "42e7c48c-41ea-4681-a29e-7852e51d4952",
      "name": "Log New Experiment",
      "type": "n8n-nodes-base.dataTable",
      "typeVersion": 1.1,
      "position": [448, 0],
      "parameters": {
        "resource": "row",
        "operation": "insert",
        "dataTableId": {"__rl": true, "mode": "id", "value": "251UYVEzLj56MxiH", "cachedResultName": "GTM Experiment Registry"},
        "columns": {"mappingMode": "defineBelow", "value": {
          "experimentId": "={{ $json.experimentId }}",
          "experimentName": "={{ $json.experimentName }}",
          "hypothesis": "={{ $json.hypothesis }}",
          "successMetric": "={{ $json.successMetric }}",
          "metricSource": "={{ $json.metricSource }}",
          "controlGroupDefinition": "={{ $json.controlGroupDefinition }}",
          "treatmentGroupDefinition": "={{ $json.treatmentGroupDefinition }}",
          "successThresholdPct": "={{ $json.successThresholdPct }}",
          "endDate": "={{ $json.endDate }}",
          "status": "={{ $json.status }}",
          "registeredBy": "={{ $json.registeredBy }}",
          "registeredAt": "={{ $json.registeredAt }}"
        }}
      }
    },
    {
      "id": "d18822f9-374e-4611-8724-51e8db473298",
      "name": "Post Registration Confirmation",
      "type": "n8n-nodes-base.slack",
      "typeVersion": 2.7,
      "position": [672, 0],
      "parameters": {
        "select": "channel",
        "channelId": {"__rl": true, "mode": "id", "value": "C0BQ3G96HL6", "cachedResultName": "general"},
        "text": "=:test_tube: *New GTM experiment registered:* {{ $('Build Registry Row').item.json.experimentName }}\nHypothesis: {{ $('Build Registry Row').item.json.hypothesis }}\nSuccess metric: {{ $('Build Registry Row').item.json.successMetric }} (source: {{ $('Build Registry Row').item.json.metricSource }})\nShips if lift ≥ {{ $('Build Registry Row').item.json.successThresholdPct }}pp by {{ $('Build Registry Row').item.json.endDate }}. Registered by {{ $('Build Registry Row').item.json.registeredBy }}.",
        "otherOptions": {}
      },
      "webhookId": "76b4ede6-4036-4cc5-a66c-f44c9d76e1b7",
      "credentials": {"slackApi": {"id": "mv7TIi8kucFPqPg6", "name": "Slack account"}}
    },
    {
      "id": "6ddd36e0-47c9-4fcb-ac7c-4c5fe5f9014f",
      "name": "Daily Experiment Sunset Check",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.4,
      "position": [0, 416],
      "parameters": {"rule": {"interval": [{"triggerAtHour": 8}]}}
    },
    {
      "id": "11106672-ba33-45ec-9bc1-bac334bc1024",
      "name": "Get Due Experiments",
      "type": "n8n-nodes-base.dataTable",
      "typeVersion": 1.1,
      "position": [224, 416],
      "parameters": {
        "resource": "row",
        "operation": "get",
        "dataTableId": {"__rl": true, "mode": "id", "value": "251UYVEzLj56MxiH", "cachedResultName": "GTM Experiment Registry"},
        "returnAll": true,
        "matchType": "allConditions",
        "filters": {"conditions": [
          {"keyName": "status", "condition": "eq", "keyValue": "active"},
          {"keyName": "endDate", "condition": "lte", "keyValue": "={{ $now.toFormat(\"yyyy-MM-dd\") }}"}
        ]}
      }
    },
    {
      "id": "be288f76-f6c3-411e-969d-7a3a867bcb1d",
      "name": "Current Experiment",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.5,
      "position": [672, 416],
      "parameters": {
        "mode": "manual",
        "includeOtherFields": true,
        "assignments": {"assignments": [{"id": "checked-at", "name": "checkedAt", "type": "string", "value": "={{ $now.toISO() }}"}]}
      }
    },
    {
      "id": "81b12993-48de-4e44-8300-693cbfe3c31f",
      "name": "Route by Metric Source",
      "type": "n8n-nodes-base.switch",
      "typeVersion": 3.2,
      "position": [896, 400],
      "parameters": {
        "rules": {"values": [
          {"outputKey": "salesforce", "conditions": {"options": {"caseSensitive": false, "leftValue": "", "typeValidation": "strict"}, "conditions": [{"leftValue": "={{ $json.metricSource }}", "operator": {"type": "string", "operation": "equals"}, "rightValue": "salesforce"}], "combinator": "and"}},
          {"outputKey": "hubspot", "conditions": {"options": {"caseSensitive": false, "leftValue": "", "typeValidation": "strict"}, "conditions": [{"leftValue": "={{ $json.metricSource }}", "operator": {"type": "string", "operation": "equals"}, "rightValue": "hubspot"}], "combinator": "and"}},
          {"outputKey": "clay", "conditions": {"options": {"caseSensitive": false, "leftValue": "", "typeValidation": "strict"}, "conditions": [{"leftValue": "={{ $json.metricSource }}", "operator": {"type": "string", "operation": "equals"}, "rightValue": "clay"}], "combinator": "and"}}
        ]},
        "options": {}
      }
    },
    {
      "id": "e5f82a11-1a68-46ca-af8c-cb6aa30e723f",
      "name": "Get Tagged Opportunities",
      "type": "n8n-nodes-base.salesforce",
      "typeVersion": 1.1,
      "position": [1120, 224],
      "parameters": {
        "resource": "search",
        "operation": "query",
        "query": "=SELECT Id, Name, StageName, IsWon, IsClosed, Description FROM Opportunity WHERE IsClosed = true ORDER BY CloseDate DESC LIMIT 40"
      },
      "credentials": {"salesforceOAuth2Api": {"id": "553Tae1kPe5Wpthq", "name": "Salesforce account"}}
    },
    {
      "id": "dd9a9741-3b96-44bf-ad64-eeb60269e8f5",
      "name": "Compute Salesforce Metric",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [1344, 224],
      "parameters": {
        "jsCode": "const exp = $('Current Experiment').item.json;\nconst rows = $input.all().map(i => i.json);\nconst control = { won: 0, lost: 0 };\nconst treatment = { won: 0, lost: 0 };\nconst controlMarker = 'ExperimentGroup: Control - ' + exp.experimentName;\nconst treatmentMarker = 'ExperimentGroup: Treatment - ' + exp.experimentName;\nfor (const r of rows) {\n  const desc = r.Description || '';\n  if (desc.indexOf(controlMarker) !== -1) {\n    if (r.StageName === 'Closed Won') control.won++; else if (r.StageName === 'Closed Lost') control.lost++;\n  } else if (desc.indexOf(treatmentMarker) !== -1) {\n    if (r.StageName === 'Closed Won') treatment.won++; else if (r.StageName === 'Closed Lost') treatment.lost++;\n  }\n}\nconst controlN = control.won + control.lost;\nconst treatmentN = treatment.won + treatment.lost;\nconst controlMetricValue = controlN > 0 ? Math.round((control.won / controlN) * 1000) / 10 : null;\nconst treatmentMetricValue = treatmentN > 0 ? Math.round((treatment.won / treatmentN) * 1000) / 10 : null;\nreturn [{ json: Object.assign({}, exp, {\n  controlMetricValue, treatmentMetricValue, controlN, treatmentN,\n  metricDetail: 'Real Salesforce win rate — control ' + controlMetricValue + '% (n=' + controlN + '), treatment ' + treatmentMetricValue + '% (n=' + treatmentN + ')'\n}) }];"
      }
    },
    {
      "id": "f973e40f-6cc3-47a4-bd86-b236778b5f0c",
      "name": "Merge Metric Result",
      "type": "n8n-nodes-base.merge",
      "typeVersion": 3.2,
      "position": [1568, 400],
      "parameters": {"mode": "append", "numberInputs": 3}
    },
    {
      "id": "0534abb1-9971-408e-81f2-617fb79b0acf",
      "name": "Get Tagged Contacts",
      "type": "n8n-nodes-base.hubspot",
      "typeVersion": 2.2,
      "position": [1120, 416],
      "parameters": {
        "authentication": "appToken",
        "resource": "contact",
        "operation": "getAll",
        "returnAll": true,
        "additionalFields": {"propertiesCollection": {"propertiesValues": {"properties": ["email", "firstname", "lastname", "lifecyclestage", "message"], "propertyMode": "valueOnly"}}}
      },
      "credentials": {"hubspotAppToken": {"id": "ynUSCUtMOnX1f4Jl", "name": "HubSpot Service Key account"}}
    },
    {
      "id": "b8c88954-8d29-4b64-8b8f-bfe15b97e621",
      "name": "Compute HubSpot Metric",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [1344, 416],
      "parameters": {
        "jsCode": "const exp = $('Current Experiment').item.json;\nconst rows = $input.all().map(i => i.json);\nfunction messageOf(c) {\n  const p = c.properties || {};\n  if (p.message && p.message.value) return p.message.value;\n  if (typeof p.message === 'string') return p.message;\n  return '';\n}\nfunction stageOf(c) {\n  const p = c.properties || {};\n  if (p.lifecyclestage && p.lifecyclestage.value) return p.lifecyclestage.value;\n  if (typeof p.lifecyclestage === 'string') return p.lifecyclestage;\n  return '';\n}\nconst progressed = ['marketingqualifiedlead', 'salesqualifiedlead', 'opportunity', 'customer'];\nconst controlMarker = 'ExperimentGroup: Control - ' + exp.experimentName;\nconst treatmentMarker = 'ExperimentGroup: Treatment - ' + exp.experimentName;\nconst control = { progressed: 0, total: 0 };\nconst treatment = { progressed: 0, total: 0 };\nfor (const c of rows) {\n  const msg = messageOf(c);\n  const stage = stageOf(c);\n  if (msg.indexOf(controlMarker) !== -1) {\n    control.total++;\n    if (progressed.indexOf(stage) !== -1) control.progressed++;\n  } else if (msg.indexOf(treatmentMarker) !== -1) {\n    treatment.total++;\n    if (progressed.indexOf(stage) !== -1) treatment.progressed++;\n  }\n}\nconst controlMetricValue = control.total > 0 ? Math.round((control.progressed / control.total) * 1000) / 10 : null;\nconst treatmentMetricValue = treatment.total > 0 ? Math.round((treatment.progressed / treatment.total) * 1000) / 10 : null;\nreturn [{ json: Object.assign({}, exp, {\n  controlMetricValue, treatmentMetricValue, controlN: control.total, treatmentN: treatment.total,\n  metricDetail: 'Real HubSpot stage-progression rate — control ' + controlMetricValue + '% (n=' + control.total + '), treatment ' + treatmentMetricValue + '% (n=' + treatment.total + ')'\n}) }];"
      }
    },
    {
      "id": "91b0818b-fc25-441e-96a8-a242556ebcfc",
      "name": "Clay Metric Not Available",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [1344, 608],
      "parameters": {
        "jsCode": "const exp = $('Current Experiment').item.json;\nreturn [{ json: Object.assign({}, exp, {\n  controlMetricValue: null, treatmentMetricValue: null, controlN: 0, treatmentN: 0,\n  metricDetail: 'Clay has no webhook/API on this plan (same constraint as Days 3, 6 and 17). A Clay-sourced experiment needs a rep to submit real Claygent findings via a form, same pattern as those days — not exercised in this run because no Clay-sourced experiment was registered.'\n}) }];"
      }
    },
    {
      "id": "70d52a32-053c-47d6-aa42-e324d3058f85",
      "name": "Process One Experiment At A Time",
      "type": "n8n-nodes-base.splitInBatches",
      "typeVersion": 3,
      "position": [448, 416],
      "parameters": {"batchSize": 1}
    },
    {
      "id": "e7fe3291-f9bb-4a79-bd50-130a304ac167",
      "name": "Determine Recommendation",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [1792, 416],
      "parameters": {
        "jsCode": "const d = $json;\nlet liftPct = null;\nlet hit = false;\nlet ruleRecommendation = 'inconclusive';\nif (d.controlMetricValue !== null && d.controlMetricValue !== undefined && d.treatmentMetricValue !== null && d.treatmentMetricValue !== undefined) {\n  liftPct = Math.round((d.treatmentMetricValue - d.controlMetricValue) * 10) / 10;\n  hit = liftPct >= d.successThresholdPct;\n  ruleRecommendation = hit ? 'ship' : (liftPct <= 0 ? 'kill' : 'iterate');\n} else {\n  ruleRecommendation = 'inconclusive';\n}\nreturn [{ json: Object.assign({}, d, { liftPct, hitSuccessMetric: hit, ruleRecommendation }) }];"
      }
    },
    {
      "id": "9029dd6d-fb29-4123-b631-75774d1a6f48",
      "name": "Draft Experiment Results Summary",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 3.1,
      "position": [2016, 416],
      "parameters": {
        "promptType": "define",
        "text": "=Experiment: {{ $json.experimentName }}\nHypothesis: {{ $json.hypothesis }}\nSuccess metric: {{ $json.successMetric }}\nControl group: {{ $json.controlGroupDefinition }}\nTreatment group: {{ $json.treatmentGroupDefinition }}\nSuccess threshold: +{{ $json.successThresholdPct }} percentage points\n\nReal measured result: {{ $json.metricDetail }}\nComputed lift: {{ $json.liftPct }} percentage points\nDeterministic rule verdict (already computed, do not contradict it): {{ $json.ruleRecommendation }}\n\nWrite a short plain-English results summary (2-3 sentences) covering whether the experiment hit its success metric and what the real numbers were, plus any honest caveat about sample size given this is a small Trailhead-scale dataset. Set recommendation to exactly the deterministic rule verdict given above.",
        "hasOutputParser": true,
        "options": {"systemMessage": "You are a GTM/RevOps analyst drafting an experiment results digest for Fortavault, Inc., a fictional data protection and security platform. You are given a deterministic, already-computed ship/kill/iterate/inconclusive verdict based on real measured control vs. treatment metrics — your job is to narrate it clearly and honestly, never to override or contradict it. If the verdict is \"inconclusive\" (no automated data source was available), say so plainly rather than inventing numbers. Always cite the actual real numbers given rather than vague language, and be upfront when sample sizes are small."}
      }
    },
    {
      "id": "028a68e0-8c7d-4cf7-8817-d049c94bd43c",
      "name": "Claude Sonnet Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
      "typeVersion": 1.6,
      "position": [2032, 640],
      "parameters": {"model": {"__rl": true, "mode": "list", "value": "claude-sonnet-4-6", "cachedResultName": "Claude Sonnet 4.6"}, "options": {"temperature": 0.4}},
      "credentials": {"anthropicApi": {"id": "3d3ZiTi7BwnkFwqU", "name": "Anthropic account"}}
    },
    {
      "id": "9807244f-09ea-4e9f-a7a5-392459dd210e",
      "name": "Results Parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "typeVersion": 1.3,
      "position": [2160, 640],
      "parameters": {"jsonSchemaExample": "{ \"summary\": \"The video pilot did not hit its +10pp threshold: treatment closed at a 33.3% win rate (n=6) versus 50% for control (n=6), a -16.7pp lift. Recommend killing this approach given the small sample.\", \"recommendation\": \"kill\" }"}
    },
    {
      "id": "fa18031c-27f2-43b8-a0e7-d4565c680cce",
      "name": "Close Out Experiment",
      "type": "n8n-nodes-base.dataTable",
      "typeVersion": 1.1,
      "position": [2368, 416],
      "parameters": {
        "resource": "row",
        "operation": "update",
        "dataTableId": {"__rl": true, "mode": "id", "value": "251UYVEzLj56MxiH", "cachedResultName": "GTM Experiment Registry"},
        "matchType": "allConditions",
        "filters": {"conditions": [{"keyName": "experimentId", "condition": "eq", "keyValue": "={{ $('Current Experiment').item.json.experimentId }}"}]},
        "columns": {"mappingMode": "defineBelow", "value": {
          "status": "closed",
          "controlMetricValue": "={{ $(\"Determine Recommendation\").item.json.controlMetricValue }}",
          "treatmentMetricValue": "={{ $(\"Determine Recommendation\").item.json.treatmentMetricValue }}",
          "controlN": "={{ $(\"Determine Recommendation\").item.json.controlN }}",
          "treatmentN": "={{ $(\"Determine Recommendation\").item.json.treatmentN }}",
          "liftPct": "={{ $(\"Determine Recommendation\").item.json.liftPct }}",
          "hitSuccessMetric": "={{ $(\"Determine Recommendation\").item.json.hitSuccessMetric }}",
          "recommendation": "={{ $json.output.recommendation }}",
          "resultSummary": "={{ $json.output.summary }}",
          "closedAt": "={{ $now.toISO() }}",
          "slackPosted": true
        }}
      }
    },
    {
      "id": "d18a17f6-80df-4f73-a239-f73fbe42ff7e",
      "name": "Build Slack Results Message",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [2592, 416],
      "parameters": {
        "jsCode": "const d = $json;\nconst rec = (d.recommendation || '').toLowerCase();\nconst emoji = rec === 'ship' ? ':white_check_mark:' : (rec === 'kill' ? ':x:' : (rec === 'iterate' ? ':arrows_counterclockwise:' : ':grey_question:'));\nconst text = emoji + ' *Experiment closed: ' + d.experimentName + '*\\n' + d.resultSummary + '\\n\\n*Recommendation:* ' + (d.recommendation || '').toUpperCase() + '\\nControl: ' + d.controlMetricValue + '% (n=' + d.controlN + ') | Treatment: ' + d.treatmentMetricValue + '% (n=' + d.treatmentN + ') | Lift: ' + d.liftPct + 'pp';\nreturn [{ json: Object.assign({}, d, { slackText: text }) }];"
      }
    },
    {
      "id": "67d5c91c-b020-4d55-8332-5c5604373c4d",
      "name": "Post Results To Slack",
      "type": "n8n-nodes-base.slack",
      "typeVersion": 2.7,
      "position": [2816, 416],
      "parameters": {
        "channelId": {"__rl": true, "cachedResultName": "general", "mode": "id", "value": "C0BQ3G96HL6"},
        "otherOptions": {},
        "select": "channel",
        "text": "={{ $json.slackText }}"
      },
      "webhookId": "c7d0ff4d-deed-46e2-a6c1-d3e2e7c61f48",
      "credentials": {"slackApi": {"id": "mv7TIi8kucFPqPg6", "name": "Slack account"}}
    }
  ],
  "connections": {
    "Register GTM Experiment": {"main": [[{"node": "Build Registry Row", "type": "main", "index": 0}]]},
    "Build Registry Row": {"main": [[{"node": "Log New Experiment", "type": "main", "index": 0}]]},
    "Log New Experiment": {"main": [[{"node": "Post Registration Confirmation", "type": "main", "index": 0}]]},
    "Daily Experiment Sunset Check": {"main": [[{"node": "Get Due Experiments", "type": "main", "index": 0}]]},
    "Get Due Experiments": {"main": [[{"node": "Process One Experiment At A Time", "type": "main", "index": 0}]]},
    "Current Experiment": {"main": [[{"node": "Route by Metric Source", "type": "main", "index": 0}]]},
    "Route by Metric Source": {"main": [[{"node": "Get Tagged Opportunities", "type": "main", "index": 0}], [{"node": "Get Tagged Contacts", "type": "main", "index": 0}], [{"node": "Clay Metric Not Available", "type": "main", "index": 0}]]},
    "Get Tagged Opportunities": {"main": [[{"node": "Compute Salesforce Metric", "type": "main", "index": 0}]]},
    "Compute Salesforce Metric": {"main": [[{"node": "Merge Metric Result", "type": "main", "index": 0}]]},
    "Merge Metric Result": {"main": [[{"node": "Determine Recommendation", "type": "main", "index": 0}]]},
    "Get Tagged Contacts": {"main": [[{"node": "Compute HubSpot Metric", "type": "main", "index": 0}]]},
    "Compute HubSpot Metric": {"main": [[{"node": "Merge Metric Result", "type": "main", "index": 1}]]},
    "Clay Metric Not Available": {"main": [[{"node": "Merge Metric Result", "type": "main", "index": 2}]]},
    "Process One Experiment At A Time": {"main": [[], [{"node": "Current Experiment", "type": "main", "index": 0}]]},
    "Determine Recommendation": {"main": [[{"node": "Draft Experiment Results Summary", "type": "main", "index": 0}]]},
    "Draft Experiment Results Summary": {"main": [[{"node": "Close Out Experiment", "type": "main", "index": 0}]]},
    "Claude Sonnet Model": {"ai_languageModel": [[{"node": "Draft Experiment Results Summary", "type": "ai_languageModel", "index": 0}]]},
    "Results Parser": {"ai_outputParser": [[{"node": "Draft Experiment Results Summary", "type": "ai_outputParser", "index": 0}]]},
    "Close Out Experiment": {"main": [[{"node": "Build Slack Results Message", "type": "main", "index": 0}]]},
    "Build Slack Results Message": {"main": [[{"node": "Post Results To Slack", "type": "main", "index": 0}]]},
    "Post Results To Slack": {"main": [[{"node": "Process One Experiment At A Time", "type": "main", "index": 0}]]}
  },
  "pinData": {},
  "settings": {"executionOrder": "v1"},
  "meta": {"instanceId": "day14-gtm-experiment-registry"}
}
