> ## Documentation Index
> Fetch the complete documentation index at: https://dub-mintlify-update-supabase-lead-tracking-guide-82850.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Google Tag Manager

> How to add the @dub/analytics client-side script to your site using Google Tag Manager

This guide will walk you through the process of integrating Dub Analytics with Google Tag Manager (GTM).

<Steps>
  <Step title="Create a New Tag">
    First, navigate to your Google Tag Manager account and create a new tag:

    * Click on **Tags** in the left sidebar
    * Click the **New** button
    * Select **Custom HTML** as the tag type

    <Frame>
      <img src="https://mintcdn.com/dub-mintlify-update-supabase-lead-tracking-guide-82850/QGUHh3r7hC2NS4u-/images/conversions/google-tag-manager/gtm-select-custom-html-tag.png?fit=max&auto=format&n=QGUHh3r7hC2NS4u-&q=85&s=0af6366aaec1567eeea7d2190fae468a" alt="Select Custom HTML tag" width="2238" height="1426" data-path="images/conversions/google-tag-manager/gtm-select-custom-html-tag.png" />
    </Frame>
  </Step>

  <Step title="Add the Dub Analytics Script">
    In the Custom HTML section, you'll need to add the Dub Analytics script. Copy and paste the following code into the **HTML** field:

    ```js
    <script>
      var script = document.createElement("script");
      script.defer = true;
      script.src = "https://www.dubcdn.com/analytics/script.js";
      document.getElementsByTagName("head")[0].appendChild(script);
    </script>
    ```

    <Frame>
      <img src="https://mintcdn.com/dub-mintlify-update-supabase-lead-tracking-guide-82850/QGUHh3r7hC2NS4u-/images/conversions/google-tag-manager/gtm-add-dub-script.png?fit=max&auto=format&n=QGUHh3r7hC2NS4u-&q=85&s=6879872c5e4f1d0992a706adefc5148c" alt="Add dub analytics script" width="1924" height="1320" data-path="images/conversions/google-tag-manager/gtm-add-dub-script.png" />
    </Frame>

    If you're using [Dub Partners](/partners/quickstart) for affiliate management, you will also need to set up the `data-domains` property to enable [client-side click-tracking](/sdks/client-side/features/click-tracking).

    ```js
    <script>
      ...
      var script = document.createElement("script");
      script.defer = true;
      script.src = "https://www.dubcdn.com/analytics/script.js";
      script.dataset.domains = JSON.stringify({ refer: "refer.yourdomain.com" }); // Add this line to match the short domain you're using for your referral links
      document.getElementsByTagName("head")[0].appendChild(script);
    </script>
    ```
  </Step>

  <Step title="Configure the Trigger">
    To ensure the analytics script loads on all pages:

    * Click on the **Triggering** section
    * Select **All Pages** as the trigger type
    * This will make the tag fire on every page load
  </Step>

  <Step title="Save and Publish">
    * Name your tag **Dub Analytics**
    * Click **Save** to store your changes
    * Click **Submit** to create a new version
    * Finally, click **Publish** to activate the tag on your website
  </Step>
</Steps>

<Check>
  You can **verify the installation** with the following tests:

  1. Open the browser console and type in `_dubAnalytics` – if the script is installed correctly, you should see the `_dubAnalytics` object in the console.
  2. Add the `?dub_id=test` query parameter to your website URL and make sure that the `dub_id` cookie is being set in your browser.

  If both of these checks pass, the script is installed correctly. Otherwise, please make sure:

  * The analytics script was added to the `<head>` section of the page
  * If you're using a content delivery network (CDN), make sure to purge any cached content
</Check>

## Concepts

You can pass the following props to the `@dub/analytics` script to customize its behavior:

<ParamField body="data-api-host" type="url" default="https://api.dub.co">
  The base URL for the Dub API. This is useful for [setting up reverse
  proxies](/sdks/client-side/features/reverse-proxy-support) to avoid
  adblockers.
</ParamField>

<ParamField body="data-attribution-model" type="first-click | last-click" default="last-click">
  The attribution model to use for the analytics event. The following
  attribution models are available:

  * `first-click`: The first click model
    gives all the credit to the first touchpoint in the customer journey.
  * `last-click`: The last click model gives all the credit to the last
    touchpoint in the customer journey.
</ParamField>

<ParamField body="data-cookie-options" type="JSON-stringified object">
  Custom properties to pass to the cookie. Refer to
  [MDN's Set-Cookie documentation](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie) for
  all available options.

  <Expandable title="properties">
    <ParamField body="domain" type="string">
      Specifies the value for the `Domain` Set-Cookie attribute. This is useful
      for cross-domain tracking. Example: `.example.com`
    </ParamField>

    <ParamField body="expires" type="integer" default="90">
      Specifies the `Date` object to be the value for the `Expires` Set-Cookie
      attribute. Example: `new Date('2024-12-31')`
    </ParamField>

    <ParamField body="expiresInDays" type="integer" default="90">
      Specifies the number (in days) to be the value for the `Expires`
      Set-Cookie attribute.

      For example, to set the cookie window to 60 days (instead of the default 90 days), you can add the following to your script:

      ```html
      <script
        src="https://www.dubcdn.com/analytics/script.js"
        defer
        data-cookie-options='{"expiresInDays": 60}'
      ></script>
      ```
    </ParamField>

    <ParamField body="path" type="string" default="/">
      Specifies the value for the `Path` Set-Cookie attribute. By default, the
      path is considered the "default path". Example: `/`
    </ParamField>
  </Expandable>
</ParamField>

<ParamField body="data-domains" type="JSON-stringified object">
  Configure the domains that Dub will track. The following properties are available:

  <Expandable title="properties">
    <ParamField body="refer" type="string">
      The Dub custom domain for [referral program client-side click tracking](http://d.to/clicks/refer) (previously `data-short-domain`).
      Example: `refer.dub.co`
    </ParamField>

    <ParamField body="site" type="string">
      The Dub short domain for tracking site visits.
      Example: `site.dub.co`
    </ParamField>

    <ParamField body="outbound" type="string | string[]">
      An array of domains for cross-domain tracking. When configured, the existing `dub_id` cookie
      will be automatically appended to all outbound links targeting these domains to enable
      cross-domain tracking across different applications.
      Example: `"dub.sh, git.new"`
    </ParamField>
  </Expandable>
</ParamField>

<ParamField body="data-query-param" type="string" default="via">
  The query parameter to listen to for client-side click-tracking (e.g.
  `?via=abc123`).
</ParamField>
