Send Data to Google Analytics with Measurement Protocol and Google Apps Script

This example shows how to send data to Google Analytics using the Measurement protocol. The event data is sent via POST because it allows for a larger payload. The parameter z is set with a random number for cache busting. We can set the hit type (t) to either pageview, event or exception.

function GoogleAnalytics_(t, param1, param2) {

    // Credit: @guimspace
    try {
        var meta = [];

        meta.push(
            ['v', '1'], 
            ['tid', 'UA-XXXXXXXX-1'], 
            ['cid', uuid_()], 
            ['z', Math.floor(Math.random() * 10E7)], 
            ['t', t]
        );

        if (t == 'event') {
            meta.push(['ec', param1], ['ea', param2]);
        } else if (t == 'exception') {
            meta.push(['dt', param1], ['exd', param2]);
        } else throw 101;

        var payload = meta.map(function (el) {
            return el.join('=');
        }).join('&');

        var options = {
            'method': 'post',
            'payload': payload
        };

        UrlFetchApp.fetch('https://ssl.google-analytics.com/collect', options);
        
    } catch (e) {}

    return;
}

/* Generates a random UUID to anonymously identify the client */
function uuid_() {
    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
        var r = Math.random() * 16 | 0,
            v = c == 'x' ? r : (r & 0x3 | 0x8);
        return v.toString(16);
    });
}