How to Track Your Calendly Bookings with Google Analytics

Calendly is a booking application that allows people to book time on your calendar asynchronously based on your calendar availability.

I mostly use Calendly to book non-Taylored Data coffee chats with industry friends or people interested in starting their own digital analytics career, but booking discovery calls is another common reason to use Calendly.

If booking calls is an important part of your business, I recommend tracking these bookings in Google Analytics along with your other conversions so you can:

  • See what marketing efforts result in the most and least Calendly bookings

  • Analyze what pages people visit on your website before and after booking

  • View how many people leave your Calendly form before submitting

  • Discover what people search for on your website before and after booking

Prerequisites: Before getting started, you’ll need to create a Calendly, Google Analytics, and Google Tag Manager accounts.

Why You Should Embed Your Calendly Link on Your Website

To do most of this analysis, you will need to embed Calendly onto your website so that you can see what actions these users are taking on your website before or after interacting with the Calendly form. An additional advantage of embedding your Calendly scheduling page to your website is the ability to more easily guide users to other parts of your website like your services page to learn more about you before the call.

Once you’ve embedded Calendly to your website, we’re ready to implement the tracking. In addition to using the built-in Google Analytics integration that is available to paid Calendly users, you can also integrate Calendly and Google Analytics using Zapier and Google Tag Manager which I’ll explain in the next section. I would advise most people to use Zapier, but you can use Google Tag Manager if you are more technical (know some JavaScript) and are already using GTM.

How to Add Your GA4 Measurement ID to Calendly

This option is available to Calendly users with a paid plan and the easiest way to track how users engage with your Calendly booking page in Google Analytics 4.

Here are the available events/user actions that Calendly will send to your GA4 account with this native integration.

  • invitee_visits_routing_form: Invitee visited your routing form.

  • invitee_submits_routing_form: Invitee submitted a routing form.

  • invitee_scheduling_page: Invitee visited landing page.

  • invitee_event_type_page: Invitee visited scheduling page.

  • invitee_select_day: Invitee selected a date.

  • invitee_select_time: Invitee selected a time.

  • invitee_meeting_scheduled: Invitee successfully booked a meeting.

    • I recommend making this a conversion event in GA4.

Now that I’ve gotten that out of the way, here’s how to connect GA4 and Calendly:

  1. In Calendly, navigate to the integrations page and select Google Analytics.

  2. Click on edit.

  3. Copy your GA4 measurement ID from your Google Analytics property.

  4. Paste your measurement ID in your Calendly settings and click Save.

⚠️Note: You can only connect one measurement ID to your Calendly instance.

How to Track Calendly Bookings in Google Analytics Using Zapier

 1.     Create a Zapier account, and navigate to the Zaps section

2.     Click on Create Zap

3.     Select Calendly as your trigger (you may need to search for Calendly to find it):

4.     Once you’ve selected Calendly as your trigger, fill out your account information and select “Invitee Created” as the event. It should look like the screenshot below:

5.     Create a test, and Zapier should return some test data that looks something like this:

6.     Updated in 2024: Calendly now has GA4 actions! To send data to your GA4 property, choose the Send event to Google Analytics 4 action. At a minimum, you’ll need to add:

  • Your API secret (follow the directions under the text field in Zapier)

  • Paste lead_generation in the Events field (this is Google’s recommended event name for lead generation conversions)

  • Paste your GA4 Measurement ID

7.   Click Continue once you’ve set up your action.

8.     Fill out your Google Analytics account information.

9.     For Type, select Event

10.  Then fill out the Google Analytics event category, action, and label. Here is how I filled mine out using the test data from step 5:

Zapier action set up for Google Analytics event tracking

11.  Test your implementation and ensure the data is showing up as expected in Google Analytics. I detail how to do this in my previous blog about how to implement Google Analytics on your website.

How to Track Calendly Bookings in Google Analytics Using Google Tag Manager

 Read this blog post to learn how to implement Google Tag Manager on your website.

This is a slightly advanced GTM implementation because we will be using Calendly’s window.postMessage implementation to send this data to Google Analytics.

Window.postMessage() is a JavaScript method that essentially sends information from an embedded iframe window (the embedded Calendly scheduling page) to the parent window (our website) or vice versa. Usually scripts can only talk to each other when they share the same domain, but postMessage allows us to circumvent this block to safely communicate across domains. You can read more about this on the Mozilla Developer page.

Here are the available events/user actions that Calendly creates a postMesage for. You don’t have to track all of these if they aren’t important to your performance analysis.

  • calendly.profile_page_viewed: Profile page was viewed

  • calendly.event_type_viewed: Event type page was viewed

  • calendly.date_and_time_selected: Invitee selected date and time

  • calendly.event_scheduled: Invitee successfully booked a meeting

