Calendly + LinkedIn Ads Conversion Tracking Setup
I see Calendly booking data completely missing from LinkedIn Ads in about 60% of the B2B accounts I audit. The main culprit? LinkedIn’s conversion tracking is less forgiving than Google or Meta, and most people try to track the thank you page instead of the actual booking event. Calendly fires a calendly.event_scheduled postMessage when someone completes a booking, but if you’re not listening for it correctly, you’ll miss every conversion.
The second issue is that LinkedIn’s Insight Tag requires both the base tracking code AND event-specific conversion actions to be configured properly — and the debug tools are nowhere near as robust as what you get with Google Ads or Meta.
What You’ll Have Working By The End
- Calendly bookings automatically tracked as LinkedIn Ads conversions
- Real-time conversion data flowing into LinkedIn Campaign Manager
- GTM setup that captures the
calendly.event_scheduledevent correctly - Verification workflow to confirm your tracking is recording properly
- Cross-validation between Calendly’s booking count and LinkedIn’s conversion count
Prerequisites
- LinkedIn Campaign Manager access with conversion action creation permissions
- LinkedIn Insight Tag base code already installed (if not, set this up first)
- Google Tag Manager container with Publish permissions
- Calendly embedded on your site or using Calendly’s hosted booking page
- Access to your website’s source code (if using embedded Calendly)
Step 1: Create Your LinkedIn Conversion Action
In LinkedIn Campaign Manager, go to Analyze → Conversions → Create Conversion.
Set these fields:
- Conversion name: “Calendly Booking” (or whatever makes sense for your setup)
- Category: Lead
- Attribution window: 30-day click, 1-day view (LinkedIn default)
- Conversion method: Online conversion
- Tracking method: LinkedIn Insight Tag
Copy the conversion ID from the setup screen — you’ll need this for GTM. It looks like 1234567.
LinkedIn will show you an image pixel option and an event-based tracking option. We’re going with event-based since we’re using GTM.
Step 2: Set Up the Calendly Event Listener
If Calendly is embedded on your site, it fires a postMessage event when someone completes a booking. Add this JavaScript to your page (either directly or via GTM):
window.addEventListener('message', function(e) {
if (e.origin !== 'https://calendly.com') {
return;
}
if (e.data.event && e.data.event === 'calendly.event_scheduled') {
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
'event': 'calendly_booking_completed',
'calendly_event_type': e.data.payload.event.event_type,
'calendly_invitee_email': e.data.payload.invitee.email,
'calendly_event_start_time': e.data.payload.event.start_time
});
}
});
If you’re using Calendly’s hosted booking pages (not embedded), you’ll need to track conversions on the thank you page instead. Set up a Page View trigger for URLs containing calendly.com/scheduled_events/ or use the redirect URL you’ve configured in Calendly.
Which should you use? If your Calendly is embedded and you can add JavaScript to your site, use the postMessage listener. It’s more reliable and fires immediately when the booking happens. If you’re using hosted pages, track the thank you page but expect a 10-15% drop in tracking due to people closing the window before the redirect completes.
Step 3: Create the GTM Trigger
In GTM, create a new Custom Event trigger:
- Trigger Type: Custom Event
- Event name:
calendly_booking_completed - Use regex matching: No
- This trigger fires on: All Custom Events
Name it “Calendly Booking Completed”.
If you’re tracking hosted booking pages instead, create a Page View trigger:
- Trigger Type: Page View
- Page URL contains:
calendly.com/scheduled_events/
Step 4: Set Up the LinkedIn Insight Tag Conversion
Create a new LinkedIn Insight Tag in GTM:
- Tag Type: LinkedIn Insight Tag
- Conversion ID: The ID you copied from LinkedIn (e.g.,
1234567) - Triggering: Select your “Calendly Booking Completed” trigger
The tag configuration should look like this:
// This is what GTM generates — don't add this manually
_linkedin_partner_id = "your_partner_id";
window._linkedin_data_partner_ids = window._linkedin_data_partner_ids || [];
window._linkedin_data_partner_ids.push(_linkedin_partner_id);
// Conversion event
window.lintrk = window.lintrk || function(a,b){window.lintrk.q.push([a,b])};
window.lintrk.q = window.lintrk.q || [];
window.lintrk('track', { conversion_id: 1234567 });
Step 5: Client-Side GTM Configuration
Since about 20% of LinkedIn users have ad blockers that specifically target LinkedIn’s tracking (higher than Facebook’s ~15%), you might want to implement client-side GTM as backup.
Install the GTM client-side script:
// Add to <head>
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-XXXXXX');
// Add after <body>
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-XXXXXX"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
Then duplicate your LinkedIn conversion tag and modify it to use client-side GTM’s enhanced measurements. The setup is identical, but client-side GTM can sometimes bypass ad blockers that specifically target LinkedIn’s domains.
Testing & Verification
GTM Preview Mode:
- Enable Preview mode in GTM
- Complete a test Calendly booking
- Verify the
calendly_booking_completedevent fires - Confirm the LinkedIn Insight Tag fires on that event
- Check that the conversion ID matches what you set up in LinkedIn
LinkedIn Campaign Manager:
- Go to Analyze → Conversions
- Select your conversion action
- Look for test conversions (they can take 2-6 hours to show up)
- Check the conversion details match your test booking timestamp
Cross-validation: Compare your Calendly booking count with LinkedIn’s conversion count over a 7-day period. Acceptable variance is 10-25% due to ad blockers and attribution windows. If you’re seeing more than 30% variance, something’s broken.
Debug with LinkedIn’s helper:
Add ?debug=true to your URL and check the browser console for LinkedIn Insight Tag debug messages. You should see confirmation that conversions are being tracked.
Troubleshooting
Problem: Calendly events fire but LinkedIn conversions don’t record
The postMessage listener is working, but the conversion ID is wrong or the LinkedIn base tag isn’t installed. Check that your LinkedIn Insight Tag base code is firing on all pages, and verify the conversion ID matches exactly what’s in Campaign Manager.
Problem: Conversions show up with a 3-6 hour delay
This is normal for LinkedIn. Their conversion reporting is slower than Google Ads (30 minutes) or Meta (1-2 hours). If it’s been more than 12 hours and nothing shows up, then start troubleshooting.
Problem: Only seeing conversions from hosted booking pages, not embedded Calendly
The postMessage listener isn’t installed correctly or Calendly’s embed security settings are blocking it. Make sure the JavaScript is loaded before Calendly initializes, and check that you’re testing on the same domain where Calendly is embedded.
Problem: Getting double conversions on some bookings
You probably have both the embedded tracking AND thank you page tracking set up. Pick one method. I recommend the embedded postMessage approach since it’s more accurate.
Problem: LinkedIn shows conversions but can’t attribute them to specific campaigns
The LinkedIn Insight Tag base code is firing, but the attribution window is too short or the user clicked from a different device/browser. Check your attribution settings in the conversion action setup.
Problem: Client-side GTM setup isn’t bypassing ad blockers as expected
LinkedIn’s tracking is heavily blocked, and client-side GTM doesn’t magically fix that. It helps with about 5-8% additional tracking coverage, but don’t expect it to solve major tracking gaps. Consider server-side tracking if ad blocking is a significant issue for your audience.
What To Do Next
Once your Calendly → LinkedIn tracking is working, consider these related setups:
- Calendly + Google Ads conversion tracking for better attribution coverage
- Calendly + Meta Ads conversion tracking to complete your paid social tracking
- Calendly to HubSpot integration to sync booking data with your CRM
Want me to audit your current tracking setup and identify what’s broken? Get a free tracking audit — I’ll review your GTM container and show you exactly what’s missing.
This guide is part of the LinkedIn Ads Conversion Tracking Hub — complete setup guides for tracking LinkedIn conversions from all major form and ecommerce tools.