MeasureLab Shopify app ↗
Guides · Fabric & textiles

Guide · 7 min read

How to sell fabric by the metre on Shopify

Shopify thinks in units: one T-shirt, two mugs. Fabric is cut to whatever length the customer needs, so the price has to follow the length. Here are the four ways shops handle that, what each one costs you, and how to set it up so the price at checkout is always right.

The four ways to sell by length

1. The quantity box counts metres

Free · built in · whole units only

Set the product's price to your price per metre and tell customers that a quantity of 3 means 3 metres. It needs no app and works well if you only cut whole metres. Half metres are where it gets awkward: you'd price per 50 cm and explain that a quantity of 5 means 2.5 m, and customers do get that wrong.

2. A variant for every length

Free · fine for a few fixed lengths

Make variants for 0.5 m, 1 m, 1.5 m and so on, each with its own price. Good for pre-cut pieces. For true cut-to-length it means dozens of variants per fabric, a long dropdown for the customer, and still no way to order exactly 2.35 m. Change your price per metre and every variant needs editing.

3. A "length" field with no price

Free with a field app · price doesn't follow

A custom text box lets customers type the length they want, and it lands on the order. But the price doesn't change with it, so you either charge a placeholder and send a corrected invoice, or quote every order by email.

4. A calculator on the product page

An app · any length, priced live

The customer types the length, picks any options, and watches the price update before adding to cart. The length and the price travel together to checkout and onto the order. This is the only way that handles any length with no manual work afterwards, and it's what the rest of this guide sets up.

A worked example

Say your linen costs £14.50 per metre, you cut in 10 cm steps, and you won't cut less than 0.5 m. A customer asks for 2.35 m: you'd cut 2.4 m and charge 2.4 × £14.50 = £34.80. Try other lengths:

2.35 m → cut 2.40 m × £14.50
£34.80

This is the same sum a calculator does on your product page, in front of the customer, before they add to cart.

Setting it up with a calculator

Here's how it looks with MeasureLab, the calculator app we make. The same ideas apply to any calculator app you choose.

  1. Open your fabric product in MeasureLab. Keep one product per fabric, and offer its colours as choices in the calculator.
  2. Add a "Length" input in metres with your shortest and longest cut, for example 0.5 to 30 m. Or start from the “Fabric by the metre” template and adjust it.
  3. Price it per metre, rounded to your cut: ceilto(length, 0.1) × 14.50 rounds 2.35 m up to 2.4 m before multiplying. Prefer whole half metres? Use 0.5 as the step.
  4. Add what else you charge: a minimum charge, a one-off cutting fee, or choices such as "pre-washed" with their own price per metre.
  5. Publish, then place the calculator block on your product page in the theme editor. The app links you straight there.

Every order then shows the length the customer chose next to the line, and the price is checked again at checkout, so nobody can edit it on the way.

Details that save you emails

Questions

Can customers order a length like 1.75 m?

With a length field and a calculator, yes: they type any length within your minimum and maximum, and you decide how it's rounded, for example up to the next 10 cm. With Shopify's quantity box alone, only whole units are possible.

Can a customer change the price before paying?

Not with MeasureLab. The price is worked out again at checkout from the length and options in the cart, so an edited price never goes through.

Do I need a variant for every length?

No. One product with a per-metre price covers every length. Variants are only worth it if you sell a few fixed lengths, such as pre-cut 1 m and 2 m pieces.

What about customers who think in yards?

Keep pricing per metre and let customers type in the unit they prefer: 1 yard is 0.9144 m, and the conversion happens before the price is worked out.