Source: Calendly postMessage documentation

Now that we have that out of the way, here are the steps to push these events to the dataLayer and ultimately to Google Analytics using Google Tag Manager.

1.    In GTM, create a custom HTML tag and paste this code:

<script>
    window.dataLayer = window.dataLayer || [];
    window.addEventListener('message',
        function (e) {
            if (e.data.event && e.data.event.indexOf('calendly') === 0) {
                window.dataLayer.push({
                    'event': 'calendly',
                    'calendly_event': e.data.event.split('.')[1]
                });
            }
        }
    );
</script>

This example code listens for these events and then adds them to the data layer.

2. Set the trigger to All Pages, or just the pages that have the Calendly scheduler embedded. The latter is best practice, but I have multiple pages on my website that have Calendly embedded so All Pages is easier for me to keep track of.

3. Create a Custom Event trigger that looks for “calendly” (the event name we set in our custom code in the previous step):

4.    Create a data layer variable for the Calendly event name that is a part of Calendly’s postMessage. This will populate with the event name in the table I shared earlier:

5.    Create 2 Google Analytics event tags to send the data from the dataLayer to Google Analytics

 Here is how I set up my Universal Analytics event tag:

I have hardcoded the event category and label, but I’m using the dataLayer variable we created in step 4 to dynamically populate the Calendly event names from the table I showed in the previous step.

Here is how I set up my GA4  event tag:

I set the Event Name to “generate_lead” because the Calendly form I’m tracking is for my discovery calls. This event name is a recommended by Google. You can check out their other suggested event names here.

You will see that I have created an exception when the Calendly event is “event_type_viewed”. This is because my scheduling page only has one event type, so this is unnecessary noise in my reports (S/O to my use of GTM’s notes feature because I totally forgot why I had that as an exception 😅).

6.    Now it’s time to test our implementation! Click on Preview and paste the URL where your Calendly scheduler is embedded.

7.    The first thing we want to check is that the Calendly events are populating in the dataLayer as expected. You can do this two ways: using GTM’s debugger or looking at your browser’s developer tools console.

Either way, you will need to navigate the Calendly scheduler as if you were one of your website’s visitors (ideally, you’ll test this in a lower environment to not affect your production data with test data).

Here’s how the dataLayer looks in the console with the Calendly events highlighted:

Here’s how we check in GTM’s debugger:

How to validate that your Calendly Data Appears in Google Analytics (Universal Analytics)

1.     Go to the data range when you tested the Calendly integration

2.     Click on the Behavior reports

3.     Click on Events

4.     Click on Top Events or Overview

5.     Look for the Calendly event category

6.   Click on the Calendly event category and look at the event action and event label to ensure the data is showing up as expected

How to Track Calendly Bookings in GA4:

1.     Go to the GA4 Admin section

2.     Click on DebugView

3.     Click on Google as the Debug Device (this correlates to the GTM debugger)

4.     Click on the generate_lead event in the timeline and look for the Calendly events:

5.     Now that we’ve verified everything looks good, let’s go back to GTM and publish the changes. Click on Submit in the upper right hand corner of GTM’s workspace landing page:

Then, write some notes to yourself about what you accomplished during this deployment and publish your changes!

Bonus – How to Create a Calendly Conversion Event in Google Analytics 4

Simply put, UTM Parameters are used to determine how referral traffic comes to your site. This data is automagically ingested into Google Analytics and helps you understand which traffic channels bring the most users to your Calendly page.

Here’s an example of a URL with UTM parameters: https://www.example.com?utm_source=gmail&utm_medium=email&utm_campaign=summer_sale&utm_id=1234

In more technical terms, UTM Parameters (also called UTM tags or UTM code) are a type of URL query string parameter that marketers append to the end of URLs. UTM parameters are key-value pair: the keys are separated from the values by an equal sign (=) and the key-value pairs are separated from each other with ampersands (&).

I recommend adding UTM parameters every time you create an external link to your Calendly page to track what channels are bringing traffic to your Calendly page (Read my guide on how to use UTM parameters and download my UTM template).

Here are a few examples of when you should add UTM parameters when sharing your Calendly link:

  • Create custom UTM parameters to track when someone clicks on your Calendly link in your email signature.

  • When you share the link to your Calendly page on social media.

  • Add your Calendly link to your presentation documents to encourage more conversations.

