In this guide, you'll learn how to set up a 2-way Notion - Google Calendar synchronization between events using Automate.io.
If you are using both Notion and Google Calendar for task and event management, then you will find this solution valuable as it keeps things organized across multiple platforms.
This automation will allow you to synchronize events:
- Notion → Google Calendar
- Google Calendar → Notion
The integration works both for adding and editing events.
Here is the demo on how it works:
Adding events
Editing events
What you need
For this setup, you will need:
- Notion database with tasks/events
- Google Calendar account
- Automate.io account with a personal plan or a trial. This is needed to create multi-step bots.
Notion setup
For this integration, in addition to task name, you need to have only 2 properties in your Notion database:
- Date (Date) — Date property will include both the start date and end date of our events
- Gcal ID (Text) — Property for storing the ID of the Google Calendar event
Automate.io setup
In Automate.io, we will need to create the following bots:
- Event added on Google Calendar
- Event updated on Google Calendar
- Database item added on Notion
- Database item modified on Notion
Why Automate.io?
The main reason we use Automate.io is simply that on Zapier you cannot achieve this solution. Zapier doesn't have the necessary trigger for editing the Notion database, which makes it impossible to link Google Calendar and Notion records together 2-ways.
Note: Make sure to add Automate.io into your Notion and give it permissions to your database. Otherwise, you won't be able to find your databases in the Automate.io interface.
1. Google Calendar to Notion sync
To achieve 2-way synchronicity we need to establish a relation between 2 entities: Google Calendar event and Notion record.
We need to link our events in both Google Calendar and Notion so that they know about each other and stay in sync.
For this purpose, we will use the Event ID property of Google Calendar to link it to the Notion record with the Gcal ID property.
Bot 1: Event added on Google Calendar
Bot workflow:
Google Calendar event added → Check if the event already exists in Notion → Add it to Notion → Link it back to Google Calendar
- Create a bot with a Trigger from Google Calendar: Event Added. This bot will be triggered once a new event is added to Google Calendar.
- Note: You can also use a trigger Event Start. This option will add all the events ahead of time (including existing ones)
- Choose your Google Calendar from the Calendar field
- Add Action from Notion: Search Item By Property. This action will allow us to lookup for existing Notion records for newly added event
- Select your Notion database
- In Search Criteria, use Gcal ID. Put Event Id from the Google Calendar trigger into this field.
- Add Action Filters. This action will allow the bot to continue only if this event doesn't exist in the Notion database
- Choose Continue Only If...
- Choose Operator Equals - Ignores Case (string)
- Add Found? field into the Parameter 1
- Add Action from Notion: Add Database Item. In this step, we add a Notion record for our newly added Google Calendar event and link this record to Google Calendar
- Choose your Notion database
- Set the following properties using fields from Google Calendar event from the Trigger
- Gcal ID → Event Id
- Start Date → Event Begins
- End Date → Event Ends
- Task Name → Event Summary
- Add Action from Google Calendar: Update an Event. In this step, we will link the newly added Notion record back to the Google Calendar event so that they become synced. We will use Notion property Page ID and Google Calendar event Description for this purpose.
- Set the Description to be Page ID using the Output Fields from the previous action
- Set the following properties using fields from the Google Calendar event from the Trigger. This is needed so all the event details are saved
- Event Id → Event Id
- Summary → Event Summary
- Start Time → Event Begins
- End time → Event Ends
d. Enter no into Parameter 2
Bot #1 — Done! You can activate it.
Bot 2: Event updated on Google Calendar
Bot workflow:
Google Calendar event is updated → Check if there was an actual change in the event → Update Notion record
Note: In case you are wondering why we need these extra "checks" for our bots, they are needed in order to prevent infinite loops of events created/modified.
Because different bots can trigger each other in ways that we don't want, we should consider all the edge cases and prevent them from happening.
Here is the full diagram of all bots and how they interact with each other, so you can see on which places things can go wrong:
- Create a bot with a Trigger from Google Calendar: Event Modified. This bot will trigger every time an event on Google Calendar is updated.
- Choose your Calendar from Input Fields
- Add Action from Notion: Search Item By Property
- Select your database
- Gcal ID → Event Id (from Output Fields of Trigger)
- Add Action from Filters. In this step, we will compare the dates between Google Calendar and Notion records to see if there was an actual change in the event.
- Select Continue Only If...
- Operator Not Equal (date)
- Parameter 1 → Event Ends (from Output Fields of Trigger)
- Parameter 2 → Page Property Date (End Date) (from the previous Action)
- Add Action from Notion: Update Database Item. In this step, we will update the Notion record based on the changes to the Google Calendar event
- Choose your Notion database
- In Page, select - Use Custom Value -
- Page Id → Page ID (from Output Fields of Action 1)
- Set the following properties using fields from Google Calendar event from the Trigger
- Start Date → Event Begins
- End Date → Event Ends
- Task name → Event Summary
Bot #2 — Done! You can activate it.
Now you should be able to create and update Google Calendar events which will be also synced to Notion.
2. Notion to Google Calendar sync
Now, we will set up the bots that will enable complete 2-way synchronization from Notion to Google Calendar side.
Bot 3: Notion New Database Item
Bot workflow:
New Notion record is added → Check if it has a date → Check if it doesn't have a linked Google Calendar event → Add a new Google Calendar event → Link Google Calendar event to Notion record
- Create a bot with a Trigger from Notion: New Database Item. This bot will trigger every time a new record on Notion is added.
- Select your Database
- Add Action from Filters. In this step, we will add a filter to ignore the Notion records without any date. This step will prevent the bot from running into errors if you tend to create Notion tasks that don't have any particular start/end dates
- Choose Continue Only If...
- Choose Operator Not Empty
- Parameter → Page Property Date (End Date) (from Output Fields in Trigger) So we basically say, if End Date doesn't exist, don't try to create a Google Calendar event.
- Add Action from Filters. In this step, we will check if the new Notion record already contains a relation to any Google Calendar events. This will prevent duplicate events from being created.
- Choose Continue Only If...
- Choose Operator Empty
- Parameter → Page Property Gcal ID (from Output Fields in Trigger) We check if there is already linked Google Calendar event
- Add Action from Google Calendar: Add an Event. Here we will create a new Google Calendar event from the newly added Notion record
- Select your Calendar
- Set the following properties using output fields from the Notion record from the Trigger
- Summary → Page Property Task name
- Description → Page ID
- Start Time → Page Property Date (Start Date)
- End Time → Page Property Date (End Date)
- Add Action from Notion: Update Database Item. In this last step, we will bind the Google Calendar Event and the Notion record together.
- Select your database
- In Page, select - Use Custom Value -
- Page Id → Page ID (from Output Fields of Trigger)
- Gcal ID → Event Id (from Output Fields of the previous Action)
Success! Now the bots can create events both from Google Calendar and Notion and they will remain linked to each other.
Time for the last bot.
Bot 4: Notion Updated Database Item
Bot workflow:
Notion database item updated → Check if there is a linked Google Calendar event → Update Google Calendar event
- Create a bot with a Trigger from Notion: Updated Database Item. This bot will trigger every time a Notion record is updated.
- Select your database
- Add Action from Filters. In this step, we will add a condition, in which we will only try to update Google Calendar events if they are linked to any of the Notion records.
- Choose Continue Only If...
- Choose Operator Not Empty
- Parameter → Page Property Gcal ID. So if a Notion record is linked to any Google Calendar events, only then try to update an event.
- Add Action from Google Calendar: Update an Event
- Select your calendar
- Set the following properties using output fields from the Notion record from the Trigger
- Event Id → Page Property Gcal ID
- Summary → Page Property Task name
- Description → Page ID
- Start Time → Page Property Date (Start Date)
- End Time → Page Property Date (End Date)
That's it! You're awesome!
You can now activate all bots and play with the integration!
Enjoyed the tutorial?
Subscribe for more Notion updates below