Sunday, September 06, 2020

Simplifying Custom Events for Google Analytics using Google Tag Manager

I am relatively new to using Google Tag Manager (GTM), and I am trying to figure out the best way to log Custom Events from a single page app built with React.  I want these events to register in Google Analytics (GA) which I have set up already in Google Tag Manager.  The kinds of events I'm planning to record are user account creation, email validation, user sign in, user sign out, and various other interactions within the application. It looks like there are various ways to trigger events based on form submissions using Google Tag Manager, but I thought it would just be simpler to manually "invoke" each event I want exactly where I want it via the GTM API.

Searching the web, this was the most useful tutorial I found: Google Tag Manager Custom Event Trigger Explained by Julius Fedorovicius.  I made a spreadsheet for my app to capture all the custom events I am interested in.  There were 26 of them.  As I followed the tutorial, I noticed the following things I would need to do:

  • Create and push various Variables into the GTM Data Layer to use them in my event labels and values.
  • Create a new GTM Trigger for each of the 26 custom events from my spreadsheet
  • Create a new GTM GA Tag and associate the corresponding trigger for each of the 26 custom events from my spreadsheet
This seemed like a lot of work and maintenance within GTM.  I wondered if there was an easier way.  Since it is possible to define the event's Category, Action, Label, and Value using variables from the Data Layer, I realized that should be able to handle all of my 26 events with just 1 new GTM Tag and Trigger along with a reusable set of custom Variables.  Here's how I set it up:

Step 1: Create Data Layer Variables for each possible GA Event field


Google Tag Manager Custom Data Layer Variables for Google Analytics Event













This will be used for all the possible event fields Category, Action, Label (optional), and Value (optional) to be captured from the Data Layer.

Step 2: Create a Custom Event Trigger


Google Tag Manager Custom Event Trigger















This is meant to be generic so it can be used for any Custom Event.

Step 3: Create a Custom Event Tag and Associate with Custom Event Trigger


Google Tag Manager Custom Event Google Analytics Tag





























This Google Analytics tag will be triggered by the Custom Events.  Each attribute of the GA tag (Category, Action, Label, and Value) should be configured to come from the corresponding Data Layer Variable that was created in Step 1.  This is what allows the same Trigger and Tag to be used for all Events.  That's the whole set up!

The list of Tags now only includes one Tag for Custom Events instead of one for each Custom Event.  The tag list should look something like this:

Google Tag Manager Tag List










Pushing Events to Google Tag Manager

Now within the application, Custom Events can be pushed to Google Tag Manager's Data Layer and the Trigger that was set up will push them into Google Analytics.  The code would look something like this:

<script>
 window.dataLayer = window.dataLayer || [];
 window.dataLayer.push({
 'event': 'Custom Event',
 'eventCategory': 'My Event Category',
 'eventAction': 'My Event Action',
 'eventLabel': 'My Event Label',
 'eventValue': 0
 });
</script>


Final Thoughts

Perhaps the downside of this approach is that it may be harder to adapt these events to other analytics tags I may use in the future.  Maybe that is why Julius Fedorovicius's post referenced above suggested creating a new Trigger and Tag for each individual event.  I was thinking about trying out Mixpanel next, so I will soon find out.  For all you Google Tag Manager and Google Analytics Experts out there, please let me know your thoughts.  

Monday, June 22, 2020

Dividing Money

I have found a few situations that require taking an amount of money and dividing it up as evenly as possible, to the nearest cent or whole dollar, such that the individual parts exactly add up to the original amount.

Here are a few examples of when I've needed to do this:

Example 1:

Apportioning an Operating Expense to Multiple Real Estate Properties

As a real estate investor that owns multiple properties, I sometimes have operating expenses that are not associated with any individual property.  Since the Schedule E tax form requires all expenses to be listed on a per-property basis, it is necessary to take the expense and divide it up across the properties.  As an example, let's say I spent $1025.95 on tax preparation and I have 7 properties.  I would split that expense as follows:

 Property Amount
 A $146.56
 B $146.56
 C $146.56
 D $146.56
 E $146.57
 F $146.57
 G $146.57
 Total: $1025.95

Notice that in this case I use a precision of cents.

Example 2:

Distributing Cash Tips at a Gig

As a band leader, at the end of a gig, I often need to collect the cash tips we received, total them up, and split them with the rest of my band.  For example, if my jazz trio earns a total of $113 in tips, I would pay each musician as follows:

 Musician Amount
 myself $37
 bass player $38
 drummer $38
 Total: $113

In this case, I use a precision of whole dollars since we typically don't receive any coins.

These are just 2 examples, but similar division logic can be used when friends need to split the bill at a group dinner and other similar situations and the amount of money cannot be split evenly.  It's not rocket science to make these calculations, but I do it often enough that I decided to make a simple web-based tool to do it for me.  The tool can be found at:


In this tool, simply enter an amount of money, how many parts you want to divide it into, and the precision (cents or whole dollars), and then click Divide to get the resulting amounts. Feel free to use it for all your money splitting needs!  And let me know what you think of it in the comments below.