Sign in

GTM Starter Kit

GTM Starter Kit

A ready-to-import Google Tag Manager container that stands up a baseline of form-submit conversion tracking for GA4 and Meta, built on top of the GTM Essentials variables. Import it into a fresh (or existing) web container to get the tags, trigger, and variables below.

Quick import

  1. GTM → Admin → Import Container.
  2. Choose gtm-starter-kit.json, select your workspace.
  3. Pick Merge and Rename conflicting so nothing existing is overwritten.
  4. Preview, then Confirm.

Placeholder account/container IDs (0) are remapped into whatever container you import into. Everything lands in two folders: GTM Starter Kit (the tags, trigger, and new variables) and GTM Essentials (the shared variables).

Before it works, do these three things (see Setup): set your GA4 Measurement ID, make sure the Meta Pixel base is loaded, and make sure something pushes form_submit to the dataLayer.


What it creates

Tags — folder GTM Starter Kit

TagTypeFires onNotes
Config - GA4Google tagInitialization - All PagesTag ID = {{GA4 - Measurement ID}}.
GA4 - Event - Form SubmitGA4 Eventform_submitEvent name ga4e_form_submit, Measurement ID {{GA4 - Measurement ID}}, Once per event. Parameters below.
Meta - Event - Lead - Form SubmitCustom HTMLform_submitFires fbq('track', 'Lead', …) with page path / traffic source / ad placement, plus eventID: {{cJS - Custom Event ID}} for browser/server dedupe.
Conversion LinkerConversion LinkerAll PagesImproves Google Ads click-ID cookie durability.

GA4 - Event - Form Submit → event parameters:

ParameterValue
cjs_traffic_source{{cJS - Traffic Source}}
cjs_ad_placement{{cJS - Ad Placement}}

Trigger — folder GTM Starter Kit

  • form_submit — Custom Event, event name form_submit (fires on every form_submit dataLayer event). Drives both the GA4 event and Meta tags.

Variables — folder GTM Starter Kit

  • GA4 - Measurement ID — Constant, G-0000000000. Replace with your real Measurement ID — every GA4 tag reads from this one place.

User-Provided Data variable — add this one by hand. GTM's User-Provided Data variable has no stable container-export type, so it isn't in the JSON. Add it after import: Variables → New → Variable Configuration → User-Provided Data, set it to Automatic, and name it User Provided Data. It's a two-click add and pairs with GA4 / Google Ads enhanced conversions.

Built-in variables enabled

Click Classes / Element / ID / Target / Text / URL, Event, Form Classes / Element / ID / Target / Text / URL, HTML ID, Page Hostname / Path / URL, Referrer.


Included from GTM Essentials

These variables come from the GTM Essentials toolkit entry and are bundled here (folder GTM Essentials) so the kit is self-contained. Full details and source files are in gtm-essentials/README.md.

Maintenance — keep this in sync with GTM Essentials. The variables below are copies baked into gtm-starter-kit.json. Whenever GTM Essentials gains or changes a variable, refresh this export too so the copies don't drift. (A .json file can't carry an inline comment, so this reminder lives here.)

  • First-party cookie variables (1PC - …): _fbc, _fbp, fbclid, _gcl_aw, _uetmsclkid, _ttp, _twclid, li_fat_id.
  • cJS - Traffic Source — last-touch traffic source (source).
  • cJS - Ad Placementutm_placement, persisted per session (source).
  • DLV - gtm.uniqueEventId — GTM's built-in page-local event counter; cache key for the variable below.
  • cJS - Custom Event ID — globally unique event ID for Meta Pixel / CAPI deduplication, cached per {{DLV - gtm.uniqueEventId}} (source).
  • cJS - Page Title, cJS - Post Title, cJS - Post ID, cJS - Form ID — page/post/form context (sources).

Setup after import

  1. GA4 - Measurement ID → set the Constant to your G-XXXXXXXXXX.
  2. Meta Pixel base must load before Meta - Event - Lead - Form Submit (the tag calls fbq(...), so fbq has to exist). Add your Pixel base tag, ideally gated on consent.
  3. form_submit event must be pushed to the dataLayer. The toolkit's Elementor Listener pushes exactly this event; use it (or your platform's equivalent listener).

