Coming soon to the Salesforce AppExchange

Booking: Salesforce Booking Calendar and Resource Scheduler

Book rooms, equipment, vehicles and people on your own Salesforce objects. Open slots, live capacity and double-booking checks, all on one screen.

Or book a slot in the live demo now, no login →
  • Passed Salesforce Security Review
  • 100% native: your data stays in Salesforce
  • Any object, incl. User
  • Live capacity
  • No double booking
  • Multi-resource
  • Five views
  • Screen Flows
  • Experience Cloud
  • No Apex
Animated demo of the Salesforce booking calendar in MultiDatePick: choosing an advisor, entering the client, picking a date and an open 30 minute slot, and saving the request
Pick a resource, a day and an open slot. Booked.
TRY IT LIVE: NO INSTALL, NO LOGIN

The live demo is this Booking component

A fictional ACME Financial advisor booking on a public Salesforce site. Book a slot with live “2 of 3 available” capacity, then see the back office. Resets every hour.

Launch the live demo →

A Salesforce booking system in four clicks

Booking adds resources, time slots and capacity to the MultiDatePick calendar. Every booking saves as a record on your own object.

  • 1Pick a resource
  • 2Pick one or many dates
  • 3Click open time slots
  • 4Book: records saved
Any object is a resourceRooms, desks, vans, gear, or User for people.
Live capacitySlots fill to a limit, with 3/10 badges.
Conflict detectionChecked on save. Block, skip or allow.
Multi-resourceBook several rooms or people at once.
Business hoursEach resource shows its own open hours.
Blocked datesHolidays and closures, whole or part day.
Status colorsAny picklist, on days and on slots.
Inline editMove, retime, reassign or cancel in bulk.
Salesforce booking calendar in MultiDatePick for one advisor: each day colored by appointment status, a mixed day striped, and a 30 minute time slot grid with booked of capacity badges
Every slot shows booked of capacity. Full slots close themselves.
MultiDatePick Salesforce booking calendar showing one advisor month: each day colored by appointment status (Requested, Confirmed, Met, No-Show), diagonal stripes on the days that mix statuses, and a switcher for the Calendar, Timeline, Week, Utilization and Agenda views
Days colored by booking status. Mixed days are striped.

Salesforce resource calendar: five views of the same bookings

Booking is the component where every view earns its keep, because it knows resources and capacity. Same records, same save path. Only the layout changes.

ViewWhat you seeAnswers
CalendarA month for the chosen resource, days colored by statusWhat is on the 14th?
TimelineResources down, dates across, multi-day bookings as one bar. Day, Week or Month zoomWhich room is free, and when?
WeekSeven days by business hours, bookings sized to their lengthWho is free Thursday at 2pm?
UtilizationBooked of capacity per resource per day, as a heatmapWho is over capacity?
AgendaThe next 60 days in date order, with time and statusWhat is next?
Animated demo of the MultiDatePick Salesforce resource timeline: advisors down the side, multi-day engagements as single bars, a hover card on one engagement, then zooming from Week to Month and paging forward
Timeline: every resource on one screen.
Animated demo of the MultiDatePick Salesforce utilization heatmap: advisors down the side showing booked of capacity per day, hovering a full day, then clicking it to open that advisor's week
Utilization: click a full day to open that week.
Animated demo of the MultiDatePick Salesforce week view: choosing an advisor shows their client meetings as status-colored blocks sized to each meeting's length, with hover cards giving client, meeting type and status
Week: real meeting lengths, inside business hours.
Animated demo of rescheduling on the MultiDatePick Salesforce timeline: dragging the right edge of an engagement stretches it two days, then dragging another engagement slides it two days later, each saving on release with its new dates shown on the bar
Drag a bar to reschedule. It saves on release.

Point the resource at User and it schedules people

Timeline becomes a roster, Week a shift grid, Utilization a team capacity dashboard. The Config Library ships Team Capacity Planning and Staff Shift Roster ready to import.

