Google Ads · Final URL suffix

Calendly + Pipedrive UTM tracking for Google Ads

If Pipedrive creates contacts from Calendly but UTMs are empty, the break is almost never “Pipedrive forgot ROI” — the five Calendly tracking keys never arrived on the invitee, or the CRM sync never mapped them.

You do not need a custom endpoint that merges cookies with Calendly webhooks. Proven path: land UTMs on the page → pass them into the Calendly embed → map Calendly’s invitee UTM fields into Pipedrive Person custom fields with Zapier, Make, or a Calendly↔Pipedrive sync app.

Official Calendly docs: source-track embeds with UTMs. Full embed/GTM walkthrough: Calendly UTM tracking guide.

Was this recipe useful? No ratings yet

Tap a star to rate (1–5). You can change your rating later.

Final URL suffix
utm_source=google&utm_medium=cpc&utm_campaign={campaignid}&utm_term={keyword}&utm_content={creative}

Why UTMs disappear

  1. Ad click never carries the five keys — Tracking template owned by a redirect, empty suffix, or wrong field.
  2. Page has UTMs, embed does not — Calendly ignores parent location.search unless you pass a utm object (or bake keys into data-url).
  3. Invitee has UTMs, Pipedrive does not — native/simple syncs often create Person + Activity from name/email only and skip tracking fields.

Fix the chain in order. A webhook that reads cookies cannot repair step 1 or 2.

1. Google Ads Final URL suffix

  1. Open Google Ads → AdminAccount settingsTracking.
  2. Paste into Final URL suffix (not Tracking template).
  3. Save, then verify a click URL contains your parameters.

Prefer Final URL suffix so a click-fraud redirect can still own Tracking template. Calendly only stores utm_source, utm_medium, utm_campaign, utm_term, and utm_content — nothing else.

2. Pass UTMs into the Calendly embed

On the scheduling page, feed the query string into Calendly’s JS utm object (Option 3 in Calendly Help):

function getUrlVars() {
  const vars = {};
  window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function (_m, k, v) {
    vars[k] = decodeURIComponent(v);
  });
  return vars;
}
const utms = getUrlVars();
Calendly.initInlineWidget({
  url: 'https://calendly.com/YOUR_LINK/30min',
  parentElement: document.getElementById('calendly-embed'),
  utm: {
    utmSource: utms.utm_source,
    utmMedium: utms.utm_medium,
    utmCampaign: utms.utm_campaign,
    utmContent: utms.utm_content,
    utmTerm: utms.utm_term,
  },
});

Book a test meeting and confirm the five values appear on the invitee in Calendly (Meetings / invitee details) before touching Pipedrive.

3. Map invitee UTMs into Pipedrive

Create five Person custom fields in Pipedrive (text), e.g. utm_source, utm_medium, utm_campaign, utm_term, utm_content — same names your reports expect.

Simplest reliable sync (recommended):

  1. Zapier or Make: trigger Calendly → Invitee Created (or Created/Rescheduled).
  2. Action Pipedrive → Find or Create Person by email.
  3. Map Calendly tracking / UTM fields from the trigger into those five custom fields (and update on reschedule if you need the latest campaign).
  4. Optionally create/update a Deal or Activity — UTMs belong on the Person so ROI survives deal recreates.

Marketplace sync apps (e.g. Outfunnel Calendly Sync) work the same way if they expose field mapping for Calendly UTM / tracking properties — turn that on; contact-only sync is what drops ROI.

When a custom webhook is worth it

Only if you must merge data Calendly never stores (extra cookie IDs, non-UTM keys, multi-touch). For standard campaign ROI, Zapier/Make field mapping is the proven middle ground — less ops than a merge API, more control than hope-native-sync.

Go-live checks

  • Ad preview / test click → landing URL shows all five utm_* keys.
  • Calendly invitee shows the same five values.
  • Pipedrive Person custom fields match after the Zap/Make run (check task history).
  • Reschedule test: confirm you update fields if marketers change campaigns mid-funnel.

Related

FAQ

Do I need a custom webhook that merges cookies with Calendly?

Usually no. If the five UTMs are on the Calendly invitee, map them into Pipedrive with Zapier, Make, or a sync app that supports field mapping. Custom merge endpoints are for data Calendly cannot store.

Why does Pipedrive create the contact but leave UTM fields blank?

Most Calendly→Pipedrive connections sync name, email and the meeting activity only. Add Person custom fields and explicitly map Calendly’s utm_source / medium / campaign / term / content (or “tracking”) properties.

Should UTMs live on the Person or the Deal in Pipedrive?

Prefer the Person. Deals get recreated; attribution for ROI reporting should survive on the contact. You can copy campaign onto the Deal title or a deal field for pipeline views.

Does Calendly store gclid for Pipedrive?

No — only the five UTM keys. Keep gclid for Google Ads / Enhanced Conversions on the page, or use the gclid → utm_content recipe if you need the click ID inside Calendly and CRM.