Coming Soon to AppExchange — 2026

MultiDatePick

Select More. Do More.

The most customizable calendar component on the Salesforce AppExchange. Pick dates, schedule times, book resources with capacity tracking, color-code statuses, consolidate date ranges, and manage bookings — all from a single, configurable package with 60+ properties. No code required.

MultiDatePick Booking component in capacity + multi-resource mode — calendar, time-slot grid, status filter pills, and resource checkboxes

See it in action

Real screenshots from the product. Every feature here ships in the package.

The Most Customizable Calendar on the AppExchange

Other calendar components give you a date picker. MultiDatePick gives you a platform. With 60+ configurable properties, every aspect of the calendar, time grid, and booking experience is yours to control — without writing a single line of code.

Capacity Booking

Allow multiple bookings per time slot with live capacity badges. Perfect for training rooms, class enrollments, hot-desk pools, or any resource where more than one person can book the same slot.

Edit Mode

Select existing records on the calendar, then change their status, move them to a new date, update times, reassign to a different resource, or delete them — all inline without leaving the page.

Status Colors

Map any picklist value to a custom color. Calendar dates show pastel fills, time slots show colored stripes, and the whole interface becomes a visual dashboard of what's Confirmed, Pending, Cancelled, or any custom status.

Date Range Consolidation

Selecting Mon through Fri creates one record with a start date and end date — not five separate records. Configure an End Date Field and adjacent dates are automatically consolidated into ranges.

Setup Wizard

A guided step-by-step wizard walks admins through configuring any component. Choose a component type, map your objects and fields, set display options, and deploy — all without reading docs.

Recurring Patterns

Select every weekday, every other Monday, the 1st and 3rd Friday, or the last Saturday of each month. Custom week intervals and monthly occurrence filters turn a 50-click task into two clicks.

7 Languages Built In

English, Spanish, French, German, Hindi, Japanese, and Brazilian Portuguese — all built in. The component matches the user's Salesforce language automatically. Every label, button, tooltip, and message is translated.

Every property works in Flows, Record Pages, App Pages, Home Pages, and Experience Sites. Configure once, use everywhere.

Explore the Components

How Do You Want Your Data Stored?

Different scheduling problems call for different record shapes. MultiDatePick gives you three storage models so you can match the data to the workflow — without writing a line of Apex.

One Record per Date

Default behavior. Every selected date becomes its own record. Pick five dates → five records. Best when each day stands alone — RSVPs, attendance, sub-block sessions, daily check-ins.

Just configure relatedObjectApiName, dateFieldApiName, and relationshipFieldApiName.

SELECTION Sun Mon Tue Wed Thu Fri Sat Saves as 5 records Record · Mon Mar 3 Record · Tue Mar 4 Record · Wed Mar 5 Record · Thu Mar 6 Record · Fri Mar 7

One Record per Date Range

Date range consolidation. Adjacent dates collapse into a single record with a start date and an end date. Selecting Mon–Fri creates one row, not five. Perfect for PTO, travel, multi-night stays, projects, multi-day equipment rentals, and vehicle reservations.

Works on Date AND Booking. Add endDateField pointing to your End Date field. Non-adjacent picks still get their own records. On Booking, this collapses contiguous days per resource into one reservation record (instead of one record per day).

SELECTION Sun Mon Tue Wed Thu Fri Sat Saves as 1 record Record · Block Start: Tue Mar 4   ·   End: Sat Mar 8 two fields: dateFieldApiName + endDateField

One Record per Time Block

Each block of time on each selected date becomes its own record. For example, picking the 1st and 2nd along with 9–10 AM and 1–2 PM Saves as four records, each carrying its own start and end time.

Default behavior on the Date Time and Booking components — no extra setup beyond startTimeField and endTimeField.

SELECTION Mar 1 Mar 2 Mar 3 Mar 4 Mar 5 9 AM 10 AM 11 AM 12 PM 1 PM 2 PM Saves as 4 records Mar 1 · 9:00 AM – 10:00 AM Mar 1 · 12:00 PM – 2:00 PM Mar 2 · 9:00 AM – 10:00 AM Mar 2 · 12:00 PM – 2:00 PM

One Record + Sub-Blocks for the Gaps

Sometimes the gap between the work matters as much as the work itself. Turn on consolidateTimeSpan and the whole selection becomes one parent record covering the full envelope (first slot → last slot), while every break, pause, or interlude becomes a child sub-block record on a related object.

For example, pick 9–10 AM and 1–2 PM → one parent (9 AM–2 PM) plus a sub-block child for the 10 AM–1 PM gap.

Useful for: training sessions with coffee breaks (bill for the full session, audit the breaks), field service visits with travel between stops (track on-site time vs. drive time), or compliance-mandated rest periods inside a shift that need their own paper trail.

