Intermediate~20 min setupProductivity & CommunicationVerified April 2026
Google Calendar logo
Slack logo

How to Alert on Room Booking Conflicts with N8n

Monitor Google Calendar for overlapping room bookings and instantly notify your Slack channel when conflicts occur.

Steps and UI details are based on platform versions at time of writing β€” check each platform for the latest interface.

Best for

Teams that need precise room conflict detection with custom logic for complex booking rules.

Not ideal for

Simple calendar notifications where basic date overlap detection is sufficient.

Sync type

real-time

Use case type

notification

Real-World Example

πŸ’‘

A 40-person marketing agency uses this to catch conference room double-bookings before meetings start. Their old system relied on people checking calendars manually, leading to 3-4 conflicts per week where teams showed up to occupied rooms. Now conflicts get flagged in #office within minutes, giving the office manager time to move meetings or find alternative spaces before people leave their desks.

What Will This Cost?

Drag the slider to your expected monthly volume.

/mo
505005K50K

Each platform counts differently β€” Zapier: 1 task per trigger. Make: 1 operation per module per record. n8n: 1 execution per run.

Prices shown for annual billing. Based on published pricing as of April 2026.

Estimated ROI

1000

min saved/mo

$583

labor value/mo

Free

no platform cost

Based on ~2 min manual effort per operation at $35/hr fully loaded labor cost.

Implementation

Skip the setup

Import this workflow directly into n8n

Copy the pre-built n8n blueprint and paste it straight into n8n. All modules, filters, and field mappings are already configured β€” you just need to connect your accounts.

Before You Start

Make sure you have everything ready.

Admin access to your Google Workspace calendar system
Slack workspace admin permissions to install apps and create bot tokens
Dedicated room calendar in Google Calendar (not personal calendars)
N8n instance with Google Calendar and Slack nodes available
Basic JavaScript knowledge for writing conflict detection logic

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Event Start Timestart.dateTime
Event End Timeend.dateTime
Event Summarysummary
Event Organizerorganizer.email
Calendar IDcalendarId
Event IDid
1 optional fieldβ–Έ show
Event Statusstatus

Step-by-Step Setup

1

Workflows > New Workflow

Create New N8n Workflow

Start a fresh workflow in N8n specifically for room conflict monitoring. This will house all the logic for detecting overlaps and sending alerts.

  1. 1Click 'New Workflow' from the N8n dashboard
  2. 2Name it 'Room Booking Conflicts'
  3. 3Click the + icon to add your first node
βœ“ What you should see: You should see a blank workflow canvas with one empty node ready for configuration.
2

Add Node > Trigger > Google Calendar Trigger

Add Google Calendar Trigger

Set up a trigger that fires when calendar events are created or updated. This catches new bookings that might conflict with existing ones.

  1. 1Search for 'Google Calendar' in the node menu
  2. 2Select 'Google Calendar Trigger'
  3. 3Choose 'Event Created or Updated' as the trigger type
  4. 4Set 'Resource' to the specific room calendar ID
βœ“ What you should see: The trigger node shows 'Google Calendar Trigger' with a green connection indicator.
⚠
Common mistake β€” Don't use 'Event Deleted' trigger - you only need to check conflicts when events are added or modified.
n8n
+
click +
search apps
Google Calendar
GO
Google Calendar
Add Google Calendar Trigger
Google Calendar
GO
module added
3

Node Settings > Credentials > Google Calendar OAuth2 API

Connect Google Calendar Account

Authenticate with Google to access your calendar data. N8n needs permission to read calendar events and check for scheduling conflicts.

  1. 1Click 'Create New Credential' in the Google Calendar node
  2. 2Select 'Google Calendar OAuth2 API'
  3. 3Click 'Connect my account' and authorize N8n
  4. 4Test the connection with 'Test Step'
βœ“ What you should see: Green checkmark appears next to credentials, and test returns sample calendar event data.
⚠
Common mistake β€” Make sure you grant calendar read permissions - N8n needs access to see all events in the room calendar.
n8n settings
Connection
Choose a connection…Add
click Add
Google Calendar
Log in to authorize
Authorize n8n
popup window
βœ“
Connected
green checkmark
4

Add Node > Regular > Google Calendar

Add Calendar Query Node

