This workflow corresponds to n8n.io template #6159 — we link there as the canonical source.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"id": "xELlLseYTrTVfU4P",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Cal.com\u00a0Meeting Booking Sync to Notion with Contact Management",
"tags": [],
"nodes": [
{
"id": "e7dfd9ca-99e4-4374-af54-c8be4dd1a653",
"name": "Cal.com Trigger",
"type": "n8n-nodes-base.calTrigger",
"position": [
0,
-5
],
"parameters": {
"events": [
"BOOKING_CREATED",
"BOOKING_CANCELLED",
"BOOKING_RESCHEDULED"
],
"options": {}
},
"notesInFlow": false,
"typeVersion": 2
},
{
"id": "8994a7e3-e4fc-4455-86b9-1d0ba761dc1e",
"name": "Route based on trigger event type",
"type": "n8n-nodes-base.switch",
"position": [
220,
-5
],
"parameters": {
"rules": {
"values": [
{
"outputKey": "new event",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "c0dce164-ae8c-4bd1-b26c-beded6ed6621",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.triggerEvent }}",
"rightValue": "BOOKING_CREATED"
}
]
},
"renameOutput": true
},
{
"outputKey": "cancelled",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "199823f9-aa27-495e-bc59-fc2fae6e1da2",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.triggerEvent }}",
"rightValue": "BOOKING_CANCELLED"
}
]
},
"renameOutput": true
},
{
"outputKey": "rescheduled",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "8f1771e2-393b-4ff2-85db-63f7b2cc07bb",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.triggerEvent }}",
"rightValue": "BOOKING_RESCHEDULED"
}
]
},
"renameOutput": true
}
]
},
"options": {}
},
"typeVersion": 3.2
},
{
"id": "4c34bf5f-0396-403b-96e6-11f55feb281c",
"name": "get contact",
"type": "n8n-nodes-base.notion",
"position": [
440,
-205
],
"parameters": {
"simple": false,
"filters": {
"conditions": [
{
"key": "Email|email",
"condition": "equals",
"emailValue": "={{ $json.attendees[0].email }}"
}
]
},
"options": {},
"resource": "databasePage",
"operation": "getAll",
"returnAll": true,
"databaseId": {
"__rl": true,
"mode": "id",
"value": "e8bedef48863478f89b16e546db13400"
},
"filterType": "manual"
},
"credentials": {
"notionApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.2,
"alwaysOutputData": true
},
{
"id": "a7fb5f6e-72bf-4cd1-bf70-782f291aef1e",
"name": "doesn't exist",
"type": "n8n-nodes-base.if",
"position": [
660,
-205
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "05f342fd-f958-4ecf-b0b9-f39378909a09",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{ $('get contact').isEmpty() }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "9281555b-947d-4b72-9a59-9501afba54ce",
"name": "create contact",
"type": "n8n-nodes-base.notion",
"position": [
880,
-280
],
"parameters": {
"title": "={{ $('Cal.com Trigger').item.json.attendees[0].name }}",
"simple": false,
"options": {},
"resource": "databasePage",
"databaseId": {
"__rl": true,
"mode": "id",
"value": "e8bedef48863478f89b16e546db13400"
},
"propertiesUi": {
"propertyValues": [
{
"key": "Email|email",
"emailValue": "={{ $('Cal.com Trigger').item.json.attendees[0].email }}"
}
]
}
},
"credentials": {
"notionApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.2
},
{
"id": "a07cf4d5-8368-4789-8820-6947ac12e2a1",
"name": "create meeting",
"type": "n8n-nodes-base.notion",
"position": [
1080,
-120
],
"parameters": {
"title": "={{ $('Cal.com Trigger').item.json.title }}",
"simple": false,
"blockUi": {
"blockValues": [
{
"text": {
"text": [
{
"text": "={{ $('Cal.com Trigger').item.json.responses.camera_choice.value }}",
"annotationUi": {}
}
]
},
"richText": true
},
{
"text": {
"text": [
{
"text": "={{ $('Cal.com Trigger').item.json.responses.notes.value }}",
"annotationUi": {}
}
]
},
"richText": true
}
]
},
"options": {},
"resource": "databasePage",
"databaseId": {
"__rl": true,
"mode": "id",
"value": "4129a718ff694a1880ea2231e197ee6b"
},
"propertiesUi": {
"propertyValues": [
{
"key": "Contacts|relation",
"relationValue": [
"={{ $ifEmpty($('get contact').item.json.id, $('create contact').id) }}"
]
},
{
"key": "Event Time|date",
"date": "={{ $('Cal.com Trigger').item.json.startTime }}",
"timezone": "={{ $('Cal.com Trigger').item.json.organizer.timeZone }}"
},
{
"key": "cal id|rich_text",
"text": {
"text": [
{
"text": "={{ $('Cal.com Trigger').item.json.bookingId.toString() }}",
"annotationUi": {}
}
]
},
"richText": true
}
]
}
},
"credentials": {
"notionApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.2
},
{
"id": "82b37d6e-bcb8-434a-887a-dd82a9f23a23",
"name": "get meeting",
"type": "n8n-nodes-base.notion",
"position": [
440,
195
],
"parameters": {
"simple": false,
"filters": {
"conditions": [
{
"key": "cal id|rich_text",
"condition": "equals",
"richTextValue": "={{ $('Cal.com Trigger').item.json.bookingId.toString() }}"
}
]
},
"options": {},
"resource": "databasePage",
"operation": "getAll",
"returnAll": true,
"databaseId": {
"__rl": true,
"mode": "id",
"value": "4129a718ff694a1880ea2231e197ee6b"
},
"filterType": "manual"
},
"credentials": {
"notionApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.2
},
{
"id": "20be6e02-77cf-4ae2-a364-fe0e9f84629e",
"name": "update meeting",
"type": "n8n-nodes-base.notion",
"position": [
660,
195
],
"parameters": {
"pageId": {
"__rl": true,
"mode": "id",
"value": "={{ $json.id }}"
},
"simple": false,
"options": {},
"resource": "databasePage",
"operation": "update",
"propertiesUi": {
"propertyValues": [
{
"key": "Event Time|date",
"date": "={{ $('Cal.com Trigger').item.json.rescheduleStartTime }}",
"timezone": "={{ $('Cal.com Trigger').item.json.organizer.timeZone }}"
}
]
}
},
"credentials": {
"notionApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.2
},
{
"id": "d543c165-e15e-435d-8dff-0ea95abf46a7",
"name": "get meeting1",
"type": "n8n-nodes-base.notion",
"position": [
440,
-5
],
"parameters": {
"simple": false,
"filters": {
"conditions": [
{
"key": "cal id|rich_text",
"condition": "equals",
"richTextValue": "={{ $('Cal.com Trigger').item.json.bookingId.toString() }}"
}
]
},
"options": {},
"resource": "databasePage",
"operation": "getAll",
"returnAll": true,
"databaseId": {
"__rl": true,
"mode": "id",
"value": "4129a718ff694a1880ea2231e197ee6b"
},
"filterType": "manual"
},
"credentials": {
"notionApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.2
},
{
"id": "690087a3-47b7-4b74-895d-adcb9b31b616",
"name": "delete",
"type": "n8n-nodes-base.notion",
"position": [
660,
-5
],
"parameters": {
"pageId": {
"__rl": true,
"mode": "id",
"value": "={{ $json.id }}"
},
"simple": false,
"operation": "archive"
},
"credentials": {
"notionApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.2
},
{
"id": "6b498920-f27b-4c50-9c20-bec758f48c18",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
0,
-320
],
"parameters": {
"color": 5,
"width": 280,
"height": 240,
"content": "## Usage Guide\nEach node has Notes that explain its purpose and setup. Below you can find the written and video walkthroughs of this workflow.\n\n[Essay](https://www.simonesmerilli.com/business/cal-notion-automation)\n[Video](https://docs.n8n.io/workflows/sticky-notes/)\n\n*by [simo](https://www.simosme.com)*"
},
"typeVersion": 1
},
{
"id": "fe6bdc79-95f1-4319-a8a8-5975cab6426c",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-260,
200
],
"parameters": {
"color": 4,
"width": 220,
"height": 660,
"content": "# Step 1\nConnect your Cal account. Create your API key in the [dedicated settings page](https://app.cal.com/settings/developer/api-keys). Watch the video above for more details about the connection.\n\nTo run a test on this node only, while the workflow is OFF, open the node (double click) > Execute step.\n\nSchedule a meeting via any of your Cal.com links and check out the output data. You will be able to map the output into subsequent nodes.\n\nTo test the reschedule and cancel events, select \"Execute step\" and then reschedule/cancel the previously created event.\n\nTo test the whole automation, activate the worflow, or select the \"Execute workflow\" button at the bottom of the canvas."
},
"typeVersion": 1
},
{
"id": "b0465427-393c-4c0a-94c8-238a97916456",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
80,
200
],
"parameters": {
"color": 4,
"width": 260,
"height": 660,
"content": "# Step 2\n1. Connect your Notion workspace (if not already done). Find out how to do that [here](https://developers.notion.com/docs/authorization#internal-integration-auth-flow-set-up).\n\n2. Make sure your integration has access to your Notion Meetings & Contacts databases.\n\n3. Add a \"cal id\" text property to your Meetings database in Notion.\n\n4. Enter the Meetings database ID in the nodes that contain \"meeting\" in their label. See [here](https://developers.notion.com/docs/working-with-databases#adding-pages-to-a-database) (section \"Where can I find my database's ID?\") how to get a Notion database ID.\n\n5. Enter the Contacts database ID in the nodes that contain \"contact\" in their label.\n\n5. Configure the node by mapping the values from the Cal.com trigger as needed, depending on your specific Notion database configuration."
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"callerPolicy": "workflowsFromSameOwner",
"executionOrder": "v1",
"timeSavedPerExecution": 5
},
"versionId": "a7a25047-6cb6-4c1f-87d8-c4a4e1a21858",
"connections": {
"Switch": {
"main": [
[
{
"node": "get contact",
"type": "main",
"index": 0
}
],
[
{
"node": "get meeting1",
"type": "main",
"index": 0
}
],
[
{
"node": "get meeting",
"type": "main",
"index": 0
}
]
]
},
"get contact": {
"main": [
[
{
"node": "doesn't exist",
"type": "main",
"index": 0
}
]
]
},
"get meeting": {
"main": [
[
{
"node": "update meeting",
"type": "main",
"index": 0
}
]
]
},
"get meeting1": {
"main": [
[
{
"node": "delete",
"type": "main",
"index": 0
}
]
]
},
"doesn't exist": {
"main": [
[
{
"node": "create contact",
"type": "main",
"index": 0
}
],
[
{
"node": "create meeting",
"type": "main",
"index": 0
}
]
]
},
"create contact": {
"main": [
[
{
"node": "create meeting",
"type": "main",
"index": 0
}
]
]
},
"Cal.com Trigger": {
"main": [
[
{
"node": "Switch",
"type": "main",
"index": 0
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
notionApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow is especially suitable for founders and operators offering services to their clients and regularly scheduling sales or project update meetings.
Source: https://n8n.io/workflows/6159/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Sync your Google Contacts with your Notion database.
This enables webhooks for nearly realtime updates (every 5 seconds) from Notion Databases.
Overview Seamlessly transfer your Notion contacts to Google Contacts with organized group labels, simplifying your CRM management.
This workflow is perfect for productivity-focused teams, remote workers, virtual assistants, and digital knowledge managers who receive documents, images, or notes through Telegram and want to automat
This template takes approved Notion pages and syncs them to a Webflow CMS collection as draft items. It reads pages marked Status = Ready for publish in a specific Notion database/project, merges JSON