Listing comics on Shopify from a batch
Shopify's product importer is a CSV and an upload box, and the format is documented. What the dialog actually does with your file is not, and that is where most imports go wrong. This is written from a real import: 27 comics, 274 rows, 87 KB, into a Shopify store on 13 September 2026. It covers the import, not selling through Shopify.
The shape of the file: a row per photograph
This 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 with the handle, the image URL, the image position and the alt text, and the rest blank.
Ten photos of a comic is ten rows, so 27 comics came to 274 rows. Two things to know before you open the file:
- Do not sort it in a spreadsheet. Sorting separates a product's image rows from its product row, and the import loses the pictures. Shopify warns about this, and it is the commonest way an import goes wrong.
- 15 MB is the limit. A bigger file is refused with a message to split it. Split between products, 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 (the eBay custom label, like 76TR-012), lowercased, with spaces and anything else that is not a letter, digit or dash folded to a dash. |
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 parcel's weight in grams, which Shopify displays back in ounces: the item plus its packaging, the same weight the Whatnot file's shipping band uses, so a single comic is 6 oz (170 grams). |
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. |
Whatnot condition (product.metafields.whatnot.condition) | Whatnot's condition field on the product: the same condition the Whatnot file writes, like Very Fine. A store that does not use it just keeps it. |
Whatnot Buy It Now price (product.metafields.whatnot.whatnot_buy_it_now_price) | Whatnot's Buy It Now price field on the product: whole dollars, rounded up as the Whatnot file does, so 2.99 is 3.00 USD. |
Shopify documents these current names and still accepts the older ones
(Handle, Body (HTML), Variant SKU,
Image Src and the rest). The current names imported with
no mapping step.
If you edit in a spreadsheet, note that Shopify's own export still
writes the old names. Export the same products straight back out and
you get Handle, Body (HTML),
Variant SKU, Variant Inventory Policy,
Variant Grams, Image Src and Published:
43 columns in the old spelling. Both work.
Every value 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 category path. One cosmetic exception: 85
grams came back as 85.0003751856875, Shopify converting to ounces
and back. That import carried the comic alone; the weight is now the packed
parcel, 170 grams for a comic, the same weight the Whatnot file ships by.
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, video games, Funko Pops, movies and CDs go to eBay and Whatnot, not Shopify, until one has been through an import. |
The column wants the path. The category ids (ae-2-2-12 for
comic books) are not needed.
It will look like it failed. The import preview shows Product Category blank even when the column is filled. On the product page afterwards the category reads Comic Books in Collectibles, with six category metafields Shopify adds itself. Judge the import by the product page, not the preview.
The dialog, step by step
- Products, then Import. Choose the Shopify-formatted CSV.
- Add file, then Upload and preview. Nothing is written to your store yet.
- Read the count. The preview says how many products and images it will import. Ours said 27 products and 274 images, exactly what the file held. If the numbers are wrong, the 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 finished in a couple of minutes. Shopify says an import cannot be cancelled once started and that the store is emailed when it finishes.
Two settings that are not what their names suggest
Leave "Overwrite products with matching handles" unticked. Shopify's help describes this box. The dialog in our import did not show it, and its preview said it will not overwrite a product with the same handle. Unticked, a product whose handle is already in your store is skipped, and since the handle is the SKU, re-importing a batch changes nothing. Ticked, every column in the file replaces what the store has, blanks included: a comic that sold in the store goes back to the file's quantity, and its status goes back to the file's, which is draft unless the file was made to publish on import.
"Publish new products to all sales channels" is ticked by
default, and it does not make products live. It decides which sales
channels a product is on. All 27 landed as drafts with it
ticked, because the file said Status: draft. The file wins.
Drafts, and why to keep them
A wrong row that lands as a draft costs nothing; a wrong row that lands live
is a wrong product in your shop. Start with Status: draft and
Published on online store: false, check a few, and publish the
ones you want. One setting flips it once you trust the files.
Tags are your item specifics
Shopify has no item specifics. Tags are what the store's search, filters and automated collections read, so every fact about a comic becomes a tag or is lost: series, publisher, era, characters, each creator, the grade, whether it is a lot.
- Do not tag your box number. A bare
70beside Marvel Comics and Modern Age means nothing to a buyer. Point and Sell leaves it off unless you turn it on. - One tag per creator. "Val Mayerik, Roger Salick" as one tag is Val Mayerik Roger Salick, who is nobody. Point and Sell splits on the comma. Building the file yourself, watch the reverse: "Lee, Stan" is one man written surname first.
- Put what the comic IS before the lists of names. A product
page reads only so many tags well. Fill it with six characters and four
creators first and
Signedandlotfall off the end.
Take eBay out of the description
If you sell the same comics on eBay, your description probably ends with your eBay boilerplate: your return policy, your combined shipping offer, your shipping service, 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. Keep a separate closing paragraph for the store.
Selling the same comic in two places
The moment a comic is both a Shopify product and an eBay listing, one of them is an order waiting to be cancelled. If it sells in the store, end the eBay listing the same day; if it sells on eBay, set the product's quantity to zero in Shopify. The same SKU in both files is what makes that quick. If the comics are already live on eBay, moving eBay listings into Shopify is in the crosslisting guide.
If you would rather not build the file
Point and Sell writes this file from a box of photos: one product per comic, a row per photo in the order shot, the item specifics as tags, and your store paragraph in place of your eBay boilerplate. It refuses to write the file if a description still carries a link to eBay, one of your eBay policy names or your eBay user ID. It splits at 15 MB between products. Records, video games, Funko Pops, movies and CDs go to eBay and Whatnot, not Shopify, for now.