Date Time and Booking. Set consolidateTimeSpan plus the subBlock* field props (object, parent lookup, date, start, end).

SELECTION Mar 1 9 AM 10 AM 2 PM 3 PM picked gap (sub-block) Saves as parent + child Parent · Trainer Day 9:00 AM – 4:00 PM  ·  Schedule__c Sub-block · Lunch 11:00 AM – 2:00 PM  ·  Sub_Block__c

One Record per Resource × Date Block

Each picked resource × each picked date × each contiguous time block becomes its own record. Multi-resource bookings multiply records across the resource axis AND the time axis. Selecting 2 rooms × 2 days × 2 blocks of time creates 8 records.

Useful for: multi-resource conferences (book the same time slot across two rooms), parallel team meetings, team field service routes (one record per technician per stop), or anything where each resource needs its own row.

Booking component only. Set allowMultipleResources=true and pick a Capacity Field if multiple bookings can share a slot.

SELECTION Resource A Resource B Resource C Mar 1 Mar 2 Mar 3 Mar 4 Mar 5 9 AM 10 AM 11 AM 12 PM Saves as 8 records Mar 1 · 9 AM – 10 AM · Resource A Mar 1 · 11 AM – 12 PM · Resource A Mar 1 · 9 AM – 10 AM · Resource B Mar 1 · 11 AM – 12 PM · Resource B Mar 2 · 9 AM – 10 AM · Resource A Mar 2 · 11 AM – 12 PM · Resource A Mar 2 · 9 AM – 10 AM · Resource B Mar 2 · 11 AM – 12 PM · Resource B

Not Sure Which Shape You Need? The Wizard Asks 3 Questions.

You don't have to memorize the six shapes above. The Setup Wizard's Walk me through it path asks three yes/no questions and infers the right shape + component for you. New admins land on a working config in under two minutes.

  1. 1 Do you need times?

    No → Date. Yes → DateTime or Booking.

  2. 2 Do you need a resource picker?

    None → DateTime. Single dropdown or multi-resource checkboxes → Booking.

  3. 3 Should adjacent dates consolidate?

    Each click = its own record, or contiguous days collapse into one record with a start & end date.

Each answer card has a mini diagram so you see exactly what your data will look like before you commit. The wizard then jumps straight to Step 2 with the right component pre-selected.

See the Wizard in the User Guide
Setup Wizard's Walk me through it shape-picker page showing all three yes/no questions with answer cards containing mini data-shape diagrams

The wizard's shape Q&A page — pick an answer card per question.

Works Everywhere in Salesforce

MultiDatePick isn't limited to one surface. Every component works on all major Salesforce page types — configure once and deploy wherever your users need it.

Screen Flows

Drag any component into a Flow Builder screen element. Selected dates output to Flow variables as a text collection or JSON — ready for loops, decisions, and record creation.

Lightning Record Pages

Place on any record page in App Builder. The component auto-detects the current record and saves selected dates as related child records. Enable Edit Mode to manage existing records inline.

App Pages

Build standalone scheduling pages using Lightning App Pages. Use the staticRecordId property to link to a specific parent record — no record context needed.

Home Pages

Add booking or scheduling components to your Home Page so users see their calendar the moment they log in. Pair with staticRecordId for a centralized booking dashboard.

Experience Sites (Communities)

Expose scheduling to external users on Experience Cloud sites. Customers, partners, or vendors can book resources and select dates through your community portal. Use staticRecordId to link to a parent record since community pages have no automatic record context.

What Can You Build with MultiDatePick?

From simple date selection to complex multi-resource booking, here are real-world use cases across all three components. Each component page has 10-15 detailed use cases with configuration tips.

Date — Date Selection

PTO & Vacation Requests

Employees select their time-off dates on a calendar. Adjacent dates are automatically consolidated into date ranges — selecting Mon through Fri creates one record with a start and end date. Status colors show Pending, Approved, and Denied at a glance.

Travel Date Selection

Employees select their travel dates in a Screen Flow, then auto-generate per-diem records, travel detail line items, or expense entries for each selected day. Use endDateField to consolidate multi-day trips into single records.

On-Call Rotation

Managers assign on-call dates using recurring patterns with week intervals — set every other Monday for the next quarter in two clicks. Status colors distinguish Primary, Backup, and Swapped shifts.

Event Attendance

Attendees RSVP to event dates on a calendar. Each date creates one RSVP record linked to the attendee. Status colors show Registered, Waitlisted, and Cancelled responses. Preloaded dates prevent duplicate registrations.

Date Time — Date + Time Scheduling

Interview Scheduling

Recruiters schedule interviews by selecting dates and choosing 30-minute time slots from a per-date grid. Each date gets its own grid, allowing different interview times on different days. Status colors track Scheduled, Completed, No Show, and Cancelled.

Maintenance Scheduling

