End-To-End Measurement in Google Analytics

Consider the following. You own a website and want to track your visitors from the moment they enter the website up until the moment they actually convert into a customer. Normally you would do this by either setting up Goals and Funnels or by using the E-Commerce module within Google Analytics. This works perfectly fine if your visitors actually become customers once they complete the process.

But what if the process doesn’t end at your website?

What if the nature of your business doesn’t allow users to complete their purchase online? They might simply send in a form for a price quotation or fill out a call me back form. How can you measure those?

Measuring non direct conversions

Several web analytics products provide solutions to this problem by allowing you to import data from your back-end system. This is ideal because you can analyze, in detail, what a visitor did on your website in the same way as you would analyze a full online conversion. All data on sources, behavior and trends are available so you can do pretty much anything you want. Unfortunately Google Analytics doesn’t allow you to import data into their system (except for Google Adwords), bummer…

Making the connection between your back-end system and Google Analytics

Since it is not possible to import data into Google Analytics, it’s key to extract the data from Google Analytics and be able to match this data to individual conversions in your back-end system. Extracting data from Google Analytics isn’t that hard using the API so I won’t go into detail on that here, but how are you able to make a connection between the data in the two systems?

Creating the connection

Google Analytics allows for Custom Variables to be set (Custom Variable documentation), these custom variables allow you to create a connection between the data in Google Analytics and the data in your back-end system. By creating a unique identifier for each visit (like a hash tag or something) you can post that variable both into a Custom Variable and into a hidden field within your price quotation form. By storing this hidden field in your back-end system you can later export all individual transactions including their unique visit id hash tag.

You can also request all data from the Google Analytics API by segmenting on that specific identifier. Allowing you to get a complete insight into what the user has done during their visit and how they got to your website. This can be especially interesting to analyze your traffic sources and used keywords and compare the difference between sources driving price quotations and sources driving actual conversions.

Diagram of End-to-End Measurement in Google Analytics

6 thoughts on “End-To-End Measurement in Google Analytics”

  1. Great article but you realize that you are not allowed by Google to assign uniquely identifiers to individual customers right? Officially it’s against Google’s policy.

    Have you thought of a workaround where customers are not uniquely identifiable in your end-to-end system? For example aggregating all data on source/medium/campaign level?

  2. @Roy
    Yes, there is a different method without adding unique identifiers to individual users by fetching and storing the user GA cookie data on submit of the form. By recreating a utm.gif request with this data you can append data to the original session of the user and register an additional pageview or event for the completion of the process. Best of all, the data goes back into Google Analytics so you can use their reports, analysis and tools.

    I have a working setup that uses this method, but wanted to make sure it keeps working when there is a longer delay between the last user visit and the trigger before blogging about it.

    I’ve also tested your solution and by aggregating sufficient data (also os/browser/screensize) and limiting the time period when searching for your user you can create a reliable match. I’ve only tested this on relatively small sites (up to 10k visits a day) so it might be less reliable for really big sites.

  3. Do you guys have the link that references Google’s policy re: using GA to track individual user behavior?

    Thanks in advance.

  4. @bh
    Here you are: http://www.google.com/intl/en/analytics/tos.html
    It’s mentioned in section 7. PRIVACY.

    “You will not (and will not allow any third party to) use the Service to track or collect personally identifiable information of Internet users, nor will You (or will You allow any third party to) associate any data gathered from Your website(s) (or such third parties’ website(s)) with any personally identifying information from any source as part of Your use (or such third parties’ use) of the Service.”

    I am not a lawyer, but Roy’s solution wouldn’t be allowed as well according to the last part of the excerpt. However, Google will not be able to identify this as you are not using their system to store the data.

  5. Thanks. Would explain why all the marketing automation tools use their own tracking code to build end-to-end (or closed loop) marketing tools.

  6. @Martijn Verstrepen
    Thanks for your reply Martijn. It’s an interesting discussion.

    This other method you are talking about, does it allow for Adwords campaign or ad group name collection and will it capture the triggered Adwords keyword?
    For Adwords, the GA code only contains a gclid code at the moment of conversion. This data is available after 24 hours (GA syncs gclid code overnight). Therefore it is necessary as you imply, to create a unique identifier to match the end-to-end input with GA after 24h.

    On the other hand, with Ecommerce Google Analytics already creates a unique identifier (order id), just like when you try to implement e-commerce for a non-ecommerce site when you need to generate a unique order ID (by Google’s instructions).

    So what does GA mean with PII? Do they mean storing names and email addresses or also unique IDs. Because if they do, then they violate their own policy to begin with…


    One practical question. Is the hash tag always unique if you use that as identifier? Or should you combine it with a date or time-stamp?

    Also will you dedicate a post to this new method? :)

Comments are closed.