Booking add-ons: how to upsell extras at checkout and increase revenue per booking

Stanislav TyshchenkoProduct Update8 min readJun 13, 2026
Booking add-ons — upsell extras at checkout

Booking add-ons are now live in Opencals. They let you offer optional extras — equipment rentals, premium upgrades, complementary products — during the booking flow, right after a customer picks a service and time slot.

The customer sees what's available, selects what they want, sets a quantity if needed, and pays the combined total in a single transaction. No separate product listings. No follow-up emails. No manual upsell attempts after the fact.

This post covers how add-ons work, which businesses benefit most, and how to set them up.

The problem add-ons solve

Most booking software treats every appointment as a fixed-price, single-line transaction. The customer picks a service, books a slot, pays. That's it.

But service businesses regularly offer things that don't fit neatly into a "service" slot. A yoga class has mat rentals. A car rental has GPS devices, child seats, and extra driver coverage. A spa has aromatherapy upgrades and extended time blocks. A photography session has rush editing packages and print sets.

Selling these extras currently means one of three things: create a separate bookable service for each item (messy), ask about them over email after booking (slow and low conversion), or handle it manually at the door (no pre-payment, harder to plan).

Add-ons solve this by bringing extras into the booking flow at the right moment — after the customer has already committed to booking, while they're still in checkout mode.

The best time to offer an upgrade is right after someone decides they want the thing. Add-ons surface at exactly that point.

How add-ons work in the booking flow

When a customer completes service and time slot selection, they see a new step before checkout: the add-ons screen. It shows available extras for that service, with a title, description, image, and price for each. They select what they want, set quantities where relevant, and continue.

The cart then shows two types of line items: the base service and each selected add-on. The total is calculated automatically. One payment covers everything.

On the backend, add-ons flow through the full order lifecycle:

  • Order — each add-on becomes a line item with its own subtotal, tax, and refund status
  • Appointment — staff can see which extras were booked before the customer arrives
  • Refunds — add-ons can be refunded independently, including partial quantities

Per-service

Add-on scoping

Fixed or per-unit

Pricing modes

Snapshot

Price locked at booking

Shopify + Standalone

Both platforms

Two pricing modes

Add-ons have two ways of calculating price, depending on what you're selling.

Fixed add-ons — the customer picks a quantity and pays a flat price per unit. A deep conditioning treatment at $20 is a fixed add-on. A child seat rental at $12 is a fixed add-on. The customer might order one or two. You set a maximum quantity if needed.

Duration-multiplied add-ons — quantity is set automatically to the number of duration units in the booking. This is designed for per-day or per-hour charges where asking the customer to manually enter duration would be confusing.

A GPS device at $5/day on a car rental: if the customer books 3 days, the quantity becomes 3 automatically. Total = $15. The customer never has to do the math — they see the unit price, the system calculates the rest.

This is especially useful for services with flexible duration (where customers choose their own booking length), because the add-on total scales naturally with whatever they've selected.

Real examples across industries

Hair salon

A coloring or cut service can have add-ons like deep conditioning, scalp massage, and hair mask. Each is a fixed add-on with a quantity of 1 — you either want the treatment or you don't. Assign them only to the services where they make sense: a scalp massage add-on probably doesn't belong on a quick trim.

Car rental

GPS device and extra driver insurance both make sense as duration-multiplied add-ons — the customer pays per day. A child seat is a fixed add-on (you either need it or you don't, regardless of rental length). Max quantity on the child seat might be 4. No max on the per-day items.

Spa and wellness

An aromatherapy upgrade is a fixed add-on ($18, quantity 1). Premium oil blends are fixed. Extended time is a duration-multiplied add-on — priced per 30-minute block, with quantity auto-set to however many extra blocks the customer adds.

Photography session

Extra edited photos, rush delivery, and a print set are all fixed add-ons with different price points. Rush delivery might have max quantity 1. Extra edited photos might go up to 5.

Fitness studio

Mat rental, resistance band set, towel service — each a fixed add-on attached to class services. If your studio has multiple locations, you can restrict certain add-ons to only the locations where the equipment is available.

Scoping add-ons correctly

An add-on only appears when a customer books a service it's assigned to. This scoping is by design — it prevents irrelevant offers and keeps the selection screen focused.

You can scope further by location and staff member. If a premium product is only available at one location, restrict the add-on to that location. If a specific upgrade only applies to certain staff, limit it accordingly.

The rule of thumb: don't restrict unless you have a real reason to. A hair mask add-on that works with any stylist doesn't need to be staff-scoped. Over-restricting means customers who should see an option won't.

Start broad, narrow later

Assign add-ons to all relevant services first. After a few weeks of data, you'll see which combinations get selected most. That's when it makes sense to optimize scoping.

Tax and pricing behavior

Add-on tax follows your store's global tax settings automatically:

  • Tax-inclusive stores — the displayed price includes tax. Opencals calculates the tax portion for accounting purposes.
  • Tax-exclusive stores — tax is added on top at checkout.
  • Non-taxable add-ons — mark individual add-ons as non-taxable for items like tips, donations, or tax-exempt accessories. Prices are snapshotted at the time of booking. If you later update a catalog price, existing orders keep the price the customer actually paid. This matters for refunds and reconciliation — you're always looking at the real transaction amount.

Refunding add-ons

Add-on line items refund independently. If a customer books a car plus GPS and a child seat, then returns the car early, you can refund the GPS for the unused days without touching the child seat charge.

Partial quantity refunds work the same way — refund 2 of 3 units of something. The order shows the remaining balance and full refund history.

This is standard order accounting behavior. Add-ons aren't bundled into the service price — they're separate line items from the start, which makes this straightforward.

Setting it up in Opencals

1

Create the add-on

Go to Products → Add-Ons in the dashboard. Give it a name, price, and description. Add an image if you have one. Set status to active.

2

Choose the pricing mode

Leave durationMultiplied off for fixed extras (equipment, treatments, one-off items). Enable it for per-day or per-hour charges where quantity should match the service duration.

3

Assign it to services

An add-on doesn't appear until it's linked to at least one service. Assign it to every service where the extra makes sense.

4

Optionally restrict by location or staff

If the add-on is only available at certain locations or with specific staff, add those restrictions. Otherwise leave them empty — the add-on will be available everywhere.

5

Set a max quantity if needed

For items with practical limits (child seats, premium kit availability), set maxQuantity. Leave it empty for unlimited.

The add-on is live immediately after you activate it. There's no widget configuration to update — it appears automatically in the booking flow for the services it's assigned to.

What this looks like for your customers

From the customer's perspective, the experience is one continuous flow: pick a service, pick a time, choose any extras, pay. There's no separate "upsell" step that feels tacked on — it's part of the checkout process.

Customers who don't want anything extra just click through. Customers who do see clear pricing and a simple selection. The booking confirmation shows everything they ordered.

Your staff sees the add-ons attached to each appointment before the customer arrives. No surprise requests. No "oh, they said they wanted the mat rental" conversations at the door.

Frequently Asked Questions

Early Access — 3 Months Free

Ready to transform your service business?

Join 150+ businesses already using Opencals. Get 3 months completely free with all features unlocked.

No credit card required
Setup in 10 minutes
Cancel anytime