Deep dives: the Salesforce timeline view and the Salesforce utilization heatmap.

Capacity and conflict detection: no double booking

Every save is checked against existing bookings. You choose what happens on a clash.

BlockDefault. Taken slots cannot be clicked, so a double booking never starts.
SkipBook 20 dates at once; the open ones save and a banner names the ones skipped.
AllowOverlap is fine, for resources that can be shared freely.
SettingWhat it does
Capacity FieldA number on the resource. Slots stay bookable until full, with live 3/10 badges
Capacity AggregationCombined sums several resources (4 rooms of 5 = 20 seats). Distinct counts one event across rooms once; pair it with Block so the event saves only when every room is free
Hide Bookings With StatusCancelled bookings vanish from the grid and free their capacity
Conflict Look-Ahead DaysHow far ahead badges and conflicts are checked. Default 360

More: how to prevent double booking in Salesforce.

Use cases: room, equipment and people booking in Salesforce

Anything shared that gets reserved by date and time. Fifteen real setups, with the settings that make each one work.

Conference room booking

Each room shows its own hours. Compare rooms side by side.

  • Business hours
  • Multiple resources

Training enrollment

Seats per session, with Enrolled, Waitlisted and Cancelled colors.

  • Capacity
  • 3/10 badges

Desk hoteling

Hybrid staff reserve desks weeks ahead and change them later.

  • Two-month view
  • Edit mode

Vehicle and fleet reservation

Compare the whole fleet. Hover shows make, model and plate.

  • Multiple resources
  • Hover fields

Therapist and counselor sessions

One-hour blocks inside each therapist's own hours.

  • 60 minute slots
  • Status colors

Classroom allocation

Room capacity per slot, or full-day bookings with no times.

  • Capacity
  • Full-day mode

Coworking spaces

Pods share seats; cancellations free capacity at once.

  • Capacity
  • Hide cancelled

Hotel and property stays

Pick nights and a room. A stay saves as one check-in to check-out record.

  • Full-day mode
  • End Date Field

Field service technicians

Dispatch across 25+ techs, never two jobs on one tech.

  • Block conflicts
  • Active filter

Service truck dispatch

Filter trucks by type and region; cap stops per slot.

  • Two-field filter
  • Capacity

Event venue spaces

Multi-day setup and tear-down as one record, color-coded by hold.

  • End Date Field
  • Status colors

Studio and gear booking

Clients see availability on a public page before requesting.

  • Read-only preload
  • Experience Cloud

Sports fields and courts

Book several courts for a tournament, inside the open season.

  • Multiple resources
  • Latest date

Medical appointments

Patients pick a doctor by specialty and a 15 minute slot.

  • Specialty filter
  • 15 minute slots

EV charging bays

Each bay is a resource; hover shows charger speed.

  • Combined or Distinct
  • Hover fields

Rooms in depth: Salesforce conference room booking.

Self-service booking on Experience Cloud

The same component on a public site page. Customers book open slots themselves, straight into your org.

What visitors get
  • Open slots and live capacity
  • An in-component confirmation toast
  • One status set for them, picker hidden
What you set
  • Config Name, plus Static Parent Record Id
  • Show In-Component Toast on
  • Selectable Statuses, e.g. Requested
  • Guest access to your booking and resource objects

Guests can read and create. That is a Salesforce guest-user rule, so cancel and edit flows belong behind a login. Booking is exactly what guests can do.

Full walkthrough: Salesforce Experience Cloud booking. Weighing Salesforce Scheduler? Compare it with MultiDatePick.

How bookings save: your objects, your fields

No new data model. Point the Setup Wizard at two objects you already have, plus an optional closures table.

Booking object
  • Booking Object API NameRoom_Booking__c
  • Booking Date FieldBooking_Date__c
  • Booking Start / End Time FieldStart_Time__c
  • Booking Resource FieldMeeting_Room__c
  • Parent Record Relationship FieldContact__c
  • End Date Field (optional)End_Date__c
  • Status Field (optional)Status__c
