Since the end of September you can build a Shopify report that groups net sales by colour, material or fit without exporting anything. The attributes sitting on your products from the standard product taxonomy, plus fields on any metaobject your products reference, are now selectable as dimensions in the report builder. If you have spent the last two seasons pulling a product export into Google Sheets and VLOOKUPing variant titles against an inventory file to work out whether the sage sold better than the ecru, that job is finished. Shopify analytics category metafields do it natively now.
The catch is that the report is only as good as the attribute data behind it, and most Australian catalogues we open have that data half-filled. So the useful part of this post is less about where to click and more about what to fix first.
Variant options, category metafields and metaobjects are three different things
Worth getting straight before you build anything, because they behave differently in reports and in filters.
Variant options are Colour and Size as you set them on the product: Sage / 10. They drive inventory and the add-to-cart. They have always been visible in reports through the variant, but as a blob of text. "Sage / 10" is one string, not two dimensions, which is exactly why everyone ended up in a spreadsheet splitting it on the slash.
Category metafields are the attributes Shopify attaches when you assign a product to a taxonomy category. Put a dress in Apparel & Accessories > Clothing > Dresses and you get fields like colour, fabric, sleeve length, neckline, target gender, age group. These are structured. Colour is a value from a list, not a typed word, so "Sage", "sage" and "Sage Green" stop being three different things.
Metaobjects are your own structured records. A homewares merchant might have a Fabric metaobject with fields for composition, GSM, mill and country of origin, referenced by forty products. Fields on that metaobject can now be used as report dimensions too, which means you can ask for sell-through by mill, or by GSM band, without touching the product records at all.
Most stores need all three. Size stays a variant option because you sell it. Fabric composition belongs on a metaobject because it repeats. Colour belongs in the category attribute even though it is also a variant option, and yes, that means entering it twice. Annoying. Do it anyway, because the taxonomy value is the one that groups cleanly.
Setting up the taxonomy attributes without re-touching 3,000 SKUs by hand
Start by assigning categories properly. In the product admin, the Category field drives which attributes appear. Get it wrong at the top and nothing below works: a kaftan filed under Clothing instead of Dresses gets a different attribute set, and your colour report quietly drops it.
For bulk work, the admin's bulk editor handles a few hundred rows reasonably. Past that, use a CSV import or a tool like Matrixify to write category and metafield values in one pass. The mapping job is the real work. If your colour option values are supplier names like "Oat Marle", "Bone" and "Chalk", you need a decision about whether all three map to the taxonomy value Beige or stay distinct. Our rule: map to the broad taxonomy colour for reporting, keep the poetic name as the customer-facing option value. You want to know that beige outsells navy three to one. You do not want that insight split across eleven rows.
We get the first pass wrong on roughly a third of a catalogue, usually on multi-colour products and prints. Decide early how a floral with four colours gets tagged, because a product that carries five colour values will be counted in all five buckets and your totals will not tie back to net sales. Pick a dominant colour. Live with the imprecision.
One more awkward case: if you hold stock in more than one location, inventory-based measures need a location filter or you will be reading a national number while making a decision about the Sydney warehouse.
Reporting sales by colour and size in Shopify, in one report
In Analytics > Reports, start from a sales report and edit the dimensions. Add the category colour attribute as a dimension and the size option as a second. Measures: units sold, net sales, and if you are judging a season, returns. Filter to a date range that matches a drop rather than a calendar month.
Note that custom report editing needs the Shopify plan or above. On Basic you get the standard reports and not much freedom, which is one of the few genuinely good reasons to move up a plan tier for a small store.
Two things to watch on the numbers. Net sales in Shopify excludes GST where your prices are tax-inclusive, which is the normal Australian setup, so a colour report will not tie to your Xero revenue line until you add the 10% back. And sessions-based metrics are product-level, not variant-level, so you can see what a colour earned but not how many people viewed it. Conversion rate by colour is not a thing you can get here. Sell-through is.
Sell-through rate by fabric or material, with the arithmetic
Sell-through is units sold divided by units sold plus units still on hand, over a defined window. Shopify will not calculate it for you in one click, but both inputs are now available by attribute, so it is a two-minute job rather than a two-hour one.
Say you dropped a mid-season range in March and you are reading it at the end of April. Linen: 420 units sold, 180 on hand. 420 ÷ 600 = 70%. Viscose: 210 sold, 640 on hand. 210 ÷ 850 = 24.7%. Same silhouettes, same price band, same photography. The linen is gone in six weeks and the viscose is a June markdown waiting to happen.
That is a reorder decision and a buying decision. It is also, for a lot of Australian brands, a claims decision: provenance and fibre content are exactly the areas the ACCC has been active on, so if linen is carrying your sell-through, the mill and composition data had better be real before it goes on a product page. Keeping that information in a metaobject rather than a free-text description is the difference between a substantiated claim and forty product pages you cannot audit.
Which variants to reorder, read off the same data
Sell-through alone will mislead you on size. A 60% sell-through on size 8 and 30% on size 16 might mean the 16 is not selling, or it might mean you bought a 4-8-12-6-2 curve and the 16 sold out in week two. Pair sell-through with weeks of cover and with the sold-out date. A variant that hit zero in week three at 100% sell-through is a lost-sales problem, not a winner.
Add returns as a measure when you break down by size. In fashion the pattern we see is consistent: colour drives sell-through, size drives returns. A colour with a 40% return rate is a photography and colour-accuracy problem. A size with a 40% return rate is a grading problem, and reordering it harder makes it worse.
Season timing matters more here than merchants expect. Your northern-hemisphere suppliers are showing you autumn palettes while you are selling for a Christmas in 34 degrees, and your EOFY stocktake sale in June lands mid-winter, when you are clearing the very knitwear colours you still have eight weeks left to sell at full price. Read your colour sell-through at week six of a drop, not at the sale. Click Frenzy in November distorts everything after it, so pull the pre-Click Frenzy numbers separately if you want a clean read on full-price demand.
The same metafields power your collection filters
Filling in taxonomy attributes for reporting has a second payoff. Mark a metafield as filterable through Search & Discovery and it becomes a storefront filter on collection pages. Colour, fabric, fit, neckline, GSM, origin. The data you entered to find out what sells also helps customers find it.
This is where the effort pays twice on a large catalogue. If you have more than a few hundred SKUs and your collection pages offer only Size and Price, you are losing people who know they want a linen shirt in white. Shopify's native filters cover the basics; if you want AI search, swatch filters and faster merchandising control over which facets appear where, our own FilterPro app is built for that, and it reads the same metafields you have just populated. Either way, the taxonomy work is the prerequisite. For the broader build, see our Shopify apps.
What you still cannot do
Not every custom metafield is available as a report dimension, and support varies by field type. Reference fields and list fields behave unevenly. Test the specific attribute you care about before you plan a season around it.
Cost of goods by attribute is still awkward, so true margin by colour needs COGS filled on every variant. Most stores we audit have it on about half. And attribution stays separate: you cannot yet tie a colour's sell-through to the Meta campaign that sold it without a third-party tool or a reasonably painful manual join.
Start with one category, not the whole catalogue
Pick your highest-revenue category. Fix the taxonomy assignment and fill colour, material and fit on the top 50 SKUs by units. Build one report: colour by units and net sales, last 90 days. Then build a second with size and returns. Run them at week six of your next drop and compare against what your buyer assumed.
If the catalogue is too far gone for that to be practical, a free audit will tell you how much of the attribute data is salvageable by import and how much needs re-entry. We work with Australian fashion and homewares brands from our team in Bengaluru, and the Shopify agency Australia page covers how that engagement normally runs.


