Skip to main content
Cal.com → Google AdsIntegration guide

Connecting Cal.com to Google Ads

Cal.com holds the booking and, unusually, will let you self-host and query the database directly. Google Ads knows what you spent and which click it came from, and nothing at all about what happened afterwards. The join between them succeeds or fails on one thing: whether the GCLID reaches the Cal.com booking before the conversion happens, because Google Ads can only match a conversion it can tie back to a click it recognizes.

Free30 minutesNo obligation

Specific to this pair

Cal.com bookings to Google Ads with the gclid in a booking question

Add hidden Cal.com booking questions for gclid, gbraid and wbraid, prefilled from the URL and passed through routing forms. Upload to import-type actions: booking created within hours, and meeting held once the start time passes uncancelled. Retract cancellations with adjustments, use attendee email for Enhanced Conversions for leads, and value paid bookings or use a fixed proxy.

For Google Ads, the field you need on the Cal.com booking is the gclid, plus gbraid or wbraid for iOS traffic where Google sends those instead. Add one hidden booking question per parameter, prefill them from the URL your page builds, and the BOOKING_CREATED payload carries them in the booking responses. Routing forms have to pass the same parameters through to the event type they route to, or routed traffic arrives without them.

Upload against import-type conversion actions. Two make sense: booking created, uploaded within hours, and meeting held, uploaded once the start time passes with no BOOKING_CANCELLED received. Bookings often sit two or three weeks out, which is fine against Google's 90-day click window, but the held-meeting action lags enough that the last fortnight of any report undercounts. Use conversion adjustments to retract bookings that are later cancelled or rejected.

Cal.com always collects the attendee's email, so Enhanced Conversions for leads works as the fallback when the gclid is missing, which helps with people who click an ad, leave, and later book from your Cal.com public profile page with no landing page in between. Paid event types should carry the amount charged as value; free consultations need a fixed proxy value you set once and keep.

Cal.com → Google Ads · what breaks

Why this join usually fails — Cal.com → Google Ads

  1. 01

    The GCLID never reaches Cal.com

    As with any hosted booking page, the identifier must be passed on the booking URL and captured into a booking question. Cal.com's routing forms add a second surface that also needs to carry it, and they are commonly missed.

  2. 02

    Routing forms are a second capture surface

    Cal.com routing forms sit in front of the booking and are easy to forget. An identifier captured on the booking page but not on the routing form leaves a hole in exactly the traffic that used routing.

  3. 03

    The conversion action is the wrong type

    Uploads against a standard website conversion action fail. The action has to be created as 'Import' — and existing actions cannot be converted, so this is discovered late and requires starting a new action with no history.

  4. 04

    Nothing reconciles afterwards

    Google Ads reports uploads in Goals → Conversions → Uploads, with rows accepted and rows failed. A green result means the file parsed, not that the clicks matched. The number to watch is how many conversions actually appear against campaigns afterwards.

Cal.com → Google Ads · the fix

What working looks like — Cal.com → Google Ads

  • The GCLID on every booking

  • Conversions arriving in Google Ads

    Conversions appear against the campaign, ad group and keyword that produced the click, with the value you sent — which is what lets Smart Bidding optimize toward revenue instead of toward form fills.

  • Reconciled against the source

Cal.com → Google Ads · architecture

How Cal.com and Google Ads actually connect

  1. 1

    Cal.com holds the truth

    The booking carries the attendee, the event type, the time and any custom booking-question responses. Self-hosted instances give you direct database access, which makes reconciliation genuinely easy compared with every other booking tool.

  2. 2

    Google Ads needs a click to match

    Google Ads matches an uploaded conversion back to a click using the GCLID. The conversion action must be created as an import type — an upload against a website-tag conversion action is rejected. Uploads must also land inside Google's window: the click has to be within the last 90 days.

  3. 3

    The identifier is the bridge

    The GCLID, captured at the visit and carried into the Cal.com booking.

  4. 4

    The event source decides reliability

    Send from your server on the webhook, and handle BOOKING_CANCELLED for reversals. Self-hosted instances can read from the database instead, which is the most reliable option available on any booking platform.

  5. 5

    Deduplication at the destination

    Google deduplicates on the combination of GCLID, conversion action and conversion time. Uploading the same click twice against the same action at the same timestamp is rejected rather than double-counted, but uploading it against a second conversion action counts twice — which is how most double-counting here actually happens.

Cal.com → Google Ads · normal or broken

