Blog, Website & Page Publishing

Ryan_G_Thompson
Participant

CTA (Beta) GTM Tracking

SOLVE

Hi,

 

I've recently started using the new CTAs (Beta) to replace our existing hubspot marketing pop-up form.

 

After building the new pop-up, I'm dismayed that it seems completely untrackable in GTM.

 

I've tried using the Hubspot form submission listener and a few other ideas but so far I haven't been able to push anything into the data layer.

 

Any help would be greatly appreciated.

1 Accepted solution
sbinkley
Solution
Participant

CTA (Beta) GTM Tracking

SOLVE

Successfully Tracking HubSpot Interactive CTA Buttons with GTM


Hello everyone,

I wanted to share a solution that worked for me in tracking HubSpot’s new interactive CTA buttons using Google Tag Manager (GTM). I noticed that many of us are struggling with getting these buttons to fire the correct tags, especially since they are dynamically loaded.


After some trial and error, I found that using a MutationObserver to detect these dynamically added elements and attach event listeners to them was effective. Here's the detailed solution:



  1. Create a Custom HTML Tag in GTM:
    • Go to the Tags section in GTM.
    • Click New and select Tag Configuration.
    • Choose Custom HTML.
  2. Add the Following Script to the Custom HTML Tag:

 

 

<script>
(function() {
  function trackInteractiveButtons() {
    var buttons = document.querySelectorAll('.interactive-button');
    buttons.forEach(function(button) {
      button.addEventListener('click', function() {
        window.dataLayer = window.dataLayer || [];
        window.dataLayer.push({
          event: 'hubspot-button-click',
          'button-class': 'interactive-button',
          'click-url': button.href
        });
        console.log('Interactive button clicked:', button.href);
      });
    });
  }

  // Initial call to track buttons present at page load
  trackInteractiveButtons();

  // MutationObserver to track dynamically added buttons
  var observer = new MutationObserver(function(mutations) {
    mutations.forEach(function(mutation) {
      mutation.addedNodes.forEach(function(node) {
        if (node.nodeType === 1 && node.classList.contains('interactive-button')) {
          node.addEventListener('click', function() {
            window.dataLayer = window.dataLayer || [];
            window.dataLayer.push({
              event: 'hubspot-button-click',
              'button-class': 'interactive-button',
              'click-url': node.href
            });
            console.log('Interactive button clicked:', node.href);
          });
        }
      });
    });
  });

  observer.observe(document.body, {
    childList: true,
    subtree: true
  });
})();
</script>
​

 

 

  • Set the Trigger for All Clicks:
    • Attach this Custom HTML tag to trigger on all click; then target "click classes: interactive-button".

If you have other dynamically loaded elements or different classes, you can adjust the script accordingly. (Such as "hs-image-widget" for the image based CTAs, etc.)


I hope this helps others facing similar issues. Upvote if it worked for you! Happy tracking!

View solution in original post

19 Replies 19
CMarritt
Contributor

CTA (Beta) GTM Tracking

SOLVE

Hi, this is still an issue today, has anyone had any success?

0 Upvotes
sbinkley
Solution
Participant

CTA (Beta) GTM Tracking

SOLVE

Successfully Tracking HubSpot Interactive CTA Buttons with GTM


Hello everyone,

I wanted to share a solution that worked for me in tracking HubSpot’s new interactive CTA buttons using Google Tag Manager (GTM). I noticed that many of us are struggling with getting these buttons to fire the correct tags, especially since they are dynamically loaded.


After some trial and error, I found that using a MutationObserver to detect these dynamically added elements and attach event listeners to them was effective. Here's the detailed solution:



  1. Create a Custom HTML Tag in GTM:
    • Go to the Tags section in GTM.
    • Click New and select Tag Configuration.
    • Choose Custom HTML.
  2. Add the Following Script to the Custom HTML Tag:

 

 

