Skip to main content
Your booking page is a public web page where anyone can pick a service, choose a time and book it: no login, no app. It is the page you send when a contact asks “can I get in on Thursday?”. Everything on it comes from your Services and your staff’s availability, so there is nothing separate to build.

Its address

Every workspace has a booking page at:
  • https://dash.dmly.io/book/<your workspace id>: the landing page, listing your bookable services grouped by category.
  • https://dash.dmly.io/book/<your workspace id>/<service slug>: a single service, so a contact lands straight on that service’s times.
To find your own, go to Business → Appointments → Settings and select Preview booking page, at the top of the page. That opens the live page; copy the address from your browser.
You can serve the page on your own domain instead (book.yoursalon.com). See Custom domain. That’s a paid add-on: if your plan doesn’t include it, you’ll see Custom domains aren’t included in your current plan. and every link keeps using the dash.dmly.io address above. Links only switch to your domain once it is verified and its SSL certificate is live, so a link you shared is never broken.

What’s on the page

The landing page lists only services that are active and publicly visible, and only Services of type appointment or class. Add-ons never appear; they’re order extras, not something a contact books. If a service is missing from the page, it is almost always one of those two switches. See Services. The page shows a Booking page title, a Booking page description, your logo and your Brand colour, all set under Business → Appointments → Settings → Appointment → Branding. Show logo turns the logo off entirely; leave Brand logo empty with it on and the page falls back to your business logo from Settings → Business details. The same panel carries three more fields:
  • Booking page favicon: The little icon in the browser tab on your public booking pages. Pick any image from your media library (square PNG or SVG looks best) or paste a URL. Any web image format works: PNG, JPG, GIF, WebP, SVG or ICO. It applies to every public page, meaning the service list, a service’s booking page, a client’s manage page, the client portal login and history, and the payment redirect. There is no fallback: leave it empty and those pages carry no tab icon of their own, whatever your logo is set to.
  • Terms URL: a link to your own terms page. Set one and the confirm step shows By booking you agree to our terms., with terms opening the address you gave in a new tab. It appears on appointment and class bookings alike. Leave it empty and no such line is shown; DMLY does not require the client to agree to anything.
  • Redirect URL: where the ← Back to website link on the confirmation page sends them. See Sharing it.

What a contact does

1

Picks a service

From the landing page, or straight from a link to one service.
2

Picks a staff member, sometimes

If the service offers a choice, they pick a person. If you turned on Hide staff selection under Settings → Appointment → Booking flow (it applies to every appointment service), they don’t: Clients won’t choose a staff member; one is assigned automatically.
3

Picks a time

Only genuinely open slots are offered. DMLY subtracts your staff’s booked time, buffers, time off, blocked time and their connected calendar’s busy time. It also applies your minimum notice and booking horizon. See Staff and availability.
4

Fills in the form

A new visitor must give at least a first name and an email address. The rest of the fields are up to you: configure them under Settings → Booking Fields. It’s one shared list for appointments and classes; only Additional Notes is appointment-only.
5

Books

They land on a confirmation page and get a confirmation message on their channel.
If a contact reaches the page from a link DMLY sent them (from a Flow, for example), the page already knows who they are and skips the name/email fields entirely, and the booking is attributed to their existing Contact rather than creating a new one.
When an unknown visitor books, DMLY creates a lightweight Contact from the name and email they typed. That’s a real Contact in your CRM, but it has no WhatsApp identity attached yet, so the confirmation and reminders go to whatever channel it does have. This is exactly why sharing the link on WhatsApp is worth the extra second.

Times are shown in one of two ways

Under Settings → Appointment, Timezone mode is either Detect automatically or Fixed timezone. The public page has no browser timezone detection: Detect automatically uses the contact’s stored timezone when DMLY already knows them, and otherwise falls back to the service’s own timezone. A stranger opening a shared link therefore sees your clock in both modes. Pick Fixed timezone if you’re a single-location business and “3:00 PM” should always mean your 3 PM.

