UK & US guide

Website booking guide

How to add a branded booking form to your website

A customer reading about your service should be able to book it from the same page. This guide explains how to add CalMov to your website, choose between a popup and an inline form, and check that the whole journey works before sharing it.

By Bhavik Halai9 minute read

Quick answer

Configure your services and availability in CalMov, then open Booking page, in the Share tab, and find Add bookings to your website. Approve the website addresses that will host booking, enable the embed and save. Choose Modal dialog for a booking button or Inline booking flow for a form inside the page, select your services and copy the generated code into your website. Test the published page on a phone and desktop, including the final booking status.

Should you use a booking popup or an inline form?

Use a popup when booking is one action on a larger page. A customer can read your prices, location information and service description, then press Book an appointment. The form opens over the page and the customer can close it to return to the information underneath.

Use an inline form when booking is the main purpose of the page. The form sits within the page and adjusts its height as the customer moves through the steps. Leave enough horizontal space for it; a narrow sidebar is usually a poor place for a calendar and customer details.

For example, a mobile barber could put a booking button beside each service description and an inline form on a dedicated booking page. Both lead into the configured CalMov flow. The display choice does not change the service duration, travel rules or payment settings.

What should you set up before copying the code?

An embed displays the booking options configured for your business. It cannot create availability that is missing from your diary. First check the service location, duration and price, then confirm your working hours and any service-area rules. Open your booking page and check that an intended appointment can be selected.

In the Share tab, assign a public service key to every service you want to offer through the embed, including services customers can choose themselves. This is the readable identifier used by the website code. Keep it stable once the code is published. If you change it later, update any website buttons or forms that use the old key.

  • Activate the services customers should be able to book.
  • Check whether each appointment happens at the customer's address, at your venue or online.
  • Set working hours long enough for the complete appointment and required travel.
  • Decide whether to offer online payment as well as payment at the appointment, using the options available to your business.
  • Check that you have access to a website block or template that permits custom HTML and scripts.

Approve the exact website addresses

Add the website origins that will host your form under Allowed website origins in the Share tab, one per line. For a site using both versions, enter https://example.com and https://www.example.com separately. An origin is the protocol and host, not a particular page: enter https://example.com rather than https://example.com/book. Use your own domain in place of this example.

Enable the embed and save the settings. A website builder may show previews on a different domain from the published website. Approve that exact preview origin if you need to test there, or test the published page. Remove temporary preview origins when you no longer need them. Adding a domain to this list does not publish a booking button on that site; the code still needs to be installed.

Add a booking button that opens a popup

Choose Modal dialog under Generate website code in the Share tab, select the service or services you want to preselect and press Copy code. Multiple selected services must share the same appointment location type: home visit, venue or online. Paste the generated code into a custom HTML block or your website template. Use the code from your own dashboard; the example below contains placeholders for the business slug and public service key.

You can change the button text and give it your website's existing button classes. Keep the data-calmov attributes intact. Load the CalMov script once on a page, even when the page contains several booking buttons. Publish the page and press the button on the approved website to check the result.

Popup example — replace both placeholders with your dashboard values
<button
  type="button"
  data-calmov-open="your-business"
  data-calmov-services="your-service"
>
  Book an appointment
</button>
<script src="https://www.calmov.com/embed/v1.js" async></script>

Place an inline booking form inside a page

Choose Inline booking flow, select your services and copy the generated code. Paste it where you want booking to appear, below enough information for the customer to understand what they are choosing. The example uses the same placeholders as the popup. The data-calmov-inline attribute identifies the business whose form should appear.

Let the embed adjust its height. Check that the website's surrounding section does not have a fixed height or hidden overflow that cuts off the final button. On mobile, give the form the available page width and check that a sticky navigation bar or chat widget does not cover the controls.

Inline example — replace both placeholders with your dashboard values
<div
  data-calmov-inline="your-business"
  data-calmov-services="your-service"
></div>
<script src="https://www.calmov.com/embed/v1.js" async></script>

Match the booking form to your business branding

Where your plan includes custom booking branding, save your theme and accent colour in CalMov's booking-page settings. The form uses those saved business settings. Styling the website button changes the button on your website; it does not change the theme inside the booking form.

