Noise to Signal

◂ Blog

Introducing the Google Analytics App+Web Migration Tool

Like many analytics practitioners, I’ve been toying around with Google’s latest version of Google Analytics: App+Web. There are a lot of great new features (and many missing ones! It’s in beta.), but one thing that struck me was that there was no clear path for Universal Analytics users to migrate to App+Web. According to, there are 29 million installations of Google Analytics and 4.9 million GTM installations out there. That’s a lot of potential migrations!

That’s why I built, a tool that allows Google Analytics and Google Tag Manager users to easily migrate their Universal Analytics tags to App+Web.

Here’s what the tool provides:

  • It connects to your GTM instance via OAuth, no personal or GTM data is stored.
  • It creates a new workspace so that all changes are tracked and revertable.
  • It scans your container for GA Settings variables and maps them to App+Web Configuration tags.
  • It converts your UA pageview and event tags to App+Web event tags. All firing and blocking triggers are preserved.
  • It lets you preview your changes before the migration begins.

Some limitations exist. Currently, the logic used to migrate from UA event tag to App+Web event tag is dead simple: the category, action, and label parameters are converted into App+Web event parameters with the same names. Also, custom dimensions, tag sequencing, and GA fields are ignored.

The most significant limitation is the Google-imposed quota on 20 API requests every 100 seconds. I’ve submitted requests multiple times to increase this limit with no luck. This is a major disappointment as it renders the tool useless for large containers, but I’m releasing the tool and code anyway in case it serves as inspiration. I’ll update this post if anything changes

I’d love to solicit feedback from the community to hear about what useful transformations could be performed. Should custom dimensions be moved over as ‘user parameters’? Should there be some intelligence in reading the tag name and creating recommended App+Web events? There are lots of options, but few “correct” ones that make sense in all scenarios. The nice thing to know is that all changes are saved to a new workspace that can be edited by hand if need be.


How it Was Build

I always like to share my process for those who are interested looking under the hood or building something similar. The code for can be found here on Github. The OAuth process uses the Google Sign-In JavaScript client and the GTM manipulation uses the GTM v2 API.

Hosting Static Websites

Hosting as a static website went through a few iterations.

At first, it was hosted on Google Cloud Storage following these instructions. Cloud Build listened for commits to the repository and ran a simple script that copied the updated files over to Google Cloud Storage. This worked well, but the GCP load balancer cost about $0.60 a day which can add up over time.

Currently, the site is hosted on which offers a free tier for static websites deployed via GitHub commits. The setup took about 10 minutes including updating DNS and certificate records. You can’t beat free!


Adam Ribaudo

Adam Ribaudo is the owner and founder of Noise to Signal LLC. He works with clients to ensure that their marketing technologies work together to provide measurable outcomes.

Leave a Reply

Home   Blog   Portfolio   Contact  

Bringing clarity to marketers in a noisy world © 2023