eBay to Shopify: converting a product CSV export

eBay has no product export. What it has is a listings report, and the difference shows up in what the file is missing rather than in how it is shaped.

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

Where the file comes from

In Seller Hub → Reports → Downloads, click Download Report, set Source to Listings, choose All active listings (or all unsold listings), and download. Shopify calls the result eBayProductDownload.csv in its migrating-from-eBay guide, which publishes the field mapping this preset follows.

Two limits are worth knowing before you start. Draft listings cannot be exported at all — Shopify’s guide says so directly. And the report is organised around listings, so a multi-quantity fixed-price listing and a one-off auction look the same in it.

Pitfall 1: there is no description column

This is the real cost of the CSV route. An eBay listing description is HTML stored against the listing, and the listings report does not contain it. Shopify’s own mapping table maps six columns and Body (HTML) is not among them.

So every product imports with an empty description, and Shopify will not complain: description is not a required column. The products arrive looking finished and are not. The preset therefore sets Status to draft and Published on online store to FALSE, so an incomplete catalogue cannot go live by accident while you write the copy. If the descriptions matter more than the speed, a migration app that reads eBay’s API is the honest alternative — a CSV cannot carry what the export omits.

Pitfall 2: no variation columns, so every row is a product

eBay multi-variation listings exist, but the listings report does not break them out into option name/value columns — there is nothing in the file to map onto Option1/Option2. Each row becomes a standalone Shopify product with a single default variant.

That is usually what you want from eBay, where sellers more often run separate listings than variations. If you do have variation listings, you will get one product per listing and will have to build the variants yourself. Because there are no option columns, grouping is set to the SKU column rather than auto-detect: auto would fall back to the Title column, and a row whose title happens to be blank would then be folded into the row above it instead of being reported.

Pitfall 3: the price column header is literally “Current price (future)”

Not a typo on our part. Shopify’s mapping table names the source column Current price (future) → Variant Price, and that is what the report prints. A mapping written against Current price matches nothing and every product imports at 0.00, which is the kind of mistake that reaches customers.

The preset uses the full header including the suffix. Prices in these reports also commonly carry a currency string (EUR 24.99) or a symbol; Shopify rejects both with “price is not a number”. The converter strips symbols and currency codes and normalises the decimal mark, so EUR 24.99 becomes 24.99.

Pitfall 4: Custom label is the SKU, and it is often empty

eBay’s SKU field is called Custom label, exported as Custom label (SKU). It is optional on eBay and plenty of sellers never fill it. Blank SKUs are legal in Shopify, so the import succeeds — but you lose the one key that lets you match these products against stock in any other system later.

The validator warns when SKU is unmapped and reports duplicates where two listings share a custom label, which happens when sellers relist. Fix duplicates before importing: a SKU that identifies two variants will break inventory sync the first time you connect one.

Pitfall 5: Condition is a Google field, not a product field

Shopify’s table maps eBay’s Condition to Google Shopping / Condition — a metafield for the Google channel, not a visible product attribute. Used, refurbished and “new other” items will thereforenot show their condition on the product page. If you sell second-hand, that belongs in the title or the description, and you have to put it there yourself.

What the preset maps

Title → Title, eBay category 1 name → Type, Custom label (SKU) → SKU, Available quantity → Inventory quantity, Current price (future) → Price, and Condition → Google Shopping / Condition. Status is draft, published is FALSE, and grouping is the SKU column.

Nothing maps to Description, Vendor, weight or images, because the report does not contain them. That is a statement about the export, not a gap in the preset: eBay publishes no product-level CSV with those fields, so this preset is honest about reaching only as far as the file does.

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.