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”.
  • The surcharge reads “+$70.00” by default. You can change how it’s written under Design → Interface texts → Prices and summary → Option surcharge, per language: {price} extra gives “$70.00 extra” and Add {price} gives “Add $70.00”. It applies on the card and on colours with a surcharge. Without the “+”, shoppers may read the amount as the total price: if what you want is to show the total, use the Total price mode on the option or the step; and if you want the option’s price with no sign, Option price only (the four modes).
  • You can hide per-option prices under Appearance → Show price adjustments if you’d rather show only the total.
  • In the Starting price mode (the card shows what the set would cost, not the surcharge), the word “From” only appears on options from which the price can still rise: because a priced treatment, a colour with a surcharge, contact lenses or an accessories step come after them. An option that ends the form, or is only followed by free steps, shows its total with no “From”. Nothing to configure: the word follows each option.

You choose which amount an option’s card shows in the form editor: on each step, the Price shown on the options dropdown; and if one option needs something different from the rest of its step, on that option, Price shown on this option. With an $85 frame and an option whose add-on costs $25:

Mode The card says What it counts
Extra cost only “+$25.00” What that option adds. The default.
Starting price “From $110.00” The frame, what’s been chosen so far, the option and the cheapest still left to choose. For a first step that splits into paths.
Total price “$110.00” The frame, what’s been chosen so far and the option. For a step after which nothing else is charged.
Option price only “$25.00” Only what that option costs: no “+”, no frame and nothing chosen on earlier steps.

Option price only is for steps where each option reads as a product with its own price — a $59 lens package — rather than as an extra. It matters most when an earlier step has already charged something: with a $35 rimless mounting fee chosen earlier, Total price shows that package as “$94.00” (it adds what’s already chosen, so the card agrees with the footer total) and Extra cost only as “+$59.00”. With Option price only it says “$59.00”, and the fee stays on its own step and in the total.

Three details of that mode:

  • A 0-priced option still shows “Included”, just as in Extra cost only.
  • If the option has colours with different surcharges, it says “From” until the customer picks one.
  • The surcharge text you wrote under Design doesn’t apply: the card shows the amount alone.

The mode only decides what the card reads. The footer total, the cart and what gets charged are the same in all four.

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 (Shopify Markets), the form shows the prices of the visitor’s market: the frame and every surcharge too, with whatever price adjustment or currency that market has. So the total matches the cart and the checkout for that country. Nothing to configure: it switches on by itself when the store sells in more than one country. Check from the same country as your customer, or with your theme’s country selector.

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.

…make a lens package show its own price, with no “+” and nothing added to it? On the packages step, set Price shown on the options to Option price only and save. Each card will say what that package costs; the footer total still adds the frame and what was chosen before.

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