If the service is paid

  • Pay after the appointment: they book normally, the slot is confirmed straight away, and DMLY messages them a payment link.
  • Pay before booking: the slot is held for 15 minutes while they pay, and only becomes a real booking once the payment clears. If the hold runs out, the slot goes back on sale.
If no payment gateway is connected, a pay-before service can’t be booked at all: the page tells the contact Online payment isn’t available right now. Please contact us to book this service. Connect a gateway first. Full detail in Appointment payments. Every booking gets its own private page at https://dash.dmly.io/booking/<booking id>. From it, while the booking is still confirmed and still in the future, a contact can:
  • Cancel: if you’re inside the Cancellation deadline (hours) set under Settings → Appointment → Booking policy.
  • Reschedule: same, against the Reschedule deadline (hours) in that same panel. Both are workspace-wide, not per-service. Set either to 0 to allow it right up to the start time.
  • Add to calendar: links for the usual calendars, plus a downloadable calendar file.
“Still confirmed and still in the future” are both real conditions, and the second one is what surprises people. The link itself is permanent, but about a day after the appointment DMLY moves the booking to Completed, and a completed booking’s page keeps only the details (the time, the duration, where it is, and the join link if there is one) with This meeting has passed. where the buttons were. The Add to calendar links go too: they are only ever offered on a confirmed, still-upcoming booking. Even before the booking is retired, a reschedule of an appointment whose time has already passed is refused, with Could not reschedule. Please try again. See Past bookings close themselves. Class seats can be cancelled but never rescheduled to another time; a class runs when it runs. They use their own Cancellation deadline (hours) on the Settings → Class tab. A cancelled seat automatically goes to the next person on the waitlist. See Classes.

When your team books several sessions at once

A contact doesn’t have to visit the page once per slot. When someone on your team books them in from the Calendar (see Add a booking by hand), selecting + Add another time adds another date and time to the same booking, for the same contact, staff member and service, up to 20 slots in one go. Every slot is still a real, individual booking behind the scenes (each one fires its own automations, calendar event and loyalty or credit awards), but the contact and your team only get one confirmation message for the whole set, not one per slot. It names the service, how many sessions were booked, the first date, and lists the rest (after six it switches to “and N more”). If a slot in the batch fails (someone else took it first, say), the confirmation only covers what actually got booked, and whoever booked it sees exactly which ones didn’t.
This is a staff action, not something a contact does themselves. There’s no multi-slot picker on the public booking page; a contact booking their own appointments still books one slot per visit.

Sharing it

1

Send it on WhatsApp

Copy the link and send it in the Inbox. One line does the job: Here's my calendar — grab any slot that suits: <link>. Link to the service page, not the landing page, when you already know what they want: one fewer decision.
2

Let a Flow send it

A Book Meeting node in a Flow, with How to book set to Send hosted booking link, sends the link for you with the contact already identified, so they skip the form, and the booking lands on the right Contact. The flow then waits: whatever you put after the booked path only fires once they actually book, not the moment the link goes out. This is the best way to send it at scale.Leave How to book on its default and the node shows tappable times in the chat instead of sending the link: the hint reads In-chat shows tappable times on WhatsApp/Messenger/Instagram and automatically sends a booking link on SMS. A paid service always uses the hosted page, whatever you pick. There’s also a separate Send Booking Link node, which sends the attributed link but doesn’t wait for the booking.
3

Put it on your website and your profiles

It’s an ordinary public URL. Use it as your Instagram bio link, your Google Business Profile booking link, or the button on your site. Set a Redirect URL under Settings → Appointment → Branding and the confirmation page carries a ← Back to website link back to you.
Book a slot on your own page once, from your phone, before you share it. It takes a minute and it’s the fastest way to catch a service with no staff attached, a missing price, or hours you never set.

