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:
- Do not sort it in a spreadsheet. Sorting separates a product's image rows from the product row above them, and the import then loses the pictures. That is Shopify's own warning and it is the commonest way an import goes wrong.
- 15 MB is the limit, and a file over it is refused with a message telling you to split it. Split at a product boundary, never inside one.
The columns
| Column | What goes in it |
|---|---|
URL handle | The product's identity in the store, and the only column the import matches on. We write the SKU, lowercased. |
Title | The same title the eBay listing carries. Shopify has no 80-character cap, but one comic should have one title wherever it is for sale. |
Description | HTML, and it renders as formatted text rather than arriving escaped. The creators and the characters are in here as prose. |
Vendor | The publisher. |
Product category | A path from Shopify's Standard Product Taxonomy. The paths are below; the path works and the id is not needed. |
Type | Free text, what a shop would call this on a shelf: Comic Book, Comic Book Lot, Graphic Novel, Book, Magazine. |
Tags | Shopify 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 store | false while the product is a draft. |
Status | draft or active. Drafts by default, and the reason is below. |
SKU | The same custom label as the eBay listing, so a sale in one place names the listing in the other. |
Barcodes | The 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. |
Price | The row's price. |
Charge tax | true. 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 quantity | The 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 shipping | true. |
Fulfillment service | "manual". |
Product image URL | A public https image. Shopify downloads it during the import, so the URL has to be reachable without a sign-in. |
Image position | 1 upwards, in the order the photographs were taken. |
Image alt text | The title. |
SEO title | The title, cut at a word under 70 characters. |
SEO description | The 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 is | Product category | How far it has been |
|---|---|---|
| A single issue, or a lot of them | Arts & Entertainment > Hobbies & Creative Arts > Collectibles > Comic Books | Landed as Comic Books in Collectibles on a real import. |
| A novel or a nonfiction book | Media > Books > Print Books | Written from the published taxonomy; no book has been imported. |
| A magazine | Media > Magazines & Newspapers > Magazines | Written from the published taxonomy; none has been imported. |
| A record | Media > Music & Sound Recordings > Vinyl | Not 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
- 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.
- Add file, then Upload and preview. Nothing is written to your store yet.
- 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.
- 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:
- Do not tag your box number. Ours did, until this import: a
bare
70sat on the product page beside Marvel Comics and Modern Age. That is where the comic lives on your shelf, and a buyer reads your tags. It is a setting now, off unless you want it for your own admin. - Split creators into one tag per person. A field holding "Val Mayerik, Roger Salick" became a single tag reading Val Mayerik Roger Salick, who is nobody and is nobody's search, sitting next to a correctly spelled Val Mayerik from another field. A comma splits creators into separate tags here now. Watch for the reverse if you build the file yourself: "Lee, Stan" is one man written surname first, and splitting him files a comic under a creator called Stan.
- Put what the comic IS before the lists of names. There is a
practical cap on how many tags a product page reads well, and if you fill it
with six characters and four creators first, then
Signedandlotfall off the end. A signed comic whose product page says signed nowhere is a different object to the buyer.
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.