<script>
(function() {
  function trackInteractiveButtons() {
    var buttons = document.querySelectorAll('.interactive-button');
    buttons.forEach(function(button) {
      button.addEventListener('click', function() {
        window.dataLayer = window.dataLayer || [];
        window.dataLayer.push({
          event: 'hubspot-button-click',
          'button-class': 'interactive-button',
          'click-url': button.href
        });
        console.log('Interactive button clicked:', button.href);
      });
    });
  }

  // Initial call to track buttons present at page load
  trackInteractiveButtons();

  // MutationObserver to track dynamically added buttons
  var observer = new MutationObserver(function(mutations) {
    mutations.forEach(function(mutation) {
      mutation.addedNodes.forEach(function(node) {
        if (node.nodeType === 1 && node.classList.contains('interactive-button')) {
          node.addEventListener('click', function() {
            window.dataLayer = window.dataLayer || [];
            window.dataLayer.push({
              event: 'hubspot-button-click',
              'button-class': 'interactive-button',
              'click-url': node.href
            });
            console.log('Interactive button clicked:', node.href);
          });
        }
      });
    });
  });

  observer.observe(document.body, {
    childList: true,
    subtree: true
  });
})();
</script>
​

 

 

  • Set the Trigger for All Clicks:
    • Attach this Custom HTML tag to trigger on all click; then target "click classes: interactive-button".

If you have other dynamically loaded elements or different classes, you can adjust the script accordingly. (Such as "hs-image-widget" for the image based CTAs, etc.)


I hope this helps others facing similar issues. Upvote if it worked for you! Happy tracking!

ADantas
Participant

CTA (Beta) GTM Tracking

SOLVE

hey @sbinkley this looks fantastic.
I tried to deploy this code, but with no success. Maybe i am missing out on something, would you mind sharing couple of GTM screenshots ? 🙂

0 Upvotes
Ryan_G_Thompson
Participant

CTA (Beta) GTM Tracking

SOLVE

Hi there,

