There’s no shortage of ways to build scheduling functionality in Salesforce. Some teams opt for simple appointment request flows, while others design full-blown calendar interfaces. But if your goal is to assign the right team member automatically and let users book without logging in, Salesforce Scheduler offers a native approach that’s both powerful and flexible.
In this article, I’ll walk through how to create an appointment scheduling system using Salesforce Scheduler – no third-party tools or custom integrations required. Whether you’re working in field services, financial consultations, or internal resource planning, this guide is designed to help admins, developers, and architects take full advantage of what Salesforce Scheduler has to offer – especially for scenarios that require scale and automation.
Use Case
Let’s say Ben Laptops Inc. runs a service center with repair technicians based in New York (Eastern) and Dallas (Central). Customers should be able to book appointments online – no login required – and the system should automatically assign the right technician based on location, time zone, and availability, and meet virtually to troubleshoot the issue. This feature should also be integrated into their business website.
Required Licenses by Role
| Role | What They Do | License Needed |
|---|---|---|
| Technician (Agent) | Gets booked to handle appointments | Scheduler License |
| Managers or Front Desk Assistants (Greeter) | Manages schedules and customer check-ins | Greeter License |
| Customer | Books an appointment online (no login) | None |
Define Scheduling Policies

Why Use Salesforce Scheduler?
Salesforce Scheduler is very scalable, whether you have one technician or 100. Starting with a single center and plan to expand next year? Scheduler handles appointments seamlessly – you just need to configure and add records:
- Multiple locations (e.g., New York, Dallas, Atlanta, San Francisco).
- Hundreds of Technicians.
- Bookings across different time zones.
Salesforce Scheduler is also very configurable, and you can make it work the way you work:
- Set business hours for each location.
- Define how long each service takes.
- Add buffer time between appointments.
- Decide which services require which skills.
- Set rules for how far in advance customers can book or cancel.
Need to tweak how appointments are routed? Want to send SMS reminders? Or embed the booking flow into your website? No problem, as Salesforce Scheduler is highly customizable:
- Add your own Flows, Apex logic, or Lightning components.
- Customize the Experience Cloud site to match your brand.
- Integrate with tools like email, SMS, or inventory systems.
- Integrate directly on your public site.
Scheduler Object Model Overview
These are the core objects we will focus on from Salesforce Scheduler to make anonymous scheduling available to customers:
- Operating Hours: When can appointments be booked?
- Time Slots: “A window of time when a customer can book an appointment with a technician”
- Service Territory: “Where is the service offered?”
- Service Resource: “Who is delivering the service?”
- Service Territory Member: “Service Resources who are assigned to a Territory.”
- Work type: “What kind of service task is being scheduled?”
- Work Type Groups: “Organize related Work Types”
- Location Custom metadata type: “Hold Location to time zone mapping”
Now that we understand the key objects Salesforce Scheduler uses behind the scenes, let’s walk through how to set up an anonymous scheduling flow – so customers can book appointments without logging in.
Step-by-Step Implementation
Step 1: Define Operating Hours
Start by creating Operating Hours records for each location or team (e.g., Eastern Territory and Central Territory). These define when appointments can be booked.
- Go to Operating Hours in Setup.
- Create one for each territory.
- Specify business days, open/close times, and holidays if needed.

Step 2: Time Slots
It is a window of time when a customer can book an appointment with a technician – based on the business’s operating hours, service type, and technician availability.

Step 3: Create Service Territories
Each Service Territory represents a virtual (or physical) location where services are delivered.
- Create Eastern Service Territory and a Central Service Territory.
- Link each territory to its respective Operating Hours.

Step 4: Create Service Resources (Technicians)
These are the people delivering the services.
- Create Service Resource records and link them to the existing Users.
- Set their availability, capacity, and skills.

Step 5: Assign Technicians to Territories (Service Territory Members)
Link your Service Resources to the appropriate Service Territories.
- Navigate to the Service Territory Member object.
- Assign each tech to their location (e.g., Tech A → Eastern Territory).

Step 6: Define Work Types
Work Types define what services can be booked. Each Work Type should include:
- Estimated duration.
- Required skills.
- Location preference (if any).
Examples:
- “Screen Repair” – 60 minutes.
- “Diagnostics” – 30 minutes.

Step 7: Group Related Services (Work Type Groups)
Create groups like:
- Hardware Repairs
- Software Help
- Warranty Services

Step 8: Create Location-to-Time Zone Mapping (Custom Metadata)
To ensure appointments are scheduled in the correct time zone, you’ll want to set up a flexible and maintainable way to map customer location (state, region, or zip code) to a Salesforce-recognized time zone – especially important if your service centers operate in multiple zones.
How to Do It:
- Create a Custom Metadata Type called
Location_Timezone_Mapping__mdt. - Add fields like:
State__cTime_Zone__c(e.g., “America/New_York”). These values must match the time zone values listed on Operating Hours.
This custom metadata makes it easy to:
- Maintain a centralized list of location-to-time zone mappings.
- Dynamically assign time zones during the flow or Apex logic.
- Adjust for granularity (zone-level or zip-level).

