Point and SellPricingQuestionsGuidesAboutSign inTry it on a box

Guides

Listing comics on Shopify from a batch

Shopify's product importer is a CSV and an upload box, and the format is documented. What is not documented is what the dialog actually does with your file, which is most of what goes wrong. This page is written from one real import: 27 comics, 274 rows, 87 KB, into a Shopify development store on 13 September 2026.

What that does and does not cover. One import, one store, one afternoon. It is enough to answer what the dialog asks you and what the product page looks like afterwards, which is what this page claims. It is not enough to tell you anything about selling through a Shopify store, and this page does not try: nothing here has taken an order.

The shape of the file: a row per photograph

This is the part that surprises people coming from eBay File Exchange, where one listing is one row. In Shopify's CSV a product's first row carries everything, and every further photograph is its own row carrying the handle, the image URL, the image position and the alt text, with the rest of the columns blank.

Ten photographs of a comic is therefore ten rows, and our 27 comics came to 274 rows rather than 27. Two consequences worth knowing before you open the file:

The columns

ColumnWhat goes in it
URL handleThe product's identity in the store, and the only column the import matches on. We write the SKU, lowercased.
TitleThe same title the eBay listing carries. Shopify has no 80-character cap, but one comic should have one title wherever it is for sale.
DescriptionHTML, and it renders as formatted text rather than arriving escaped. The creators and the characters are in here as prose.
VendorThe publisher.
Product categoryA path from Shopify's Standard Product Taxonomy. The paths are below; the path works and the id is not needed.
TypeFree text, what a shop would call this on a shelf: Comic Book, Comic Book Lot, Graphic Novel, Book, Magazine.
TagsShopify has no item specifics, so its tags are what its search, its filters and its automated collections read. Twenty of them, what the comic IS first. See below.
Published on online storefalse while the product is a draft.
Statusdraft or active. Drafts by default, and the reason is below.
SKUThe same custom label as the eBay listing, so a sale in one place names the listing in the other.
BarcodesThe UPC read off the cover, or a book's ISBN. Never a guessed one.
Option1 name"Title", Shopify's own convention for a product with one variant.
Option1 value"Default Title", as above. Confirmed on a real import.
PriceThe row's price.
Charge taxtrue. What tax that means is your store's setting, not the file's.
Inventory tracker"shopify", so the store counts the copy down when it sells.
Inventory quantityThe same quantity the eBay file carries.
Continue selling when out of stock"deny". A sold comic is sold.
Weight value (grams)The weight in grams, which Shopify displays back in ounces. A single comic is the item alone; a lot and a graded comic carry a packing allowance, because that is what a shipping estimate on them needs.
Weight unit for display"oz", for an American store.
Requires shippingtrue.
Fulfillment service"manual".
Product image URLA public https image. Shopify downloads it during the import, so the URL has to be reachable without a sign-in.
Image position1 upwards, in the order the photographs were taken.
Image alt textThe title.
SEO titleThe title, cut at a word under 70 characters.
SEO descriptionThe description's text with the tags stripped, cut at a word under 320 characters.

Shopify documents these current names and says the older spellings (Handle, Body (HTML), Variant SKU, Image Src and the rest) are still accepted. The current names imported with no mapping step at all. The dialog offers a "change the order of column headings" link if you want it; nothing required it.

Worth knowing if you ever edit in a spreadsheet: Shopify's own export still writes the old names. We imported with the current ones and then exported the same 27 products straight back out, and what came down was Handle, Body (HTML), Variant SKU, Variant Inventory Policy, Variant Grams, Image Src and Published: 43 columns in the old spelling. Both vocabularies are live, and a file you export to edit will not look like the file you imported.

That round trip is also the strongest check there is on the values, and every one came back exactly as written: the inventory policy as deny, the tracker as shopify, the fulfilment service as manual, the variant as Default Title, the status as draft, and the whole taxonomy path verbatim. One cosmetic exception: a weight written as 85 grams came back as 85.0003751856875, which is Shopify converting to ounces for display and back again.

Product category: the path, not the id

What it isProduct categoryHow far it has been
A single issue, or a lot of themArts & Entertainment > Hobbies & Creative Arts > Collectibles > Comic BooksLanded as Comic Books in Collectibles on a real import.
A novel or a nonfiction bookMedia > Books > Print BooksWritten from the published taxonomy; no book has been imported.
A magazineMedia > Magazines & Newspapers > MagazinesWritten from the published taxonomy; none has been imported.
A recordMedia > Music & Sound Recordings > VinylNot written at all yet. Records and video games are eBay only here until one has been through an import.