Resource object
  • Resource Object API NameMeeting_Room__c
  • Resource Name FieldName
  • Business Hours Start / End FieldBusiness_Hours_Start__c
  • Capacity Field (optional)Capacity__c
  • Resource Filter Field (optional)Active__c
Blocked dates Optional
  • Blocked Dates ObjectClosure__c
  • Blocked Dates Date FieldDate__c
  • Start / End Time Fieldpart-day closure
  • Blocked Dates Resource Fieldone resource only

Filter the resource picker by any field

Resource Filter Field and Value scope the list. A comma means OR, a semicolon combines fields with AND. The wizard shows the right control for the field type.

Show onlyFilter FieldFilter Value
Active resources CheckboxActive__ctrue
North or South building PicklistBuilding__cNorth,South
Rooms seating 12 or 16 NumberCapacity__c12,16
Conference rooms in North or South Two fields, ANDType__c;Building__cConference Room;North,South

Also supported: Text, Long Text and Lookup fields (paste record Ids).

Add the booking calendar to a page or a Screen Flow

Build the config once in the Setup Wizard, then drop the component anywhere. No Apex.

Lightning pages and Experience Cloud
  • Drag MultiDatePick - Resource Booking onto the page
  • Set Config Name
  • Record pages link bookings to the record automatically
  • App, Home and Experience pages: set Static Parent Record Id
Screen Flows
  • Drag the component onto a Flow screen
  • Set Config Name; every checkbox comes from the config
  • Records save on Book, no Loop or Create Records
  • Outputs: bookings saved, and dates that conflicted
Animated demo in Salesforce Flow Builder: open a screen, search MultiDatePick, drag the Resource Booking component onto the screen, set Config Name to a saved Setup Wizard config, click Done and Save
In a Screen Flow, Config Name is the only setting you need.
After BookYou get
RecordsSaved on Book. Adjacent slots join into one booking; with End Date Field, adjacent dates do too
Successful Bookings CountFlow output: how many saved
Conflict DatesFlow output: dates that could not be booked
Done buttonCollapses to a summary card on the page

Step by step: Getting Started and the Flow Cheat Sheet.

Specifications and pricing

At a glance, for evaluators and architects.

SecurityPassed Salesforce AppExchange Security Review
Data100% native: your data stays in Salesforce. No external servers, no callouts.
EditionsEnterprise, Unlimited, Performance, Developer and Salesforce Platform, plus industry clouds. Not Essentials or Professional.
Where it runsScreen Flow, Record, App and Home pages, Experience Cloud
Time slotsAny interval (15, 30 or 60 minutes are typical), or full-day
Languages9, including Spanish, French, German and Japanese
AccessibilityWCAG 2.1 AA
Settings100+, set in the Setup Wizard or App Builder
Data100% native: your data stays in Salesforce, on your own objects
MultiDatePick
$20/user/mo
  • Booking, Date and Date Time, every feature
  • 30-day free trial, no card required
  • No per-booking meter
See pricing →

Salesforce booking calendar questions

Short answers to what people search.

Does Salesforce have a booking calendar?

Not one that books your own objects. The standard Salesforce calendar shows Events and records, but it is a viewer, not a booking control. Salesforce Scheduler is a paid add-on built on its own data model. MultiDatePick Booking adds a booking calendar to any object, with time slots, capacity and conflict checks.

How do I book rooms or equipment in Salesforce?

Keep your rooms or equipment as records on any object, then point the MultiDatePick Booking component at that object in the Setup Wizard. Users pick a room, pick dates, click open time slots and book. Each booking saves as a record on your booking object, linked to the room and the parent record.

Can customers book on an Experience Cloud site?

Yes. Drop the Booking component on an Experience Cloud page, set Config Name and Static Parent Record Id, and visitors book open slots themselves. Guest users can read and create, so cancellations and edits belong behind a login.

How do I prevent double booking in Salesforce?

