{
  "name": "Form to meeting: Google Calendar, Zoom, Gmail & Slack booking automation",
  "nodes": [
    {
      "id": "3dd27b86-6e03-4595-a9fa-2fe3d1210611",
      "name": "Google Forms Webhook1",
      "type": "n8n-nodes-base.webhook",
      "position": [
        176,
        208
      ]
    },
    {
      "id": "957b6711-281f-4599-9962-84ebf221691a",
      "name": "Merge Form Data1",
      "type": "n8n-nodes-base.merge",
      "position": [
        496,
        224
      ]
    },
    {
      "id": "3b63fe73-a5e7-4f3e-bf61-e7bd0a9aa63c",
      "name": "Workflow Configuration1",
      "type": "n8n-nodes-base.set",
      "position": [
        848,
        224
      ]
    },
    {
      "id": "66b2895b-8260-4e40-b4ec-39b100b89f77",
      "name": "Extract Booking Details1",
      "type": "n8n-nodes-base.set",
      "position": [
        1168,
        224
      ]
    },
    {
      "id": "6591a8f7-2400-4de8-9fbe-b35271faf1f8",
      "name": "Check Calendar Availability1",
      "type": "n8n-nodes-base.googleCalendar",
      "position": [
        1472,
        224
      ]
    },
    {
      "id": "d80641b0-9da6-491c-922f-d278c0f030c3",
      "name": "Is Time Slot Available?1",
      "type": "n8n-nodes-base.if",
      "position": [
        1824,
        224
      ]
    },
    {
      "id": "76a27cb5-7196-4564-a89a-85d5d0a41d52",
      "name": "Create Calendar Event1",
      "type": "n8n-nodes-base.googleCalendar",
      "position": [
        2144,
        208
      ]
    },
    {
      "id": "9f4ca36f-8f02-43ee-8630-222958201959",
      "name": "Create Zoom Meeting1",
      "type": "n8n-nodes-base.zoom",
      "position": [
        2416,
        208
      ]
    },
    {
      "id": "a31d67fa-38b4-4276-a0ad-56d1069f95dd",
      "name": "Send Confirmation Email1",
      "type": "n8n-nodes-base.gmail",
      "position": [
        2720,
        208
      ]
    },
    {
      "id": "b456c4f9-dcca-48a4-b750-f39e95df493f",
      "name": "Notify Teammate on Slack1",
      "type": "n8n-nodes-base.slack",
      "position": [
        3040,
        208
      ]
    },
    {
      "id": "78d4ae92-b136-4bbe-ae52-a73a60c47a6c",
      "name": "Send Unavailable Email1",
      "type": "n8n-nodes-base.gmail",
      "position": [
        2144,
        512
      ]
    },
    {
      "id": "9f8af7ba-09f1-46bb-9bc6-bb2d0b26d744",
      "name": "Sticky: Google Forms Webhook1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        96,
        -400
      ],
      "parameters": {
        "width": 768,
        "height": 528,
        "content": "Title: Automated Booking → Calendar + Zoom + Email + Slack\nWhat this workflow does\n\nCaptures booking submissions from a form and parses date/time.\n\nChecks Google Calendar for conflicts.\n\nIf free: crea"
      }
    },
    {
      "id": "5eb1dc05-5c0f-44a0-9000-d4abdd74a981",
      "name": "Sticky: Merge Form Data1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        80,
        384
      ],
      "parameters": {
        "width": 256,
        "height": 176,
        "content": "Purpose: Entry point for bookings. Receives a POST payload from your form (name, email, date, time).\nOutput: Raw form fields under body.* used downstream."
      }
    },
    {
      "id": "967bcc58-fc07-4e4c-8b17-5f2a99f9287f",
      "name": "Sticky: Workflow Configuration1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        400,
        384
      ],
      "parameters": {
        "width": 272,
        "height": 176,
        "content": "Purpose: Normalizes/forwards webhook data to keep a single item moving through the flow.\nTip: Use this as a “buffer” if you ever add parallel inputs later."
      }
    },
    {
      "id": "663ecdf9-6f9d-481c-abe6-e7d8b3c34021",
      "name": "Sticky: Extract Booking Details1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        736,
        384
      ],
      "parameters": {
        "width": 288,
        "height": 176,
        "content": "Purpose: Central place for editable constants (e.g., calendarId, slackChannel, teammateEmail).\nWhy: Makes the template plug-and-play—update values here instead of hunting through nodes."
      }
    },
    {
      "id": "c12bee38-9494-43b7-9961-2e4971a92316",
      "name": "Sticky: Check Calendar Availability1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1088,
        384
      ],
      "parameters": {
        "width": 272,
        "height": 176,
        "content": "Purpose: Maps form fields to clean variables: customerName, customerEmail, bookingDate, bookingTime.\nAlso: Builds bookingStartISO and bookingEndISO (60-min duration) using the submitted local time (JS"
      }
    },
    {
      "id": "b58f33ab-ad60-4a98-9354-3ed1a1aeab72",
      "name": "Sticky: Is Time Slot Available?1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1424,
        384
      ],
      "parameters": {
        "width": 256,
        "height": 176,
        "content": "Purpose: Queries the target calendar for events overlapping bookingStartISO–bookingEndISO.\nBehavior: Returns an empty list when the slot is free; non-empty when it’s taken."
      }
    },
    {
      "id": "b0b7376c-f552-4ce9-bd31-33919ba04618",
      "name": "Sticky: Create Calendar Event1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1744,
        384
      ],
      "parameters": {
        "width": 256,
        "height": 176,
        "content": "Purpose: Branches on availability.\nTrue (empty result): Slot is free → proceed to create the event.\nFalse (has events): Slot is busy → send “unavailable” email."
      }
    },
    {
      "id": "bb03b52c-ddc4-4896-9016-6d01ab6b68ec",
      "name": "Sticky: Create Zoom Meeting1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2000,
        16
      ],
      "parameters": {
        "width": 272,
        "height": null,
        "content": "Purpose: Books the time on Google Calendar with the guest as an attendee.\nFields: Summary includes guest name; Description includes name + email for quick context."
      }
    },
    {
      "id": "73736740-501f-4814-9722-e8576e2dd21f",
      "name": "Sticky: Send Confirmation Email1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2336,
        16
      ],
      "parameters": {
        "width": null,
        "height": null,
        "content": "Purpose: Creates a Zoom meeting for the confirmed slot.\nTiming: Uses the booking start time and a 60-minute duration.\nOutput: Provides join_url used by Email/Slack steps."
      }
    },
    {
      "id": "6e9c22c3-0b31-47f9-ab96-4476e501175d",
      "name": "Sticky: Notify Teammate on Slack1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2640,
        16
      ],
      "parameters": {
        "width": 256,
        "height": null,
        "content": "Purpose: Sends a confirmation to the guest with local (Japan) date/time and the Zoom link.\nSubject/Body: Human-readable datetime via toLocaleString('ja-JP', { timeZone: 'Asia/Tokyo' })."
      }
    },
    {
      "id": "b9aa000c-63a2-44b1-800a-c041a1582f64",
      "name": "Sticky: Send Unavailable Email1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2064,
        672
      ],
      "parameters": {
        "width": 256,
        "height": null,
        "content": "Purpose: Notifies the guest when the requested slot is already taken and asks them to rebook another time."
      }
    },
    {
      "id": "3904238d-39eb-40f0-879f-3f17e1afd303",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2960,
        16
      ],
      "parameters": {
        "width": null,
        "height": null,
        "content": "Purpose: Posts a concise booking summary to your specified Slack channel.\nIncludes: Guest name/email, localized date/time, and Zoom join_url."
      }
    }
  ],
  "connections": {
    "Merge Form Data1": {
      "main": [
        [
          {
            "node": "Workflow Configuration1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create Zoom Meeting1": {
      "main": [
        [
          {
            "node": "Send Confirmation Email1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Forms Webhook1": {
      "main": [
        [
          {
            "node": "Merge Form Data1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create Calendar Event1": {
      "main": [
        [
          {
            "node": "Create Zoom Meeting1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Workflow Configuration1": {
      "main": [
        [
          {
            "node": "Extract Booking Details1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Booking Details1": {
      "main": [
        [
          {
            "node": "Check Calendar Availability1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Is Time Slot Available?1": {
      "main": [
        [
          {
            "node": "Create Calendar Event1",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Send Unavailable Email1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Confirmation Email1": {
      "main": [
        [
          {
            "node": "Notify Teammate on Slack1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Calendar Availability1": {
      "main": [
        [
          {
            "node": "Is Time Slot Available?1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}