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:

 window.dataLayer = window.dataLayer || [];
 'event': 'Custom Event',
 'eventCategory': 'My Event Category',
 'eventAction': 'My Event Action',
 'eventLabel': 'My Event Label',
 'eventValue': 0

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.

Thursday, April 19, 2018

Digital Advertising Cryptoscape

Many companies are working on leveraging the blockchain to solve digital advertising industry problems.  I've been trying to keep track of who's doing what and how it all fits together. Inspired by the famous Display LUMAscape from LUMA Partners, I've come up with the following Digital Advertising Cryptoscape!

Digital Advertising Cryptoscape

Here's a quick summary of each entity shown above:



Open protocol on the public Ethereum blockchain that allows for the building of decentralized applications for the $175 billion digital advertising ecosystem. By MetaX. adToken (ADT) is a multi-purpose token with usage properties for voting, depositing and challenging entry into the adChain Registry.

Rebel AI

Blockchain-enabled ad security solution that protects publisher identity and advertiser spend, and prevents ads from ever appearing on an unauthorized site.



Accepts BTSR (10% off) and other cryptocurrencies.



Decentralized user data exchange protocol to replace DMPs like BlueKai. Zohem’s Core comprises of a common data layer to which all publishers will be able to contribute data and get rewarded for the same with Zohem Data Tokens (ZDTs)


Audience-Driven Data Solutions for OTT and AdvancedTV. Founding member of adledger.



Mediachain is a blockchain data solution for connecting applications to media and information about it. Attribution Engine. The best image search engine for creators. Find free, high quality images that you can share and re-use.



A decentralized ad exchange built on top of Ethereum smart contracts.


Blockchain and programmatic advertising platform by EnvisionX. Formerly Bitcasts.

Kind Ads

A Decentralized Trust Protocol (the “Kind Ads Protocol”) will create an ecosystem for users, publishers, advertisers, and app partners. Currently focused on push notifications and developing a quality and reputation score for domains.  No fees will be charged on dollars spent.


The world's first exchange to trade advertising contracts. Developed in partnership with Nasdaq, NYIAX combines financial trading and advertising technology in one platform to enable publishers and advertisers to buy, sell, and re-trade premium advertising inventory. As the first and only trusted, transparent, future inventory marketplace, NYIAX allows both publishers and advertisers to increase ROI and reduce costs.


By Kochava. Through a smart contract IO, enables the related targeting and activation of audiences, and bolsters ad-spend efficiency and security. It will usher in a next-generation advertising system of record for all participants.


Facilitating branded content, sponsorship, and influencer marketing transactions between advertisers and digital publishers or content creators



Transparency-focused ad tech payment tech.


Use coin BTSR as a form of payment when the bill needs to be paid for programmatic advertising worldwide.



A blockchain based Identity Management platform for publishers, safely connecting people to brands and content.


Brave Browser

A Chrome-based browser that blocks ads and uses Basic Attention Token (BAT) to pay users and publishers.


Allows publishers to mine Monero (XMR) in users' browsers.


A brand new coin specifically for publishers to mine in their users' browsers.



Nonprofit research and development consortium charged with implementing global technical standards and solutions for the digital media and blockchain industries.

IAB Tech Lab Blockchain Working Group

Investigates the application of blockchain technology to address challenges in the digital advertising space and to develop standards and best practices for the utilization of blockchain technology.


If you are aware of any additional organizations using the blockchain for digital advertising that belong on this cryptoscape, please leave a comment, and I will update it.


2018-04-26 Added Kind Ads.

Tuesday, December 19, 2017

Los Angeles Roof TV Antenna for VHF/UHF

Cutting The Cord

This year I finally cut the cord and got rid of my DISH satellite TV service which saves me about $50 per month! I've had the service for many years just to get the basic local channels like CBS, ABC, NBC, and FOX.  My plan was to replace DISH with a digital antenna so I could get all of those channels for free.  In this post, I'll share the model of the antenna that worked for me here on the west side of Los Angeles.


Finding the right antenna proved to be more difficult that I thought it would be.  I first started with an indoor VHF/UHF antenna, the NorthVu NV20 Pro AMPd, that I got from Tablo's website.  Tablo is an Over the Air (OTA) DVR company.  Long term, I was contemplating buying one of their DVR's so I figured it would be good to get an antenna they were familiar with.  With this antenna, I was able to get some UHF channels like CBS, but none of the VHF channels like FOX.  I thought that maybe an indoor antenna was not powerful enough for my neighborhood in Los Angeles which is Del Rey 90066.

