Back to n8n Fundamentals
n8n Fundamentals

How to Connect Google Calendar to n8n

Calendar trigger node setup with OAuth.

How to Connect Google Calendar to n8n

Connecting Google Calendar to n8n requires OAuth 2.0 authentication through Google Cloud Platform. This guide walks you through the complete setup process, from creating GCP credentials to configuring trigger nodes that respond to calendar events in real time.

This integration enables workflows like automatic client meeting prep, CRM

updates when appointments are scheduled, or team notifications when deadlines shift. The setup takes 15-20 minutes and works identically for n8n Cloud and self-hosted instances.

What You Need Before Starting

  • Active n8n instance (Cloud or self-hosted version 0.220.0+)
  • Google Workspace or personal Google account with Calendar access
  • Admin access to create Google Cloud Platform projects
  • Your n8n instance's OAuth callback URL (found at Settings → API
    → OAuth Redirect URL)

Step 1: Create Google Cloud Platform Project

Navigate to console.cloud.google.com and sign in.

  1. Click the project dropdown in the top navigation bar (next to "Google Cloud").
  2. Click "New Project" in the modal that appears.
  3. Enter project name: n8n-calendar-integration (or your preferred name).
  4. Leave organization field blank unless you're using a Workspace account.
  5. Click "Create" and wait 10-15 seconds for project initialization.
  6. Confirm the new project is selected in the top navigation dropdown.

Step 2: Enable Google Calendar API

From your new project dashboard:

  1. Click the hamburger menu (☰) → "APIs
    & Services" → "Library".
  2. Type "Google Calendar API
    " in the search bar.
  3. Click the "Google Calendar API
    " result (published by Google).
  4. Click the blue "Enable" button.
  5. Wait for the confirmation message: "API
    enabled".

Do not navigate away from the APIs

& Services section yet.

This step determines what users see when authorizing n8n to access their calendar.

  1. Click "OAuth consent screen" in the left sidebar.
  2. Select "External" user type (even for Workspace accounts, unless you need internal-only access).
  3. Click "Create".
  4. Fill out the required fields:
    • App name: n8n Calendar Automation
    • User support email: Your email address
    • Developer contact email: Your email address
  5. Leave "App logo" blank (optional for testing).
  6. Click "Save and Continue".
  7. On the Scopes screen, click "Add or Remove Scopes".
  8. Scroll down or search for these two scopes and check both boxes:
    • https://www.googleapis.com/auth/calendar.events (View and edit events)
    • https://www.googleapis.com/auth/calendar.readonly (View calendar events)
  9. Click "Update" at the bottom of the scopes panel.
  10. Click "Save and Continue".
  11. On Test Users screen, click "Add Users" and enter your Google email address.
  12. Click "Save and Continue", then "Back to Dashboard".

Your consent screen is now configured. The app will remain in "Testing" mode, which is fine for production use with up to 100 users.

Step 4: Create OAuth 2.0 Credentials

  1. Click "Credentials" in the left sidebar.
  2. Click "Create Credentials" → "OAuth client ID".
  3. Select "Web application" as application type (not Desktop app).
  4. Name: n8n Production Client
  5. Under "Authorized redirect URIs", click "Add URI".
  6. Paste your n8n OAuth callback URL. Format depends on your setup:
    • n8n Cloud: https://[your-instance].app.n8n.cloud/rest/oauth2-credential/callback
    • Self-hosted: https://[your-domain]/rest/oauth2-credential/callback
  7. Click "Create".
  8. Copy the "Client ID" (starts with a long string ending in .apps.googleusercontent.com).
  9. Copy the "Client Secret" (shorter alphanumeric string).
  10. Store both values in a password manager or secure note. You'll need them in 60 seconds.

Step 5: Add Google Calendar Credentials in n8n

Open your n8n instance.

  1. Go to Settings (gear icon) → Credentials.
  2. Click "Add Credential" (top right).
  3. Search for "Google Calendar OAuth2 API
    " and select it.
  4. Fill in the credential form:
    • Credential Name: Google Calendar - [Your Name]
    • Client ID: Paste the value from Step 4
    • Client Secret: Paste the value from Step 4
  5. Click "Save".
  6. Click the "Connect my account" button that appears.
  7. In the Google authorization popup:
    • Select your Google account
    • Click "Continue" on the unverified app warning (this is normal for Testing mode)
    • Check both permission boxes
    • Click "Continue"
  8. You'll be redirected back to n8n with a green "Authentication successful" message.

The credential is now ready to use in workflows.

Step 6: Configure Google Calendar Trigger Node

