Export All of Your Tags from GTM to a Spreadsheet Effortlessly [Improved]

Whilst browsing the web I found this article sharing painless ways to copy all your Google Tag Manager tags over to a Spreadsheet. Sadly when I tried this, my Currently_Paused field didn’t seem to populate correctly.

The author, Anton Entin did a great job with the original code so I shared my update on the page as a comment. On the off chance that doesn’t get updated and in the interest of everyone being able to quickly copy their tags into a spreadsheet here is my take on it.

If you’re looking for a quick and painless way to copy all your Google Tag Manager tags, including their paused/active status, below is a snippet of code you can paste into your browser console that will copy all your tags onto your clipboard for you to paste into a CSV, Google sheet or Excel spreadsheet.

How to use

  1. Navigate to your GTM container and have all your tags shown on your screen
  2. Scroll to the bottom of the page and ensure “Show rows” is set to “ALL” within GTM to expose all your GTM tags on the page
  3. Paste the snippet shown below into your Chrome Dev Tools Console.
    • You can right click on the page and locate “Inspect” to access your Dev Tools. From there click on “Console”
    • Your output will be copied over to your clipboard
  4. The contents are now stored in your clipboard, access Excel or Google Sheets and paste from your clipboard onto the spreadsheet

Code Snippet to paste


// Paste this script in the Console section of your browser Dev Tools.
gtmData = [];

var button = document.querySelector(".suite.suite-up-button.md-button.md-standard-theme.md-ink-ripple.layout-align-start-center.layout-row");

// Extract the account name
var accountNameElements = button.querySelectorAll(".suite-up-button-text-secondary");
var accountName;
if (accountNameElements.length > 1) {
    accountName = accountNameElements[1].textContent.trim();
} else {
    console.log("Expected more than one .suite-up-button-text-secondary element, found less");
}

// Extract the GTM container name
var gtmContainerNameElement = button.querySelector(".suite-up-text-name");
var gtmContainerName = gtmContainerNameElement.textContent.trim();

// GTM Container ID
var gtmNumber = document.querySelector('.gtm-container-public-id.md-gtm-theme').textContent.trim();

document.querySelectorAll('tr[gtm-table-row]').forEach(n => {
    const td2 = n.querySelector('td:nth-child(2)');
    const td3 = n.querySelector('td:nth-child(3)');
    const td4 = n.querySelector('td:nth-child(4)');
    const td5 = n.querySelector('td:nth-child(5)');

    const triggerName = td2 ? td2.textContent.trim() : '';
    const eventType = td3 ? td3.textContent.trim() : '';
    const firingTriggers = Array.from(n.querySelectorAll('td:nth-child(4) .small-trigger-chip')).map(conditionElement => conditionElement.textContent.trim());
    const lastEdited = td5 ? td5.textContent.trim() : '';


    // To find if Tag is currently paused
    const paused = n.classList.contains('gtm-table-row--paused');

    const tag = {
        Account: accountName,
        Property: gtmContainerName,
        GTM_Container: gtmNumber,
        Name: triggerName,
        Type: eventType,
        Firing_Triggers: firingTriggers,
        Last_Edited: lastEdited,
        Currently_Paused: paused
    }

    gtmData.push(tag);
})

//Output this to your clipboard for Excel or any CSV style program
function jsonToCSV(json) {
    const fields = Object.keys(json[0]);
    const csv = json.map(row => {
        return fields.map(fieldName => {
            // Check if the field value is an array and handle it accordingly
            if (Array.isArray(row[fieldName])) {
                return '"' + row[fieldName].join(';') + '"';  // Join array elements with semicolon and enclose in quotes
            } else {
                return JSON.stringify(row[fieldName], replacer); // Use replacer to handle other data types and escaping
            }
        }).join(",");
    });
    csv.unshift(fields.join(",")); // add header column
    return csv.join("\r\n");

    function replacer(key, value) {
        // Handle escaping of quotes in strings
        if (typeof value === 'string') {
            return value.replace(/"/g, '""');
        }
        return value;
    }
}

// Assuming 'gtmData' is your JSON array
const csvData = jsonToCSV(gtmData);

// Use the console's copy function
copy(csvData);

Let me know in the comments if this worked for you!

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments