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

How to detect room booking conflicts with Power Automate

Automatically check Google Calendar room bookings every 15 minutes and alert Slack when overlapping events are found.

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

Best for

Teams with shared room calendars who need immediate conflict alerts in their main communication channel

Not ideal for

Single-user calendars or teams that prefer email notifications over Slack messages

Sync type

scheduled

Use case type

notification

Real-World Example

💡

A 25-person marketing agency has 3 conference rooms with separate Google Calendar accounts. Before automation, double bookings weren't caught until someone showed up to a locked room. Now conflicts trigger #office alerts within 15 minutes, and the office manager can resolve them immediately.

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 Power Automate

Copy the pre-built Power Automate blueprint and paste it straight into Power Automate. 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.

Google account with edit access to room calendar you want to monitor
Slack workspace admin permissions to install Power Automate app
Microsoft Power Automate account (free tier works for this workflow)
Room calendars must be separate Google Calendar accounts, not just calendar layers

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Event Summarysummary
Start Timestart.dateTime
End Timeend.dateTime
Organizer Emailorganizer.email
Event IDid
1 optional field▸ show
Event Locationlocation

Step-by-Step Setup

1

My flows > New flow > Scheduled cloud flow

Create scheduled cloud flow

Navigate to make.powerautomate.com and sign in with your Microsoft account. Click 'My flows' in the left sidebar, then 'New flow'. Select 'Scheduled cloud flow' from the dropdown menu. Name your flow 'Room Booking Conflict Detector' and set it to run every 15 minutes.

  1. 1Click 'My flows' in the left navigation
  2. 2Click the 'New flow' dropdown button
  3. 3Select 'Scheduled cloud flow'
  4. 4Enter 'Room Booking Conflict Detector' as the flow name
  5. 5Set repeat every 15 minutes
What you should see: You should see a flow designer with a Recurrence trigger set to 15-minute intervals.
Common mistake — Don't set the interval below 5 minutes or you'll hit Google Calendar API rate limits quickly.
2

Flow designer > + New step > Google Calendar

Add Google Calendar connector

Click '+ New step' below the Recurrence trigger. Search for 'Google Calendar' in the connector search box and select it. Choose 'Get events (V4)' from the actions list. This action will fetch all events from your room calendar for conflict analysis.

  1. 1Click '+ New step' under the Recurrence block
  2. 2Type 'Google Calendar' in the search box
  3. 3Select the Google Calendar connector
  4. 4Choose 'Get events (V4)' action
What you should see: A Google Calendar action block appears with connection and parameter fields to configure.
3

Google Calendar action > Connection settings

Configure calendar connection

Click 'Sign in' to connect your Google account that has access to the room calendars. After authentication, you'll see a dropdown for Calendar id. Select the specific room calendar you want to monitor. Set 'Time Min' to formatDateTime(utcNow(),'yyyy-MM-ddTHH:mm:ssZ') and 'Time Max' to formatDateTime(addHours(utcNow(),2),'yyyy-MM-ddTHH:mm:ssZ') to check the next 2 hours.

  1. 1Click 'Sign in' and complete Google OAuth flow
  2. 2Select your room calendar from the Calendar id dropdown
  3. 3Click in Time Min field and select 'Expression'
  4. 4Enter formatDateTime(utcNow(),'yyyy-MM-ddTHH:mm:ssZ')
  5. 5Set Time Max to formatDateTime(addHours(utcNow(),2),'yyyy-MM-ddTHH:mm:ssZ')
What you should see: The connection shows as 'Connected' and you see expression formulas in the time fields.
Common mistake — Make sure you have edit permissions on the room calendar, not just read access.
4

Flow designer > + New step > Data Operations > Compose

Add conflict detection logic