Schedule recurring maintenance visits with specific time windows. Use the time slot grid to assign 1-hour service windows per day. Conflict detection prevents overlapping appointments on the same equipment.

Appointment Booking

Clients pick appointment dates and times from a visual grid or dropdown pickers. The component checks for conflicts with existing appointments and auto-generates records with date, start time, and end time fields populated.

Shift Scheduling

Managers assign employee shifts across multiple days. Pick dates, set start/end times per shift, and auto-generate shift records. Group time slots by period (Morning, Afternoon, Evening) for quick selection.

Booking — Resource Booking

Conference Room Booking

Reserve conference rooms across multiple dates and time slots. The booking grid shows live room availability. Business hours are pulled from each room record so different rooms can have different available hours.

Training Enrollment

Employees enroll in training sessions by selecting a course, choosing dates, and picking time slots. Capacity tracking shows how many seats remain per session. Status colors distinguish Enrolled, Waitlisted, and Cancelled registrations.

Desk Hoteling

Employees reserve hot desks by selecting a desk resource and choosing dates with time blocks. Capacity badges show desk availability at a glance. Two-month view helps employees plan hybrid schedules weeks in advance.

Vehicle & Fleet Reservation

Reserve company vehicles for specific dates and time ranges. The booking grid shows which vehicles are available. Multiple-resource mode lets users compare availability across the entire fleet at once.

Each component page has 10-15 detailed use cases with configuration tips.

Date Use Cases Date Time Use Cases Booking Use Cases

Setup Wizard — Configure in Minutes

The built-in Setup Wizard walks you through every step: choose a component type, select your objects and fields, configure display options, and deploy. Your configuration is saved as a Custom Metadata record that any component instance can reference by name.

  • Guided steps — clickable progress bar walks through Type, Object & Fields, Display Options, and Deploy
  • Clone & export — duplicate existing configs or export them as JSON to share with other orgs
  • Import configs — paste a JSON config from a colleague or download one from this website and import it directly
  • Live preview — see roughly how your calendar will look before deploying
  • configName property — set one property on any component and it loads all settings from the saved config
Notify Me at Launch
MultiDatePick Setup Wizard with the Live Preview pane showing a working calendar below the component-type selector

Import Pre-Built Configurations in 3 Steps

Download a JSON configuration template from this website and import it into your org using the Setup Wizard. No CLI, no code, no metadata deployment — just paste and go.

1 Download a Configuration

Browse the use cases on each component page and click the Download JSON Config button. The file contains all the property settings for that use case — object mappings, display options, status colors, and more.

2 Open the Setup Wizard

In your Salesforce org, open the MultiDatePick Setup component (add it to any Lightning page via App Builder). Navigate to the Existing Configurations tab, then click the Import / Export section.

3 Paste & Import

Give your config a name, paste the JSON into the text area, and click Import. The wizard deploys the configuration as a Custom Metadata record. Then just set configName on any component to load those settings instantly.

Tip: You can also export your own configurations from the wizard and share the JSON with teammates or across orgs. Clone an existing config to use it as a starting point for a new one.

Frequently Asked Questions

Everywhere your users work in Salesforce. All three components (Date, Date Time, Booking) are supported on:
  • Lightning Record Pages — drop on any record and selected dates auto-save as related child records (no Flow needed).
  • Screen Flows — appears in the Flow Builder palette and outputs selected dates / JSON to Flow variables for loops, decisions, or record creation.
  • App Pages and Home Pages — for standalone scheduling dashboards or company-wide booking pages.
  • Experience Sites (Communities) — on a Record Detail page recordId is auto-injected so it behaves like a Lightning Record Page; on generic community pages, embed it inside a Screen Flow or set staticRecordId to tie it to a specific parent.
Configure once, deploy anywhere — and use the configName property to load shared settings from a Custom Metadata record so every instance stays in sync.
Lightning Record Page — drop the component directly on a record (Account, Contact, custom object). Configure the Related Object, Date Field, and Relationship Field properties in App Builder and selected dates auto-save as related child records. No Flow, no Apex — just point and click. Best when the calendar lives on a parent record and the data shape is simple.

Screen Flow — best for guided multi-step workflows, dynamic logic (decisions, loops, assignments), or when the calendar will live on an App Page, Home Page, or Experience Site. Flows give you full control: create records on any object, send emails, update fields, or route to different screens based on what was selected. The Config Library has a Copy Flow XML button that generates a ready-to-import starter Flow for each use case.