The initial loading placeholder can be neutral while the business settings arrive. Once available, the loader follows the saved light or dark theme and accent colour before the booking form takes over. A dark booking form does not require a separate dark version of the website snippet. Check the transition on a slower connection as well as after the page has loaded.

Choose service selection behaviour separately from appearance. Lock services to the website selection is useful for a button beside one specific treatment. Customers can change selected services suits a general booking entry point. For a locked selection, supply the intended public service key in the generated code.

What happens after a customer opens the form?

For a home-visit-only business, the customer starts with their visit address, then chooses a service. UK bookings use a postcode and door or flat number. Where US booking is enabled, the form uses a ZIP code and full street address. Online and venue-only bookings skip the customer-address step. A business offering several location types asks for an address when the selected service needs one.

Once enough service and location information is available, CalMov can begin preparing availability while the customer continues. The customer chooses a day, then sees appointment times that fit the applicable service and travel rules. Loading the calendar is preparation; it does not mean a particular time has been reserved or a booking has been confirmed.

In the Pro flow, choosing a time creates a temporary reservation while the customer enters their details. The final step checks the booking before confirmation. If the customer chooses to pay online, check the final payment and booking status: returning from checkout can initially show payment processing while confirmation is still pending.

Test the published customer journey

Start with one service and a working day you know should have space. For a home visit, use a complete, recognisable address inside your service area. A ZIP code or vague place name alone is not a useful test of a street-address lookup. Repeat with a location outside your area to check that the customer gets a useful response.

A website-builder preview is not a substitute for checking the published page. Test using a phone as well as a desktop, and try keyboard navigation. If you test payments, use an explicitly configured Stripe test environment. Adding an embed to a live website does not put its payments into test mode.

  • Open the form from each booking button and check the intended service is selected.
  • Check the loading placeholder, saved theme and accent colour on a slower connection.
  • Choose a date and time, go back and change the service or address, then check the revised options.
  • Move through the form on a small screen and check that the continue button remains reachable.
  • For a popup, check the close control, Escape key and return to the surrounding website.
  • Complete a controlled test booking and verify the final status in the dashboard; a loading calendar or checkout redirect alone does not prove completion.
  • Cancel the test appointment afterwards so it does not occupy real availability.

Troubleshoot a form that does not open or show times

If nothing happens when the button is pressed, check that the loader script is present and the button has the correct business slug. Some website editors remove scripts from ordinary text blocks. Use the editor's supported custom-code location and check whether an optimisation setting has delayed the script.

If the frame opens but booking is unavailable, check the exact website origin, saved embed settings, active services and public service keys. If it works on the published site but fails in preview, compare the two website origins before changing the booking configuration.

If the form loads but no appointment times appear, look at the booking inputs: service duration, working hours, date window, existing bookings and travel area. Check the address is recognised and try a known working day. Changing a popup to an inline form will not make an otherwise unavailable appointment bookable.

Frequently asked questions

Can I add CalMov to a website builder?

Use a builder plan and page type that support custom HTML and external scripts. Paste the generated code into the supported code block or template, approve the published website origin in CalMov and test there. The exact editor controls depend on your website provider.

Do I need a separate booking link for every service?

You can use the same business embed with different public service keys on different buttons. Generate the selection in Booking page, in the Share tab. Choose locked service selection for a dedicated service button, or allow customers to change services for a general booking button.

Will a dark website automatically make the form dark?

The booking form follows the business's saved CalMov booking theme, subject to the branding options included in its plan. It does not infer the theme from the surrounding website. Set the booking theme in CalMov and check the loader and completed form on the published page.

Does the embed change availability or payment rules?

The embed uses the business's configured booking flow. Choosing popup or inline presentation does not change service durations, working hours, travel rules or payment settings. Test the final booking and payment status using the same configuration you intend customers to use.

Can I keep using my public booking link?

Yes. An embed gives website visitors another entry point into booking. Your public booking link remains useful in emails, messages and social profiles. Check both routes when you change services, availability or payment settings so the customer instructions remain consistent.

How CalMov helps

CalMov combines service duration, working availability and customer location to help mobile businesses offer bookable times that allow for the surrounding journeys.

Watch the customer booking walkthrough