Conference Room Booking on a Salesforce Calendar
Pick the room, pick the days, pick the time slots, and see what is already taken before you commit. A room booking calendar that lives in Salesforce and writes to your own objects, with no code.
Most orgs already have the room data in Salesforce. What they do not have is a way for someone to look at a room, see the next two weeks, and book three afternoons without creating three records by hand or opening a separate booking tool.
What a room booking calendar needs
A room picker
Rooms come from any object you already use. Filter the list by building, floor, capacity, or anything else on the record.
Hours per room
Each room carries its own business hours, so the 24-hour lab and the 9-to-5 boardroom behave differently on the same grid.
Existing bookings drawn in
Slots that are already taken show as taken, color-coded by status, before anyone clicks.
Several rooms at once
Multi-resource mode books the same slot across several rooms in one action, for events that need more than one space.
What changes
| Room booking task | Standard Salesforce today | With MultiDatePick |
|---|---|---|
| Book one room for four afternoons | Four records, created one at a time | Four clicks and one save |
| See what is already booked | Run a report, read it, go back to the form | Existing bookings drawn straight onto the grid |
| Room only open 9 to 5 | Nothing stops a 7pm booking | Business hours read from the room record |
| Training needs three rooms, same slot | Three bookings, three chances to get it wrong | Multi-resource checkboxes, one action |
| Room closed for maintenance | A note somewhere, ignored | Blocked dates read from your closure records |
Desk hoteling is the same problem, bigger
Swap rooms for desks and the model is identical, except a floor has 60 of them and several people can book the same zone. Capacity mode handles that: set a capacity field on the resource, and each slot shows a live X/Y badge and closes when it fills. The config library ships importable starting points for both patterns, including Meeting Room Booking and Desk Hoteling.
The configuration, in full
Two variants, because a meeting room and a desk zone are the same component with one property changed.
| relatedObjectApiName | Room_Booking__c |
| relationshipFieldApiName | Requester__c or the parent record the page sits on |
| dateFieldApiName | Booking_Date__c |
| bookingStartTimeField bookingEndTimeField | Start_Time__c / End_Time__c |
| resourceObjectApiName | Room__c |
| bookingResourceField | Room__c on the booking |
| businessHoursStartField businessHoursEndField | on the room, so the 24-hour lab and the 9-to-5 boardroom behave differently on the same grid |
| resourceFilterField resourceFilterValue | narrow the picker by building, floor or capacity. Comma separates OR, semicolon separates AND |
| blockedDatesSourceObject | point at your closure records so maintenance days grey out automatically |
| conflictBehavior | block — a room genuinely cannot take two bookings |
| capacityField | Desks_Available__c on the zone. This one property is the whole difference: the slot shows a live X/Y badge and stays open until it fills |
| capacityAggregation | Combined to sum capacity across selected zones, Distinct to count one event shared across zones once |
| showAvailabilityCount | true — the "3 of 8 free" badge is the point |
| Multi-resource | let people book several zones at once when an event needs more than one space |
Both patterns ship as importable configurations in the config library, so you can start from a working one rather than a blank form.
Rooms are a Timeline and Utilization problem
With more than three or four rooms, the month grid stops being useful: you end up opening each day to find out which room was free. Switch to Timeline and every room is a row, two weeks of dates are the columns, and a multi-day hold draws as one continuous bar. A room with several bookings on the same day collapses to a single row with a count and expands on click, so a busy room does not push the rest off the screen.
Utilization is the one facilities managers ask for without knowing its name: percentage of capacity used per room per day, green through red. It needs a capacityField on the room record to show percentages; without one it falls back to raw booking counts.
maxViewResources caps how many room rows are drawn, busiest first, so eighty rooms do not become a wall (nothing is excluded from the counts, only from the paint). timelineWindowDays controls how many days are on screen; it defaults to 14 because a whole month of columns leaves each booking about twenty pixels wide and clips every room name.
Room booking, without another tool
Coming to the Salesforce AppExchange in 2026. Tell us where to send the launch note.
100% Salesforce native. Your data and your configuration never leave your org.