🔓 Unlock all 10,000+ workflows & prompts free Join Newsletter →
✅ Full access unlocked — explore all 10,000 AI workflow and prompt templates Browse Templates →
Home n8n Workflow
January 22, 2026

Calendly + Google Sheets, meeting prep done for you

Lisa Granqvist Partner Workflow Automation Expert

You get the meeting booked, then the real work starts. Copy the attendee info, google the company, hunt for LinkedIn, guess their role, and hope you didn’t miss something important.

This Calendly Sheets automation hits sales reps first, honestly. But consultants and recruiters feel it too, because “quick prep” turns into a messy 20-minute research spiral.

This workflow captures new bookings, enriches the attendee with Apollo data via Apify, and keeps everything neatly updated in Google Sheets so you can walk into calls with context.

How This Automation Works

The full n8n workflow, from trigger to final output:

n8n Workflow Template: Calendly + Google Sheets, meeting prep done for you

The Problem: Meeting prep is repetitive, and it slips

Meeting research is one of those tasks that looks small until you stack it up across a week. A new booking comes in, you open the calendar invite, copy an email, search LinkedIn, scan the company site, then try to remember what you found when the call starts. If you take five to ten calls a week, you’re doing the same motions over and over. And when you’re busy, you skip steps. That’s when you show up underprepared, ask questions you could have answered in 30 seconds, and the first few minutes feel… flat.

It adds up fast. Here’s where it breaks down.

  • Booking details live inside Calendly or Cal.com, so you end up retyping names and emails into your notes or CRM.
  • Research happens in tabs, not in a system, which means next week you’ll do the same lookup again.
  • People share incomplete info when they book, so you waste time guessing the company or role.
  • When prep is rushed, you miss the small signals (industry, headcount, location) that change how you run the call.

The Solution: Log the booking, enrich the attendee, update the sheet

This workflow turns every new meeting booking into a living “prep record” inside Google Sheets. It starts the moment an invitee books through Calendly (invitee.created) or through Cal.com (BOOKING_CREATED). The workflow parses the booking payload, pulls out the basics (name, email, company if provided, and notes), and immediately writes a new row in your “Meeting Prep” spreadsheet. Then it builds a targeted Apollo search query from what it knows, sends that query through an Apify-powered scrape, and waits for the enriched profile data to come back. If the workflow finds useful Apollo data, it updates the same row with job title, company details, and social links. If it doesn’t, it flags the row so you know you may want to do a quick manual check.

The workflow begins with a new booking trigger (Calendly or Cal.com). Next, it records an intake row in Google Sheets so nothing gets lost. After that, it uses Apify to pull Apollo-based enrichment data and updates the sheet with a clear status: “Enriched” or “Info Not Available.”

What You Get: Automation vs. Results

Example: What This Looks Like

Say you take 12 booked calls in a week. Manually, even a “quick prep” is usually about 10 minutes per person (find LinkedIn, confirm company, grab a site link, write a note), which is roughly 2 hours weekly. With this workflow, you spend about 1 minute to glance at the Google Sheet row before each call, while enrichment runs in the background after booking. You still do a human skim, but the busywork is gone. That’s about 90 minutes back most weeks, without changing your process.

What You’ll Need

  • n8n instance (try n8n Cloud free)
  • Self-hosting option if you prefer (Hostinger works well)
  • Calendly to trigger automations on new bookings.
  • Google Sheets to store and review meeting prep data.
  • Apify API token (get it from your Apify account settings).

Skill level: Intermediate. You’ll connect accounts, paste API tokens, and update a Sheet ID in two nodes.

Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).

How It Works

A meeting gets booked. The workflow can start from Calendly (invitee.created) or from Cal.com (BOOKING_CREATED), so you can keep your current scheduler.

The booking is normalized into one clean format. n8n parses the incoming payload (name, email, company, notes) so downstream steps don’t care which scheduling tool triggered it.

An intake row is created in Google Sheets. This happens before enrichment on purpose, because you want a record even when Apollo data is missing or the attendee used a personal email.

Apollo enrichment is requested and validated. The workflow builds a search URL, uses Apify to fetch Apollo data, then checks if anything useful came back. If yes, it updates the existing row and marks it “Enriched.” If not, it marks “Info Not Available.”

You can easily modify the columns captured in Google Sheets to match your team’s prep checklist (or your CRM fields) based on your needs. See the full implementation guide below for customization options.

Step-by-Step Implementation Guide

Step 1: Configure the Cal Booking Trigger

This trigger starts the workflow when a booking is created in Cal.

  1. Add and open Cal Booking Trigger.
  2. Set Events to BOOKING_CREATED.
  3. Credential Required: Connect your calApi credentials.

Step 2: Configure the Calendly Invite Trigger

This trigger handles Calendly invitee creation and feeds attendee data into the same enrichment flow.

  1. Add and open Calendly Invite Trigger.
  2. Set Events to invitee.created.
  3. Credential Required: Connect your calendlyApi credentials.

Step 3: Connect Google Sheets

These nodes store intake data and enrichment results in your Google Sheet.

  1. Open Record Intake Row and set Document to [YOUR_ID] and Sheet to Sheet1.
  2. Confirm Operation is appendOrUpdate and mapping includes fields like Email, Name , and Created At.
  3. Open Update Enriched Sheet and set Document to [YOUR_ID] and Sheet to Sheet1.
  4. Ensure Update Enriched Sheet uses the expressions such as {{ $('Apollo Data Fetch').first().json.companyName }} and {{ $('Record Intake Row').first().json['Created At'] }} in its column mapping.
  5. Open Log Missing Info and confirm Status is Info Not Available and Created At is {{ $('Record Intake Row').first().json['Created At'] }}.
  6. Credential Required: Connect your googleSheetsOAuth2Api credentials to Record Intake Row, Update Enriched Sheet, and Log Missing Info.