Setup Wizard — a third option that skips the property panel entirely. Walk through the wizard once, save as a Custom Metadata config, then drop the component anywhere and set configName to load all settings. Great for admins who want a guided experience or for sharing configs across orgs.
The Setup Wizard is a guided configuration component. It walks admins through choosing a component type, mapping objects and fields, setting display options, and deploying the configuration as a Custom Metadata record. Any component instance can then load that configuration by setting one property: configName. The wizard also supports cloning, exporting, and importing configurations as JSON — making it easy to share configs between orgs or download pre-built templates.
Capacity mode allows multiple bookings on the same time slot, up to a limit you define. Add a capacityField property pointing to a number field on your resource object (e.g. Max_Seats__c = 10). The time grid shows live badges like "3/10" and slots stay available until capacity is reached. If you've also configured statusField, status stripes appear in each slot showing the mix of your picklist values across all bookings — whatever you've defined (Approved/Pending, Reserved/Held/Released, etc.). Set showAvailabilityCount to ON to display the badges.
Status colors let you visually code calendar dates and time slots based on a status field value. Set statusField to the API name of any picklist on your record (e.g. Approval_Status__c, Stage__c, or whatever you use). Then set statusColors with a comma-separated mapping using your picklist values — for example Approved:green,Submitted:orange,Rejected:red or Open:blue,In Progress:amber,Closed:gray. Color names and hex codes both work. Use hideBookingsWithStatus to completely hide records with a specific status from the grid and capacity counts.
Yes. Enable the enableEditMode property and an Edit Bookings button appears on the calendar. Click it to open the bulk edit panel: pick dates to load their records, then change status, move to a new date, update times, reassign a resource, or delete — all in one Apply Changes click. The capacity-aware conflict check blocks moves that won't fit in the new time range, and deletion uses a two-click confirm to prevent accidents.
When you configure an endDateField property, the component automatically groups adjacent selected dates into single records with a start date and end date. For example, if a user selects Monday through Friday, instead of creating five separate records, the component creates one record with Date__c = Monday and End_Date__c = Friday. Non-adjacent dates still get their own records. This works on all three components.
Yes. Every component includes a Recurring Pattern feature. Users can select all weekdays, all weekends, specific days of the week, or custom combinations up to an end date. Beyond simple day selection, users can set week intervals (every 1, 2, 3, or N weeks) and monthly occurrence filters (1st Monday, 2nd and 4th Friday, Last Saturday, etc.). This turns a 50-click task into two clicks.
MultiDatePick works on any Salesforce edition that supports Lightning Web Components and Screen Flows. That includes Enterprise, Unlimited, Developer, Performance, and Salesforce Platform — plus industry editions like Nonprofit Cloud, Education Cloud, Health Cloud, Financial Services Cloud, Public Sector Solutions, and Manufacturing Cloud. Sales Cloud and Service Cloud are also supported on Enterprise edition or above. Essentials and Professional editions are not supported (Salesforce restricts custom Lightning components there).
No. All configuration is done through the property panel in App Builder, Flow Builder, or the Setup Wizard. If you want to process selected date ranges in a Flow, you can use the included MultiDatePickParser Apex invocable action — still no code to write, just drag it into your Flow as an Action element.
Yes. You can set a minDate, maxDate, block specific dates from a source object (like holidays), restrict to future-only dates with allowPastDates, limit the maximum number of selections with maxSelections, or provide an explicit list of availableDates where everything else is disabled. Use autoJumpToFirstAvailable to open the calendar to the month of the first available date.
The Date component outputs a String[] array of ISO dates (e.g., ["2026-03-10", "2026-03-11"]) and optionally a JSON string with consecutive dates grouped into ranges. The Date Time component adds start/end times to each entry. The Booking component outputs a success count and any conflict dates. All components can also auto-save records directly to your configured object.
MultiDatePick includes built-in translations for 9 languages: English, Spanish, French, German, Italian, Hindi, Japanese, Portuguese (Brazil), and Chinese (Simplified). The component automatically displays labels in the user's Salesforce language setting — no configuration needed. All calendar labels, buttons, tooltips, and messages are translated. (Hindi is supported as a Salesforce End User Language — your admin must enable Hindi in Translation Workbench → Supported Languages before it activates.)
When a user selects time slots in the Booking component, the system queries existing booking records for that resource and date. Time slots that overlap with existing bookings are shown as unavailable (greyed out). If a conflict is detected during the save, those dates are skipped and reported back to the Flow via bookingConflictDates. In capacity mode, slots remain available until the configured capacity limit is reached. Use conflictBehavior to control whether conflicts block selection or just warn the user.
Yes. Use the hoverFields property to specify which fields appear in the tooltip when users hover over a booked slot or calendar date. Pass a comma-separated list of field API names (e.g., Name,Status__c,Start_Time__c) and the component displays them in the hover card.
Yes. The Setup Wizard includes full import/export functionality. Export any configuration as a JSON file, then import it into another org by pasting the JSON into the wizard's Import tab. You can also download pre-built configuration templates from this website and import them directly.

Have questions or a feature request?

Email Us — Support@MultiDatePick.com