Step 9: Build a Flow to Guide Guest Scheduling
Using Flow Builder, create an anonymous booking flow:
- Use Flow Templates.
- Surface available time slots using the customer’s zip code or selected location.
- Embed the flow on your website’s support or contact page.
Now that the building blocks are in place, we can start customizing the experience using Flow and Scheduler components. For guest users booking their own appointments, here’s how you can structure it:
- Ask for Customer Details: Start by creating a Screen Flow that collects key customer information – things like name, email, and phone number. Make sure to also ask for location details like State, Region, or Zip Code. These fields are important because they help us figure out which service territories and appointment times apply. You can either connect this info to an existing Person Account or Contact or create a new one right from the flow.
- Show Available Time Slots Based on Location: Once you have the location info, use Salesforce Scheduler’s “Select Service Appointment Time” component in your flow. This handy tool shows all available time slots – but only if it’s given the right input. So be sure to pass in the location data (like State or Zip) and other variables the component needs. That way, the customer only sees appointment options that make sense for their area.
- Anonymous Booking Selected – True.
- Appointment Scheduling Policy – Scheduling Policy Name defined in the Scheduler settings.
- Change primary assigned resource – False.
- Correlation Id – Any Unique Identifier (Salesforce will generate if no arguments is supplied).
- Disable Multi-Resource Scheduling – True.
- Filter By Resource IDs – Service Resource IDs associated with a specific Service Territory.
- Inbound Scheduling – True.
- Selected Start Time – When a user selects a time slot on the screen, the value is updated based on the selected timeslot.
- Selected End Time – When a user selects a time slot on the screen, the value is updated based on the selected timeslot.
- Selected Time Zone – User-supplied time zone value from
Location_TimeZone_Mapping__mdt. - Service resources – List of Service resources present in the Service Territory.
- Service Territory – The service territory for which time slots appear.
- Work Type – The work type for which you want to show time slots.
- Work Type Group – The work type group for which you want to show time slots.

- Connect Flow Action Component – Connect the “Save Appointment” action to create and modify appointments
- Selected Time Zone – Customer time zone.
- Service Appointment Fields – The values of Service Appointment attributes are represented in JSON format.
Step 10: Add the Guest Flow to an Experience Cloud Site
- Create an Experience Cloud Site: Start by setting up a new Experience Cloud site where guest users can access scheduling functionality.
- Open Experience Builder and Add the Flow: From the site’s settings, go to Experience Builder. Use the component panel to search for the Flow component, then drag it onto a public page of your site. Make sure the flow you select is the one you created for guest appointment scheduling.
- Save and Publish: Once the flow is placed and configured, click Save and then Publish your changes so they are live and visible to guest users.

Embedding Into External Websites
Add Your External Website to CORS in Salesforce
To allow your external website to securely load Salesforce components via Lightning Out, follow these steps to whitelist its origin:
- Go to CORS Settings: In Salesforce Setup, type “CORS” into the Quick Find box and select CORS under Security.
- Add a New Origin: Click New, and in the Origin URL Pattern field, enter the base URL of your external site.
- Save: Click Save to apply the changes.

Add a Lightning Out-Dependency App to Your Company Website
To allow unauthenticated (guest) users to access the Inbound New Guest Appointment Flow from your external (non-Salesforce) website, follow these steps:
- Create a Lightning Out Dependency App: In Salesforce, create a Lightning App that includes the Flow component you want to expose. Example Aura component:

- Ensure Guest User Access: Make sure the Guest User Profile for your site has access to the Flow and its required objects, fields, and Apex classes (if any). Include the Lightning Out Script in your external site’s HTML:
<script>
$Lightning.use("runtime_appointment booking: lightningOutGuest",
function() { // Callback once framework and app load
$Lightning.createComponent(
"lightning: flow", // top-level component of your app
{ }, // attributes to set on the component when created
"lexcontainer", // the DOM location to insert the component
function (component) { // API name of the Flow
component.startFlow("Salesforce_Scheduler_Unauthenticated");
}
);
}, 'https://YourSiteDomain/SiteURL/' // Site endpoint
);
</script>
- Test It as a Guest User: Open your external site in incognito mode to test as a guest. The Flow should render and function without requiring a login.
Final Thoughts
By combining Flow with public-facing components, you give your customers a seamless way to book appointments without needing to log in. Whether you’re embedding it on your company website or offering a self-service portal, this approach opens the door to smoother, more flexible customer experiences.
It’s only the beginning. Once you’ve set up the core experience, there’s a lot more you can do to turn it into a fully featured customer-facing solution.
Here are some powerful extensions you might consider:
- Integrated Payments: Allow guests to prepay for services using platforms like Stripe or PayPal, directly from the flow.
- Outlook/Google Calendar Sync: Automatically send calendar invites and sync appointments to your team’s Outlook or Google calendars.
- SMS and Email Reminders: Trigger confirmation messages and reminders using Salesforce Flow or other integrations.
- Feedback Collection: Add a quick feedback screen after the appointment is booked, or follow up via automated email surveys.