Google Analytics has default campaign tracking that captures 5 separate parameters:

  1. utm_medium: This parameter represents a group of traffic sources. This is a required parameter.

    • Examples: email, paid search, social

  2. utm_medium: This parameter represents a group of traffic sources. This is a required parameter.

    • Examples: email, paid search, social


  3. One of the most common places to pass this data is into a digital analytics tool like Google/Adobe Analytics.page=1
    product=shoes
    cid=123
    Bonus fact: UTM ( Urchin Tracking Module) parameters were introduced by Urchin. Once Google acquired Urchin to form Google Analytics, UTM parameters became one of GA's out of the box functionalities of utm_source=google
    utm_medium=organic
    utm_term=keywordutm_campaignShould include the necessary details to differentiate your campaigns.launch+promo
    new_year_sale
    campaign_url_builderutm_mediumGroup of traffic sources with the same medium.Email
    Paid Search
    Socialutm_source Describes what kind of placement the tracking link is on/where the specific campaign lives.Banner ads
    Transactional email
    Twitterutm_contentDifferentiates similar content on the same page.footerlink
    carousel
    best_champagne_ctautm_termUsually reserved for paid search campaigns, the term on which advertisers bid to trigger their ads to be shown to relevant users.party
    campaign+term
    shoes

  1. utm_medium: Designates the marketing channel, i.e. CPC, email, display, etc. The data passed appears as line items in the Acquisition >> All Traffic >> Source/Medium and Medium reports.
    Note: Google also identifies the medium of traffic that does not have incoming campaign URL parameters. Direct traffic is assigned a medium of “(none)” and any other referrals that don’t have utm campaign tracking parameters are assigned a medium of “referral”.


  1. utm_source: Identifies which specific website, advertiser, newsletter, search engine, etc. that is sending traffic to your site. The data passed appears as line items in the Acquisition >> All Traffic >> Source/Medium and Source reports.
    Note: Google identifies non-tagged traffic using “(direct”) for direct traffic, and the referring domain of any other referrals without utm campaign tracking.


  1. utm_campaign: Used to associate the visit with a specific campaign. The data passed appears as line items in the Acquisition >> All Traffic >> Campaign report. For AdWords CPC campaigns, the AdWords campaign name is passed in this parameter.


  1. utm_term: Optional. For CPC, it’s used to capture details about which specific keyword triggered the AdWords ad.


  1. utm_content: Optional. Used to differentiate similar content or links within the same ad. 


These 3-5 parameters are added to the end of the destination page URL. If the URL doesn’t already have a question mark (?) in it, a question mark will need to be added to the end of the URL before the first utm campaign tracking parameter is added. Subsequent parameters should be appended with ampersands (&): 

http://www.gst.buyatoyota.com/en/offers/highlander/?utm_medium=CPC&utm_source=bing&utm_term=toyota%20highlander_e&utm_content=7100063662&utm_campaign=GST_General_Make%2FModel+-+HP+NonCore


If the URL already has a question mark (?), then all campaign parameters should be appended with the ampersand (&):

http://www.gst.buyatoyota.com/en/offer-detail/?offerid=tundra_cash_1430767511503&utm_medium=CPC&utm_source=google &utm_term=toyota%20tundra_e&utm_content=45661594544&utm_campaign=GST_RLSA_Make%2FModel


Bonus – How to Track Use UTM parameters with Calendly in Google Analytics 4

Bonus – Reporting Ideas for Your Calendly Data in Google Analytics

See what marketing efforts result in the most and least Calendly bookings

Add source/medium as a secondary dimension to see the channels that are bringing traffic to your Calendly scheduler and analyze which traffic sources are the best at scheduling a call:

View how many people leave your Calendly form before submitting

Create a conversion funnel using the bar feature in the events table. Simply click on the bar icon above the table headers to see a visual representation of how many times someone views your Calendly page to how many times the form is submitted:

Discover what people who interact with your Calendly page search for on your website

First, create a segment for sessions that included a Calendly interaction. I define this as sessions that included the event category Calendly:

Then navigate to the Search Terms report in GA and see what comes up. Few people use my website’s search functionality, so I don’t have any data here:

How to Track Calendly Bookings in Google Analytics

If you’ve made it this far, you have hopefully been able to implement Calendly analytics tracking through Zapier or Google Tag Manager to see your website’s bookings in Google Analytics.

I hope you found this tutorial helpful and use these same principles to track all of the important conversion points on your website so that you can capture your business’s KPI in Google Analytics—both Universal Analytics and GA4.

Gain insights into your appointment scheduling process. Book a discovery call to set up seamless Calendly tracking in GA.

To learn more about the tools I use behind the scenes at Taylored Data, check out my workflow blog post where I detail how I automate parts of my booking experience.

Previous
Previous

My Favorite Productivity Tools to Get Work Done

Next
Next

Website Development & Analytics for Fairlawn-Heights Discovery Montessori School