Coming soon to the Salesforce AppExchange

Date Time: Salesforce Date and Time Slot Picker

Pick many dates, drag the hours, and save every time block to your own Salesforce records. A calendar time slot picker for appointments, shifts and interviews, set up in a wizard.

Or try the live demo now, no login →
  • Passed Salesforce Security Review
  • 100% native: your data stays in Salesforce
  • Time slot grid
  • Per-date times
  • No double-booking
  • Status colors
  • Screen Flows
  • Experience Cloud
  • No Apex
Animated demo of the MultiDatePick DateTime component in Salesforce: naming a New Hire Onboarding schedule, dragging across Monday to Thursday, dragging 09:00 to 12:00 in the shared time grid, and saving one shift per day
Four days, one drag of 09:00 to 12:00, four shifts saved.

Salesforce has a date field and a time field. Not a time slot picker.

Date Time turns "these four days, 9 to 12" into four records in one save.

What you needStandard SalesforceWith Date Time
Many dates, one schedule✗One record at a time✓Click, drag or add a recurring pattern
Pick a time visually✗Type into a time field✓Drag across a time slot grid
Different hours per day✗Edit each record✓A grid for every date
No double-booking✗Validation rules or Apex✓Taken slots greyed out
See status at a glance✗Open each record✓Colors on dates and slots
Set it up✗A developer and a custom LWC✓Point-and-click Setup Wizard

Why it is harder than it looks: building a calendar time slot picker in Salesforce.

The calendar time slot picker

Dates on top, times underneath. Click or drag slots; each run of adjacent slots saves as one booking.

Salesforce calendar time slot picker in MultiDatePick: a two-month calendar with Confirmed, Tentative and Pending status chips, and a 30 minute time grid from 08:00 to 18:00 with 10:00 to 11:30 selected and a confirmed 12:00 slot shown in green
30-minute slots, 08:00 to 18:00. The green slot is already booked.
  • Pick dates
  • Drag times
  • Set status
  • Save

Grid or dropdown

Time slot gridClickable slots. Drag to select a block.Time Display Mode: grid
Dropdown pickersA clean start and end time.Time Display Mode: dropdown

Shared or per-date times

SharedOne grid sets the same hours on every date.Default
Per dateEvery date gets its own grid, grouped by week.Allow Different Times Per Date

Size the day

  • Time Interval: any interval (15, 30 or 60 minutes are typical)
  • Earliest / Latest Time: 08:00 to 18:00 by default
  • Enable End Time: capture a start and an end

Built for real appointment and shift scheduling

Every one of these is a setting, not a customization.

Conflict detectionTaken slots are greyed out. Skip saves the open ones; allow turns it off.Conflict Behavior: block, skip, allow
Morning, Afternoon, EveningLong days split into three scannable groups.Group Time Slots by Period
Status colorsConfirmed, Tentative, Cancelled, your picklist, your colors.Status Field + Status Colors
Breaks saved for youAdjacent slots merge into one span; the gaps save as child records.Consolidate Time Span + sub-blocks
Time Grid OnlyOn a record that already is a day, show just the grid.Time Grid Only
Whole-day recordsA date with no slots saves as the entire day.Allow Whole-Day (No Times)
Recurring patternsEvery Tuesday and Thursday for eight weeks, in two clicks.Show Recurring Pattern Button
Edit in placeChange a saved date, time or status, or delete it, without leaving the calendar.Enable Edit Mode
LimitsCap the number of dates or slots one person can take.Max Dates Allowed, Max Time Slots
  • Hover details
  • Second picklist
  • Two-month view
  • Blocked dates
  • Auto-named records
  • In-component toast
  • 9 languages

Week view: see every time, not just every date

Bookings drawn as tall as they last. Same records and same save; only the layout changes.

MultiDatePick week view on Salesforce for one advisor: named client meetings of 30 and 60 minutes drawn as status-colored blocks, closed hours hatched and today marked
Meetings sized to their real length, closed hours hatched.
ViewBest for
WeekInterviews, appointments, office hours. Drag across days and down hours at once.
CalendarPick the day first, the time second. The default.
AgendaThe next 60 days as a list with start and end times.
TimelineDates across, records down. Multi-day blocks as bars.
UtilizationCapacity heatmap. Pair with Booking.

Two settings. View picks the opening layout; Available Views sets the switcher, e.g. calendar,week,agenda. Earliest and Latest Time bound the week grid too.

