Skip to content

Pricing and charging

This page explains where every penny the customer sees comes from. If a total doesn’t add up, the answer is here.

Total = frame price
+ each chosen add-on's price × its quantity
+ any accessories the customer adds

That’s it. There are no hidden margins and no maths of our own: every line is a Shopify product with its own price, and the total is the sum.

That’s why the form total and the cart total always match — it’s the same calculation.

🔴 The add-on is the surcharge, not the total

Section titled “🔴 The add-on is the surcharge, not the total”

The most expensive mistake, and the easiest to make.

The frame already has a price. When you create the product “Thin lens 1.60”, its price should be what you charge on top for that lens, not what the whole pair is worth.

Frame Thin lens Customer pays
100 15 115
100 115 215

It sounds obvious written down, but it’s easy to think “complete pair” while creating the product. The simple rule: if the frame alone is 100, your add-ons are what you add to that 100.

Creating a product worth 0 can seem pointless, but there are two reasons:

  1. The customer sees “Included” instead of a blank. It communicates value: the standard lens comes with the price.
  2. The line reaches the order, so your lab knows which lens to fit. Without a product, that information travels nowhere.

Typical example: Single vision standard 1.50 — 0.00.

Every add-on has a quantity. It defaults to 1.

Lenses sell in pairs, so if your product price is per lens, set quantity 2. If the price is already for the pair, leave it at 1.

Both approaches work. What doesn’t work is mixing them without noticing: pick one and apply it to every lens.

Each option can carry an informational badge: a small piece of text next to the name.

It’s text only. It adds nothing to the total.

If you write +30 in the badge but don’t link an add-on, the customer sees 30 and pays 0. It’s a silent error: nothing breaks, you simply undercharge, and you find out when reconciling.

Use it for things that aren’t prices — “In store only”, “Best seller”, “New” — and let add-ons carry the prices, since they’re what actually charges.

  • The total updates live with every selection.
  • Options with an add-on show their surcharge; 0-priced ones show “Included”.
  • You can hide per-option prices under Appearance → Show price adjustments if you’d rather show only the total.

The frame and each extra are separate lines, visually grouped under the frame:

Archer frame ........................... 100.00
└ Single vision thin 1.60 ............. 15.00
└ Premium anti-reflective ............. 30.00
Total 145.00

Child lines have no quantity stepper and no remove button: they’re part of the set. Removing the frame removes them all.

Them being separate lines isn’t cosmetic: it’s what lets Shopify bill each item, break it out on the order and send it to your lab.

  • Automatic discounts and codes work as normal, but many apply at checkout, not in the cart. A cart total that doesn’t show the discount doesn’t mean it won’t apply.
  • Taxes follow your store’s configuration, like any other product.
  • If you sell in multiple countries or currencies, prices show in the visitor’s. Check from the same country as your customer.

Place a test order yourself and check three things:

  • The form total matches the cart total
  • The cart total matches the checkout total
  • The order in your admin has each extra as its own line, with its price

If all three line up, your charging is set up correctly.

…make a treatment free on some frames only? Create two forms, one with the add-on at 0 and one at the normal price, and assign each to its group of products.

…raise the price of a treatment? Change the product’s price in Shopify. No need to touch the form or re-sync: the add-on points at the product, and the product sets the price.

…see how much each extra makes me? Because they’re real Shopify products, they appear in your product sales reports like any other item.