Embed it on your website

Instead of sending people away to dash.dmly.io, you can put the booking page directly inside a page on your own site; a contact picks a time and books without ever leaving it.
1

Open the embed panel

Go to Business → Appointments → Settings → Appointment and scroll to Share & embed, below Custom domain.
2

Pick a layout

  • Inline: the booking page sits directly in your page and resizes itself to fit its content. The booking page appears in the page and resizes to fit its content.
  • Popup button: puts a button on your page that opens the booking page in a compact centred card (up to 480px wide, rounded, with a drop shadow) over a dimmed backdrop. Good beside other content. A button that opens the booking page in a centered overlay.
  • Lightbox: the same button, but the booking page fills the whole browser window. Good on mobile, or when you want the booking flow to be the only thing on screen. A button that opens the booking page in a full-screen overlay.
The picker shows those hints itself as you select each mode. Whichever overlay you pick, the visitor closes it with the × button, by clicking the dimmed backdrop, or with Escape, and the page behind it can’t scroll while it is open.
3

Copy the snippet and paste it in

Select Copy snippet and paste the single line it gives you into your site’s HTML, wherever you want the booking page (or the button) to appear.
Payment still works inside an embed. Most payment gateways refuse to load inside someone else’s page, so if the service needs upfront payment, the embed shows a “Continue to secure payment” screen that opens the gateway in the browser’s own top-level window instead of the frame. Everything before that point (picking a service, a time and filling in the form) stays inside your embed.

Let clients install it like an app

A contact can add your booking page to their phone’s home screen, the same way they’d install any app from a browser: no app store, and nothing for you to turn on. It works automatically on every booking page and needs no setup: the installed name comes from your Booking page title, and the icon from your Booking page favicon if you’ve set one, otherwise your logo, sitting on your brand colour (or a plain brand-coloured tile if you’ve set neither). All of it comes from the same Settings → Appointment → Branding panel that brands the page itself.
1

On Android

Open the booking page in Chrome, then use Add to Home screen (or Install app on newer versions) from the menu.
2

On iPhone and iPad

Open the booking page in Safari, tap Share, then Add to Home Screen.
Installed, it opens straight to your booking page, with its own icon and no browser bar around it.
This is a shortcut to the page, not an offline app: booking still needs an internet connection, the same as installing the DMLY dashboard does. There’s no separate setting: this is your clients installing your booking page, which is different from you installing the DMLY dashboard for yourself.

When something looks wrong

The page only fails outright when the workspace has no publicly visible, active services at all. Publish one service and it comes back. If it loads but looks empty, you’re probably looking at a filtered view: a category with nothing in it, for example.
Nothing is wrong with the page; the availability rules are eliminating every slot. The usual causes: the staff member has no working hours set, no staff is attached to the service, your minimum notice rules out today, or your booking horizon rules out the date they’re looking at. Work through Staff and availability.
Two people picked the same slot seconds apart and the other one landed first. DMLY refuses the second rather than double-booking your staff. The contact just picks another time: no action needed from you.
A link without contact identification matches on the email typed in: an existing contact with that exact email is reused, otherwise a fresh Contact is created. So a WhatsApp contact with no email on file, or a client who types a different address, gets a duplicate. Send it from a Flow’s Book Meeting node (in Send hosted booking link mode) or a Send Booking Link node instead; both attribute the link to the contact.
Nothing failed on DMLY’s side: each slot in a multi-slot booking is checked individually, so one that was taken in the meantime (or genuinely no longer available) is skipped while the rest still go through. Whoever booked it sees exactly which slots made it and which didn’t, and the contact’s one confirmation message only lists the sessions that were actually booked.

Services

What appears on the page, and the booking rules behind each one.

Staff and availability

Working hours, time off and buffers: where the open slots come from.

Appointment payments

Pay before, pay after, and holds.

Custom domain

Serve the page on your own branded address.