diff --git a/integrations/GoogleTagManager/browser.js b/integrations/GoogleTagManager/browser.js
index be3783983f..333ca910fa 100644
--- a/integrations/GoogleTagManager/browser.js
+++ b/integrations/GoogleTagManager/browser.js
@@ -13,7 +13,7 @@ class GoogleTagManager {
       w[l].push({ "gtm.start": new Date().getTime(), event: "gtm.js" });
       const f = d.getElementsByTagName(s)[0];
       const j = d.createElement(s);
-      const dl = l != "dataLayer" ? `&l=${l}` : "";
+      const dl = l !== "dataLayer" ? `&l=${l}` : "";
       j.async = true;
       j.src = `https://www.googletagmanager.com/gtm.js?id=${i}${dl}`;
       f.parentNode.insertBefore(j, f);
@@ -21,7 +21,11 @@ class GoogleTagManager {
   }
 
   identify(rudderElement) {
-    logger.debug("[GTM] identify:: method not supported");
+    // set the traits to the datalayer and put everything under the key traits
+    // keeping it under the traits key as destructing might conflict with `message.properties`
+    const rudderMessage = rudderElement.message;
+    const props = { traits: rudderMessage.context.traits };
+    this.sendToGTMDatalayer(props);
   }
 
   track(rudderElement) {
@@ -31,6 +35,9 @@ class GoogleTagManager {
       event: rudderMessage.event,
       userId: rudderMessage.userId,
       anonymousId: rudderMessage.anonymousId,
+      // set the traits as well if there is any
+      // it'll be null/undefined before identify call is made
+      traits: rudderMessage.context.traits,
       ...rudderMessage.properties,
     };
     this.sendToGTMDatalayer(props);
@@ -60,6 +67,9 @@ class GoogleTagManager {
       event: eventName,
       userId: rudderMessage.userId,
       anonymousId: rudderMessage.anonymousId,
+      // set the traits as well if there is any
+      // it'll be null/undefined before identify call is made
+      traits: rudderMessage.context.traits,
       ...rudderMessage.properties,
     };