The Hidden Complexity of Shopify Product Migration
17 March 2026 · Huskai · 6 min read
The Problem Every Product Seller Knows
If you've ever managed a product catalogue on Shopify, you'll know the pain. You want to sell a collar in 19 colours, 7 sizes, and 6 fastening types. Shopify says: "Sure, that'll be 798 rows please."
19 colours × 7 sizes × 6 fastenings = 798 variant rows. For a single product.
Even with Shopify's recently increased variant limit, you're still managing 798 individual rows for one product. Every row needs its own SKU, price, and inventory count. And every time you add a colour or size, the number of rows multiplies.
We ran the numbers when we migrated Dottie's Pet Boutique from Shopify to Haul. Our Shopify export was 54,117 rows across 663 products — and only 147 of those had been converted to variants. We'd given up adding variants to the rest because it was too painful. Those 147 products alone accounted for over 53,000 rows, averaging 365 rows per product. If we'd converted the full catalogue, we'd have been looking at roughly 242,000 rows in a single CSV.
The same catalogue in Haul? 663 products, 3 variant groups, 32 options. That's it.
How Shopify Does Variants (and Why It Hurts)
Shopify uses what's called an "exploded" variant model. Every possible combination of options becomes its own row with its own SKU, price, and inventory count.
Let's say you sell a simple collar with:
- 3 sizes: Small, Medium, Large
- 4 colours: Red, Blue, Green, Black
That's 12 variant rows. Manageable. But real products aren't that simple. Add a fastening type (Clip Buckle, Belt Buckle, Martingale) and you're at 36. Add a hardware finish (Gold, Silver, Rose Gold) and you're at 108 — already over Shopify's old limit.
The real cost isn't just the row count. It's what happens when you need to make a change:
- Add a new colour? You need to create rows for every size–fastening–hardware combination. That's 7 × 6 = 42 new rows for one colour.
- Change the price of the Large size? You need to update every row where size = Large. That's 19 × 6 = 114 rows to edit.
- Discontinue a fastening type? Delete rows across every colour and size combination.
It's spreadsheet hell, and it only gets worse as your catalogue grows.
How Haul Does It (and Why It's Better)
Haul uses a variant group model. Instead of exploding every combination into its own row, it keeps things logical:
Variant groups are reusable building blocks — "Size", "Colour", "Fastening Type". Each group has a set of options with optional price adjustments.
For that same collar:
| Group | Options | Price Adjustment |
|---|---|---|
| Size | XS, S, M, L, XL, XXL, 3XL | +£0 to +£3.50 |
| Colour | 19 colours | £0 each |
| Fastening | Clip Buckle, Belt Buckle, Martingale, Side Release, Toggle, Magnetic | +£0 to +£1.50 |
Total options: 32. Not 798. Just 32.
The final price is calculated as:
Base price + Size adjustment + Colour adjustment + Fastening adjustment
So a Medium collar in Ocean Blue with a Belt Buckle might be:
£18.00 (base) + £0.50 (Medium) + £0.00 (Ocean Blue) + £1.50 (Belt Buckle) = £20.00
Simple. Transparent. No spreadsheet required.
The Template System: Set It Once, Use It Everywhere
Here's where it gets really powerful. Variant groups in Haul are reusable and global. You create them once, then assemble them into product templates.
A "Standard Collar" template might use Size + Colour + Fastening. A "Lead" template might use Length + Colour. A "Bow Tie" template might just use Size + Fabric.
When you create a new product, you pick a template and you're done. All the options are inherited. No copying, no pasting, no mistakes.
Add a new colour to the Colour group? It's instantly available on every product that uses that group. One change, hundreds of products updated. Try doing that on Shopify.
Real Numbers from Our Migration
When we moved Dottie's Pet Boutique from Shopify to Haul, the difference was staggering:
| Metric | Shopify | Haul |
|---|---|---|
| CSV rows (147 variant products) | 54,117 | — |
| Estimated full catalogue | ~242,000 rows | — |
| Products | 663 | 663 |
| Variant definitions | 365 rows per product (avg) | 32 options across 3 groups |
| To add 1 new colour | 42+ new rows per product | 1 option added to Colour group |
| To change Large pricing | Edit 114+ rows per product | Change 1 price adjustment |
| Management overhead | Edit hundreds of rows per product | Edit 32 options total |
The Shopify export was over 50,000 rows of repetitive data. The same information in Haul is represented by 3 variant groups with 32 options between them. That's a reduction from tens of thousands of variant rows to just 32 configurable options — and every change you make propagates instantly across your entire catalogue.
What This Means for Your Day-to-Day
Faster Product Creation
Instead of building out every combination manually, you pick a template, set a base price, and you're live. A product that took 20 minutes on Shopify takes 2 minutes on Haul.
Easier Price Changes
Seasonal sale on all Large items? Change the price adjustment once on the Size group. Done. No bulk CSV exports and re-imports.
No Combinatorial Explosion
Even though Shopify raised its variant limit, you still have to manage every individual combination as a separate row. On Haul, 50 colours, 10 sizes, and 8 fastenings is just 68 options — not 4,000 rows.
Cleaner Customer Experience
Customers see dropdown menus for each option group, not a scroll through 798 pre-built combinations. The price updates in real time as they make selections. It's intuitive and fast.
Consistent Catalogue
Because variant groups are shared across products, your naming is always consistent. No more "Lrg" on one product and "Large" on another because someone mis-typed a Shopify CSV.
Stock Without the Spreadsheet
Here's one that catches a lot of sellers off guard. If you don't track stock on Shopify, the variant explosion is still a nightmare — you've got 798 rows you never asked for, cluttering your admin, slowing down your exports, and making bulk edits a minefield.
And if you do track stock? It's even worse. Every single combination needs its own inventory count. Got 19 colours and 7 sizes? That's 133 stock levels to maintain for one product. Restock a colour across all sizes? That's 7 separate updates. Miss one and you've got a size showing as out of stock when it isn't.
Haul's built-in inventory manager handles stock at the product level by default, with the option to track per-variant where it matters. You get a dedicated low-stock dashboard, stock alerts, and bulk adjustment tools — without needing to wade through hundreds of variant rows just to update a number.
The Bottom Line
Shopify's variant model was designed for simple products — a t-shirt in 3 sizes and 4 colours. It breaks down the moment you have real product complexity. And for handmade, customisable products like ours? It's a nightmare.
Haul's variant group system was built for sellers like us. It's how variants should work: logical, reusable, and scalable. No row limits, no spreadsheet gymnastics, no compromises.
We moved 663 products from 54,117 Shopify rows into a system that just makes sense. If you're drowning in variant management, there's a better way.
If you're weighing up whether to leave Shopify, we've written a full comparison of Haul vs Shopify covering features, fees, and what the switch actually involves.
Dottie's Pet Boutique creates handmade, personalised collars and accessories for dogs and cats. They were one of the first shops to make the switch to Haul.
Interested in Haul? Learn more about Haul or see how Haul compares to Shopify.