Use cases for a Salesforce time slot scheduler

Fifteen ways teams use Date Time, and the settings that make each one work.

Interview scheduling

Different slots on different days, colored by outcome.

  • 30-min slots
  • Per-date times
  • Status colors

Appointment booking

Business hours only, no overlaps.

  • Block conflicts
  • 08:00 to 17:00
  • Start and end

Shift scheduling

One shift record per day, from one drag.

  • 60-min slots
  • Periods
  • End time

Maintenance windows

02:00, 03:00, 04:00 becomes one 02:00 to 05:00 window.

  • Consolidate span
  • Block conflicts

Delivery windows

A clean time picker for each delivery date.

  • Dropdown
  • Per-date times

Clinic appointments

Fine-grained slots with booked ones colored.

  • 15-min slots
  • Load existing
  • Status on grid

Callback scheduling

Reps book customer callbacks without collisions.

  • 30-min slots
  • Block conflicts
  • Auto-named

Customer onboarding

Eight weekly sessions set in two clicks.

  • Recurring pattern
  • Auto-named

Training classes

Morning and afternoon blocks, lunch saved as a break.

  • Per-date times
  • Sub-blocks

Demo requests

Prospects pick a slot on your site; taken ones are greyed.

  • Experience Cloud
  • Read-only existing

QBR scheduling

90-minute reviews across a quarter end.

  • Two-month view
  • Status colors

Property showings

Open, booked and held tour slots by color.

  • Time grid
  • Status on grid

Dispatch windows

Field jobs slotted into time windows per day.

  • Hourly slots
  • End time

Webinar registration

One registration record per session picked.

  • Dropdown
  • Allow overlaps

Conference sessions

Each day's keynote and breakouts as one record with detail.

  • Sub-blocks
  • Periods

Deeper dives: Salesforce interview scheduling and staffing and shift scheduling.

How records save: your object, your fields

A child object with a Date, a Time or two, and a lookup to the parent. The wizard lists them as dropdowns.

Field on your objectTypeWizard / App Builder setting
Appointment DateDateDate Field API Name
Start TimeTimeStart Time Field API Name
End TimeTimeEnd Time Field API Name
Contact (parent)LookupRelationship Field API Name
Status optionalPicklistStatus Field
End Date optionalDateEnd Date Field API Name
Sub-blocks optionalGaps between selected slots save to a child object. 08:00 to 17:00 with a 12:00 lunch gap writes the break for you.
Blocked dates optionalHolidays or closures from any object, so nobody picks them.

Additive save. Save inserts new records and never deletes existing ones. Load Existing Dates shows what is already booked, editable or read only.

Add it to a Lightning page

In Lightning App Builder, drag MultiDatePick - Dates & Times onto the page and set Config Name.

PageWhat you set
Record pageConfig Name. The page record is the parent automatically.
App, Home and Experience pagesConfig Name plus Static Parent Record Id: the record the times belong to.
Experience CloudAlso turn on Show In-Component Toast so visitors see the save.

Tidy after save. With Show Inline (No Button) and Show Done Button in Inline Mode on, Done collapses the picker to a summary card. Click it to reopen.

Walkthrough: Getting Started and App, Home and Experience pages.

Add a time slot picker to a Salesforce Screen Flow

Drag the component onto a screen and set Config Name to your Setup Wizard config. Every checkbox comes from the config.

  • Screen
  • Dates & Times
  • Config Name
  • Dates With Times JSON
  • Parse Date Entries from JSON
  • Loop
  • Create Records
OutputFlow variableWhat it holds
Dates With Times JSON selectedDatesWithTimesJsonTextEach date with its start and end time. Parse it into loopable entries with fromDate, toDate, startTime, endTime.
Selected Dates selectedDatesText collectionThe dates only, as ISO strings.
Date Ranges JSON selectedDateRangesJsonTextConsecutive dates grouped into ranges, with Output Date Ranges as JSON on.
Sub-Blocks JSON subBlocksJsonTextThe gaps between slots. Same parse action.

Or skip the loop. When the config names a child object, the component saves its own records with the times filled in. All clicks, no Apex. Every pattern is on the Flow Cheat Sheet.

Specifications

The facts, in one table.