Add a new step and search for 'Compose' action under Data Operations. This will process the calendar events to detect overlaps. In the Compose inputs field, you'll create an expression that compares event start/end times to find conflicts. We'll use this to prepare data for the next filtering step.

  1. 1Click '+ New step' below the Google Calendar action
  2. 2Search for 'Compose' in Data Operations
  3. 3Select the Compose action
  4. 4Click in the Inputs field to add conflict detection expression
What you should see: A Compose action appears ready for your conflict detection expression.
Common mistake — The expression in the next step is complex - copy it exactly or conflicts won't be detected properly.
5

Compose action > Inputs > Expression

Configure overlap detection formula

In the Compose inputs, click 'Expression' and enter this formula to detect overlapping events. This expression compares each event's start and end times against all other events to identify scheduling conflicts. The formula accounts for events that start before another ends or end after another starts.

  1. 1Click 'Expression' tab in the inputs field
  2. 2Paste the overlap detection expression
  3. 3Click 'OK' to save the expression
  4. 4Verify the expression appears in the inputs field
What you should see: The Compose action shows a complex expression that will output conflicting event pairs.
6

Flow designer > + New step > Data Operations > Filter array

Filter for actual conflicts

Add another step and select 'Filter array' from Data Operations. Set the 'From' field to the output of your Compose action. In the filter condition, check if the array length is greater than 0, meaning conflicts were found. This prevents false alerts when no conflicts exist.

  1. 1Add new step and search for 'Filter array'
  2. 2Set 'From' to the Compose action output
  3. 3Add condition where length is greater than 0
  4. 4Set the filter to only pass when conflicts exist
What you should see: Filter array action is configured to only continue when conflicts are detected.
Common mistake — Without this filter, you'll get Slack notifications every 15 minutes even with no conflicts.
Google Calendar
GO
trigger
filter
Condition
matches criteria?
yes — passes through
no — skipped
Slack
SL
notified
7

Flow designer > + New step > Slack > Post message

Add Slack connector

Click '+ New step' and search for 'Slack'. Select the Slack connector and choose 'Post message' action. You'll need to sign in to your Slack workspace and authorize Power Automate to post messages. Select the #office channel where conflict alerts should appear.

  1. 1Add new step and search for Slack
  2. 2Select Slack connector
  3. 3Choose 'Post message' action
  4. 4Sign in to your Slack workspace
  5. 5Select #office channel from dropdown
What you should see: Slack action is connected and shows your workspace channels.
8

Slack Post message > Message field

Configure conflict alert message

In the Message field, create an alert that includes details about the conflicting bookings. Include event names, times, and organizers so the office manager can quickly resolve the issue. Use dynamic content from the Google Calendar events to populate specific conflict details.

  1. 1Click in the Message text field
  2. 2Type alert header text
  3. 3Add dynamic content for event details
  4. 4Include conflict time ranges and organizers
  5. 5Format message for readability
What you should see: Message field contains a template that will show specific conflict information.
Common mistake — Keep the message under 200 characters or Slack might truncate important conflict details.
9

Flow designer > Save > Test > Manually

Test the flow

Click 'Save' to save your flow, then 'Test' in the top menu. Select 'Manually' and click 'Test'. The flow will run immediately and check for conflicts in your room calendar. If conflicts exist, you should see a Slack message appear in your #office channel within 30 seconds.

  1. 1Click 'Save' in the top right
  2. 2Click 'Test' button
  3. 3Select 'Manually' option
  4. 4Click 'Test' to run immediately
  5. 5Check #office channel for test message
What you should see: Flow runs successfully and posts a test message to Slack if conflicts are found.
Common mistake — If the test finds no conflicts, no Slack message will appear - this is expected behavior.
Power Automate
▶ Test flow
executed
Google Calendar
Slack
Slack
🔔 notification
received
10

Flow designer > Turn on

Enable automatic monitoring

After successful testing, click 'Turn on' to activate the scheduled flow. The flow will now run every 15 minutes and check for room booking conflicts automatically. You can monitor run history in the flow details page to ensure it's working correctly.

  1. 1Click 'Turn on' in the flow header
  2. 2Confirm the flow is enabled
  3. 3Check the status shows as 'On'
  4. 4Review run history after first scheduled execution
