Every shop gets a public booking page at trycarsignal.com/book/your-shop. Link it from your website, Google profile, and social pages.
What the customer sees
One request, four quick steps, and no "service or problem?" fork:
- Your request. They pick any services from your catalog, describe what's happening in their own words, or both. An oil change AND a brake squeak is one request. Photos and short videos can ride along (up to 20 MB a photo, 100 MB a clip); they upload straight to storage, so a phone video fits, and anything over a limit is refused with the reason.
- Vehicle. License plate first (fastest), with VIN and year/make/model as alternatives, plus a manual fallback that never loses the rest of the request.
- Day (or Time). A month calendar and, beside it, the day's open times when you let customers pick a time, or the drop-off windows (Morning, Afternoon, Any time) when you schedule times yourself.
- Contact. Name, phone, and email, with an editable summary of everything they chose and an explicit text-consent checkbox.
The page is one card in the scheduling style customers know from booking links: a left pane with your logo, name, address (with an Open in Maps link), hours day by day, phone and time zone, and the request as it builds (services, vehicle, day), and a right pane with the step itself under a quiet numbered step indicator. Your services are one column of plain rows, each with an icon, the name and a quiet line after it: your own one-line description of the service when you wrote one, otherwise a plain default for that kind of service (an oil change reads "Oil, filter, top-off", brakes "Pads, rotors, inspection"), with the price after it when you chose to show one; a chosen row fills dark with a check. Every field on the page has its label above it, and the "Describe what's happening" box is a plain field with Add photos beside its label. Steps slide into each other instead of flashing; on phones the page is a fixed column with the Continue button in its own bar at the bottom of the screen (above the keyboard while typing) and only the middle scrolling; and the page always prints light (your app's dark mode never reaches a customer page). The widget on your own site is the same page, so it looks the same there.
A mobile service shop (Settings, Booking, ••• Mobile service) starts one step earlier. Step 1 is Where is the car?: the customer's address, checked against your service radius the moment it is entered (a picked suggestion, or a typed street and city), with the verdict right under the field ("12 miles from the shop. We come to you.") before Continue opens. In your area, the page goes on to the same request, vehicle, time and contact steps and the address rides the booking. Out of your area, the page stops there with one sentence ("We don't come out to Ventura yet. Call us and we'll see what we can do.") and Call and Text buttons to your number; no further steps. Your shop's own address never prints on a mobile shop's booking page, confirmation, or booking text and email: the page is about where the customer is, and the confirmation reads "We come to you: 12 Oak St". Texts, emails and invoices keep your phone number; invoices keep your full address.
When you let customers pick times, the Time step lists the day's open times and whatever they pick there is booked the moment they confirm: a describe-only request books a drop-off, catalog services book a timed appointment. The time is on your Schedule right away. No quote and no approval is needed to keep it; send a quote later, or not at all. The confirmation says so: "Drop-off booked" or "You're set" with the time, the text reads "your Oil change is booked for Monday, October 26 at 10:00 AM", and the confirmation offers Add to calendar. A time that fills between the picker and the confirm is refused with "That time was just taken. Pick another time." When you schedule times yourself (customer time choice off), the same calendar is a Pick a day step whose right pane offers Morning, Afternoon and Any time; the step says "The shop texts you to confirm", nothing is booked, and the request lands as a Requested entry on that day (the window in the request's notes) for you to book from the vehicle page.
The time step is a scheduling card like the ones customers already know from booking links: on a desktop the card has three panes. The left pane says what is being booked (your logo, the services as one line, about how long the visit takes, your address with an Open in Maps link, and your time zone), the middle pane is a month calendar (days with an opening are grey tiles, today has a dot, closed days, full days and the past are plain numbers that cannot be picked, arrows move between months and the keyboard works too), and the right pane lists the chosen day's open times as rows with a green dot, the picked one filled in. Times you cannot take are simply not listed; a drop-off window that is down to its last seat says "1 left". On a phone the same three parts stack in one column.
A service longer than your open day (paint, body work, an engine-out job) is booked by drop-off time instead of a start-and-finish slot: the time step reads "When can you drop it off?", the calendar titles the day "Drop off Tue, Oct 28", every time row is a drop-off time with "Ready Thu" under it, the bay is held from the drop-off to close, and the following days are yours to schedule. Before this, an 8-hour service on a 6.5-hour day showed every date as Full. The day strip and the day itself run on your shop's clock, so a day the strip calls open is never answered "past" on the next screen.
Bookings are bot-protected and confirmed to the customer by text and email.
Returning customers
The booking page recognizes a returning customer by their mobile number and offers their cars on file. When they pick one, any work they declined on a previous visit and never had done appears as an optional line, named by the job with its price ("Last visit you held off on the cabin air filter, $89. Add it to this visit?"), never preselected. A tick adds that job to the visit as it was quoted, with its parts and labor, so the advisor opens a ready job; the old declined job stays on the old visit as history.
What it creates
Each booking atomically creates the client, the vehicle, the issues, and the schedule slot, with capacity checks (bays, drop-off caps, diag-capable techs, labor budget) applied before anything is promised. The car appears in your Scheduled lane.
Your controls
Settings, Booking gives you:
- Your booking URL slug and the embed snippet
- Your booking page: one section for the page itself, the real page live inside Settings. A row above the preview holds how it looks: tap the shop header in the page (or the Shop header menu) to choose how your shop is shown at the top, Logo only, Logo and name, or Name only; the Accent menu beside it holds the page's color (seven swatches or any hex, green by default; light colors switch buttons to dark text automatically); and Phone or Desktop. Under the row, a short list of what is on the page, each a quiet row with its control at the right: Customers can choose a time (on, the Time step lists live open times that are booked on confirm; off, the step is Pick a day with Morning / Afternoon / Any time, and you confirm times: the request lands on the vehicle page with a Schedule button, so you can book the drop-off right away, no quote needed first), Hide phone number on the booking page (texts, emails and invoices keep your reply number), After-hours drop-off (with your line on where the key goes), Courtesy ride (with your policy in a sentence), and Booking emails go to (up to five addresses that get every new booking, besides the notice in the app). The booking page shows each ask you turned on as a tick under the contact details; the answer rides the appointment note and the shop notice. Every pick saves at once and the preview follows without a reload, including the time step appearing or disappearing. Desktop shows the whole page at its real height, so the Settings page scrolls, never the frame; Phone is a 390 by 844 device and the page scrolls inside it like a real phone, with its own Continue bar at the bottom. The preview opens on Desktop when your screen is 1280 or wider, Phone below, and remembers your last pick for the session. Logo only keeps your name in the browser tab and for screen readers. No logo yet? The logo looks point you to the upload under Profile; until then the page shows your name.
- Drop-offs offered per morning and afternoon, bays, minimum lead time, diagnostic block hours, and a utilization target
- Mobile service (the page's ••• menu): We travel to customers and your radius in miles. With it on, the booking page opens on Where is the car?, enforces the radius (the address is geocoded on our side, never trusted from the browser), and shows no shop address anywhere; the preview in Settings follows the switch at once. There is no separate "show the shop address" choice any more: a mobile shop never shows one, a fixed shop always does. Invoices and emails keep your full address.
Approval terms live in Settings, Quotes and invoices: your own terms and conditions, ticked by the customer before they approve an estimate or sign an invoice. Two lists, Estimate approval and Invoice signature: write each term as one sentence, mark it Required (the customer cannot approve or sign until it is ticked) or leave it optional, keep it Shown or park it, drag to reorder, and the customer's own block renders live beside the list, with the Approve or Sign button it gates, as you type. Save keeps a new version each time, so every approval records the exact wording that was ticked, even after you reword a term. Shops with no terms see no change on their customer pages.
The service catalog (Settings, Service menu) controls exactly which services are bookable. Each service has a name and, under it, an optional one-line description that prints under the name on the booking page; leave it blank and the default for that kind of service prints instead (the field shows you which).
Availability follows your shop hours, approved tech time off, and any closed days (holidays, vacations) an admin sets with Close shop on the Schedule page. Closed days simply never appear as options.
Each service can also show a price on the booking page: no price (the default; the row shows only the name), Free, a flat price, or a range like $80–$120. When everything a customer picks is free or flat-priced (and they didn't also describe a problem, which needs a look first), the booking flow tells them the total up front instead of promising a texted price. This is display only: the quote you send still sets what's billed. So nobody quotes blind, the price the customer saw is noted on the request your shop receives.
Bookable services can also carry a service template. When a booked service maps to one of your templates (pick it in the Template column, or leave it on Auto to match by name, e.g. an "Oil Change" service finds your "Oil change" template), the job arrives pre-built: labor at your rate or the flat package price, and part requests that find the right fitment parts for that specific car. Book an oil change online, open the job, and the correct oil and filter are already on it.
Put booking on your own website
One script tag, anywhere in your site's HTML:
<script src="https://www.trycarsignal.com/widget.js" data-shop="your-shop" async></script>
Replace your-shop with your booking URL slug from Settings, Booking. That's it. A Book Service button floats in the corner of every page it's on, and clicking it opens your booking flow in a window over your site. Works on any website builder that lets you add custom HTML (Squarespace, Wix, Webflow, WordPress, hand-built, all fine).
The window is your booking page itself: the same card with your shop details (address, your hours day by day with today in bold, phone) and How it works on the left, the same steps (including the time step when customers can choose a time), services, fields and Continue button, at the same size. On phones it fills the screen.
Want it on your own button instead of the floating one? Give the script your button:
<a href="#" id="book-now">Book an appointment</a>
<script src="https://www.trycarsignal.com/widget.js" data-shop="your-shop" data-trigger="#book-now" async></script>
Optional extras: data-text="Schedule now" changes the floating button's label, data-color="#0a4f8a" its color, data-position="bottom-left" its corner.
A second request for the same car while its visit is still open adds only the services that are not already on it; the confirmation lists the rest under Already on your visit, and nothing is added twice.
The link in an outreach text or email opens this same booking page with the customer and car already filled in: the vehicle and contact steps collapse to one line each ("Different car?", "Not you?"), the work the message was about is already ticked (a declined job with its quoted price, or the service that is due), any offer code rides along and is applied when they book, and a link that was already used opens on its confirmation. See Outreach.
Mobile service
Shops with mobile service turned on get a booking page that speaks the right direction. It opens on Where is the car? (five steps instead of four), checks the address against your radius before the customer picks anything, saves the address on the booking and on their customer record (when they had none), and every confirmation reads as a visit to them, never a drop-off. Your shop address is never on the page, the confirmation, or the booking text and email. An address just outside your radius reads "About 32 miles out, a little past our usual 25. Call us and we'll see"; one far past it gets the calm "we don't come out there yet" sentence; both show your Call and Text buttons, so the customer still reaches you. When the address cannot be checked (the map service is down), the page offers a retry and lets the customer through only if that fails too; the booking is flagged for you to confirm. Tokenized booking links follow the same rule: a customer you already serve may leave the address blank ("we come to the address we have for you"), and the manage-appointment page shows the visit address.
A booking with a picked time is a real appointment on your Schedule from the moment the customer books it. Sending a quote does not move it, and approving one never re-books it. The amber pending entries ("Requested · still needs a time", or "Approved · still needs a time" once approved) are requests that have no time yet: a request from a shop that schedules its own times, an approval whose picked time could not be booked, or a request from before bookings confirmed on their own. Clicking one opens the vehicle, where Schedule books it.
When you mark the last open job on a booked visit declined, CarSignal asks right there whether to cancel the appointment too (Keep it or Cancel appointment, with a tick to text the customer). A customer declining the whole quote from their link leaves the appointment on your schedule, and the notice you get says so.
What an online booking looks like on the car
Where a visit came from is said once, at the top of the car page beside the car's name: Online booking (hover it for what the customer wrote), Phone or Text when the AI receptionist opened it, Walk-in for a car checked in with no appointment. Any of those but an online booking can be changed there in one tap. Vehicles (list and board, where an online booking reads Online booking · Sat 9:00 AM) and the phone carry the same word. A job the customer added themselves in the booking wears a quiet Online booking after its status; jobs you add to that visit wear nothing. Open the job and what the customer wrote sits at the top, only when it says more than the job's name. On the Schedule the appointment carries a quiet Online chip, its card reads Booked: Online, and hovering the block shows the same words.
Deleting one of these jobs asks first: This is an online booking, with who booked what for when and their note, and Keep it or Delete and cancel visit (the tick to text the customer that the appointment is cancelled is on). If other work keeps the visit, deleting the job leaves the appointment on your schedule and the dialog says so; if the car is already in the shop, nothing is cancelled. The same question is asked on the phone.