Working vs. broken, side by side — Cal.com → Google Ads

Normal, not a fault

  • The GCLID present on the booking

  • Sent from the BOOKING_CREATED webhook

  • Deduplicated correctly

    Google deduplicates on the combination of GCLID, conversion action and conversion time. Uploading the same click twice against the same action at the same timestamp is rejected rather than double-counted, but uploading it against a second conversion action counts twice — which is how most double-counting here actually happens.

  • Reconciles with the source

Actually broken

  • The GCLID missing on most records

    As with any hosted booking page, the identifier must be passed on the booking URL and captured into a booking question. Cal.com's routing forms add a second surface that also needs to carry it, and they are commonly missed.

  • Sent from the browser

    Cal.com routing forms sit in front of the booking and are easy to forget. An identifier captured on the booking page but not on the routing form leaves a hole in exactly the traffic that used routing.

  • Counted twice, or not at all

    Uploads against a standard website conversion action fail. The action has to be created as 'Import' — and existing actions cannot be converted, so this is discovered late and requires starting a new action with no history.

  • Nobody has reconciled it

Cal.com → Google Ads · diagnose

Diagnostic order — Cal.com → Google Ads

  1. 01

    Count bookings carrying the GCLID

  2. 02

    Follow one real conversion end to end

  3. 03

    Query recent bookings for the identifier field

    Direct database query on self-hosted, API on cloud. Then repeat for bookings that came through a routing form specifically.

  4. 04

    Check the conversion action type and the upload diagnostics

    In Google Ads, Goals → Conversions → Uploads shows every upload with its error rows. Read the errors rather than the success count; a file can import successfully with most rows rejected.

  5. 05

    Read the match rate, not the success message

    Google Ads reports uploads in Goals → Conversions → Uploads, with rows accepted and rows failed. A green result means the file parsed, not that the clicks matched. The number to watch is how many conversions actually appear against campaigns afterwards.

Cal.com → Google Ads · prove

How it gets proven — Cal.com → Google Ads

Source of truth

Cal.com's bookings list for the same window, with cancellations separated.

  • The GCLID confirmed present on a live booking.
  • The Uploads diagnostics read row by row, with the accepted count reconciled against conversions appearing in campaign reporting.
  • Coverage confirmed separately for direct bookings and for routing-form bookings.

Cal.com → Google Ads · free audit

What we check in the free audit

  • Count bookings carrying the GCLID
  • Follow one real conversion end to end
  • Query recent bookings for the identifier field
  • Check the conversion action type and the upload diagnostics
  • Read the match rate, not the success message

Checked against

Cal.com's bookings list for the same window, with cancellations separated.

Get my free conversion tracking audit

Free30 minutesNo obligation

Cal.com → Google Ads · when not to buy

When you don't need this — Cal.com → Google Ads

  • Measure identifier coverage yourself first — pull your last hundred bookings and count how many carry the GCLID.
  • Self-hosting Cal.com already gives you the data. If you have engineering capacity in-house, this is one of the few integrations a competent developer can genuinely do alone.
  • If your sales close inside a few days and your website tag already reports accurately, you may not need offline import at all. It exists to solve the delay between click and revenue.

Cal.com → Google Ads · what we deliver

What gets built — Cal.com → Google Ads

  • Identifier capture into Cal.com

    Add a hidden booking question, append the identifier via Cal.com's prefill query parameters, and verify through the API or directly in the database on a self-hosted instance.

  • Event source: the BOOKING_CREATED webhook

    Send from your server on the webhook, and handle BOOKING_CANCELLED for reversals. Self-hosted instances can read from the database instead, which is the most reliable option available on any booking platform.

  • Dispatch to Google Ads

    Offline Conversion Import through the Google Ads API, or a scheduled upload. Enhanced conversions for leads where GCLID coverage is poor and you have consented email addresses.

  • Reversals where they exist

    BOOKING_CANCELLED and BOOKING_REJECTED both fire with the reference, so reversals are straightforward.

Written guarantee

95%+ tracking accuracy

Measured against Cal.com's bookings list for the same window, with cancellations separated.. Miss it and we keep working at no cost.

Get my free conversion tracking audit

From $400 · See packages

FAQ

Cal.com → Google Ads questions, answered

Into a hidden booking question prefilled from the URL. It then appears in the booking responses on the webhook and through the API.

Free · 30 min

Get Cal.com and Google Ads joined properly

Free30 minutesNo obligation