Clover to Shopify: converting an item list CSV

Clover is a point-of-sale system, not a storefront, and its export reflects that: a flat list of items with no description, no variant and no handle column. Most of this migration is deciding what Shopify fields you fill in yourself.

Open the converter with this presetField names verified against a published export spec.

Where the file comes from

Shopify’s migrating-from-Clover guide has you log into Clover, go to Items → Item List, open the menu and click Export, then save the file as CloverItemDownload.csv. Only a full item list can be exported — Clover does not support exporting a filtered subset.

The guide’s own “Clover and Shopify data mapping” table names exactly seven columns: Name, Hidden, SKU, Quantity, Price, Cost and Tax Rates. Nothing else — no description, no category, no image, no option columns — is in Shopify’s published table for this platform.

Pitfall 1: there is no handle, so grouping falls back to the item name

Every other POS or cart export on this site carries some kind of identity column — a handle, a parent SKU, a variant group id. Clover’s item list has none of that, because Clover items normally stand alone; it has no concept of a Shopify-style multi-variant product. The converter’s grouping falls back to the Name column in that case, which is fine right up until two rows share one.

A row with a blank Name is the sharp edge: it does not get flagged as a missing title, because the validator only checks the first row of a product group. Instead it silently attaches itself to whichever item came immediately before it in the file, as a second, option-less variant. Since neither row declares an option, Shopify rejects the result with “options are not unique” — two identical, nameless variants of one product. The bundled sample has exactly this: a blank-name row sitting under Reusable cup 12oz, which the validator reports as a duplicate variant rather than a missing title. Check your export for blank names before you trust the row count.

Pitfall 2: Hidden is the inverse of Published, not a copy of it

Shopify’s table lists Hidden → Status or Published and literally says to “decide which column you want to use” and, if Published, to use its TRUE/FALSE values directly. Read that carefully: Clover’s column means “is this item hidden”, and Shopify’s means “is this product published” — the same word copied straight across publishes every item Clover had hidden and hides everything Clover had visible.

The preset leaves this column unmapped rather than risk the inversion, and sets every imported item to draft by default so nothing goes live by accident. Map Hidden to Published on online store yourself in step 3 only after flipping its values, or review the draft batch and publish by hand.

Pitfall 3: Tax Rates names a rate, not a TRUE/FALSE flag

Shopify’s table maps Tax Rates straight to Variant Taxable — the column our schema calls Charge tax, which only accepts TRUE or FALSE. A real Clover export puts a tax rate name there, such as Standard or No Tax, not a boolean. Mapping it directly would write “Standard” into a TRUE/FALSE column and the validator would reject every row with Charge tax value “Standard” is not TRUE or FALSE. The preset leaves it unmapped; decide per tax rate whether the items it covers should charge tax, and set the constant in step 2 if every item in the file shares one answer.

Pitfall 4: there is nothing here to describe the product

Clover’s export has no description column and no image column at all — not because the guide omits them, but because Clover items are priced counter goods, not web listings. Every item this preset converts imports with an empty Description and no photo. Writing real copy and attaching images is manual work on the Shopify side after import, same as Shopify’s own guide assumes in its later “review your product details” step.

What the preset maps

Name → Title, SKU → SKU, Quantity → Inventory quantity, Price → Price, Cost → Cost per item. That is the whole mapping: five columns, because that is all Shopify’s own table verifies for this platform. Hidden and Tax Rates are deliberately left blank for the reasons above, and every item imports as a simple product with no options — Clover’s item list has no variant concept for the converter to carry across.

Before you upload to Shopify

  • Import into a development store or a draft-status batch first. Set the default status to draft in the tool and nothing goes live by accident.
  • Shopify caps a product CSV at 15 MB. Bigger catalogues are split into numbered parts, and a product is never split across two files.
  • Overwriting existing products by handle is destructive: a blank cell can erase data that is currently there. Export your live products first if you are updating rather than creating.

Full column contract: the Shopify product CSV format, column by column. Nexum Gate is not affiliated with Shopify Inc.