When a client taps Book Now on your public booking portal, they enter a multi-step booking flow. This article walks through every step of that flow so you understand what clients see, what data they enter, and what happens on submission.
The flow is designed to be finishable on a phone in under two minutes. Every step collects one specific piece of information and gets out of the way.
Phone number — identifies the client
Personal info — name, email, optional address
Add a pet — the pet being booked for
Pick a service — filtered by pet matching if enabled
Pick a staff member and time slot — from your configured shifts
Review and submit — client sees a summary and confirms
Once submitted, the request lands in Pipeline → Online Booking Requests as a Pending card. You approve or decline it from there.
The first screen asks for the client's phone number. There's an input with a 0 / 10 character counter (a US-style 10-digit format).
The phone number is used to match the client against your existing client list:
If the phone matches an existing client, Teddy uses that client record — the client may see their name pre-filled on the next step, and the booking will land under the existing record
If the phone is new, Teddy creates a new client record when the booking is submitted
This is why phone number is the identifier and not email: phone numbers are sticky, clients remember them, and they're unique per person in a way that email isn't (shared household emails break this).
After phone, the flow collects personal information:
First Name (required)
Last Name (optional, but encouraged)
Email (required — used for confirmation messaging)
Address (optional)
If the phone number matched an existing client, some of these fields may be pre-filled from the client record. New clients fill them in fresh.
Why email is required: Teddy uses email for the Online Booking Received confirmation message (if that auto-message is enabled) and for any future communication about the appointment. A booking without an email creates friction later. See Auto Messages.
Why address is optional: most grooming shops don't need the client's home address to book an in-shop appointment. If you run a mobile grooming business, you should still collect address, but through a separate intake form — online booking isn't the place for route planning details.
The flow asks which pet the client is booking for. New clients tap Add New Pet and fill in:
Pet Name (required)
Pet Type (required — defaults to Dog, with options for Cat, Bird, Rabbit, Other)
Pet Breed (optional but strongly encouraged)
Weight (lbs) (required)
Returning clients with existing pets on file see a Select Pets list and can pick from their saved pets instead of re-entering the same info every time. They can also add a new pet if they're bringing a different animal.
Why Pet Type, Breed, and Weight matter so much: these three fields power the pet matching filter. If matching is on, the services shown in the next step will be filtered to only those compatible with this pet. A 75-lb dog will see Large services; a 15-lb dog will see Small services.
If a client skips or lies about weight, they'll end up with the wrong service — and you'll have to correct it when the booking lands in Pipeline.
With the pet known, the flow shows a service selection screen listing all bookable services that:
Have Show in online booking turned on, AND
Pass pet matching filters based on the pet in Step 3 (if matching is enabled)
Services are grouped by category, same as on the public portal. The client taps a service to select it.
What happens if the filter hides everything: if pet matching is enabled and no service matches the pet's attributes, the client sees an empty service list and is stuck. This is the most common silent failure mode of online booking. See the debug checklist in Booking Settings under "no available slots" — the same principle applies to empty service lists.
After picking a service, the client may optionally add addons — things like teeth brushing, de-shedding, nail painting. Addons use the same pet-matching logic as services.
Once the service is chosen, the flow shows available staff members and time slots. This step is where all the availability rules from Booking Settings kick in:
Business Hours from Business settings define the outer window
Shift Management from Staff settings narrows it to staff who are scheduled
Existing appointments on the Calendar subtract already-booked time
How soon trims the earliest allowed day
How far trims the latest allowed day
Slot interval slices the remaining time into client-facing options
The client picks a staff member (if you have more than one) and a specific time slot. The slot reflects the service's actual duration, not the slot interval — a 60-minute service will block 60 minutes on the staff's calendar even if the portal shows 15-minute intervals.
If a client finds no slots available, something in the 6 checks above is excluding them. Walk through the debug checklist in Booking Settings.
The final step is a review screen summarizing everything:
Client info (name, phone, email)
Pet info (name, type, breed, weight)
Selected service (and any addons)
Staff member and time slot
Total price (if Show Price is on)
The client reviews and taps Submit (or equivalent) to send the booking request.
The moment the client submits, three things happen simultaneously:
A Pending card is created in Pipeline → Online Booking Requests. This is where you approve or decline the booking. Until you do, it's not on the Calendar yet — it's a request, not a confirmed appointment.
A notification appears: - The bell icon in the top-right of your admin shows a new notification - The Pipeline item in the sidebar shows an incremented badge count - You may receive a push or email notification depending on your notification settings
An auto-message is sent to the client (if enabled). The Online Booking Received auto message thanks them for the request and tells them they'll hear back soon. Configure it in Auto Messages.
The client sees a confirmation screen on the portal saying their request has been received and they'll hear back from you. They can close the page.
The request is Pending until you act on it. From Pipeline → Online Booking Requests, you can:
Schedule — approve the booking and add it to the Calendar. This converts the request into a real appointment and the client gets an Appointment Confirmed message (if enabled).
Decline — reject the booking (with an optional reason shown to the client). Use this when the slot has since been taken, the pet isn't a good fit, or you can't accommodate the request.
Always act on requests promptly. A client who books online and doesn't hear back within a few hours starts to wonder if the shop is still in business.
See the 6-step debug checklist in Booking Settings. The most common cause is that no staff member has a shift scheduled for the requested day.
Pet matching is hiding it. Either the client entered pet info that doesn't match any service's weight/type/breed brackets, or your services have incomplete metadata. Audit your Service catalog.
Check that the client actually tapped Submit on the final review screen. If they drop off before submitting, there's no record on your side — online booking only captures completed submissions.
Happens when pet matching is off or when clients misjudge their pet's weight. Fix it in Pipeline before scheduling: you can edit the service and time slot when you approve the request.
Tip: Once a week for the first month after launching online booking, sit down and walk through the entire flow yourself as a fake client. Use a test phone number, book a test appointment, decline it from Pipeline. This 3-minute habit will catch issues you'd otherwise learn about only when a real client complains.