Shopify import: variants or sizes missing after upload
You imported ten sizes and three showed up. Nothing errored — Shopify just silently dropped or merged the rest. This is almost always about how your rows relate to each other, not any single row being wrong on its own. Drop your file in below to check it.
How Shopify's variant rows actually work
Shopify's product CSV doesn't have a dedicated "variants" section — a product with multiple variants is represented as multiple CSV rows that all share the same Handle. Only the first row of that group needs the full product-level fields (Title, Body, Vendor, Type, and so on); every row after it can leave those blank and they'll be inherited from the first row. But that inheritance doesn't apply to the variant-specific fields: every single row, including the first, needs its own Option1 Value (and Option2/Option3 Value if the product has a second or third option), plus its own Variant SKU, Variant Price, and other per-variant fields. Miss one of those on a row and that variant either doesn't import or imports with the wrong data.
Breaker 1: sorting scrambles the Handle grouping
Shopify's importer expects the rows for one product's variants to be grouped together by Handle. A very common way that breaks: the file is built correctly, then someone sorts or filters the finished sheet — alphabetically by Title, numerically by SKU, or by any column other than Handle — as a cleanup step before exporting to CSV. That reorders the rows so a product's variant rows are no longer contiguous. Depending on exactly how they land, Shopify can end up treating some of them as belonging to a different product, or simply not recognizing them as variants of the one you intended, and those sizes disappear from the import with no warning.
Breaker 2: inconsistent Option Name spelling or capitalization
Every row for a given Handle also needs to agree on the Option1 Name (for example "Size"). If some rows say "Size", others say "size", and others say "SIZE" — which happens easily when a sheet is built by copy-pasting blocks from different sources — Shopify's importer can fail to recognize them as the same option across the group. When that happens, it typically keeps only one variant from the group as the option grouping breaks, and the rest of the sizes silently don't attach to the product at all.
How to check / fix it
Keep every row for one Handle grouped together and physically adjacent in the file — don't sort or re-order the sheet after it's built, and if you must sort for review, sort back to Handle order before exporting. Then check that the Option1 Name (and Option2/Option3 Name, if used) is spelled and capitalized identically on every row belonging to that Handle. Upload the file above and the checker will flag Handle groups whose rows aren't contiguous or whose option names don't match, before anything reaches your store.