Create a new workflow or open an existing one.

  1. Click the "+" button to add a node.
  2. Search for "Google Calendar Trigger" and select it.
  3. In the node configuration panel:
    • Credential to connect with: Select the credential you created in Step 5
    • Trigger On: Choose "Event Created" (or "Event Updated"/"Event Deleted" based on your needs)
    • Calendar: Select the specific calendar to monitor (defaults to "Primary")
  4. Click "Listen for Test Event" to activate the trigger.
  5. Open Google Calendar in another tab and create a test event.
  6. Return to n8n within 30 seconds. You should see the event data appear in the node output panel.

If no data appears, check that:

  • The correct calendar is selected in the node settings
  • The test event was created in that specific calendar
  • Your OAuth credential is still connected (green checkmark visible)

Step 7: Build a Complete Workflow Example

Here's a production-ready workflow that posts new calendar events to Slack with attendee details.

Workflow structure:

  1. Google Calendar Trigger (Event Created)
  2. Function node (format event data)
  3. Slack node (send message)

Function node code:

const event = $input.item.json;
const startTime = new Date(event.start.dateTime || event.start.date);
const endTime = new Date(event.end.dateTime || event.end.date);

const attendees = event.attendees 
  ? event.attendees.map(a => a.email).join(', ')
  : 'No attendees';

return {
  json: {
    title: event.summary || 'Untitled Event',
    start: startTime.toLocaleString('en-US', { 
      dateStyle: 'short', 
      timeStyle: 'short' 
    }),
    end: endTime.toLocaleString('en-US', { 
      timeStyle: 'short' 
    }),
    location: event.location || 'No location specified',
    attendees: attendees,
    link: event.htmlLink
  }
};

Slack node configuration:

  • Authentication: Your Slack OAuth2 credential
  • Resource: Message
  • Operation: Post
  • Channel: #team-calendar (or your preferred channel)
  • Text: Use this expression:
New meeting scheduled: *`{{ $json.title }}`*
📅 `{{ $json.start }}` - `{{ $json.end }}`
📍 `{{ $json.location }}`
👥 Attendees: `{{ $json.attendees }}`
🔗 <`{{ $json.link }}`|View in Calendar>

Activate the workflow. Every new calendar event will now post to Slack within 1-2 minutes.

Common Issues and Fixes

"Invalid grant" error during OAuth connection:

  • Your OAuth consent screen is still in draft mode. Return to GCP Console → OAuth consent screen → click "Publish App".
  • The redirect URI in GCP doesn't exactly match your n8n callback URL. Check for trailing slashes or http vs https mismatches.

Trigger doesn't fire for new events:

  • Google Calendar triggers use polling, not webhooks
    . Default interval is 2 minutes. Check your workflow's trigger settings to adjust polling frequency.
  • The calendar you're monitoring isn't the one where you created the test event. Google accounts often have multiple calendars (personal, work, shared).

"Insufficient permissions" error:

  • Return to GCP Console → OAuth consent screen → Scopes. Verify both calendar.events and calendar.readonly scopes are added.
  • Delete and recreate the n8n credential to force re-authorization with updated scopes.

Workflow executes but Slack message is blank:

  • The event data structure changed. Add a "Set" node after the trigger to inspect the raw JSON output and adjust your Function node accordingly.
  • All-day events use event.start.date instead of event.start.dateTime. The Function code above handles both cases.

Rate limiting errors (429 status code):

  • You're polling too frequently or have too many active workflows. Google Calendar API
    has a quota of 1,000,000 queries per day.
  • Increase polling interval to 5+ minutes or consolidate multiple workflows into one with conditional routing.

Next Steps

With Google Calendar connected, you can build workflows that:

  • Create Asana tasks when client meetings are scheduled
  • Update HubSpot deal stages when proposal presentations are booked
  • Send SMS reminders 1 hour before appointments using Twilio
  • Block focus time in Slack status when "Deep Work" events appear
  • Generate pre-meeting briefs by pulling contact data from your CRM

The Google Calendar node also supports creating, updating, and deleting events programmatically. Combine trigger and action nodes to build two-way sync workflows between your calendar and other business systems.

Revenue Institute

Reviewed by Revenue Institute

This guide is actively maintained and reviewed by the implementation experts at Revenue Institute. As the creators of The AI Workforce Playbook, we test and deploy these exact frameworks for professional services firms scaling without new headcount.

Revenue Institute

Need help turning this guide into reality? Revenue Institute builds and implements the AI workforce for professional services firms.

RevenueInstitute.com