I gave this a try but I believe it may only apply to CTA buttons (which I've never used). I've been using the Pop-up form on Hubspot which still seems untrackable through GTM, although other users have reported having more success using the custom HTML CTA  solution.

0 Upvotes
sbinkley
Participant

CTA (Beta) GTM Tracking

SOLVE
0 Upvotes
RLeo
Contributor | Platinum Partner
Contributor | Platinum Partner

CTA (Beta) GTM Tracking

SOLVE

Hello, we are having the same issue aswel. Im trying to listen for the onBeforeSubmit event but as others confirmed, the form is on an Iframe so listening for the events is not possible. 

How can we listen to these events on the new CTAs with forms?

0 Upvotes
TomM2
Thought Leader | Platinum Partner
Thought Leader | Platinum Partner

CTA (Beta) GTM Tracking

SOLVE

Hi all! I just created a new feature request in the ideas forum here! If this would be useful to you please give it an upvote 🙂 

Tom Mahon
Technical Consultant | Solutions Engineer | Community Champion
Baskey Digitial

Book a consultation

Did my post help answer your query? Help the community (and me) by marking it as a solution.


PamCotton
HubSpot Alumni
HubSpot Alumni

CTA (Beta) GTM Tracking

SOLVE

Thank you for sharing @TomM2 just upvoted!

0 Upvotes
melissachowning
Participant | Platinum Partner
Participant | Platinum Partner

CTA (Beta) GTM Tracking

SOLVE

We're struggling with this as well and the HubSpot support team hasn't been able to help us yet either. The first suggested solution referred to injecting an event listener into the iframe, but this does not work if the parent window and iframe are hosted on different domains (which is the case here. iframe domain is 4038620.hs-sites.com). We think the iframe is the issue. Is there a solution in the works for this? 

TomM2
Thought Leader | Platinum Partner
Thought Leader | Platinum Partner

CTA (Beta) GTM Tracking

SOLVE

Ah! I didn't know the new tool is loaded in an iframe, that's why GA isn't picking it up then. Unfortunately that would mean it's not possible to target it with GA. A workaround might be to us custom URLs with UTM parameters as the submission/redirect urls on these ctas https://support.google.com/analytics/answer/1033863?hl=en#zippy=%2Cin-this-article 

Tom Mahon
Technical Consultant | Solutions Engineer | Community Champion
Baskey Digitial

Book a consultation

Did my post help answer your query? Help the community (and me) by marking it as a solution.


melissachowning
Participant | Platinum Partner
Participant | Platinum Partner

CTA (Beta) GTM Tracking

SOLVE

Unfortunately, that presents an unideal user experience as the reader would be redirected away from the page/content they are reading onto a 'thank you' page. The ideal UX is that the user can submit their email and continue reading on the page they are on. 

 

It's a major bummer with the new CTAs. We want to be able to track traffic source, page, etc., in GA, but it seems at the moment, we cannot. 

0 Upvotes
TomM2
Thought Leader | Platinum Partner
Thought Leader | Platinum Partner

CTA (Beta) GTM Tracking

SOLVE

Hey @Ryan_G_Thompson it looks like the new CTA beta uses the class "interactive-button" for it's buttons, have you tried setting up an event to track clicks based on this class? 

Tom Mahon
Technical Consultant | Solutions Engineer | Community Champion
Baskey Digitial

Book a consultation

Did my post help answer your query? Help the community (and me) by marking it as a solution.


Ryan_G_Thompson
Participant

CTA (Beta) GTM Tracking

SOLVE

Hi Tom, thanks but where does this class occur? On email submission based pop ups like the one I've screenshotted I couldn't locate this class.

Screenshot 2023-06-13 at 4.28.41 pm.png

0 Upvotes
TomM2
Thought Leader | Platinum Partner
Thought Leader | Platinum Partner

CTA (Beta) GTM Tracking

SOLVE

Looks like you're right for the forms, that class I mentioned is just on the button pop-ups. It looks like the submit button on these forms is "hs-form__actions__submit"

 

TomM2_0-1686655387461.png

 

Tom Mahon
Technical Consultant | Solutions Engineer | Community Champion
Baskey Digitial

Book a consultation

Did my post help answer your query? Help the community (and me) by marking it as a solution.


Ryan_G_Thompson
Participant

CTA (Beta) GTM Tracking

SOLVE

No luck Tom, I tried creating this trigger and still nothing happened upon submission.

Ryan_G_Thompson_0-1687083922361.png

 

0 Upvotes
TomM2
Thought Leader | Platinum Partner
Thought Leader | Platinum Partner

CTA (Beta) GTM Tracking

SOLVE

@Ryan_G_Thompson it looks like you have double "_" characters in between the words, is that the case? It should just be one in between each word. 

Tom Mahon
Technical Consultant | Solutions Engineer | Community Champion
Baskey Digitial

Book a consultation

Did my post help answer your query? Help the community (and me) by marking it as a solution.


0 Upvotes
Ryan_G_Thompson
Participant

CTA (Beta) GTM Tracking

SOLVE

@TomM2 I was following the exact convention you were using above:


@TomM2 wrote:

It looks like the submit button on these forms is "hs-form__actions__submit"


Upon inspecting the element you were indeed correct that the double "_" characters is used for this button class.

Ryan_G_Thompson_0-1687266235671.png

 

TomM2
Thought Leader | Platinum Partner
Thought Leader | Platinum Partner

CTA (Beta) GTM Tracking

SOLVE

Ah! My apologies! Hmm, that's about as far as I can think of without having access to the tools to troubleshoot to be honest! I don't see any reason why GA wouldn't trigger on these classes. 

Tom Mahon
Technical Consultant | Solutions Engineer | Community Champion
Baskey Digitial

Book a consultation

Did my post help answer your query? Help the community (and me) by marking it as a solution.


0 Upvotes
PamCotton
HubSpot Alumni
HubSpot Alumni

CTA (Beta) GTM Tracking

SOLVE

Hello @Ryan_G_Thompson Happy Friday!

I want to invite our top experts to this conversation, @Ben_M, and @alyssamwilie any recommendations to @Ryan_G_Thompson?

 

Thank you,

Pam