What you should see: Flow status shows 'On' and you can see scheduled runs in the run history.

Add this expression in the Compose action to detect overlapping events by comparing start and end times across all calendar events in the response array.

JavaScript — Code Step// Overlap detection expression for Compose action
▸ Show code
// Overlap detection expression for Compose action
map(body('Get_events_(V4)')?['value'], lambda('event1', 
  {

... expand to see full code

// Overlap detection expression for Compose action
map(body('Get_events_(V4)')?['value'], lambda('event1', 
  {
    'summary': item()?['summary'],
    'start': item()?['start']?['dateTime'], 
    'end': item()?['end']?['dateTime'],
    'organizer': item()?['organizer']?['email'],
    'conflicts': filter(body('Get_events_(V4)')?['value'], lambda('event2',
      and(
        not(equals(item('event1')?['id'], item('event2')?['id'])),
        or(
          and(lessOrEquals(item('event1')?['start']?['dateTime'], item('event2')?['start']?['dateTime']), 
              greater(item('event1')?['end']?['dateTime'], item('event2')?['start']?['dateTime'])),
          and(less(item('event1')?['start']?['dateTime'], item('event2')?['end']?['dateTime']),
              greaterOrEquals(item('event1')?['end']?['dateTime'], item('event2')?['end']?['dateTime']))
        )
      )
    ))
  }
))

Scaling Beyond 50+ events per room calendar per day+ Records

If your volume exceeds 50+ events per room calendar per day records, apply these adjustments.

1

Increase time window checks

Check 4-6 hour windows instead of 2 hours to catch more conflicts per API call. Balance against processing time and memory limits.

2

Implement conflict deduplication

Store detected conflict pairs in SharePoint to avoid alerting about the same overlap multiple times. Clear the list daily.

3

Optimize API calls

Use single time queries with multiple calendar IDs instead of separate calls per room. Reduces API quota usage significantly.

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 Microsoft Power Automate for this if you're already in the Microsoft ecosystem and need scheduled conflict checking without webhooks. The Google Calendar connector handles authentication smoothly and the expression builder works well for overlap detection logic. Pick Make instead if you need real-time conflict detection - their webhook triggers fire immediately when bookings are created.

Cost

Real math: Each flow run makes 1 Google Calendar API call plus 1 Slack API call when conflicts exist. At 96 runs per day (every 15 minutes), that's 96 Google Calendar calls daily. Google allows 1 million Calendar API requests per day for free, so you won't hit limits. Power Automate free tier gives you 750 runs monthly - this flow uses 2,880 runs monthly, so you need the $15 Power Automate per user plan.

Tradeoffs

Make handles this better with instant webhook triggers instead of 15-minute delays. Zapier's Google Calendar trigger is more reliable for high-volume calendars. n8n gives you better control over the overlap detection algorithm with proper JavaScript instead of Power Automate's limited expression language. Pipedream processes batch calendar events faster. But Power Automate wins if your IT team already manages other Microsoft flows and wants centralized automation governance.

You'll hit expression complexity limits when checking more than 20 events per run - the nested loops slow down significantly. Google Calendar's API sometimes returns events in random order, breaking your time-based assumptions. All-day events come back with date-only fields instead of dateTime, which breaks the overlap comparison logic unless you add specific handling for them.

Ideas for what to build next

  • Monitor multiple room calendarsAdd parallel branches to check conference rooms, phone booths, and meeting spaces simultaneously in one flow.
  • Auto-resolve conflictsExtend the flow to automatically cancel the second booking and notify organizers with rebooking suggestions.
  • Add conflict resolution workflowCreate a follow-up flow that tracks when conflicts are marked as resolved in Slack threads.

Related guides

Was this guide helpful?
Google Calendar + Slack overviewPower Automate profile →