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

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-time

Use case type

notification

Real-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.

/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 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.

Admin access to Google Workspace with Calendar API enabled
Slack workspace admin permissions to install apps and create webhooks
Dedicated room calendars set up in Google Calendar (not personal calendars)
Google Cloud project with Calendar API quota enabled

Field Mapping

Map these fields between your apps.

FieldAPI 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

1

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.

  1. 1Click 'New' in the top navigation
  2. 2Select 'HTTP / Webhook Requests' from the trigger list
  3. 3Copy the webhook URL that appears
  4. 4Click 'Save and continue'
βœ“ What you should see: You should see a unique webhook URL starting with https://webhook.pipedream.com/ and a payload preview area.
⚠
Common mistake β€” The webhook URL changes if you delete and recreate the trigger. Save it immediately.
2

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.

  1. 1Go to developers.google.com/calendar/api/v3/reference/events/watch
  2. 2Click 'Try this API' on the right side
  3. 3Enter your room calendar ID in calendarId field
  4. 4Set address to your Pipedream webhook URL
  5. 5Set type to 'web_hook'
βœ“ What you should see: You should get a JSON response with resourceId and expiration timestamp confirming the webhook is active.
⚠
Common mistake β€” Google Calendar webhooks expire after 1 week by default. Set up renewal logic for production use.
3

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.

  1. 1Click the + button to add a new step
  2. 2Search for 'Google Calendar' in the app search
  3. 3Select 'Get Event' from the actions list
  4. 4Click 'Connect Account' and authorize Google Calendar access
  5. 5Set Calendar ID to your room calendar
βœ“ What you should see: You should see Google Calendar connected with a green checkmark and calendar dropdown populated.
⚠
Common mistake β€” Use the internal calendar ID (long string with @group.calendar.google.com), not the display name.
4

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.

  1. 1Click in the Event ID field
  2. 2Select 'trigger' from the left sidebar
  3. 3Choose 'headers' then 'x-goog-resource-id'
  4. 4Test the step with sample data
βœ“ What you should see: The test should return full event details including title, start time, end time, and attendees.
5

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.

  1. 1Click + to add another step
  2. 2Select 'Code (Node.js)' from the step types
  3. 3Name the step 'Check for conflicts'
  4. 4Paste the conflict detection code in the editor
βœ“ What you should see: The code editor should show syntax highlighting and autocomplete for the $ helper object.
⚠
Common mistake β€” Code steps timeout after 30 seconds. Keep API calls efficient for rooms with many events.

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
      }))
    };
  }
});
6

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.

  1. 1Click + to add a Filter step
  2. 2Set condition to 'Continue if'
  3. 3Reference the conflicts array from previous step
  4. 4Set operator to 'Array length greater than'
  5. 5Enter 0 as the value
βœ“ What you should see: The filter shows a green 'Continue' path and red 'End' path based on your condition.
⚠
Common mistake β€” Filter conditions are case-sensitive when comparing strings from calendar event data.
Google Calendar
GO
trigger
filter
Condition
matches criteria?
yes β€” passes through
no β€” skipped
Slack
SL
notified
7

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.

  1. 1Click + to add a new step
  2. 2Search for 'Slack' and select it
  3. 3Choose 'Send Message to Channel' action
  4. 4Click 'Connect Account' and authorize workspace access
  5. 5Select '#office' from the Channel dropdown
βœ“ What you should see: You should see your Slack workspace connected and channel list populated in the dropdown.
⚠
Common mistake β€” Pipedream needs 'Send messages' permission. Admin approval may be required for some workspaces.
Pipedream settings
Connection
Choose a connection…Add
click Add
Google Calendar
Log in to authorize
Authorize Pipedream
popup window
βœ“
Connected
green checkmark
8

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.

  1. 1Click in the Message field
  2. 2Reference event title from Google Calendar step
  3. 3Add conflict details from code step results
  4. 4Format with Slack markdown for readability
  5. 5Include room name and time details
βœ“ What you should see: The message preview should show formatted text with event details and conflict information clearly displayed.
⚠
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.
9

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.

  1. 1Open Google Calendar and create a new event in the target room
  2. 2Schedule a second overlapping event 15 minutes later
  3. 3Watch for the Slack notification in #office channel
  4. 4Check Pipedream execution logs for any errors
βœ“ What you should see: You should see a detailed conflict alert in Slack with both event names, times, and organizers listed.
⚠
Common mistake β€” Test conflicts may take 30-60 seconds to propagate through Google's webhook system.
Pipedream
β–Ά Deploy & test
executed
βœ“
Google Calendar
βœ“
Slack
Slack
πŸ”” notification
received

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 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.

Cost

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.

Tradeoffs

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

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