How to charge by the square foot on Shopify
Short answer: Shopify can't price by area on its own: every price belongs to a variant. To charge by the square foot, customers enter a width and height on the product page, the price is width × height × your rate (with a minimum charge), and a Shopify Function sets exactly that price at checkout. Below is the formula, worked examples, and how to set it up.
Why Shopify needs help with area pricing
A Shopify product has a price per variant. Variants work for a short list of sizes, like 2 × 4 ft, 3 × 6 ft and 4 × 8 ft. They can't cover a customer who needs 37 × 81 inches, and they can't recalculate when the customer changes the material. Since October 2025 every plan allows up to 2,048 variants per product, but a banner sold in whole inches up to 120 × 120 already has 14,400 sizes, before any material choice.
So area pricing needs three things Shopify doesn't do by itself: size fields on the product page, a price worked out from those sizes, and a checkout that charges that price rather than the variant's.
The square-foot formula
Area is width × height. In inches, divide by 144 to get square feet:
square feet = width (in) × height (in) ÷ 144
price = square feet × rate per sq ft
Most shops also charge a minimum, so a small piece still covers setup, handling and waste:
price = the larger of (square feet × rate) and the minimum charge
Worked examples
At $3.50 per square foot with a $25.00 minimum:
| Size entered | Square feet | Area × rate | Customer pays |
|---|---|---|---|
| 24 × 36 in | 6 | $21.00 | $25.00 (minimum) |
| 36 × 72 in | 18 | $63.00 | $63.00 |
| 48 × 96 in | 32 | $112.00 | $112.00 |
| 10 × 4 ft | 40 | $140.00 | $140.00 |
The customer can type inches while you price per square foot: the conversion is the ÷ 144. In Trimsize you choose the unit customers enter and the unit your rate is per separately, and it converts.
Per square metre instead
The same idea in metric: price = width (m) × height (m) × rate per m². A 1.2 × 2.5 m banner is 3 m², so at $38.00 per m² it costs $114.00. One square metre is 10.764 square feet, so $3.50 per sq ft is about $37.67 per m².
Charging for the edge
Hemming, edge banding and frames follow the perimeter, not the area. The perimeter is 2 × (width + height). A 4 × 8 ft banner has 24 ft of edge, so hemming at $0.75 per foot adds $18.00: at $3.50 per sq ft, the banner costs $112.00 + $18.00 = $130.00.
Billing whole square feet
Some shops round the area up to the next whole square foot. A 30 × 30 in sign is 6.25 sq ft; rounded up it's 7, so $24.50 at $3.50. In Trimsize that's a formula on the product: ceil(width * height / 144) * 144 * rate with sizes in inches. Check it in the live preview before saving.
Your options on Shopify
| Approach | Any size? | Price at checkout | Effort |
|---|---|---|---|
| Variants, one per size | No: a fixed list | Correct for the listed sizes | Grows with every size and material |
| Theme code that shows a price | Shows any size | Wrong: checkout still charges the variant price | Custom development |
| Manual quotes or draft orders | Yes | Correct, but by hand | Every order waits for you |
| A size pricing app with a Shopify Function | Yes | Correct, automatically | Set rates once |
The key detail is the checkout. A theme can display any number, but only a Shopify Function (Cart Transform) can change the price Shopify charges. That's what makes the price on the product page the price on the order.
Set it up with Trimsize
- Install Trimsize from the Shopify App Store. It opens on Home with a five-step setup guide.
- Start from your trade's prices: under What do you make?, choose a trade such as Vinyl banner, click Choose product, then Set up pricing. This creates a template with example prices on that product.
- Set your rates: in the product's pricing, each material has a Rate and Rate per (sq in, sq ft, sq cm or m²) and an optional Minimum charge. See Materials.
- Add extras like hemming per foot of edge or grommets per piece. See Add-ons.
- Add the Trimsize block to your product page with Add block in theme editor. It hides the theme's catalog price on configured products, so shoppers see one price. See Product page block.
- Place a test order. The cart and checkout show the calculated price. See Cart and checkout.
Prefer a supplier's size table to a rate? Pricing from a supplier's table works the same way, by width and height band.
Getting the exact price at checkout
Trimsize sets each line's price at checkout with a Shopify Function, from the size and options on the line, so there are no hidden variants or extra fee products. A checkout rule also stops an order whose size was removed or whose price was edited in the cart. Both run on Shopify's own servers. See How prices are calculated.
Common mistakes
- No minimum charge. Small sizes end up cheaper than the work. Set a minimum per material.
- Mixing units. A rate per square inch typed as if per square foot is 144 times too low. Check the Rate per field.
- Two prices on the page. Trimsize hides the theme's catalog price on configured products for most themes. If yours still shows it, remove the Price block from the template those products use.
- No size limits. Set the largest size you can produce, so nobody orders a banner wider than your printer. See Size limits.
Questions
Can customers enter inches while I price per square foot?
Yes. The size unit and the rate unit are separate settings. Customers type inches, feet, centimetres, millimetres or metres, and Trimsize converts to the unit your rate is per.
How do I set a minimum price for small sizes?
Give each material a minimum charge. The base price is never below it, whatever the size, and add-ons are added on top.
Does the calculated price really reach checkout?
Yes. A Shopify Function sets the line price from the size and options when the customer checks out, and a checkout rule blocks lines whose size or price was tampered with.
Do I need to code anything?
No. You set rates, minimums and extras in the app, and add the product page block from the theme editor. A formula is optional, for cases like rounding up to whole square feet.