N
n8n Store
Workflow Market
Cal.com Meeting Booking Sync to Notion with Contact Management

Cal.com Meeting Booking Sync to Notion with Contact Management

by simo0 views

Description

Categories

⚙️ Automation

Nodes Used

n8n-nodes-base.ifn8n-nodes-base.notionn8n-nodes-base.notionn8n-nodes-base.notionn8n-nodes-base.notionn8n-nodes-base.notionn8n-nodes-base.notionn8n-nodes-base.notionn8n-nodes-base.switchn8n-nodes-base.calTrigger
PriceFree
Views0
Last Updated11/28/2025
workflow.json
{
  "id": "xELlLseYTrTVfU4P",
  "meta": {
    "instanceId": "7f9b88ec63ab97c383d3c3477a9d62caf09999df3136d214ea7850cd8610e953",
    "templateCredsSetupCompleted": true
  },
  "name": "Cal.com Meeting 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
      ],
      "webhookId": "833687f7-7a0c-48b5-bc3b-a26a786f97d5",
      "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": {
          "id": "IJ4Yc6sVF2TSemjM",
          "name": "Notion account"
        }
      },
      "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": {
          "id": "IJ4Yc6sVF2TSemjM",
          "name": "Notion account"
        }
      },
      "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": {
          "id": "IJ4Yc6sVF2TSemjM",
          "name": "Notion account"
        }
      },
      "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": {
          "id": "IJ4Yc6sVF2TSemjM",
          "name": "Notion account"
        }
      },
      "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": {
          "id": "IJ4Yc6sVF2TSemjM",
          "name": "Notion account"
        }
      },
      "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": {
          "id": "IJ4Yc6sVF2TSemjM",
          "name": "Notion account"
        }
      },
      "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": {
          "id": "IJ4Yc6sVF2TSemjM",
          "name": "Notion account"
        }
      },
      "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,
  "pinData": {},
  "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
          }
        ]
      ]
    }
  }
}

相关工作流