Coming Soon to AppExchange - 2026

Getting Started

Choose the right component for your use case, configure it with the Setup Wizard, and deploy to any Salesforce surface - all in minutes, no code required.

Which Component Do I Need? Jump to Setup Wizard
Three MultiDatePick Salesforce calendar components side by side - Date picker, Date+Time scheduler, and Resource Booking

Which Component Do I Need?

MultiDatePick has three components, each built for a different level of scheduling complexity. Start with the simplest one that fits your use case.

Everything is included - one product, one price.

All three components and every feature below ship in the single MultiDatePick package. No tiers, no add-ons, no paid upgrades. Install once and use whichever component fits each job.

Quick Decision Guide

Just dates?

Use Date. Multi-date selection with ranges, recurring patterns, status colors, and blocked dates.

Dates plus times?

Use Date Time. Adds a time grid, conflict detection, and period grouping. No resources.

Booking specific resources?

Use Booking. Schedule against rooms, equipment, or people with availability checking and capacity limits.

Feature Comparison

All three components come in the one package. A dash means that component isn't built for that job - not that it costs extra or sits behind an upgrade.

Feature Date Date Time Booking
Multi-date selection
Drag-to-select ranges
Recurring patterns
Date range consolidation (endDateField)
Status colors
Blocked dates
Edit mode (inline editing)
Setup Wizard & config import
Named configurations (configNameConfig__mdt)
Hover popover with custom fields (hoverFields)
Status filter pills (runtime)
Hide bookings by status (admin)
Two-month calendar view
App Page / Home Page / Experience Site
Time slot grid-
Time period grouping (AM/PM/Eve)-
Conflict detection-
Consolidated time span (parent + sub-blocks)-
Resource selection--
Multi-resource booking--
Resource filter (admin-side)--
Availability checking--
Capacity tracking & badges--
Capacity aggregation (Combined / Distinct)--
Booking record creation--
Business hours per resource--

Where You Can Use MultiDatePick

All three components work on every major Salesforce surface. Choose the surface that fits your workflow.

Screen Flows

Add MultiDatePick to any Screen Flow for guided, step-by-step scheduling. The component outputs JSON that you parse with the included Invocable Action to create records in your flow logic.

Lightning Record Pages

Place the component directly on a record page for inline date selection. Configure the related object, date field, and relationship field - selected dates automatically create child records linked to the parent.

App Pages

Build standalone scheduling apps with App Pages. Use staticRecordId to link to a parent record when there is no automatic record context.

Home Pages

Add a calendar to the Salesforce Home tab so users see their schedule the moment they log in. Set staticRecordId to a parent record - Home Pages don't auto-inject record context the way Record Pages do.

Experience Sites

Expose scheduling to external users - customers, partners, or community members - via Experience Cloud. Both required targets (lightningCommunity__Page and lightningCommunity__Default) are pre-configured. Set staticRecordId to a parent record since Experience Site pages don't auto-inject one.

Named Configurations

Store property bundles as Custom Metadata records (Config__mdt). Reference a config by name with the configName property - one config, reuse everywhere.

Installation

Install MultiDatePick from the Salesforce AppExchange in two steps.

1 Install from AppExchange

Find MultiDatePick on the Salesforce AppExchange and click Get It Now. Choose whether to install for all users, admins only, or specific profiles. The managed package includes all three components, the Apex controller, the JSON parser, and the Setup Wizard.

2 Verify Installation

Go to Setup → Installed Packages and confirm MultiDatePick appears in the list. Open a Flow or Lightning Record Page in edit mode - you should see the Date, Date Time, and Booking components in the component palette.

Permissions: Users need read and create access to whatever objects and fields you configure (e.g., your booking object, date field, resource lookup). The component validates field-level security (FLS) at runtime and will surface clear error messages if permissions are missing.

Configure with the Setup Wizard

The Setup Wizard walks you through every property, shows a live preview, and deploys your configuration - no manual XML editing.

Want to skip building from scratch? Browse 37 pre-built configs →

Two ways to find your shape

Answer a few questions to get your data shape jump-started - or jump right in and configure every property yourself. Both paths land on the same Custom Metadata record.

Setup Wizard's Shape-pick Q&A page - three questions (time / resource / range) with mini data-shape diagrams on each answer card
Walk me through it — answer 3 quick questions and the wizard infers your shape, picks the component, and pre-fills sensible defaults. Best for first-time admins.
Setup Wizard Configure-all-properties view showing the full form with Hover Fields, Edit Button Label, Calendar Options, Max Selections, Feature Toggles, and the live preview pane
Configure all properties — skip the Q&A and edit every prop directly: status colors, calendar size, feature toggles, max selections, conflict behavior, and more. Live preview updates as you type.

1 Open the Setup Wizard

Navigate to the MultiDatePick Setup Wizard App Page in your org, or drag the Setup Wizard component onto any Lightning page in edit mode.

2 Choose Your Component

Select which component you want to configure: Date, Date Time, or Booking. The wizard adjusts its property list to show only the fields relevant to your selection.

MultiDatePick Setup Wizard - Step 1: Name & Type, with Date Only, Date + Time, and Resource Booking component cards

3 Configure Properties

Work through each property step by step. The wizard groups properties into logical categories - display settings, constraints, resource configuration, and more. A live preview updates as you make changes so you can see roughly how your calendar will look before you deploy.

MultiDatePick Setup Wizard with the Live Preview pane showing a working calendar below the component-type selector

4 Deploy or Export

When you're satisfied with the preview, you have two options:

  • Deploy - Saves the configuration as a Custom Metadata record (Config__mdt) in your org. Reference it by name with the configName property on any surface.
  • Export JSON - Downloads a JSON file containing all your property settings. Share it with colleagues, back it up, or import it into another org.
Clone & Edit: The wizard supports cloning existing configurations. Open a saved config, click Clone, adjust what you need, and deploy under a new name - perfect for creating variations (e.g., read-only vs. editable views of the same calendar).

Import a Pre-Built Configuration

Skip the manual setup - download a JSON configuration, paste it into the Setup Wizard, and deploy in seconds.

37 READY-TO-IMPORT CONFIGS

Browse the Config Library

Answer 3 quick questions or browse by component. PTO trackers, room bookings, field service scheduling, shift rosters, and more - all ready to import.

Browse 37 Configs →
MultiDatePick Setup Wizard - Import / Export tab with Configuration JSON paste box and Export Configuration section

How to Import

1 Download a Configuration File

Download one of the pre-built JSON configurations above, receive one from a colleague, or export one from another org's Setup Wizard.

2 Open the Setup Wizard

Launch the MultiDatePick Setup Wizard App Page or the Setup Wizard component in your org. Navigate to the Import / Export tab.

3 Copy, Paste & Import

Open the downloaded JSON file, copy its contents, and paste into the import field in the wizard. Give your configuration a name and click Import. The wizard deploys it as a Custom Metadata record. Reference it on any surface with the configName property.

4 Map Demo Fields to Your Org (if needed)

The sample configs are built against MultiDatePick's bundled demo objects (Schedule__c, Event__c, Resource__c). When you import into an org that uses different object or field names, the wizard's Smart Field Mapping panel appears automatically - listing every unresolved reference with a dropdown of your org's matching objects and fields. Pick the replacement for each row, click Apply & Deploy, and the wizard rewrites the config with your selections before saving it. If everything already matches (e.g. sandbox-to-sandbox clones), this step is skipped automatically.

No code, no XML editing. Smart Field Mapping is a UI step in the wizard - it scans the pasted JSON, validates every object/field reference against your org's schema, and surfaces only the mismatches. You never touch the metadata directly.

Using MultiDatePick in a Screen Flow

The most common deployment surface. Add the component to a screen, configure it, and parse the output.

1 Add a Screen Element

In Flow Builder, add a Screen element. In the component palette on the left, search for multiDatePick. Drag your chosen component (Date, Date Time, or Booking) onto the screen.

MultiDatePick Date component running inside a Salesforce Screen Flow - calendar with Done button as the flow's screen action

2 Configure Properties

Set properties in the right-hand panel. At minimum, configure display settings like modalTitle and label. Or set configName to load all properties from a saved Custom Metadata configuration - no per-property setup needed.

3 Capture Output Variables

The component outputs data through Flow-only output properties you can store in flow variables:

  • selectedDates - Text collection of selected date strings (YYYY-MM-DD) Flow Only
  • selectedDateRangesJson - JSON with consolidated date ranges Flow Only
  • selectedDatesWithTimesJson - JSON with dates, start/end times (DateTime & Booking) Flow Only
  • bookingSuccessCount - Number of bookings created (Booking only) Flow Only
  • bookingConflictDates - Text collection of dates with conflicts (Booking only) Flow Only

4 Parse JSON with the Invocable Action

Add an Action element after the screen. Search for "Parse Date Entries from JSON" (MultiDatePickParser). Pass your JSON variable as input. The action returns a MultiDatePickEntryCollection that you can loop through to create records.

Each entry has: fromDate, toDate, startTime, endTime, resourceId, resourceName.

Boolean Properties in Flow: Always set boolean properties explicitly using {!$GlobalConstant.True} or {!$GlobalConstant.False}. Do not leave them blank - Salesforce defaults can behave unexpectedly when the JavaScript property expects false.

Record Pages, App Pages & More

Beyond Flows, MultiDatePick works on any Lightning surface. Here are the key differences.

Lightning Record Pages

The component receives recordId automatically. Configure relatedObjectApiName, dateFieldApiName, and relationshipFieldApiName so selected dates create child records linked to the parent. Enable preloadExistingDates to show previously saved dates on load. Save is additive - new dates are inserted but existing records are never deleted.

App Pages & Home Pages

These surfaces don't provide a recordId automatically. Use the staticRecordId property to manually specify which parent record the component should load and save against. Everything else works the same as Record Pages.

Experience Sites (Communities)

Expose scheduling to external users via Experience Cloud. Both required targets (lightningCommunity__Page and lightningCommunity__Default) are pre-configured on all three components - just drag and drop in Experience Builder. Experience Site pages don't auto-inject recordId either; set staticRecordId to the parent record you want the component to load/save against.

Key Features at a Glance

Commonly asked-about features and the properties that control them. See each component's page for the full property reference.

Date Range Consolidation

Set endDateField to merge consecutive selected dates into a single record with a start and end date instead of one record per day. Works on all three components.

Example: Selecting Mon-Fri creates 1 record (Mon start, Fri end) instead of 5 separate records.

Recurring Patterns

Users can select recurring dates by pattern - every weekday, specific days of the week, or custom intervals. Supports week intervals (every 2 weeks, every 3 weeks) and monthly occurrence filters (1st Monday, Last Friday).

Status Colors

Map a picklist field's values to colors with statusColors. Calendar cells and time slots show color-coded status at a glance. Use hideBookingsWithStatus to filter out specific statuses (e.g., "Cancelled") from the grid and capacity counts.

Edit Mode

Enable enableEditMode to surface an Edit Bookings button. Users open a panel below the calendar, click dates to load their records, then bulk-update status, move to a new date, change times, or reassign a resource - all in one Apply Changes click. Two-click confirm protects deletes.

Capacity Booking

Set capacityField on the resource object to enable capacity mode. Time slots show live availability badges (e.g., "3/10 booked") and stay open until the limit is reached.

Conflict Detection

Control what happens when a user selects an already-booked slot with conflictBehavior: block prevents the selection, skip is for batch / multi-date selection - the user picks many dates at once and the component saves the open ones, silently skipping (and reporting) the ones already taken (best for "grab whatever's still open"; for a single date, block already prevents a taken slot, so skip's value is the multi-date batch case), or allow permits overlap (useful in capacity mode).

Time Period Grouping

Set groupTimeSlotsByPeriod to organize the time grid into Morning, Afternoon, and Evening sections - easier to scan than a flat list of 30+ slots.

Two-Month View

Enable twoMonthView to display two months side by side. Ideal for date range selection where users frequently cross month boundaries.

Named Configurations

Set configName to load all properties from a Custom Metadata record (Config__mdt). One configuration, reusable across any number of pages and flows.

Need help getting set up?

Setup question, feature request, or stuck on which component fits your use case? Reach out - happy to help.

Email Support@MultiDatePick.com Browse 37 Pre-Built Configs