Calendly to Google Sheets, bookings logged clean
You book meetings… then you immediately lose the details in a mess of tabs, emails, and half-updated spreadsheets. It’s not hard work. It’s just endless. And when one field gets missed (phone, event type, time zone), your follow-up gets sloppy fast.
This Calendly Sheets automation hits marketing ops teams first, but agency owners and solo consultants feel it too. You get every new booking logged into Google Sheets as a clean, consistent row, so lead tracking and follow-ups stop depending on someone’s memory.
Below you’ll see how the workflow runs, what it fixes, and what to watch for when you connect Calendly to Sheets in n8n.
How This Automation Works
See how this solves the problem:
n8n Workflow Template: Calendly to Google Sheets, bookings logged clean
flowchart LR
subgraph sg0["Flow 1"]
direction LR
n0["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/webhook.dark.svg' width='40' height='40' /></div><br/>Calendly Booking Webhook"]
n1["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Normalize Booking Data"]
n2@{ icon: "mdi:database", form: "rounded", label: "Save Booking to Sheets", pos: "b", h: 48 }
n3["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Log Booking Success"]
n1 --> n2
n2 --> n3
n0 --> n1
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n2 database
class n0 api
class n1,n3 code
classDef customIcon fill:none,stroke:none
class n0,n1,n3 customIcon
The Challenge: Booking data falls through the cracks
Calendly is great at scheduling. The problem starts right after the meeting is booked. The details live inside a webhook payload, an email confirmation, or a calendar invite, and your team needs them somewhere operational (usually a Google Sheet, sometimes a CRM). So you copy, paste, reformat, and “fix later.” Later turns into never. A week after, you can’t answer basic questions like: which event types convert, which source brought the lead, or who still needs a follow-up email.
It adds up fast. Here’s where it breaks down.
- You end up manually retyping names, emails, and meeting links from Calendly confirmations into a tracking sheet.
- Time formats and time zones come through inconsistent, which makes reporting and reminders unreliable.
- Someone forgets to log a booking, so your “pipeline” spreadsheet is quietly missing leads.
- Sheets get messy over time because every person logs data slightly differently.
The Fix: Auto-log Calendly bookings as clean Sheet rows
This workflow listens for new Calendly bookings and immediately writes the important fields into Google Sheets in a standardized format. When an invitee schedules a meeting (the invitee.created event), n8n catches the webhook and pulls out the details you actually care about: invitee name, email, phone, event type, date, time, status, meeting link, and notes. Then it normalizes those fields so they look the same every time (consistent date format, consistent column mapping). Finally, it appends a new row to your sheet, which becomes your single “source of truth” for bookings without anyone touching a spreadsheet manually.
The workflow starts with a Calendly webhook firing on a new booking. A code step cleans and standardizes the payload. Google Sheets receives a fresh, structured row, and the workflow logs that the write succeeded so you can audit runs later.
What Changes: Before vs. After
| What This Eliminates | Impact You’ll See |
|---|---|
|
|
Real-World Impact
Say you run a small agency and you average 6 Calendly bookings a day. Manually logging each one takes maybe 5 minutes (open the email, copy details, clean the time format, paste, double-check), which is about 30 minutes daily. With this workflow, the “work” is basically zero: the webhook triggers instantly, and Sheets is updated in the background within a minute or two. Over a normal week, that’s roughly 2–3 hours back, plus fewer missed follow-ups.
Requirements
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Calendly to send booking webhooks.
- Google Sheets to store bookings as rows.
- Google OAuth credentials (create/connect inside n8n’s credentials screen).
Skill level: Beginner. You’ll paste a webhook URL into Calendly and connect your Google account once.
Need help implementing this? Talk to an automation expert (free 15-minute consultation).
The Workflow Flow
A new Calendly booking triggers the workflow. Calendly fires an invitee.created webhook the moment someone schedules, and n8n receives it through the Webhook node.
The booking payload gets cleaned up. A code step extracts the fields you need (name, email, phone, event type, date/time, notes, meeting link) and normalizes them so your sheet stays consistent.
Google Sheets is updated automatically. The workflow appends a new row to a specific spreadsheet and can be configured to update instead of duplicating if the booking already exists.
The run is recorded for easy auditing. A final logging step notes that the write worked, which is helpful when you’re troubleshooting or proving the automation is doing its job.
You can easily modify which columns are written to Sheets (or how notes are formatted) based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Webhook Trigger
Set up the incoming Calendly webhook endpoint that starts the workflow.
- Add the Scheduling Intake Webhook node and open its settings.
- Set HTTP Method to
POST. - Set Path to
calendly-booking. - Copy the test URL and configure it in your scheduling tool to send booking payloads to n8n.
Step 2: Connect Google Sheets
Configure the spreadsheet destination where bookings are logged.
- Add the Append Booking to Spreadsheet node and connect it to Standardize Booking Payload.
- Set Operation to
appendOrUpdate. - Enable Use Append by setting
options.useAppendtotrue. - Set Document to
[YOUR_ID]. - Set Sheet Name to
Sheet1. - Credential Required: Connect your Google Sheets credentials.
[YOUR_ID] unchanged will cause the append to fail. Replace it with your actual Google Sheets document ID.Step 3: Set Up Booking Data Processing
Normalize incoming scheduling data so it’s consistent before saving.
- Add the Standardize Booking Payload node after Scheduling Intake Webhook.
- Paste the provided JavaScript into the Code field to normalize Calendly payloads.
- Confirm the code outputs fields like
name,email,event_type,date, andtimefor the spreadsheet.
Step 4: Configure Output Logging
Finalize the workflow by logging a success summary after the data is saved.
- Connect Append Booking to Spreadsheet to Record Booking Outcome.
- Keep the default JavaScript in Record Booking Outcome to log booking success details.
- Optionally extend the code to send notifications or confirmation emails.
Step 5: Test and Activate Your Workflow
Run a manual test to ensure bookings are received, normalized, and stored correctly.
- Click Execute Workflow and send a test booking to the Scheduling Intake Webhook URL.
- Verify that Standardize Booking Payload outputs normalized fields in the execution data.
- Confirm a new row is appended to your Google Sheet by Append Booking to Spreadsheet.
- Check the execution logs from Record Booking Outcome for the success summary.
- Once verified, toggle the workflow to Active to use the production webhook URL.
Watch Out For
- Google Sheets credentials can expire or need specific permissions. If things break, check the n8n Credentials screen and re-auth the Google account first.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- Default prompts in AI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.
Common Questions
About 20–30 minutes if your accounts are ready.
Yes. You’ll connect Google once and paste a webhook URL into Calendly.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in Google usage limits, but for normal Sheets logging it’s usually negligible.
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Start by editing the mapping in the “Standardize Booking Payload” step so the exact fields you care about become clean columns. If you track lead source, add a column and populate it from Calendly’s questions/answers (or a fixed value per event type). Common tweaks include splitting “Date” and “Time” into separate columns, rewriting “Notes” into a shorter summary, and adding a unique booking ID so updates never duplicate rows.
Usually it’s expired Google OAuth credentials or the connected Google account doesn’t have edit access to that spreadsheet. Reconnect the Google Sheets credential in n8n, then confirm the Sheet ID and tab name match what’s in your workflow. Also check if your organization blocks third-party OAuth access, which can silently break automations.
For most Calendly-based teams, it will handle daily booking volume without any special tuning.
Often, yes, especially if you care about clean formatting and want the option to grow into more complex logic later. Zapier and Make can log bookings too, but the “normalization” step (turning messy payloads into consistent rows) usually turns into extra paid steps or awkward formatting hacks. n8n makes that middle piece straightforward because you can shape the data before it hits Sheets, and you can self-host if you want unlimited runs. If you’re only doing a simple two-field log, Zapier may be quicker. Talk to an automation expert if you’re not sure which fits.
Clean booking rows sound small until you feel the difference in your week. Set it up once, and your follow-ups and reporting stop relying on manual cleanup.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.