Set Conflict Behavior on the Booking component. Block makes taken slots unclickable, Skip saves the open dates of a multi-date booking and names the ones it skipped, and Allow permits overlap. With a Capacity Field, a slot stays open until it is full, shown as live badges like 3/10.

Can I see a calendar for every room or resource in Salesforce?

Yes. The Timeline view puts every room, vehicle or person down the side and dates across the top, with a combined capacity strip. The Utilization view shows how full each resource is per day as a heatmap, and the Week view shows open hours.

Can one booking reserve several resources at once?

Yes. Turn on Allow Booking Multiple Resources and users tick several rooms, people or vehicles. Capacity Aggregation decides how availability adds up: Combined for independent inventory, Distinct for one event that needs every resource free.

Is there a Lightning Web Component for booking in Salesforce?

Yes. MultiDatePick Booking is a Lightning Web Component for Screen Flows, Record Pages, App Pages, Home Pages and Experience Cloud pages. It is configured in a Setup Wizard, with no Apex.

How much does the MultiDatePick booking calendar cost?

$20 per user per month for every component and feature, with a 30-day free trial and no card required.

Every Booking setting

The full reference, by the label admins see in App Builder, Flow Builder and the Setup Wizard.

Open the full Booking settings reference

With Config Name set, every setting comes from the Setup Wizard config. The Date and Date Time pages document the shared calendar settings too: Date reference.

Configuration and views

SettingAPI nameDefaultWhat it does
Config NameconfigNameLoads every setting from a saved Setup Wizard config
ViewviewcalendarOpening layout: calendar, timeline, week, utilization or agenda. Utilization and agenda are read only
Available ViewsavailableViewsall fiveWhich views the switcher offers. The default view is always included
Timeline Window (Days)timelineWindowDays14Days the timeline shows at once. 0 for the full month
Timeline ZoomtimelineZoomweekStarting zoom: day, week or month. Users can switch
Timeline Group By FieldtimelineGroupByFieldGroups timeline rows under headers, e.g. by building, each with a capacity strip
Max View ResourcesmaxViewResourcesMost resource rows Timeline and Utilization draw, busiest first. Limits rows drawn, not rows counted
Resource RowsresourceViewFilterallall, or booked to draw only resources with a booking in the window
Agenda FieldsagendaFieldsExtra fields on each agenda row. Blank reuses Hover Popover Fields

Display

SettingAPI nameDefaultWhat it does
Button LabellabelBook ResourceText on the button that opens the calendar
Calendar TitlemodalTitleBook ResourceTitle at the top of the calendar
Show Inline (No Button)showInlinefalseCalendar always visible on the page, no popup
Show Done Button in Inline ModeshowDoneButtonInlinetrueDone collapses the inline calendar to a summary card; click to reopen
Two-Month ViewtwoMonthViewfalseTwo months side by side
Calendar SizecalendarSizemediumsmall, medium or large
Day Header FormatdayHeaderFormat33 = SUN MON, 2 = SU MO, 1 = S M
Week Starts on MondayweekStartsOnMondayfalseWeek begins Monday instead of Sunday
Show Recurring Pattern ButtonshowRecurringPatterntrueWeekly and monthly patterns for picking many dates
Show Selection SummaryshowSelectedSummarytrueCount and ranges of the selected dates
RequiredrequiredfalseA Flow cannot advance until something is picked

Resource

