

How to detect room booking conflicts with Pipedream
Automatically alerts your #office Slack channel when overlapping events are booked on the same Google Calendar room.
Steps and UI details are based on platform versions at time of writing β check each platform for the latest interface.
Best for
Teams managing shared meeting rooms who need immediate alerts when double-bookings occur
Not ideal for
Simple calendar notifications without conflict detection logic
Sync type
real-timeUse case type
notificationReal-World Example
A 40-person marketing agency manages 6 conference rooms through shared Google Calendars. Before automation, double-bookings caused meeting disruptions 2-3 times per week. Now when someone books Conference Room A from 2-3pm while another event already exists 1:30-2:30pm, the #office channel gets an instant alert with both event details so the conflict resolves in minutes.
What Will This Cost?
Drag the slider to your expected monthly volume.
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
Import this workflow directly into Pipedream
Copy the pre-built Pipedream blueprint and paste it straight into Pipedream. 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.
Field Mapping
Map these fields between your apps.
| Field | API Name | |
|---|---|---|
| Required | ||
| Event Title | ||
| Start Time | ||
| End Time | ||
| Room Name | ||
| Organizer Email | ||
| Event ID | ||
2 optional fieldsβΈ show
| Attendee List | |
| Conflict Count |
Step-by-Step Setup
Workflows > New > HTTP / Webhook Requests
Create new workflow in Pipedream
Navigate to pipedream.com and click the green 'New' button in the top right. Select 'HTTP / Webhook Requests' as your trigger source. This creates an instant webhook endpoint that Google Calendar will call when events change. Copy the webhook URL that appears - you'll need this for Google Calendar setup.
- 1Click 'New' in the top navigation
- 2Select 'HTTP / Webhook Requests' from the trigger list
- 3Copy the webhook URL that appears
- 4Click 'Save and continue'
Google Cloud Console > Calendar API > Try this API
Set up Google Calendar webhook
In Google Calendar API Console, create a watch request to your room calendar. You'll need the calendar ID from Google Calendar settings and your Pipedream webhook URL. The watch request subscribes to calendar events changes including creations, updates, and deletions.
- 1Go to developers.google.com/calendar/api/v3/reference/events/watch
- 2Click 'Try this API' on the right side
- 3Enter your room calendar ID in calendarId field
- 4Set address to your Pipedream webhook URL
- 5Set type to 'web_hook'
Workflow > Add Step > Google Calendar > Get Event
Add Google Calendar step
Back in Pipedream, click 'Add Step' below your trigger. Search for Google Calendar and select 'Get Event' action. Connect your Google account when prompted. This step will fetch full event details when the webhook fires, since webhooks only contain minimal change notifications.
- 1Click the + button to add a new step
- 2Search for 'Google Calendar' in the app search
- 3Select 'Get Event' from the actions list
- 4Click 'Connect Account' and authorize Google Calendar access
- 5Set Calendar ID to your room calendar
Google Calendar Step > Configuration > Event ID
Configure event ID extraction
In the Google Calendar step, set Event ID field to extract the event ID from the webhook payload. Google sends this in the X-Goog-Resource-ID header or message body. Map this field to {{trigger.headers['x-goog-resource-id']}} or parse it from the webhook body depending on your Calendar API setup.
- 1Click in the Event ID field
- 2Select 'trigger' from the left sidebar
- 3Choose 'headers' then 'x-goog-resource-id'
- 4Test the step with sample data
Workflow > Add Step > Code (Node.js)
Add conflict detection code step
Click Add Step and select 'Code (Node.js)'. This step queries Google Calendar API for overlapping events in the same room. You'll write JavaScript to compare the current event times against all other events on the same date, checking for time conflicts.
- 1Click + to add another step
- 2Select 'Code (Node.js)' from the step types
- 3Name the step 'Check for conflicts'
- 4Paste the conflict detection code in the editor
Add this Node.js code to your conflict detection step to find overlapping events. It queries the Calendar API for the same day and compares time ranges using ISO timestamps.
JavaScript β Code Stepexport default defineComponent({βΈ Show code
export default defineComponent({
async run({ steps, $ }) {
const currentEvent = steps.google_calendar.$return_value;... expand to see full code
export default defineComponent({
async run({ steps, $ }) {
const currentEvent = steps.google_calendar.$return_value;
const startTime = new Date(currentEvent.start.dateTime || currentEvent.start.date);
const endTime = new Date(currentEvent.end.dateTime || currentEvent.end.date);
// Skip all-day events
if (currentEvent.start.date && !currentEvent.start.dateTime) {
return { conflicts: [] };
}
// Query same day for conflicts
const dayStart = new Date(startTime);
dayStart.setHours(0, 0, 0, 0);
const dayEnd = new Date(startTime);
dayEnd.setHours(23, 59, 59, 999);
const response = await $.http.get(`https://www.googleapis.com/calendar/v3/calendars/${encodeURIComponent(steps.trigger.event.calendarId)}/events`, {
headers: {
'Authorization': `Bearer ${auths.google_calendar.oauth_access_token}`
},
params: {
timeMin: dayStart.toISOString(),
timeMax: dayEnd.toISOString(),
singleEvents: true
}
});
const conflicts = response.data.items.filter(event => {
if (event.id === currentEvent.id) return false;
if (!event.start.dateTime || !event.end.dateTime) return false;
const eventStart = new Date(event.start.dateTime);
const eventEnd = new Date(event.end.dateTime);
// Check for time overlap
return (startTime < eventEnd && endTime > eventStart);
});
return {
conflicts: conflicts.map(event => ({
title: event.summary,
start: event.start.dateTime,
end: event.end.dateTime,
organizer: event.organizer?.email
}))
};
}
});Workflow > Add Step > Filter
Add conditional logic step
Add a Filter step to only continue when conflicts are detected. Set the condition to check if the conflicts array from your code step has length greater than 0. This prevents unnecessary Slack messages when no conflicts exist.
- 1Click + to add a Filter step
- 2Set condition to 'Continue if'
- 3Reference the conflicts array from previous step
- 4Set operator to 'Array length greater than'
- 5Enter 0 as the value
Workflow > Add Step > Slack > Send Message to Channel
Connect Slack workspace
Add a Slack step by clicking Add Step and searching for Slack. Select 'Send Message to Channel' action. Click Connect Account to authorize Pipedream access to your Slack workspace. Choose the #office channel from the dropdown menu.
- 1Click + to add a new step
- 2Search for 'Slack' and select it
- 3Choose 'Send Message to Channel' action
- 4Click 'Connect Account' and authorize workspace access
- 5Select '#office' from the Channel dropdown
Slack Step > Configuration > Message
Configure conflict alert message
In the Slack message field, create a formatted alert using data from both the triggering event and conflicting events. Include event titles, times, organizers, and room name. Use Slack's block kit formatting for better readability in the channel.
- 1Click in the Message field
- 2Reference event title from Google Calendar step
- 3Add conflict details from code step results
- 4Format with Slack markdown for readability
- 5Include room name and time details
Workflow > Trigger > Test
Test the complete workflow
Create a test booking conflict in your Google Calendar by scheduling overlapping events in the target room. The workflow should trigger within 10-15 seconds and send a formatted alert to your Slack channel. Check the workflow execution log in Pipedream to verify each step completed successfully.
- 1Open Google Calendar and create a new event in the target room
- 2Schedule a second overlapping event 15 minutes later
- 3Watch for the Slack notification in #office channel
- 4Check Pipedream execution logs for any errors
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
Use Pipedream for this if you need custom conflict detection logic and can write basic JavaScript. The Node.js code steps let you implement sophisticated overlap detection that accounts for timezone differences, recurring events, and edge cases. Pipedream's instant webhooks mean conflicts get detected within 10-15 seconds of booking. Skip Pipedream if your team wants a pure no-code solution - Zapier's Google Calendar trigger handles simple notifications better.
This workflow costs about $0.0002 per conflict detection (1 credit for webhook + 2 credits for API calls + 1 credit for Slack message). At 50 room bookings per month with 10% conflicts, you're looking at $0.01/month total. Zapier would cost $0.30/month for the same volume on their Starter plan. Make.com charges about $0.10/month. Pipedream wins on cost until you hit enterprise scale.
Zapier handles basic Google Calendar to Slack notifications more elegantly with their Calendar Event Created trigger - no webhook setup required. Make.com has better visual debugging when your conflict detection logic gets complex. n8n gives you more control over Google API pagination when monitoring busy calendars. Power Automate integrates better if you're already using Office 365 for room booking. But Pipedream's code steps are the only way to implement true overlap detection that considers partial conflicts and recurring events.
You'll hit timezone conversion issues when team members book from different locations. Google returns dateTime in the event creator's timezone, not the calendar's default timezone. Your conflict detection code needs to normalize everything to UTC before comparing. Also watch for Google's webhook delivery delays during high API usage periods - conflicts might not alert for 2-3 minutes instead of the usual 15 seconds.
Ideas for what to build next
- βAdd conflict resolution β Extend workflow to automatically suggest alternative time slots or available rooms when conflicts occur.
- βMonitor recurring conflicts β Track which rooms have frequent double-bookings and send weekly digest reports to facilities management.
- βIntegrate with booking system β Connect to your room booking platform to automatically cancel conflicting reservations or notify booking system administrators.
Related guides
How to Share Notion Meeting Notes to Slack with Pipedream
~15 min setup
How to Share Notion Meeting Notes to Slack with Power Automate
~15 min setup
How to Share Notion Meeting Notes to Slack with n8n
~20 min setup
How to Send Notion Meeting Notes to Slack with Zapier
~8 min setup
How to Share Notion Meeting Notes to Slack with Make
~12 min setup
How to Create Notion Tasks from Slack with Pipedream
~15 min setup