Things to verify on import

  • GA4 event Measurement ID — confirm the tag's Measurement ID field resolves to {{GA4 - Measurement ID}} (or point it at the Config - GA4 Google tag).
  • User-Provided Data — not in the JSON (see above); add it via the UI.
  • Trigger mappingConfig - GA4 should fire on Initialization - All Pages and Conversion Linker on All Pages; re-select if either didn't map.

Suggestions

  • Firing option: every tag ships set to Once per event (Advanced Settings → Tag firing options), so each trigger event fires the tag at most once — including repeat form submits on the same page load.
  • Consent: for Consent Mode setups, fire Conversion Linker on Consent Initialization - All Pages, and gate the Meta tag on marketing consent.

The code

gtm-starter-kit.json
json
{
  "exportFormatVersion": 2,
  "exportTime": "2026-08-04 00:00:00",
  "containerVersion": {
    "path": "accounts/0/containers/0/versions/0",
    "accountId": "0",
    "containerId": "0",
    "containerVersionId": "0",
    "name": "GTM Starter Kit",
    "container": {
      "path": "accounts/0/containers/0",
      "accountId": "0",
      "containerId": "0",
      "name": "GTM Starter Kit",
      "publicId": "GTM-XXXXXXX",
      "usageContext": [
        "WEB"
      ],
      "fingerprint": "0",
      "tagManagerUrl": ""
    },
    "tag": [
      {
        "accountId": "0",
        "containerId": "0",
        "tagId": "1",
        "name": "Config - GA4",
        "type": "googtag",
        "parameter": [
          {
            "type": "TEMPLATE",
            "key": "tagId",
            "value": "{{GA4 - Measurement ID}}"
          }
        ],
        "firingTriggerId": [
          "2147479573"
        ],
        "tagFiringOption": "ONCE_PER_EVENT",
        "fingerprint": "0",
        "parentFolderId": "2"
      },
      {
        "accountId": "0",
        "containerId": "0",
        "tagId": "2",
        "name": "GA4 - Event - Form Submit",
        "type": "gaawe",
        "parameter": [
          {
            "type": "TEMPLATE",
            "key": "eventName",
            "value": "ga4e_form_submit"
          },
          {
            "type": "BOOLEAN",
            "key": "sendEcommerceData",
            "value": "false"
          },
          {
            "type": "LIST",
            "key": "eventParameters",
            "list": [
              {
                "type": "MAP",
                "map": [
                  {
                    "type": "TEMPLATE",
                    "key": "name",
                    "value": "cjs_traffic_source"
                  },
                  {
                    "type": "TEMPLATE",
                    "key": "value",
                    "value": "{{cJS - Traffic Source}}"
                  }
                ]
              },
              {
                "type": "MAP",
                "map": [
                  {
                    "type": "TEMPLATE",
                    "key": "name",
                    "value": "cjs_ad_placement"
                  },
                  {
                    "type": "TEMPLATE",
                    "key": "value",
                    "value": "{{cJS - Ad Placement}}"
                  }
                ]
              }
            ]
          },
          {
            "type": "TEMPLATE",
            "key": "measurementIdOverride",
            "value": "{{GA4 - Measurement ID}}"
          }
        ],
        "firingTriggerId": [
          "1"
        ],
        "tagFiringOption": "ONCE_PER_EVENT",
        "fingerprint": "0",
        "parentFolderId": "2"
      },
      {
        "accountId": "0",
        "containerId": "0",
        "tagId": "3",
        "name": "Meta - Event - Lead - Form Submit",
        "type": "html",
        "parameter": [
          {
            "type": "TEMPLATE",
            "key": "html",
            "value": "<script>\nfbq('track', 'Lead', {\n  lead_type: 'Form Submit', // Define Lead Type\n  // form_name: // (Optional) Translate form ID to Form Name via LUT or Variable\n  content_name: '{{Page Path}}', // Finds page path\n  traffic_source: '{{cJS - Traffic Source}}', // Finds Last Touch traffic source\n  ad_placement: '{{cJS - Ad Placement}}' // Finds ad placement\n}, {\n  eventID: '{{cJS - Custom Event ID}}' // Meta's browser/server dedupe key\n});\n</script>"
          },
          {
            "type": "BOOLEAN",
            "key": "supportDocumentWrite",
            "value": "false"
          }
        ],
        "firingTriggerId": [
          "1"
        ],
        "tagFiringOption": "ONCE_PER_EVENT",
        "fingerprint": "0",
        "parentFolderId": "2"
      },
      {
        "accountId": "0",
        "containerId": "0",
        "tagId": "4",
        "name": "Conversion Linker",
        "type": "gclidw",
        "parameter": [
          {
            "type": "BOOLEAN",
            "key": "enableCrossDomain",
            "value": "false"
          }
        ],
        "firingTriggerId": [
          "2147479553"
        ],
        "tagFiringOption": "ONCE_PER_EVENT",
        "fingerprint": "0",
        "parentFolderId": "2"
      }
    ],
    "trigger": [
      {
        "accountId": "0",
        "containerId": "0",
        "triggerId": "1",
        "name": "form_submit",
        "type": "CUSTOM_EVENT",
        "customEventFilter": [
          {
            "type": "EQUALS",
            "parameter": [
              {
                "type": "TEMPLATE",
                "key": "arg0",
                "value": "{{_event}}"
              },
              {
                "type": "TEMPLATE",
                "key": "arg1",
                "value": "form_submit"
              }
            ]
          }
        ],
        "fingerprint": "0",
        "parentFolderId": "2"
      }
    ],
    "builtInVariable": [
      {
        "accountId": "0",
        "containerId": "0",
        "type": "CLICK_CLASSES",
        "name": "Click Classes"
      },
      {
        "accountId": "0",
        "containerId": "0",
        "type": "CLICK_ELEMENT",
        "name": "Click Element"
      },
      {
        "accountId": "0",
        "containerId": "0",
        "type": "CLICK_ID",
        "name": "Click ID"
      },
      {
        "accountId": "0",
        "containerId": "0",
        "type": "CLICK_TARGET",
        "name": "Click Target"
      },
      {
        "accountId": "0",
        "containerId": "0",
        "type": "CLICK_TEXT",
        "name": "Click Text"
      },
      {
        "accountId": "0",
        "containerId": "0",
        "type": "CLICK_URL",
        "name": "Click URL"
      },
      {
        "accountId": "0",
        "containerId": "0",
        "type": "EVENT",
        "name": "Event"
      },
      {
        "accountId": "0",
        "containerId": "0",
        "type": "FORM_CLASSES",
        "name": "Form Classes"
      },
      {
        "accountId": "0",
        "containerId": "0",
        "type": "FORM_ELEMENT",
        "name": "Form Element"
      },
      {
        "accountId": "0",
        "containerId": "0",
        "type": "FORM_ID",
        "name": "Form ID"
      },
      {
        "accountId": "0",
        "containerId": "0",
        "type": "FORM_TARGET",
        "name": "Form Target"
      },
      {
        "accountId": "0",
        "containerId": "0",
        "type": "FORM_TEXT",
        "name": "Form Text"
      },
      {
        "accountId": "0",
        "containerId": "0",
        "type": "FORM_URL",
        "name": "Form URL"
      },
      {
        "accountId": "0",
        "containerId": "0",
        "type": "HTML_ID",
        "name": "HTML ID"
      },
      {
        "accountId": "0",
        "containerId": "0",
        "type": "PAGE_HOSTNAME",
        "name": "Page Hostname"
      },
      {
        "accountId": "0",
        "containerId": "0",
        "type": "PAGE_PATH",
        "name": "Page Path"
      },
      {
        "accountId": "0",
        "containerId": "0",
        "type": "PAGE_URL",
        "name": "Page URL"
      },
      {
        "accountId": "0",
        "containerId": "0",
        "type": "REFERRER",
        "name": "Referrer"
      }
    ],
    "folder": [
      {
        "accountId": "0",
        "containerId": "0",
        "folderId": "1",
        "name": "GTM Essentials",
        "fingerprint": "0"
      },
      {
        "accountId": "0",
        "containerId": "0",
        "folderId": "2",
        "name": "GTM Starter Kit",
        "fingerprint": "0"
      }
    ],
    "variable": [
      {
        "accountId": "0",
        "containerId": "0",
        "variableId": "1",
        "name": "1PC - _fbc",
        "type": "k",
        "parameter": [
          {
            "type": "TEMPLATE",
            "key": "name",
            "value": "_fbc"
          },
          {
            "type": "BOOLEAN",
            "key": "decodeCookie",
            "value": "true"
          }
        ],
        "fingerprint": "0",
        "parentFolderId": "1"
      },
      {
        "accountId": "0",
        "containerId": "0",
        "variableId": "2",
        "name": "1PC - _fbp",
        "type": "k",
        "parameter": [
          {
            "type": "TEMPLATE",
            "key": "name",
            "value": "_fbp"
          },
          {
            "type": "BOOLEAN",
            "key": "decodeCookie",
            "value": "true"
          }
        ],
        "fingerprint": "0",
        "parentFolderId": "1"
      },
      {
        "accountId": "0",
        "containerId": "0",
        "variableId": "3",
        "name": "1PC - fbclid",
        "type": "k",
        "parameter": [
          {
            "type": "TEMPLATE",
            "key": "name",
            "value": "fbclid"
          },
          {
            "type": "BOOLEAN",
            "key": "decodeCookie",
            "value": "true"
          }
        ],
        "fingerprint": "0",
        "parentFolderId": "1"
      },
      {
        "accountId": "0",
        "containerId": "0",
        "variableId": "4",
        "name": "1PC - _gcl_aw",
        "type": "k",
        "parameter": [
          {
            "type": "TEMPLATE",
            "key": "name",
            "value": "_gcl_aw"
          },
          {
            "type": "BOOLEAN",
            "key": "decodeCookie",
            "value": "true"
          }
        ],
        "fingerprint": "0",
        "parentFolderId": "1"
      },
      {
        "accountId": "0",
        "containerId": "0",
        "variableId": "5",
        "name": "1PC - _uetmsclkid",
        "type": "k",
        "parameter": [
          {
            "type": "TEMPLATE",
            "key": "name",
            "value": "_uetmsclkid"
          },
          {
            "type": "BOOLEAN",
            "key": "decodeCookie",
            "value": "true"
          }
        ],
        "fingerprint": "0",
        "parentFolderId": "1"
      },
      {
        "accountId": "0",
        "containerId": "0",
        "variableId": "6",
        "name": "1PC - _ttp",
        "type": "k",
        "parameter": [
          {
            "type": "TEMPLATE",
            "key": "name",
            "value": "_ttp"
          },
          {
            "type": "BOOLEAN",
            "key": "decodeCookie",
            "value": "true"
          }
        ],
        "fingerprint": "0",
        "parentFolderId": "1"
      },
      {
        "accountId": "0",
        "containerId": "0",
        "variableId": "7",
        "name": "1PC - _twclid",
        "type": "k",
        "parameter": [
          {
            "type": "TEMPLATE",
            "key": "name",
            "value": "_twclid"
          },
          {
            "type": "BOOLEAN",
            "key": "decodeCookie",
            "value": "true"
          }
        ],
        "fingerprint": "0",
        "parentFolderId": "1"
      },
      {
        "accountId": "0",
        "containerId": "0",
        "variableId": "8",
        "name": "1PC - li_fat_id",
        "type": "k",
        "parameter": [
          {
            "type": "TEMPLATE",
            "key": "name",
            "value": "li_fat_id"
          },
          {
            "type": "BOOLEAN",
            "key": "decodeCookie",
            "value": "true"
          }
        ],
        "fingerprint": "0",
        "parentFolderId": "1"
      },
      {
        "accountId": "0",
        "containerId": "0",
        "variableId": "17",
        "name": "cJS - Traffic Source",
        "type": "jsm",
        "parameter": [
          {
            "type": "TEMPLATE",
            "key": "javascript",
            "value": "function() {\n  // Last-touch traffic source for both lead gen and ecommerce conversions\n  // Uses sessionStorage to persist source through multi-page funnels (checkout flows, popup forms on internal pages)\n  // Distinguishes paid Facebook from organic via UTM convention since fbclid alone is unreliable\n  \n  var urlParams = new URLSearchParams(window.location.search);\n  var referrer = document.referrer.toLowerCase();\n  \n  // Helper to safely read from sessionStorage with fallback for private browsing/blocked storage\n  function getStored(key) {\n    try { return sessionStorage.getItem(key) || ''; } catch(e) { return ''; }\n  }\n  \n  // Helper to safely write to sessionStorage\n  function setStored(key, value) {\n    try { sessionStorage.setItem(key, value); } catch(e) {}\n  }\n  \n  // STEP 1: Capture any fresh signals from current URL into sessionStorage\n  // This ensures last-touch works correctly when a user re-enters the site with a new click ID\n  \n  // Click ID capture - each platform's unique click identifier\n  if (urlParams.get('gclid')) setStored('gclid', urlParams.get('gclid'));\n  if (urlParams.get('msclkid')) setStored('msclkid', urlParams.get('msclkid'));\n  if (urlParams.get('fbclid')) setStored('fbclid', urlParams.get('fbclid'));\n  if (urlParams.get('ttclid')) setStored('ttclid', urlParams.get('ttclid'));\n  \n  // UTM capture - source and medium together let us distinguish paid social from organic social\n  if (urlParams.get('utm_source')) setStored('utm_source', urlParams.get('utm_source').toLowerCase());\n  if (urlParams.get('utm_medium')) setStored('utm_medium', urlParams.get('utm_medium').toLowerCase());\n  \n  // Capture the original referrer on first pageview so organic detection works on deep funnel pages\n  // Only set this once per session - if storage already has it, this is not the landing page\n  if (!getStored('original_referrer') && referrer && referrer.indexOf(window.location.hostname) === -1) {\n    setStored('original_referrer', referrer);\n  }\n  \n  // STEP 2: Resolve traffic source using all available signals (URL + stored)\n  \n  var utmSource = urlParams.get('utm_source') ? urlParams.get('utm_source').toLowerCase() : getStored('utm_source');\n  var utmMedium = urlParams.get('utm_medium') ? urlParams.get('utm_medium').toLowerCase() : getStored('utm_medium');\n  \n  // Paid social detection - requires explicit UTM tagging since fbclid alone catches organic posts too\n  // Convention: utm_medium=paid_social with utm_source identifying the platform\n  if (utmMedium === 'paid_social') {\n    if (utmSource === 'facebook') return 'facebook_ads';\n    if (utmSource === 'instagram') return 'instagram_ads';\n    if (utmSource === 'linkedin') return 'linkedin_ads';\n    if (utmSource === 'tiktok') return 'tiktok_ads';\n    // Fallback for any other paid social platform we haven't bucketed\n    return utmSource + '_ads';\n  }\n  \n  // Google Ads - check URL gclid, then stored gclid, then _gcl_aw cookie set by gtag auto-tagging\n  if (urlParams.get('gclid') || getStored('gclid')) return 'google_ads';\n  if (document.cookie.indexOf('_gcl_aw=') > -1) return 'google_ads';\n  \n  // Microsoft Ads - msclkid is reliable on its own\n  if (urlParams.get('msclkid') || getStored('msclkid')) return 'microsoft_ads';\n  \n  // TikTok Ads - ttclid is reliable on its own (TikTok organic posts don't append it)\n  if (urlParams.get('ttclid') || getStored('ttclid')) return 'tiktok_ads';\n  \n  // Generic UTM source fallback - catches email, partnerships, custom campaigns\n  // Combines source and medium for clarity (e.g. email_newsletter, partner_referral)\n  if (utmSource) {\n    return utmMedium ? utmSource + '_' + utmMedium : utmSource;\n  }\n  \n  // Facebook organic - fbclid present without paid_social UTM means it came from an organic post\n  if (urlParams.get('fbclid') || getStored('fbclid')) return 'facebook_organic';\n  \n  // STEP 3: Organic referrer detection - use original referrer from session storage if available\n  // This makes organic attribution survive multi-page funnels where document.referrer becomes self-referential\n  var sourceReferrer = getStored('original_referrer') || referrer;\n  \n  if (sourceReferrer.indexOf('google.') > -1) return 'google_organic';\n  if (sourceReferrer.indexOf('bing.') > -1) return 'bing_organic';\n  if (sourceReferrer.indexOf('yahoo.') > -1) return 'yahoo_organic';\n  if (sourceReferrer.indexOf('duckduckgo.') > -1) return 'duckduckgo_organic';\n  if (sourceReferrer.indexOf('facebook.') > -1 || sourceReferrer.indexOf('fb.') > -1) return 'facebook_organic';\n  if (sourceReferrer.indexOf('instagram.') > -1) return 'instagram_organic';\n  if (sourceReferrer.indexOf('linkedin.') > -1) return 'linkedin_organic';\n  if (sourceReferrer.indexOf('twitter.') > -1 || sourceReferrer.indexOf('x.com') > -1) return 'twitter_organic';\n  if (sourceReferrer.indexOf('youtube.') > -1) return 'youtube_organic';\n  if (sourceReferrer.indexOf('reddit.') > -1) return 'reddit_organic';\n  if (sourceReferrer.indexOf('pinterest.') > -1) return 'pinterest_organic';\n  if (sourceReferrer.indexOf('tiktok.') > -1) return 'tiktok_organic';\n  \n  // No referrer at all = direct (typed URL, bookmark, app, dark social, email client)\n  if (!sourceReferrer) return 'direct';\n  \n  // Same-domain referrer with no other signals = direct (internal navigation from unknown origin)\n  if (sourceReferrer.indexOf(window.location.hostname) > -1) return 'direct';\n  \n  // External referring site we don't have a specific bucket for\n  return 'referral';\n}"
          }
        ],
        "fingerprint": "0",
        "parentFolderId": "1"
      },
      {
        "accountId": "0",
        "containerId": "0",
        "variableId": "18",
        "name": "cJS - Ad Placement",
        "type": "jsm",
        "parameter": [
          {
            "type": "TEMPLATE",
            "key": "javascript",
            "value": "function() {\n  // Captures utm_placement from URL on first pageview, persists via sessionStorage.\n  // Handles both Meta placements (e.g. \"Audience_Network_Native\", \"Facebook_Mobile_Feed\")\n  // and Google Ads placements (e.g. \"g_1t1\" for top-of-page search, \"gmb_\" for Business Profile,\n  // \"d_\" for Display Network). The variable doesn't care which platform set the value —\n  // utm_source already tells you that. This just captures whatever placement was passed.\n  \n  var STORAGE_KEY = 'ad_placement';\n  \n  try {\n    // First, check if utm_placement is in the current URL.\n    // If yes, this is the freshest signal — overwrite anything stored.\n    var urlParams = new URLSearchParams(window.location.search);\n    var placementFromUrl = urlParams.get('utm_placement');\n    \n    if (placementFromUrl) {\n      try { sessionStorage.setItem(STORAGE_KEY, placementFromUrl); } catch(e) {}\n      return placementFromUrl;\n    }\n    \n    // No utm_placement in current URL — fall back to whatever we stored\n    // earlier in this session (e.g. from the original landing page).\n    try {\n      var stored = sessionStorage.getItem(STORAGE_KEY);\n      if (stored) return stored;\n    } catch(e) {}\n    \n    // No URL value, no stored value — return undefined.\n    // GA4 will simply omit the parameter rather than send an empty string.\n    return undefined;\n    \n  } catch (e) {\n    // URLSearchParams unavailable (very old browsers) or other failure\n    return undefined;\n  }\n}"
          }
        ],
        "fingerprint": "0",
        "parentFolderId": "1"
      },
      {
        "accountId": "0",
        "containerId": "0",
        "variableId": "19",
        "name": "cJS - Page Title",
        "type": "jsm",
        "parameter": [
          {
            "type": "TEMPLATE",
            "key": "javascript",
            "value": "function() {\n  return document.title;\n}"
          }
        ],
        "fingerprint": "0",
        "parentFolderId": "1"
      },
      {
        "accountId": "0",
        "containerId": "0",
        "variableId": "20",
        "name": "cJS - Post Title",
        "type": "jsm",
        "parameter": [
          {
            "type": "TEMPLATE",
            "key": "javascript",
            "value": "function() {\n  var el = document.querySelector('.entry-title, h1.entry-title, h1');\n  if (el && el.textContent) return el.textContent.trim();\n  var og = document.querySelector('meta[property=\"og:title\"]');\n  return og ? og.getAttribute('content') : undefined;\n}"
          }
        ],
        "fingerprint": "0",
        "parentFolderId": "1"
      },
      {
        "accountId": "0",
        "containerId": "0",
        "variableId": "21",
        "name": "cJS - Post ID",
        "type": "jsm",
        "parameter": [
          {
            "type": "TEMPLATE",
            "key": "javascript",
            "value": "function() {\n  var m = (document.body.className || '').match(/(?:postid|page-id)-(\\d+)/);\n  return m ? m[1] : undefined;\n}"
          }
        ],
        "fingerprint": "0",
        "parentFolderId": "1"
      },
      {
        "accountId": "0",
        "containerId": "0",
        "variableId": "22",
        "name": "cJS - Form ID",
        "type": "jsm",
        "parameter": [
          {
            "type": "TEMPLATE",
            "key": "javascript",
            "value": "function() {\n  var f = document.querySelector('form[id]');\n  return f ? f.id : undefined;\n}"
          }
        ],
        "fingerprint": "0",
        "parentFolderId": "1"
      },
      {
        "accountId": "0",
        "containerId": "0",
        "variableId": "23",
        "name": "GA4 - Measurement ID",
        "type": "c",
        "parameter": [
          {
            "type": "TEMPLATE",
            "key": "value",
            "value": "G-0000000000"
          }
        ],
        "fingerprint": "0",
        "parentFolderId": "2"
      },
      {
        "accountId": "0",
        "containerId": "0",
        "variableId": "24",
        "name": "DLV - gtm.uniqueEventId",
        "type": "v",
        "parameter": [
          {
            "type": "INTEGER",
            "key": "dataLayerVersion",
            "value": "2"
          },
          {
            "type": "BOOLEAN",
            "key": "setDefaultValue",
            "value": "false"
          },
          {
            "type": "TEMPLATE",
            "key": "name",
            "value": "gtm.uniqueEventId"
          }
        ],
        "fingerprint": "0",
        "parentFolderId": "1"
      },
      {
        "accountId": "0",
        "containerId": "0",
        "variableId": "25",
        "name": "cJS - Custom Event ID",
        "type": "jsm",
        "parameter": [
          {
            "type": "TEMPLATE",
            "key": "javascript",
            "value": "function() {\n  var id = {{DLV - gtm.uniqueEventId}}; // Page-local counter — the cache key\n\n  if (window.customEventIdKey !== id) {\n    window.customEventIdKey = id;\n    // Globally unique value — this is what actually goes to Meta\n    window.customEventId = (new Date()).getTime() + '.' +\n      Math.random().toString(36).substring(2, 10);\n  }\n\n  return window.customEventId;\n}"
          }
        ],
        "fingerprint": "0",
        "parentFolderId": "1"
      }
    ],
    "fingerprint": "0"
  }
}