# 2-way sync Notion and Google Calendar: n8n workflow template

> Started by a clock, and works across Google Calendar and Notion. 98 steps, 16 branches, 6 loops or waits: large, and worth reading before you trust it with...

Source: https://millionrounds.com/workflow/2-way-sync-notion-and-google-calendar (Millionrounds; every figure on the page links to its filing or article)

[Automation library](https://millionrounds.com/workflows) · [Scheduling](https://millionrounds.com/workflows?category=Scheduling#library)

# 2-way sync Notion and Google Calendar

Started by a clock, and works across Google Calendar and Notion. 98 steps, 16 branches, 6 loops or waits: large, and worth reading before you trust it with anything live.

Large

[Download free](https://millionrounds.com/login?next=%2Fapp%2Fworkflow%2F2-way-sync-notion-and-google-calendar)

**98 steps** Large: read it before trusting it with anything live

**16** Branches: places the flow splits

**6** Loops or waits

**2** Services it connects to

## The flow

Starts it 10 Logic 34 Service 16

The steps in the order they run, from what starts it. The first 60 of 98.

- 1 **Get future events + yesterday** Google Calendar *Service*
- 2 **Event Updated** Google Calendar trigger *Starts it*
- 3 **When clicking "Test workflow"** Manual trigger *Starts it*
- 4 **Event Created** Google Calendar trigger *Starts it*
- 5 **Page Updated - Meetings** Notion trigger *Starts it*
- 6 **Page Updated - Tasks** Notion trigger *Starts it*
- 7 **Event Updated1** Google Calendar trigger *Starts it*
- 8 **Event Created1** Google Calendar trigger *Starts it*
- 9 **Deleted - Tasks** Google Calendar trigger *Starts it*
- 10 **Deleted - Meetings** Google Calendar trigger *Starts it*
- 11 **Every 3min** Schedule trigger *Starts it*
- 12 **Globals1** Set *Logic*
- 13 **Notion1** Notion *Service*
- 14 **Notion** Notion *Service*
- 15 **Globals** Set *Logic*
- 16 **Globals2** Set *Logic*
- 17 **Globals3** Set *Logic*
- 18 **Set the current database and calendar IDs1** Code *Logic*
- 19 **Merge** Merge *Logic*
- 20 **Set the current database and calendar IDs** Code *Logic*
- 21 **Set the current database and calendar IDs2** Code *Logic*
- 22 **Split fields** Split Out *Logic*
- 23 **Is it a new event?** If *Logic*
- 24 **Page edited by a user?** If *Logic*
- 25 **Find Task** Notion *Service*
- 26 **Only calendarId** Filter *Logic*
- 27 **Does it have a time?3** If *Logic*
- 28 **Calculate timeDifference between Google's updated_at and our own updated_at fields** Date Time *Logic*
- 29 **Set some fields** Set *Logic*
- 30 **Do nothing** No Op *Logic*
- 31 **Remove GCal ID and Date** Notion *Service*
- 32 **Get future events1** Google Calendar *Service*
- 33 **Create page** Notion *Service*
- 34 **Subtract 1 day from end_date1** Date Time *Logic*
- 35 **Only events that were edited 2s after the last update** Filter *Logic*
- 36 **Creates defaultEndDate with 1h duration** Date Time *Logic*
- 37 **extendedProperties exist?** Filter *Logic*
- 38 **Add extendedProperties to Google event8** Http Request *Service*
- 39 **Format end_date1** Date Time *Logic*
- 40 **Does it have a time?2** If *Logic*
- 41 **GCal_ID exists in Notion?** If *Logic*
- 42 **Find related pages1** Notion *Service*
- 43 **Does it really have an end_date?1** If *Logic*
- 44 **Update page2 - continue on error** Notion *Service*
- 45 **Subtract 1 day from end_date** Date Time *Logic*
- 46 **Is the page deleted?** If *Logic*
- 47 **Does it have a date?1** If *Logic*
- 48 **Find deleted pages1** Filter *Logic*
- 49 **Create page1** Notion *Service*
- 50 **Create page2** Notion *Service*
- 51 **Format end_date** Date Time *Logic*
- 52 **Loop4** Split In Batches *Logic*
- 53 **Does it have a date?** If *Logic*
- 54 **Does it have a time?1** If *Logic*
- 55 **No Operation, do nothing** No Op *Logic*
- 56 **Delete event3** Google Calendar *Service*
- 57 **Add extendedProperties to Google event9** Http Request *Service*
- 58 **Add extendedProperties to Google event10** Http Request *Service*
- 59 **Does it really have an end_date?** If *Logic*
- 60 **Delete event2** Google Calendar *Service*

## How it's built

- **Starts on:** A clock
- **Steps:** 98, with 16 branches, 6 loops or waits
- **Size:** Large: read it before trusting it with anything live
- **Connects to:** Google Calendar, Notion
- **Model:** None. This is plumbing, not judgement

## Questions

What does it need to run?

An n8n account, plus your own Google Calendar and Notion accounts. You connect your own accounts after importing it; none are included.

What starts it?

It starts on a clock.

Does it use AI?

No. Every step is fixed logic or a call to a service, so it does the same thing every time.

How long does it take to set up?

Take your time. At 98 steps it is large: read it before trusting it with anything live.

How do I import it?

Copy the workflow, open a new workflow in n8n and paste. The steps appear on the canvas, ready for your own accounts.

**Before you run it**

Nothing here has been tested by us. It is somebody's working automation, read and described from its own steps. Treat the connections it wants as a list of accounts it will touch, and read the 98 steps before you point it at anything that matters.

## Run it in n8n

- **Create your n8n account** Free to start. n8n is where the workflow runs. [Create an n8n account ↗](https://millionrounds.com/n8n)
- **Download the workflow** Free with a Millionrounds account. [Download free](https://millionrounds.com/login?next=%2Fapp%2Fworkflow%2F2-way-sync-notion-and-google-calendar)
- **Paste it into n8n** Open a new workflow in n8n and paste. Then connect your own accounts.

Stored with the author's traces removed: canvas notes, instance identifiers, saved credential names and any live document they had left behind.

## Connects to

Each opens the other workflows that use it.

[Google Calendar](https://millionrounds.com/workflows?service=Google+Calendar#library)[Notion](https://millionrounds.com/workflows?service=Notion#library)

## Workflows like it

Also scheduling, with the same services where possible, closest in size first.

- [**Explore n8n nodes in a visual reference library with Claude** 97 steps · calls a model · Dropbox, Email](https://millionrounds.com/workflow/explore-n8n-nodes-in-a-visual-reference-library-with-claude)
- [**Unified business orchestrator with Gemini and Notion** 85 steps · calls a model · Gmail, Google Calendar](https://millionrounds.com/workflow/unified-business-orchestrator-with-gemini-and-notion)
- [**Automated multi-platform sales agent with Gemini** 75 steps · calls a model · Google Calendar, Postgres](https://millionrounds.com/workflow/agente-de-ventas-automatizado-multiplataforma-with-gemini)
- [**Multi-platform AI sales agent with RAG and CRM** 71 steps · calls a model · Airtable, Google Calendar](https://millionrounds.com/workflow/multi-platform-ai-sales-agent-with-rag-and-crm)
- [**Build a multi-functional Telegram bot with Gemini** 65 steps · calls a model · Google Calendar, Google Docs](https://millionrounds.com/workflow/build-a-multi-functional-telegram-bot-with-gemini)
- [**Build a WhatsApp assistant with Google Suite** 63 steps · calls a model · Gmail, Google Calendar](https://millionrounds.com/workflow/build-a-whatsapp-assistant-with-google-suite)