Step 4: Set Up Parsing and Intake Processing

These nodes normalize data from both calendar sources and build the intake record used for enrichment.

  1. In Parse Cal Payload, map fields like Name to {{ $json.responses.name.value }} and Created at to {{ $json.createdAt.toDateTime() }}.
  2. In Parse Calendly Payload, map fields like Name to {{ $json.payload.name }} and Created at to {{ $json.created_at.toDateTime() }}.
  3. Confirm both Parse Cal Payload and Parse Calendly Payload connect into Record Intake Row.
  4. Set Build Search Query to Mode raw and JSON Output to =={ "query": [ { "keyword": ["{{ $json['Name '] }}"], "business": ["{{ $json.Company }}"] } ] }.
Tip: Ensure the field names match exactly, including trailing spaces like Name and Company , otherwise the search query will be empty.

Step 5: Configure the Enrichment Request and Validation

This section builds the Apollo search URL, fetches data, and routes results based on availability.

  1. Review Assemble Search URL to ensure it reads from Build Search Query and outputs finalURL.
  2. In Apollo Data Fetch, set URL to https://api.apify.com/v2/acts/supreme_coder~apollo-scraper/run-sync-get-dataset-items?token=[CONFIGURE_YOUR_API_KEY].
  3. Set Method to POST and JSON Body to { "count": 25, "excludeGuessedEmails": false, "excludeNoEmails": false, "getEmails": true, "searchUrl": "{{ $json.finalURL }}" }.
  4. In Validate Data Presence, set the condition to {{ $('Apollo Data Fetch').all().toJsonString() }} notEmpty.
  5. Confirm Validate Data Presence outputs to both Update Enriched Sheet and Log Missing Info in parallel.
⚠️ Common Pitfall: Replace [CONFIGURE_YOUR_API_KEY] in Apollo Data Fetch with your real Apify/Apollo token, or the request will fail.

Step 6: Test and Activate Your Workflow

Validate that both trigger paths enrich data and write to the correct sheet.

  1. Click Execute Workflow and fire a test booking from Cal and/or Calendly.
  2. Verify that Record Intake Row appends or updates a row with Email, Name , and Created At.
  3. Check Update Enriched Sheet for enrichment fields like Company, Phone, and Socials when data is returned.
  4. If Apollo returns no data, confirm Log Missing Info writes Status as Info Not Available.
  5. When successful, toggle the workflow to Active for production use.
🔒

Unlock Full Step-by-Step Guide

Get the complete implementation guide + downloadable template

Common Gotchas

  • Google Sheets permissions can be sneaky. If rows aren’t writing, check the n8n Google Sheets credential and confirm the connected Google account can edit the “Meeting Prep” spreadsheet.
  • If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
  • Apify scrapers can return partial data when Apollo rate limits or changes page structure. If enrichment suddenly drops, check your Apify run logs first, then verify the Apollo query URL your workflow is generating.

Frequently Asked Questions

How long does it take to set up this Calendly Sheets automation automation?

About 30–60 minutes once your accounts and API tokens are ready.

Do I need coding skills to automate meeting prep?

No. You’ll mostly be connecting credentials and pasting IDs/tokens into the right fields.

Is n8n free to use for this Calendly Sheets automation workflow?

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 Apify usage costs (it depends on your scraper and run volume).

Where can I host n8n to run this automation?

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.

Can I customize this Calendly Sheets automation workflow for Cal.com bookings instead of Calendly?

Yes, and it’s already designed for that. You can run Calendly and Cal.com in parallel using the two trigger nodes, then map both into the same “Record Intake Row” step. Common tweaks include adding your own prep questions to the sheet, changing which fields get written during “Update Enriched Sheet,” and adjusting the Apollo search query when company names are messy.

Why is my Google Sheets connection failing in this workflow?

Usually it’s the wrong Google account connected, or the account doesn’t have edit access to the sheet. Reconnect the Google Sheets credential in n8n, then open the spreadsheet and confirm it’s shared with that same account. Also double-check the documentId in both Google Sheets nodes, because copying the template creates a new ID. If it still fails, look at the execution error details in n8n; Google’s API messages are blunt but they’re accurate.

How many bookings can this Calendly Sheets automation automation handle?

On n8n Cloud Starter, you can handle a few thousand workflow runs per month, which covers most small teams. If you self-host, there’s no execution cap, so volume depends on your server and how fast Apify returns results. Practically, the bottleneck is enrichment: if you try to enrich hundreds of bookings in a short burst, you may hit Apollo/Apify rate limits and see more “Info Not Available” rows until retries are added.

Is this Calendly Sheets automation automation better than using Zapier or Make?

Often, yes, because this flow has branching logic (Calendly vs. Cal.com), conditional updates, and an enrichment request that benefits from more control. n8n is also easier to run at higher volume without per-step pricing getting weird. Zapier or Make can still work if you only want “new booking → add row” and you’re not enriching anything. Once you add enrichment, validation, and updates to an existing row, n8n is usually the calmer option. If you want a quick recommendation for your setup, Talk to an automation expert.

When your sheet fills itself with real context, prep becomes a quick glance, not a mini research project. Set it up once, and your next booked call feels easier right away.

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.

Lisa Granqvist

Workflow Automation Expert

Expert in workflow automation and no-code tools.

×

Use template

Get instant access to this n8n workflow Json file

💬
Get a free quote today!
Get a free quote today!

Tell us what you need and we'll get back to you within one working day.

Get a free quote today!
Get a free quote today!

Tell us what you need and we'll get back to you within one working day.

Launch login modal Launch register modal