I shopped on Amazon for a highly-rated outdoor roof antenna and purchased this 1byone 85 Miles VHF/UHF antenna. I borrowed a friend's ladder, got on my roof, mounted this antenna and connected it to the coax cable that was previously connected to my DISH satellite which DISH never came to retrieve. I also plugged in and connected the included power booster behind my TV.  Unfortunately, I got the same result: UHF channels came in perfectly and VHF channels did not work at all.  I have no idea why since the specs for this antenna clearly claim that both VHF and UHF should work.  I ended up returning this antenna to Amazon for a refund.

Next I started Googling for with terms like "missing VHF channels in Los Angeles" and found this web page called Best TV Antenna for Los Angeles, CA Digital TV Stations from an antenna vendor in NY called Denny's Antenna.  The middle of this page described my exact problem:
Note: Some Los Angeles area residents have reported problems receiving KABC 7.1 ABC, KTTV 11.1 FOX, KCOP 13.1 MYTV and KCAL 9.1 IND when using antennas other than the EZ HD or the HD Stacker. This is due to the VHF broadcast signal frequencies in use by these stations and the use of the improper antenna to receive VHF signal frequency. Many of today's antennas (do to smaller antenna size) will not receive VHF signals. The EZ HD and the HD Stacker are designed to provide excellent performance across the entire VHF/UHF frequency spectrum in use in the Los Angeles free to air broadcasting market.
So I immediately ordered their EZ HD antenna.  It arrived at my house in just a few days.  I mounted it on my roof, connected the coax cable, connected a ground wire that was also left over from the previous DISH satellite, and scanned for channels on my TV.  Amazingly, it worked!  I was able to receive all the local channels, both UHF and VHF.  I have no idea why this antenna worked so well.  To be honest, this one felt flimsy and cheaply made compared to the one I bought on Amazon.
Denny's EZ-HD - works in LA
Denny's EZ-HD - works in LA

Channel Guide

A list of local channels is easily available online, but I wanted one for my phone so I downloaded the app TV Listings by TV24.  I was amazed how many channels you can get for free over the air.  The TV Listings listings were pretty accurate.


I look forward to being able to watch local news once in a while or a live event like the Grammy's that is hard to find online.  The next thing I am going to look into is whether I want to purchase a DVR such as Tablo.  A lot of the shows I've been watching are on Hulu, Netflix, and Amazon to which I already subscribe.  It isn't clear yet whether the DVR is necessary.

Sunday, October 15, 2017

Chad Lefkowitz-Brown Solo Transcriptions

I am a huge fan of saxophonist Chad Lefkowitz-Brown.  I came across one of his videos on Instagram about a year ago and I've been following him ever since.

I recently purchased his book of 15 solo transcriptions by saxophonist and educator Ron Fix.  It's available in physical and digital form. It is fun to play through them and get some insight into how Chad thinks when he improvises.

Interestingly, this is the first transcription book I've ever seen that covers music solely from social media!  Every single one is freely available online on either Chad's YouTube or Instagram feed.

The digital version of the book comes with audio files you can play along to, but it doesn't include links to find each video online.  I combed through Instagram, YouTube, and Facebook to find each one.  That's what I want to share with you in this post so you can both watch and play along.  Happy practicing!

Here they are, listed in the order they appear in the book:

All The Things You Are

Instagram - November 9, 2016

Body And Soul

YouTube - December 8, 2015


Instagram - September 27, 2016


Instagram - July 26, 2016


YouTube - February 26, 2014

For All We Know

YouTube - May 17, 2013

Get Lucky

YouTube - October 9, 2013

High High The Moon

Instagram - April 22, 2017

Melodic Cell Lines

Instagram - April 6, 2017

A post shared by Chad Lefkowitz-Brown (@chadlbsax) on

Nature Boy

YouTube - July 28, 2014

On The Sunny Side Of The Street

YouTube - February 16, 2015

Recorda Me

Instagram - August 24, 2016


YouTube - July 15, 2013

Struttin’ With Some Barbecue

Facebook - August 4, 2016
Instagram - August 6, 2016

Take The A Train

YouTube - November 18, 2014

There Is No Greater Love

Instagram - November 16, 2016