Query all existing events for the same time period to find overlaps. This node pulls events that might conflict with the new booking.

  1. 1Add a new 'Google Calendar' action node after the trigger
  2. 2Set operation to 'Get Many' events
  3. 3Configure 'Time Min' to {{ $node['Google Calendar Trigger'].json['start']['dateTime'] }}
  4. 4Set 'Time Max' to {{ $node['Google Calendar Trigger'].json['end']['dateTime'] }}
βœ“ What you should see: Node returns array of calendar events within the same time window as the triggered event.
5

Add Node > Regular > Code

Add JavaScript Code Node for Conflict Detection

Write logic to compare event times and detect actual overlaps. N8n's built-in nodes can't handle complex time comparisons, so custom code is required.

  1. 1Add a 'Code' node and select 'JavaScript'
  2. 2Paste the conflict detection logic into the code editor
  3. 3Set the node to process 'Each Item Separately'
  4. 4Configure input data from both calendar nodes
βœ“ What you should see: Code node shows green status and outputs only events that actually overlap in time.
⚠
Common mistake β€” Test with events that don't overlap first - if the code returns anything, your logic is wrong.

Drop this into an n8n Code node.

JavaScript β€” Code Node// Detect time overlap with 15-minute buffer
β–Έ Show code
// Detect time overlap with 15-minute buffer
const newStart = new Date($node['Google Calendar Trigger'].json.start.dateTime);
const newEnd = new Date($node['Google Calendar Trigger'].json.end.dateTime);

... expand to see full code

// Detect time overlap with 15-minute buffer
const newStart = new Date($node['Google Calendar Trigger'].json.start.dateTime);
const newEnd = new Date($node['Google Calendar Trigger'].json.end.dateTime);
const buffer = 15 * 60 * 1000; // 15 minutes in milliseconds

const conflicts = $node['Google Calendar'].json.filter(event => {
  if (event.status === 'cancelled') return false;
  const existingStart = new Date(event.start.dateTime);
  const existingEnd = new Date(event.end.dateTime);
  
  return (newStart < existingEnd + buffer) && (newEnd > existingStart - buffer);
});

return [{ conflictCount: conflicts.length, conflictDetails: conflicts }];
6

Add Node > Regular > IF

Configure IF Node for Conflict Filter

Only proceed to Slack notification if conflicts are actually found. This prevents spam notifications for non-conflicting bookings.

  1. 1Add an 'IF' node after the code node
  2. 2Set condition to 'Number' > 'Larger' > 0
  3. 3Reference {{ $node['Code'].json['conflictCount'] }}
  4. 4Connect 'true' output to continue the workflow
βœ“ What you should see: IF node shows two output paths - 'true' continues to Slack, 'false' ends the workflow.
⚠
Common mistake β€” Don't skip this filter - without it, you'll get Slack messages for every calendar event, not just conflicts.
Google Calendar
GO
trigger
filter
Condition
matches criteria?
yes β€” passes through
no β€” skipped
Slack
SL
notified
7

Add Node > Regular > Slack

Add Slack Node

Configure Slack to post conflict alerts to your office channel. This sends the actual notification when room booking conflicts are detected.

  1. 1Add a 'Slack' node connected to the IF node's 'true' output
  2. 2Set operation to 'Post Message'
  3. 3Choose your #office channel from the dropdown
  4. 4Configure the message template with event details
βœ“ What you should see: Slack node shows your workspace name and selected channel in the configuration.
8

Node Settings > Credentials > Slack OAuth2 API

Connect Slack Workspace

Authenticate N8n with your Slack workspace to enable message posting. You need bot permissions to post in channels.

  1. 1Click 'Create New Credential' in the Slack node
  2. 2Select 'Slack OAuth2 API'
  3. 3Click 'Connect my account' and authorize the N8n app
  4. 4Grant 'chat:write' and 'channels:read' permissions
βœ“ What you should see: Slack credential shows green connected status and channel list populates in the dropdown.
⚠
Common mistake β€” If channels don't appear in the dropdown, the N8n bot wasn't added to your #office channel - add it manually in Slack first.
9

Slack Node > Message Text Field

Format Conflict Alert Message

Create a clear message template that shows exactly which events conflict and when. Include enough detail for someone to resolve the booking issue.

  1. 1Set message text to include event names, times, and organizers
  2. 2Add conflict details using {{ $node['Code'].json['conflictDetails'] }}
  3. 3Include room name and booking duration
  4. 4Add a call-to-action for resolving the conflict
