Shopify
Why Shopify's CSV import skips your metafields, and what to do
The import says it worked. The products are there, the prices are right, and the metafield column you added is empty on every row. Here is which half of that is documented behaviour, and which half is a column Shopify threw away without telling you.
· Ryan Koning
The import did not fail, and that is the problem
A product CSV import reports on products. It counts what it created and what it updated, and it sends you the rows it could not read. A column it does not recognise is not one of those rows: the products arrive, the column is gone, and nothing in the summary mentions it.
Which half you are in depends on one thing — whether the metafield belongs to the product or to the variant.
What the product CSV does carry
Product metafields, once defined. Create the definition under Settings → Custom data → Products, and from then on the column is in your export and read back on import. The header is the definition's name with the key in brackets — Fabric (product.metafields.shopify.fabric) — or just the key part, product.metafields.shopify.fabric. Either spelling works, and a list value is separated by semicolons.
The CSV fills definitions; it does not create them. A column naming a definition you have not made is a column for a metafield that does not exist, and it is treated as one.
And not every type goes through. Shopify's column table lists around two dozen it accepts: text, numbers, money, dates, dimensions, weights, volumes, colours, URLs, true/false, product references and lists of most of those. What is missing tends to be what a store has spent the most time on — file references, rich text, JSON, ratings, and references to variants, collections, pages and customers. Shopify's own store importer puts the same limit in a parenthesis: metafields, except reference types.
What it does not carry: variant metafields
Shopify documents this under a heading of its own: variant metafields are not supported for product CSV import or export, and the help page sends you to the variant bulk editor instead.
I checked what that looks like from the merchant's side. On a development store in September 2026 I defined one variant metafield and imported three files, identical but for the spelling of that one header: the bare variant.metafields.custom.p6test, the same key with a name in front of it, and the documented product.metafields… form placed on variant rows.
None of the three wrote a value. All three imports completed and reported success, every ordinary column on the same rows arrived correctly, and the metafield column was simply not there afterwards — not an error, not a warning, not a line in the summary. The import preview had not shown the column either: it listed variant, SKU, weight and price.
TitlewrittenSKUwrittenFabric (product.metafields.shopify.fabric)writtenproduct.metafields.custom.carewrittenvariant.metafields.custom.widthdropped — and the import still reports success
Two other ways the same import loses data
Both of these are documented, both are easy to walk into, and neither looks like an error afterwards.
- A blank cell in a non-required column overwrites the value in the store with a blank. An empty cell is an instruction, not an omission.
- Leaving out the
Option1 nameandOption1 valuecolumns creates a new default variant and deletes the existing variants of that product.
What to do instead
- Find out which kind you have. Settings → Custom data, then look at whether the definition is under Products or under Variants. Everything else follows from that.
- Product metafield, empty after an import? Check the definition exists, check the namespace and key in the header against it, and check the type is one the CSV carries. Those three cover most of it.
- Variant metafield, a few dozen rows? Use the variant bulk editor: select the variants, add the metafield under Columns, type, save. It holds fifty variants at a time.
- Variant metafield, thousands of rows? It has to go through the API — your own script against
metafieldsSet, or an app that takes a file and does the same thing. How to bulk edit variant metafields with a CSV walks through that, including what the file should be keyed on. - Export before you import. The current values, exported to a file you keep, are the only undo the native import comes with.
The app I built for this
The silent discard is the reason Fieldloader exists. It exports one metafield definition — product or variant — as a CSV with a row for every variant, reads the edited file back, and shows what would change before anything is written: new, changed, cleared, already correct, and any row it cannot import named against its line number. Nothing is discarded quietly, and an import can be undone in one click.
If the damage is already done and a product or a metaobject is gone rather than blank, restoring a deleted product with its references is the other half of this story.
Checked against Shopify's help centre and a development store in September 2026. Shopify ships changes every week — a column that is not supported today may be tomorrow, and the help page is the thing to check.