SecurityPassed Salesforce AppExchange Security Review
Data100% native: your data stays in Salesforce. No external servers, no callouts.
Salesforce editionsEnterprise, Unlimited, Performance, Developer and Salesforce Platform, plus industry clouds. Not Essentials or Professional.
Where it runsScreen Flow, Record Page, App Page, Home Page, Experience Cloud site
Time slotsAny interval (15, 30 or 60 minutes are typical); grid or dropdown; optional Morning, Afternoon, Evening groups
Time modesShared across dates, or per date
ConflictsBlock, skip or allow; 360-day look-ahead by default
ViewsCalendar, Week, Agenda, Timeline, Utilization
Languages9: English, Spanish, French, German, Italian, Japanese, Hindi, Brazilian Portuguese, Chinese Simplified
API version63.0
Properties90+, all set by clicks. Full reference
SetupNo-code Setup Wizard, Lightning App Builder or Flow Builder

One plan, every feature

The time slot picker is not an upgrade. It comes with every seat.

$20/user/mo
  • 30-day free trial
  • No card required
  • Date, Date Time and Booking
  • All future upgrades
See pricing

Salesforce date and time picker questions

Short answers to what admins search.

How do I add a time slot picker to a Salesforce Screen Flow?

In Flow Builder, open a Screen, search MultiDatePick, drag the Dates & Times component on and set Config Name to the config you built in the Setup Wizard. Every checkbox comes from the config. The component saves its own records when the config names a child object, or you wire Dates With Times JSON (Output) to a text variable, run the Parse Date Entries from JSON action, loop the entries and create one record each.

Can each date have different times?

Yes. Turn on Allow Different Times Per Date and every selected date gets its own time grid or dropdown, grouped by week. Leave it off and one shared grid applies the same hours to every date you picked.

Does it stop double-booking?

Yes. Conflict Behavior defaults to block: slots already taken by existing records on that calendar are greyed out and cannot be picked. Skip saves the open slots and reports the taken ones, which suits batch picking across many dates. Allow turns checking off. Conflict Look-Ahead Days sets how far ahead it checks, 360 days by default.

Can I use dropdowns instead of a time grid?

Yes. Set Time Display Mode to dropdown for start and end time pickers, or keep grid for clickable slots you can drag across. Time Interval sets the slot size in minutes, any interval you like (15, 30 or 60 are typical), and Earliest Time and Latest Time bound the day, 08:00 to 18:00 by default.

Does the Salesforce date and time picker work on Experience Cloud, App and Home pages?

Yes. On App, Home and Experience Cloud pages set Config Name plus Static Parent Record Id, the record the times belong to. On Experience Cloud, turn on Show In-Component Toast so visitors see the save confirmation.

What does the MultiDatePick Date Time component cost?

MultiDatePick is one plan at $20 per user per month with a 30-day free trial and no card required. Date Time, Date and Booking are all included, with every feature.

Every setting, for admins who want the detail

Labels as they appear in the Setup Wizard, App Builder and Flow Builder, with the API name underneath.

All properties reference

Configuration

SettingDefaultWhat it does
Config NameconfigName-Loads every setting from a saved Setup Wizard config.
ViewviewcalendarOpening layout: calendar, week, agenda, timeline or utilization.
Available ViewsavailableViewsallComma-separated views the switcher offers.
Agenda FieldsagendaFields-Extra fields on each Agenda row. Blank reuses Hover Popover Fields.

Display

SettingDefaultWhat it does
Button LabellabelSelect Dates & TimesText on the button that opens the picker.
Calendar TitlemodalTitleSelect Dates & TimesTitle above the calendar.
Show Inline (No Button)showInlinefalseCalendar always visible, no button.
Two-Month ViewtwoMonthViewfalseTwo months side by side.
Calendar SizecalendarSizemediumsmall, medium or large.
Day Header FormatdayHeaderFormat33 = SUN, 2 = SU, 1 = S.
Week Starts on MondayweekStartsOnMondayfalseWeeks begin Monday instead of Sunday.
Show Recurring Pattern ButtonshowRecurringPatterntrueDays of the week, week intervals and monthly occurrences.
Show Selection SummaryshowSelectedSummarytrueHow many dates are selected, and their ranges.
Show Done Button in Inline ModeshowDoneButtonInlinetrueDone collapses the picker to a summary card.
RequiredrequiredfalseFlow cannot advance without a date.

Time selection