βœ“ What you should see: Message preview shows formatted text with dynamic fields populated from calendar data.
⚠
Common mistake β€” Map fields using the variable picker β€” don't type field names manually. Hand-typed variable names often have invisible spacing errors that produce blank output.
10

Workflow > Execute Workflow

Test the Complete Workflow

Run end-to-end testing with real calendar events to verify conflict detection and Slack notifications work correctly.

  1. 1Create two overlapping test events in your room calendar
  2. 2Click 'Execute Workflow' to trigger the flow manually
  3. 3Check that conflicts are detected in the code node output
  4. 4Verify the Slack message appears in your #office channel
βœ“ What you should see: Slack notification appears with details of the conflicting room bookings and clear conflict information.
⚠
Common mistake β€” Delete your test events after testing - otherwise you'll get real alerts about fake conflicts.
n8n
β–Ά Run once
executed
βœ“
Google Calendar
βœ“
Slack
Slack
πŸ”” notification
received
11

Workflow > Activation Toggle

Activate the Workflow

Turn on the workflow to monitor for room conflicts continuously. Once active, it will check every new or updated calendar event automatically.

  1. 1Click the workflow toggle switch to 'Active'
  2. 2Verify the status shows 'Active' with a green indicator
  3. 3Check the execution log to confirm it's listening for events
βœ“ What you should see: Workflow status shows 'Active' and appears in your active workflows list.

Scaling Beyond 100+ room bookings/day+ Records

If your volume exceeds 100+ room bookings/day records, apply these adjustments.

1

Batch Calendar Queries

Query calendar events in 4-hour windows instead of individual lookups. Use N8n's HTTP Request node with batch parameters to reduce API calls by 80% on busy calendars.

2

Add Conflict Caching

Store detected conflicts in N8n's built-in database to prevent duplicate alerts. High-volume calendars often trigger multiple webhook events for the same booking change.

Going live

Production Checklist

Before you turn this on for real, confirm each item.

Troubleshooting

Common errors and how to fix them.

Frequently Asked Questions

Common questions about this workflow.

Analysis

VerdictWhy n8n for this workflow

Use N8n for this if you need custom conflict detection logic or your room booking patterns are complex. N8n's JavaScript nodes let you write precise overlap detection that handles edge cases like partial conflicts, buffer times, or recurring meetings. The code flexibility beats Zapier's limited date comparison options. Skip N8n if you just want basic calendar notifications - Make's built-in calendar modules handle simple conflict detection without custom code.

Cost

This workflow burns 3-4 executions per room booking: trigger + calendar query + conflict check + Slack message. At 50 room bookings per month, that's 200 executions total. N8n's self-hosted version costs nothing beyond server fees. The cloud version at $20/month covers 5,000 executions easily. Zapier would cost $49/month for the same volume since calendar queries eat premium actions. Make charges $21/month but limits you to 10,000 operations.

Tradeoffs

Make handles Google Calendar pagination automatically - N8n requires manual loop logic for calendars with 100+ events. Zapier's calendar trigger fires faster, usually within 30 seconds versus N8n's 2-3 minute webhook delays. But N8n wins on complex conflict logic. Make's calendar modules can't handle overlapping recurring events properly, and Zapier's date functions break on timezone edge cases that N8n's JavaScript handles cleanly.

Google Calendar's webhook system is flaky - expect 5-10% of events to not trigger workflows at all. Room calendars with external attendees create duplicate events that will trigger false conflicts. All-day events use 'date' fields while timed events use 'dateTime', breaking simple conflict logic. The biggest gotcha: Google's calendar API returns deleted events as 'cancelled' status for 30 days, so your conflict detection needs to filter those out or you'll alert on phantom bookings.

Ideas for what to build next

  • β†’
    Add Conflict Resolution Tracking β€” Create a follow-up workflow that monitors when conflicted events get moved or cancelled, then posts resolution updates to Slack.
  • β†’
    Build Room Utilization Reports β€” Extend the conflict data to track room booking patterns and generate weekly utilization reports in Google Sheets.
  • β†’
    Create Proactive Booking Validation β€” Set up a workflow that checks for conflicts when calendar invites are sent, not just when they're accepted.

Related guides

Was this guide helpful?
← Google Calendar + Slack overviewn8n profile β†’