What connects natively vs. what needs a webhook
Calendly's Google integration does exactly one thing out of the box: Google Calendar — writing bookings in and reading busy blocks out, free on every plan. Everything else people search for (Gmail, Google Drive, Google Contacts, BigQuery, Looker Studio) is not a toggle inside Calendly; it is a downstream workflow fed by Calendly's webhook events. The table below is the honest map.
| Google surface | How it connects to Calendly | Cost |
|---|---|---|
| Google Calendar | Native two-way connection — bookings write in, busy blocks read out | Free on every Calendly plan |
| Gmail | No "Gmail integration" exists — booking confirmations arrive as normal email; for anything richer, act on the webhook payload or the calendar event | Free (no action needed) |
| Google Drive | Calendly webhook → Google Apps Script → DriveApp.createFolder() per invitee | Apps Script is free; Calendly webhooks need a paid plan |
| Google Contacts | Same webhook → Apps Script People API → create/update the invitee as a contact | Free path above |
| BigQuery / Looker Studio | Same webhook → Apps Script → BigQuery insertAll via the advanced BigQuery service; Looker Studio reads the table natively | Apps Script + BigQuery free tier; Calendly paid plan for webhooks |
| Google Business Profile | No direct Calendly link — put the booking URL on your profile's appointment-link field | Free |
Calendly webhook subscriptions require a paid plan (Standard tier, ~$10/seat/mo — wall-checked 2026-09-25 against calendly.com/pricing). Apps Script, the People API, and BigQuery's free tier carry no license cost; usage stays inside Google's free quotas for any small-business volume.
The free-path blueprint: one webhook, four Google surfaces
Everything below runs in a single Google Apps Script project bound to the same Google account that owns your calendar, Drive, and Contacts. The script is one doPost(e) function — Calendly POSTs each booking to it, and it fans out to every surface.
- Create the Calendly webhook. In the Calendly API (integrations → webhooks), subscribe to
invitee.created(andinvitee.canceledif you want cleanup) pointing at your Apps Script web-app URL. This step is the only one that needs the paid Calendly tier — if you are on free, skip to the Gmail-route section below. - Deploy the Apps Script web app. script.google.com → new project →
doPost(e)parsese.postData.contentsfor the invitee name, email, event time, and answers. Deploy → New deployment → Web app, "Execute as me," access "Anyone" (the URL is the secret; add a token check if you want a second wall). - Drive: inside
doPost, callDriveApp.getFolderById(CLIENTS_FOLDER).createFolder(name + ' — ' + eventDate)and drop a skeleton intake doc inside. Every new booking produces a client folder with zero clicks. - Contacts: call
ContactsApp.createContact(first, last, email)— or the People API'speople.createContact— then tag it with the event type in a custom field or label so your book stays segmentable. - BigQuery: enable the BigQuery advanced service in the script (Services → BigQuery API), then
BigQuery.Tabledata.insertAll({rows:[{json: row}]}, project, dataset, table)writes each booking as a row — invitee, event type, UTM source, scheduled time. Looker Studio connects to the table natively for a live bookings dashboard. - Test end-to-end: self-book a slot on your own link. Watch the Drive folder, the contact, and the BigQuery row appear within seconds. Then book a cancel event and confirm the script handles it.
The no-webhook path (Calendly free plan)
If you are staying on Calendly's free tier you lose webhooks but keep everything that matters for a small book:
- Gmail route: Calendly emails the host a notification for every booking — set a Gmail filter on
from:notifications@calendly.comto label and star them, or use Google Apps Script's time-driven trigger to parse those notification emails on a schedule and feed the same Drive/Contacts steps above (slower than webhooks, still zero cost). - Calendar-event route: since Calendly writes every booking onto your Google Calendar for free, an Apps Script trigger that reads new calendar events can drive the same fan-out — folder, contact, BigQuery row — keyed on the event's invitee details.
- Zapier/Make route: if you already pay for an automation platform, Calendly triggers exist there too — but the Apps Script path above does the same job inside tools Google already gives you. See the Zapier vs Make comparison before adding that bill; and the Calendly Wall Check for what the free plan does and does not include.
What this does not do
Calendly has no native Gmail, Drive, Contacts, or BigQuery connectors — any vendor page claiming a one-click version is describing exactly the webhook pattern above. And none of this changes Calendly's core limit: it connects one Google account for calendar reads/writes, so shared-calendar conflicts still follow the conflict-source steps in the checklist.