SettingDefaultWhat it does
Time Display ModetimeDisplayModegridgrid: clickable slots you can drag. dropdown: start and end time pickers.
Time Interval (Minutes)timeInterval30Slot size in minutes. Any interval; 15, 30 or 60 are typical.
Earliest TimeminTime08:00First slot, 24-hour HH:mm.
Latest TimemaxTime18:00Last slot, 24-hour HH:mm.
Allow Different Times Per DateallowDifferentTimesfalseEach date gets its own grid or dropdown instead of one shared set of times.
Enable End TimeenableEndTimetrueCaptures an end time as well as a start.
Group Time Slots by PeriodgroupTimeSlotsByPeriodfalseMorning, Afternoon and Evening sections.
Max Time SlotsmaxTimeSlotSelection0Total slots one user can pick across all dates. 0 = unlimited.
Allow Whole-Day (No Times)allowWholeDayNoTimesfalseA date with no slots saves as a whole-day record.
Start Time Field API NamestartTimeField-Time field for the start.
End Time Field API NameendTimeField-Time field for the end.

Time Grid Only

SettingDefaultWhat it does
Time Grid OnlytimeGridOnlyfalseHides the calendar and shows only the grid for one implied date. Slots save to the host record.
Time Grid DatetimeGridDate-Explicit date, YYYY-MM-DD.
Time Grid Date FieldtimeGridDateField-Date field on the host record to read the date from.

Implied date order: Time Grid Date, then Time Grid Date Field, then today.

Conflicts and time spans

SettingDefaultWhat it does
Conflict BehaviorconflictBehaviorblockblock: taken slots greyed out. skip: save the open ones, report the rest. allow: no checking.
Conflict Look-Ahead DaysconflictLookAheadDays360How far ahead to check existing records.
Consolidate Time SpanconsolidateTimeSpanfalseMerges selected slots into one start and end; gaps save as sub-blocks.
Show Sub-Block Toggle ButtonshowSubBlockButtonfalseLets users mark slots as sub-blocks by hand.

Status and display

SettingDefaultWhat it does
Status FieldstatusField-Picklist that drives the colors.
Status ColorsstatusColors-e.g. Confirmed:green,Pending:orange,Cancelled:red.
Status Color DisplaystatusColorDisplaybothgrid, calendar or both.
Hide Records With StatushideBookingsWithStatus-Records with this status disappear from the grid.
Status Field LabelstatusFieldLabel-Custom label for the status picker.
Second Picklist FieldsecondStatusField-A second picklist chosen on save, e.g. a reason. Not color coded.
Second Picklist LabelsecondStatusFieldLabel-Label for the second picklist.
Selectable Second-Picklist ValuesselectableSecondStatuses-Allowed values. One value is applied automatically and the picker hides.
Hover Popover FieldshoverFields-Fields shown on hover.
Show In-Component ToastshowSuccessToastfalseDraws the save toast inside the component. Needed on Experience Cloud.
Success Toast Message (optional)successToastMessage-Custom success text.

Edit mode

SettingDefaultWhat it does
Enable Edit ModeenableEditModetrueManage saved records inline.
Edit Button LabeleditButtonLabel-Custom label for the Edit toggle.
Edit Record DisplayeditRecordDisplayname, status, timeWhich details each row shows, in order: name, status, time, date.

Saving and outputs

SettingDefaultWhat it does
Static Parent Record IdstaticRecordId-The parent record on App, Home and Experience pages.
Load Existing DatespreloadExistingDatestrueShows records already saved.
Existing Dates ModepreloadModeeditableeditable or readonly.
Append Date/Time to Record NameappendDateTimeToNametrueAuto-names each record with its date and time.
Selected Dates (Output)selectedDates-ISO dates, no times.
Dates With Times JSON (Output)selectedDatesWithTimesJson-Each date with its times. Feed to Parse Date Entries from JSON.
Date Ranges JSON (Output)selectedDateRangesJson-Consecutive dates as ranges, with Output Date Ranges as JSON on.
Sub-Blocks JSON (Output)subBlocksJson-The gap records, same parse action.

Also available, shared with Date: Max Dates Allowed, Allow Past Dates, Earliest and Latest Selectable Date, Pre-Selected Dates, Blocked Dates, Only These Dates Are Selectable, Auto-Jump to First Available Date, Record Name Field, Default Record Name, Save Button Label, Child Object, Date, End Date and Relationship Field API Names, Parent Record Id Field, the Blocked Dates object settings and the Sub-Block object settings.

Dates and times, picked together, saved for you

Coming soon to the Salesforce AppExchange. Try the live demo now, or tell us where to send the launch note.

100% Salesforce native. Your data and your configuration never leave your org.