Moving from another app, a spreadsheet, or a printout? Use CSV import to load everything in one pass. Most users migrate ~100–1000 comics this way and never touch the form again.
What we accept
- CSV (comma-separated) or XLSX (Excel). XLSX files get converted to CSV on upload.
- UTF-8 encoding recommended; we try to detect others but it’s safer to convert first.
- First row should be column headers. Our wizard reads them.
- Files up to 50 MB. Large collections upload in batches automatically. A 25,000-row migration is fine in one go.
The wizard
- Open /import, drop your file.
- Map columns: we auto-detect common headers (“Title”, “Issue”, “Publisher”, etc.) and propose mappings to our database fields. Confirm or adjust each row.
- Preview: we render the first 10 rows as inventory items would appear in your collection. Catch column-mapping mistakes here before committing.
- Import: progress bar tracks rows processed. Duplicates already in your workspace are skipped and counted in the summary.
If your file comes from a collection app we recognise, you’ll be asked to confirm “I have the right to contribute this data” before importing. That’s because key information and pricing from recognised exports help improve the shared comic database everyone benefits from. Declining is fine. Your import still works, it just stays private to you. Either way, your collection, purchase prices, and notes are always private.
Required + recommended fields
- Required:
item_name(title). Rows with a blank title are rejected with a row-number error. - Strongly recommended:
numberandpublisher. These drive duplicate detection and metadata enrichment. - Recommended:
acquired_price,condition_grade, anddate_acquired. These drive P/L and tax reporting later. - Per-copy details:
quantity,tags,owner,my_rating,is_read/read_date, and slab fieldsgrading_company,slab_cert_number,label_type. These describe your copy rather than the book. Tags accept a comma- or pipe-separated list. - Anything else (writer, artist, notes, etc.): fill in what you have. You can always enrich later.
Duplicate detection
We treat a row as a duplicate if your workspace already has an item with the same item_name + number + publisher + volume_year (case-insensitive). Duplicates are skipped, counted in the summary, and don’t halt the import.
Include the issue number. It’s what separates one issue from the next. Without it, every issue of a series looks like the same book and only the first will import. If your file uses a header we don’t recognise, map it to number on the mapping screen. When a row genuinely has no issue number, we fall back to the barcode.
If the matching is too strict for your data (e.g. you have legitimate duplicates that differ only in condition), use quantity to record multiple copies, or import them as separate rows with a distinguishing note.
Errors
Per-row errors appear in the result screen with the offending row number and a specific message (“Invalid date format,” “Acquired price out of range,” etc.). Fix the source file and re-import. Already-imported rows from the same file will be skipped as duplicates.
Rate limits
Import is capped at 3 runs per 10 minutes per user, to keep unbounded-loop bugs in client tooling from hammering the server. Each run can still process thousands of rows.