The path is what the column wants. The taxonomy also has ids (ae-2-2-12 for comic books) and you do not need them.

One thing that will make you think it failed. The import preview dialog renders Product Category blank even when the column is filled correctly. It is a quirk of the preview, not of the import: on the product page afterwards the category reads Comic Books in Collectibles, and Shopify attaches six category metafields of its own on top of it. We nearly wrote the opposite down off a screenshot of that dialog. Judge the import by the product page.

The dialog, step by step

  1. Products, then Import. The first question is how you want to import: a Shopify-formatted CSV, or data from another platform through an app. The CSV is the first one.
  2. Add file, then Upload and preview. Nothing is written to your store yet.
  3. Read the count. The preview says how many products and how many images it is about to import. Ours said 27 products and 274 images, which is exactly what the file held. If those numbers are not what you expect, your file is wrong and this is the last cheap moment to find out.
  4. Then Import products. It runs in the background and you can close the dialog; ours was done in a couple of minutes. Shopify's own documentation adds that an import cannot be cancelled once it has started and that the store is emailed when it finishes, neither of which we put to the test.

Two things in that dialog that are not what their names suggest

There is no overwrite tick. Writing about this importer, including an earlier version of our own, tells you to tick overwrite if you want to replace existing products. That checkbox was not in the dialog. What the preview says instead is that it will not overwrite any existing product with the same handle. Since the handle is the SKU, re-importing a batch you have already imported changes nothing, which is the safe direction but is not what you want if you were expecting an update.

"Publish new products to all sales channels" is ticked by default, and it is not what it sounds like. It governs the sales channels a product is available on, not whether the product is live. Every one of our 27 landed as a draft with it ticked, because the file said Status: draft. The file wins.

Drafts, and why to keep them

An eBay upload has no draft worth the name: the file lists what it carries. Shopify's import does, and a wrong row that lands as a draft costs nothing while a wrong row that lands live is a live wrong product in a shop's own store. So the sensible default is Status: draft and Published on online store: false, then look at a few and publish the ones you want. One setting flips it when you trust the pipeline.

Tags are your item specifics

Shopify has no item-specific fields. Its tags are what the storefront search, the filters and the automated collections read, so every structured fact about a comic either becomes a tag or is lost: the series, the publisher, the era, the characters, each creator separately, the grade, whether it is a lot.

Two things a real product page taught us about that list, neither of which is visible in a CSV:

Whatever you do, take eBay out of the description

If you already sell the same comics on eBay, your description almost certainly ends with your eBay boilerplate: your return policy by name, your combined shipping offer, Media Mail, a link to your eBay store. On a Shopify product that is a shop telling its own customer about a marketplace they are not on, and the Media Mail sentence is a postage claim the shop is not making.

It is worth keeping a separate paragraph for the store rather than stripping the eBay one and shipping the gap.

Selling the same comic in two places

The moment a comic is a Shopify product and an eBay listing, one of them is an order waiting to be cancelled. The routine is the same in both directions and it has to be the same day: if it sells in the store, end the eBay listing; if it sells on eBay, set that product's quantity to zero in Shopify. The SKU is what lets you do that quickly, which is the argument for carrying the same SKU into every file.

What we have not checked

Orders. Shopify's orders export carries a Lineitem sku column that would join a sale back to the comic, and we have not read one, because nothing has sold. Collections, which the import can set one of and which are yours to build from tags anyway. And metafields for the item specifics, which the import can create but which show nowhere a buyer looks without theme work; Shopify's own category metafields arrive without being asked.

If you would rather not build the file

Point and Sell writes this file from a box of photographs: one product per comic, a row per photograph in the order they were shot, the item specifics as tags, a separate store paragraph in place of your eBay boilerplate, and a refusal rather than a file if the description still carries a link to eBay, a Media Mail promise, one of your eBay policy names or your eBay user ID. It splits at 15 MB on a product boundary, and it will not write a product for a record or a video game, whose Shopify categories have not been through an import.

Try it on a box · More guides for comic sellers

Sources

Shopify's own product CSV format page and import page, read 13 September 2026, and its published Standard Product Taxonomy. What this page says the dialog showed, what the preview said and what the product page looked like afterwards all come from one import performed that day: box 70 AA, 27 comics, 274 rows, into a Shopify development store. The two things we did not watch happen, the impossibility of cancelling a running import and the completion email, are from Shopify's documentation and are marked where they appear. The column list and the taxonomy paths on this page are generated from the same constants the file is written with, so they cannot drift from the file you would actually get.

All guides  ·  Questions people ask  ·  Pricing