
January 9, 2021
Massive List of 60+ Custom JavaScript Snippets for Google Tag Manager
Updated: January 9th, 2021
In 2016, when this blog saw the daylight, my vision was (and still is) to make Analytics Mania No.1 place to find Google Tag Manager resources. Yes, I know it’s next to impossible to surpass Simo’s blog, but hey, let me dream big 🙂
As a result, the library of GTM recipes was born and its popularity exceeded my biggest expectations. Also, let’s not forget The Ultimate list of 120+ GTM Resources, GTM Checklist (60+ items), huge Google Tag Manager Glossary, etc.
Months went by and I noticed another growing demand among members of web analytics communities, an online library/collection where one could find various JavaScript code snippets (ready to be used in GTM).
Turns out such a thing still does not exist! Or at least I couldn’t find one online. Hmmm… Time to shine?
I present a massive list of custom JavaScript snippets for Google Tag Manager. But don’t forget to use them wisely. The majority of code pieces should be added as Custom HTML tags, while a tiny fraction should be utilized as Custom JavaScript variables in GTM.
Each link will redirect you to a GTM recipe or a blog post (written by me or other authors) that provides detailed installation instructions. For your convenience, I’ve split all codes into categories.
Obviously, this list is not in its final form and will grow in the future so if you haven’t yet, subscribe to Analytics Mania’s updates in the form below.

Do you notice something missing? Do you have an awesome script hiding in your pocket? Let me know in the comments and I’ll include it on the list.
Regular readers of Analytics Mania will (probably) already know a lot of these scrips but I promise that everyone will find something new. Ready? Let’s go!
The appearance of particular elements
#1. Hover Listener pushes events to the data layer about hover interactions that occur over the given CSS selectors in the page.
#2. Custom Element Visibility Listener tracks when certain elements appear and disappear from the screen (after scrolling up or down).
Audio players
#3. Soundcloud player listener tracks interactions with embedded Soundcloud player on your site (Play, Pause, and view 25, 50, 75, and 100% of the audio track).
#4. Mixcloud player listener tracks interactions with embedded Mixcloud player on your site (when visitor listens to 25%, 50%, 75% of the audio track. Other possible events are: ‘buffering’, ‘play’, ‘pause’, ‘ended’, ‘error’).
#5. HTML5 audio player listener covers a bunch of generic no-name audio players that can be embedded on your site.
Browsing-related scripts
#6. Track when visitor bounces back to Google’s search engine results (SERP).
#7. Tab visibility tracking enables you to track when the browser tab with your website in it is hidden or visible.
#8. Check if a visitor is using Ad Blocker.
#9. Detect if a visitor is using incognito mode.
#10. Exit-intent listener fires data layer event when visitor tends to leave your website.
#11. Print listener tracks when someone prints a page of your website.
#12. Copy text listener tracks when someone copies a text on your website.
Chat/comments
#13. Track Facebook comments (embedded on your site).
#14. Track DISQUS comment submissions.
#15. Track Zendesk (formerly Zopim) chat widget interactions.
#16. Track Tawk.to chat widget interactions.
Cookies
#17. Implement Cookie consent when a new visitor lands on your page.
#18. Set cookies in the visitor’s browser (then read it via 1st Party Cookie Variable).
#19. Set cookie with page view count. With every page view the counter in the cookie increases by 1. Useful for those who want to fire a particular tag after, say, 3rd page view.
Â
Â
Device-related
#20. Visitor’s Variable – Screen Width (Custom JavaScript Variable)
#21. Is visitor browsing with a mobile device? (Custom JavaScript Variable)
Form tracking
#22. Track drop-down selection.
#23. Track form abandonment.
#24. Track form field timing.
#25. Gravity forms listener. In one of my blog posts, how to track form submissions, I’ve explained how to write a custom auto-event listener without coding skills. Gravity forms were chosen as an example.
#26. Contact Form 7 form submission listener.
#27. AJAX form tracking by taking advantage of Bounteous’ AJAX listener. In fact, you can track any web interaction which is based on this technology.
#28. Pre-fill form fields. This technique is useful when you want to see what was the exact traffic source of each submission (without the need of checking Google Analytics).
Pro tip:Â I recommend bookmarking this list in case you’ll need some custom JavaScript snippets for Google Tag Manager to have within a hand’s reach.
Page-Related
#29. Track page load time.
#30. Is the page within an Iframe? (Custom JavaScript Variable)
#31. Calculate readability scores for content
SEO
Remember, it’s always better to add SEO stuff (like schemas, meta tags, etc.) directly via code. Anyway, here are some codes (for science).
#32. How to insert rel=”cannonical” with GTM.
#33. Add schema markup.
#34. Fetch values of page’s meta tags (Custom JavaScript Variable).
Updated:Â There is a newer guide on how to implement SEO changes via GTM.
Social networks
#35. Track clicks of Twitter buttons (embedded on your site).
#36. Track social shares made via AddThis plugin.
Time/weather
#37. Fetch the visitor’s local time and split the traffic into content groups.
#38. Catch visitor’s weather data and send it to Google Analytics.
#39. Custom timer trigger which starts when another interaction occurs (e.g. a click).
Traffic-source-related
#40. Transfer UTM parameters from one page to another. This is useful when cross-domain tracking isn’t possible, you have an intermediate landing page, and you want to transfer its UTM parameters to the next page.
#41. Is visitor organic? (came from a search engine), Custom JavaScript Variable.
Video players
#42. Track Vimeo player interactions.
#43. Track Wistia player interactions.
#44. Track JW player interactions.
#45. Track generic HTML5 video player interactions.
#46. Track Vidyard player interactions.
Other
#47. Name of the downloaded file (Custom JavaScript Variable)
#48. Calculate real-time currency exchange rate for client-side conversions
#49-52. Konami codes. Simo Ahava published a listener who captures the famous combination used as a cheat code in video games. I added some minor modifications (found online) and as a result, you can now use 4 different Konami codes:
##49. Doge Konami Code.
##50. Harlem Shake Konami Code.
##51. Rick Roll Konami Code.
##52. Shooting Start Konami Code.
#53. Change Android Chrome’s address bar color.
#54. Add a copyright notice to the text copied from your website.
#55. Random number (within a defined range), Custom JavaScript Variable.
#56. Remove personally identifiable information (PII) from URLs.
#57. Track website’s autocomplete search.
#58-64. 7 Custom JavaScript Variables for GTM.
Â
Â
Final words
This list is far from complete. There is still a bunch of useful scripts wandering somewhere out there. Help me make this library/list/collection/whatever even bigger, therefore make it more useful to readers like you.
Do you miss something in the list of Custom JavaScript snippets for Google Tag Manager? If so, let me know in the comments, Twitter, Linkedin, or julius [at] analyticsmania.com.