SettingAPI nameDefaultWhat it does
Resource Object API NameresourceObjectApiNameThe object that holds what gets booked. Any object, including User
Resource Name FieldresourceNameFieldNameName shown in the resource picker
Business Hours Start FieldbusinessHoursStartFieldTime field: when each resource opens
Business Hours End FieldbusinessHoursEndFieldTime field: when each resource closes
Capacity FieldcapacityFieldBookings allowed per slot. Turns on capacity mode and Utilization percentages
Show Availability CountshowAvailabilityCounttrueLive 3/10 badges on slots, with a Capacity Field
Allow Booking Multiple ResourcesallowMultipleResourcesfalseTick several resources and book them together
Capacity Aggregation (multi-resource)capacityAggregationCombinedCombined sums bookings and capacities. Distinct counts one event across resources once
Allow Save Without Picking a ResourceallowNoResourcefalseSaves with a blank resource, e.g. a closure that applies to everyone
Resource Filter Field (optional)resourceFilterFieldField(s) that limit the picker. Use ; to combine fields
Resource Filter Value (optional)resourceFilterValueValue(s) to match. , means OR, ; means AND across fields

Booking record

SettingAPI nameDefaultWhat it does
Booking Object API NameresourceBookingObjectWhere booking records are created
Booking Date FieldbookingDateFieldDate field on the booking
Booking Start Time FieldbookingStartTimeFieldTime field for the start
Booking End Time FieldbookingEndTimeFieldTime field for the end
Booking Resource FieldbookingResourceFieldLookup to the booked resource
Parent Record Relationship FieldrelationshipFieldApiNameLookup from each booking to the parent record
End Date FieldendDateFieldAdjacent dates save as one record with a start and end date (Mon to Fri rental = 1 record)
Book Button LabelresourceBookButtonLabelBooke.g. Reserve or Schedule
Record Name FieldrecordNameFieldText field for a readable record name
Default Record NamedefaultRecordNamee.g. Room Booking
Append Date/Time to Record NameappendDateTimeToNametrueAdds the date and time to the name

Time slots

SettingAPI nameDefaultWhat it does
Time Slot Interval (Minutes)timeInterval30Slot length, any number of minutes
Disable Time Slot Grid (Full-Day Mode)disableTimeSlotGridfalseDate-only bookings, e.g. hotel nights
Allow Different Times Per DateallowDifferentTimesfalseEach date gets its own slot grid
Group Time Slots by PeriodgroupTimeSlotsByPeriodfalseMorning, Afternoon and Evening groups
Max Time SlotsmaxTimeSlotSelection0Most slots one user can pick in total. 0 = unlimited
Allow Whole-Day (No Times)allowWholeDayNoTimesfalseA date picked with no slots saves as a whole-day record
Time Grid OnlytimeGridOnlyfalseHides the calendar; shows only the slot grid for one implied date
Time Grid DatetimeGridDateExplicit date (YYYY-MM-DD) for Time Grid Only
Time Grid Date FieldtimeGridDateFieldDate field on the host record. Priority: Time Grid Date, then this field, then today

Conflicts and capacity

SettingAPI nameDefaultWhat it does
Conflict BehaviorconflictBehaviorblockblock: taken slots cannot be picked. skip: multi-date bookings save the open dates and list the skipped ones. allow: no check
Conflict Look-Ahead DaysconflictLookAheadDays360Window for both availability badges and the conflict check on save
Hide Bookings With StatushideBookingsWithStatuse.g. Cancelled: hidden from the grid and left out of capacity

Status and hover

SettingAPI nameDefaultWhat it does
Status FieldstatusFieldPicklist that drives the colors
Status ColorsstatusColorse.g. Confirmed:green,Pending:orange,Cancelled:red
Status Color DisplaystatusColorDisplaybothgrid (slots), calendar (days) or both
Status Field LabelstatusFieldLabelLabel for the status picker
Selectable Statuses (Status Picker)selectableStatusesWhich statuses users may set. One value is applied automatically and the picker hides
Second Picklist FieldsecondStatusFieldA second picklist chosen on save, e.g. a reason. Not color-coded
Second Picklist LabelsecondStatusFieldLabelLabel for the second picklist
Selectable Second-Picklist ValuesselectableSecondStatusesAllowed values for the second picklist
Hover Popover FieldshoverFieldsFields shown when hovering a booking
Show In-Component ToastshowSuccessToastfalseConfirmation drawn inside the component. Needed on Experience Cloud
Success Toast Message (optional)successToastMessageCustom success text

