1. Home
  2. Knowledge Base
  3. Bookings for WooCommerce
  4. How to sync your Google Calendar with Bookings for WooCommerce
  1. Home
  2. Knowledge Base
  3. Third-Party Services
  4. How to sync your Google Calendar with Bookings for WooCommerce

How to sync your Google Calendar with Bookings for WooCommerce

Bookings for WooCommerce can automatically create and delete Google Calendar events when bookings are made, cancelled, or removed. You can manage all your bookable products in a single calendar – or you can allocate different calendars to different products. Whatever way you choose, you can always keep your Google Calendar synced with your WooCommerce bookings.

How it works

  • When a customer places an order, a calendar event is created with the booking dates, customer name, email, and phone number
  • When an order is cancelled or refunded, the event is deleted
  • When a booking is manually cancelled from the booking edit screen, the event is deleted
  • When a booking is trashed or permanently deleted, the event is deleted
  • Manual bookings created from the WP admin are also pushed to the calendar

Google Calendar set up

First, let’s take a look at how to set up your Google Calendar. This step might take a few minutes but once it’s done, you shouldn’t need to touch it again.

Step 1: Create a Google Cloud project

  1. Go to console.cloud.google.com and sign in with the Google account that owns the calendar you want events added to
  2. Click Select a project → New Project (top left of the screen), give it a name (e.g. “My Store Bookings”), click Create
  3. Go to APIs & Services → Library, search for Google Calendar API, click it, then click Enable
Google Cloud new project settings
Google Cloud APIs and services menu
Search for Google Calendar API
  1. Go to APIs & Services → OAuth consent screen and click Get started
  2. Fill in the App name, User support email, and Developer contact email
  3. Select External in Audience
  4. Click Create
OAuth consent screen in Google Cloud
Project configuration in Google Cloud

Step 3: Create OAuth credentials

  1. From the previous screen, click Create OAuth client or go to APIs & Services → Credentials → Create Credentials → OAuth client ID
  2. Set Application type to Web application
  3. Under Authorised redirect URIs, click Add URI and paste the redirect URI shown on the Bookings → External settings page
  4. Click Create, then copy the Client ID and Client Secret shown in the popup. You can also find these credentials on the Clients menu
Button to create OAuth client
Settings in Booking for WooCommerce external tab
OAuth Client ID screen
Client ID and client secret keys

Step 4: Connect in WordPress

  1. Go to Bookings → External in your WordPress admin
  2. Scroll down to the Google Calendar section
  3. Paste your Client ID and Client Secret into the fields, set the Default calendar ID (use primary for your main calendar), and click Save credentials
  4. Click Connect to Google Calendar
  5. If Google shows an “unverified app” warning, click Advanced → Go to (app name) → Proceed — this is expected for apps that have not been through Google’s formal verification process
  6. Approve the calendar access request and click Allow
  7. You will be redirected back to the settings page with a “Connected” confirmation
Client ID and client secret key settings in Bookings for WooCommerce

Settings

SettingDescription
Client IDThe OAuth 2.0 client ID from Google Cloud Console
Client SecretThe OAuth 2.0 client secret. Stored securely; leave blank to keep the existing value
Default calendar IDThe Google Calendar to write events to. Use primary for the account’s main calendar, or paste a specific calendar ID. Can be overridden per product

Per-product calendar

Each bookable product can send events to a different Google Calendar.

  1. Edit the product and go to the External tab
  2. Enter a Calendar ID in the Google Calendar field
  3. Leave it blank to use the default calendar set on the External settings page

To find a calendar ID: in Google Calendar, open the calendar’s settings and look under Integrate calendar for the Calendar ID (it looks like [email protected] for secondary calendars, or primary for the main one).

Sync individual calendars to different products

Event details

Each calendar event includes:

  • Title — product name and customer name, e.g. “Studio Hire – Jane Smith”
  • Date/time — all-day or multi-day for day-based bookings; timed event for slot bookings
  • Description — booking ID, order ID, customer name, email, phone, and a link to the booking in the WP admin

Cancellation

Events are removed from Google Calendar automatically when:

  • The associated WooCommerce order is cancelled or refunded
  • The booking is manually cancelled using the Cancel booking button on the booking edit screen
  • The booking post is moved to trash or permanently deleted

Notes

  • Google access tokens expire after one hour. The plugin automatically refreshes them using the stored refresh token – no manual action is required
  • Each store must create its own Google Cloud project and OAuth credentials. There is no shared app
  • The integration requires the site to be accessible on a public domain. It cannot be set up on a local development site as Google does not accept local domains as redirect URIs
  • The “unverified app” warning appears because the OAuth app has not been submitted to Google for verification. For a private store connecting its own calendar, this is expected and safe to proceed through

Two-way Google Calendar sync

The Google Calendar integration is one-way by default: new bookings are pushed to your calendar automatically. Two-way sync goes further by reflecting changes you make directly in Google Calendar back into your store.

How do you enable two-way sync?

Switch on two-way sync from your Bookings settings. To enable it:

  • Go to Bookings > External in your WordPress admin
  • Check ‘Allow two-way integration’ under Google Calendar
  • Set a ‘Poll interval’ to control how often the plugin checks Google Calendar for changes, with options from every 5 minutes to every 2 hours
  • Click ‘Save credentials’

Two-way sync is now active, and the plugin will start checking Google Calendar for changes on the schedule you set.

What does two-way sync do?

Two-way sync keeps your store and your Google Calendar in step by acting on two types of change.

Events deleted in Google Calendar. Delete a calendar event that matches a store booking, and the plugin sets that booking’s status to ‘Cancelled’ and restores the dates so they’re available to book again.

Events added in Google Calendar. Create a new event directly in Google Calendar that didn’t come from a store booking, and the plugin adds a blocked booking in the store for those dates. This stops customers booking dates that are already occupied in your calendar.

How does it work?

The plugin polls Google Calendar on a schedule using Google’s incremental sync. It only fetches events that have changed since the last check, so the process is efficient and uses minimal API quota.

The first sync establishes a baseline snapshot of your calendar, and only new changes are processed after that. Existing calendar events won’t trigger new blocked bookings when you first turn the feature on.

Run a sync manually at any time with the ‘Run sync now’ button on the External settings page. This is useful for testing, or when you need changes to appear immediately without waiting for the next scheduled poll.

What should you be aware of?

A few things are worth keeping in mind once two-way sync is running:

  • Changes made in Google Calendar appear in the store within the time set by your poll interval, not instantly
  • Canceling a booking via two-way sync doesn’t cancel any associated WooCommerce order, so you’ll need to handle the order separately
  • Slot-based products (those using time slots rather than full-day bookings) aren’t affected by the block-dates behavior. Only standard day-based bookings are blocked
  • Two-way sync needs an active Google Calendar connection. If you disconnect from Google, the sync stops until you reconnect

Was this article helpful?

Related Articles