23 COMMENTS
Love this list so helpful. I want to use number #37. Catch visitor’s weather data and send it to Google Analytics, but the link seems to be to the wrong recipe. Great list!
My bad. Fixed. Thanks for noticing!
There is a wrong link on the visitor's weather data bullet, it links to the track post comments article...
Thanks for the heads up! The link is fixed now.
Thanks for creating this, Julius. For beginners it can be difficult to know what is possible with GTM and where to begin designing tags. Many of us truly appreciate your effort with this. Keep up the good work.
#3 for https://www.analyticsmania.com/google-tag-manager-recipes/soundcloud/
didn't work
Hey, I've just tried it here https://soundcloud.com/pages/embed and it worked fine. When I clicked Play or Pause in the embedded player, "scEvent" appeared in GTM's Preview and Debug mode.
Maybe your Soundcloud player is loaded dynamically (in a popup)?
I could not see Simos code for client ID, among others - super useful for troubleshooting and awesome analysis.
Hey, could you give me a link to that post?
Hey Julius,
Is it possible to track the "save as" event when users save the entire webpage as an html file on their local disc ?
Thanks,
Peter
This is great. I was just going to do a basic quick setup for a client was google searching to double check a variable setup and found you. That was 6 hours ago and I am still playing. Thanks for the rabbit hole I fell into. Great stuff. Been using Tag Manager for a while. This is the best easy resource I have found in years. THANK YOU!!!
Hello! I did everything as described here #31. Add schema markup., but the structured data check tool does not show anything. What could be the reason?
Hey, it's a known bug of the markup checker tool. All we can do is to wait for Google to fix the issue. Even if the code is added properly, markup validator will not show anything.
Thank you, but one more question. After which time the extension will appear in the search. Ie, that I visually see in the issue what it works?
That's more of an SEO question and I'm not the right person to ask such questions.
Your list is amazing.
Thank you very much !
Could you include Facebook pixel installation?
Hey, you can learn more about the FB Pixel installation here https://www.analyticsmania.com/post/facebook-pixel-with-google-tag-manager/. I did not include that in this guide because this article is dedicated to custom scripts that are not a part of a 3rd party tool, like FB Pixel, LinkedIn Insight tag, etc.
Is it possible to track page share via email like the other social shares?
Depends on the social share plugin you're using:
- Either that plugin offers an API that GTM can use (Siteimprove social share plugin, as far as I know/see, does not have that option)
- You can try using click tracking. When someone clicks on a "share via email" icon/link, then you can send it as an event. But this tracking does not guarantee that share was actually completed. But on the other hand, you have no other choice.
- If click tracking is not working, most likely that email share widget is in the iframe (meaning that tracking will most likely be impossible)
Hey Julius,
Could you show how to return the x , y coordinates on click events over the page and must be done using a Custom Javascript Variable.
I've been trying out but only comes up showing 'undefined'.
#7. link is broken: it redirects to an unrelated article about LinkedIn.
Thanks, fixed