Edit mode

SettingAPI nameDefaultWhat it does
Enable Edit ModeenableEditModetrueBulk change status, date, time or resource in one Apply, with the same conflict check. Deletes need two clicks
Edit Button LabeleditButtonLabelEdit BookingsLabel for the edit button
Edit Record DisplayeditRecordDisplayname, status, time, resourceWhich details show per record in the edit list, in order. Keywords: name, status, time, date, resource

Dates and limits

SettingAPI nameDefaultWhat it does
Max Dates Per BookingmaxSelections0Most dates per booking. 0 = unlimited
Allow Past DatesallowPastDatesfalseAllow booking in the past
Earliest Bookable DateminDateNothing before this date
Latest Bookable DatemaxDateNothing after this date
Pre-Selected DatesdefaultDatesDates picked when the calendar opens
Blocked DatesdisabledDatesA fixed list of dates that cannot be picked
Only These Dates Are SelectableavailableDatesEverything else is closed
Auto-Jump to First Available DateautoJumpToFirstAvailablefalseOpens on the first open month

Blocked dates object

SettingAPI nameDefaultWhat it does
Blocked Dates ObjectblockedDatesSourceObjectObject of holidays and closures. Turns blocking on
Blocked Dates Date FieldblockedDatesDateFieldDate field on that object
Blocked Dates Filter FieldblockedDatesFilterFieldField that picks which closures apply
Blocked Dates Filter ValueblockedDatesFilterValueValue that field must equal
Blocked Dates Start Time FieldblockedDatesStartTimeFieldStart of a part-day closure
Blocked Dates End Time FieldblockedDatesEndTimeFieldEnd of a part-day closure
Blocked Dates Resource FieldblockedDatesResourceFieldCloses one resource only. Blank closes all

Saving to the parent record

SettingAPI nameDefaultWhat it does
Static Parent Record IdstaticRecordIdParent record for App, Home and Experience pages
Parent Record IdrecordIdSet automatically on record pages; pass it in a Flow
Parent Record Id FieldparentRecordIdFieldAlternative parent linking field
Related Booking Object API NamerelatedObjectApiNameUsually the same as Booking Object API Name
Date Field API NamedateFieldApiNameUsually the same as Booking Date Field
Load Existing DatespreloadExistingDatestrueShows existing bookings on the grid
Existing Dates ModepreloadModeeditableeditable, or readonly for public availability pages
Save Button LabelsaveButtonLabelSaveText on the save button

Sub-blocks (Consolidate Time Span)

All picked slots become one parent booking from first to last slot; gaps save as child records. For trainer days, travel time or shift breaks, not for rooms that should free up between meetings.

SettingAPI nameDefaultWhat it does
Consolidate Time SpanconsolidateTimeSpanfalseTurns sub-blocks on
Sub-Block Object API NamesubBlockObjectApiNameChild object for the gaps
Sub-Block Parent Lookup FieldsubBlockParentLookupFieldLookup back to the parent booking
Sub-Block Date FieldsubBlockDateFieldDate field on the child
Sub-Block Start Time FieldsubBlockStartTimeFieldStart time on the child
Sub-Block End Time FieldsubBlockEndTimeFieldEnd time on the child
Sub-Block Name FieldsubBlockNameFieldFilled with the Sub-Block Button Label
Sub-Block Button LabelsubBlockModeButtonLabele.g. Mark as Break
Show Sub-Block Toggle ButtonshowSubBlockButtonfalseShows that toggle on the grid

Flow outputs

SettingAPI nameTypeWhat it returns
Successful Bookings Count (Output)bookingSuccessCountNumberHow many bookings saved
Conflict Dates (Output)bookingConflictDatesText collectionDates that could not be booked

Book rooms, equipment and people in Salesforce

Coming soon to the Salesforce AppExchange. Book a slot in the live demo now, or tell us where to send the launch note.

$20/user/month, 30-day free trial, no card required. 100% Salesforce native.