SnotraSheets turns a stock count into a file based on the documented inventory import format, together with a variance report you can keep. It works with:
.xlsx or .csv), imported back through Items → Actions → Import library;.csv), imported back through Products → Inventory → Import. A products export is optional and adds barcodes.Everything happens in your browser, on your computer. Nothing is uploaded.
The pictures in this manual are screenshots of SnotraSheets 1.0 in Google Chrome, using the example files in the examples folder.
Choose Choose export file… (or drop the file on the box). SnotraSheets recognises the file by its column names. It shows the file name, the number of rows and a SHA-256 fingerprint, which the printed summary repeats. Pick the location you are counting.

If a file is not supported, SnotraSheets says why and what to export instead. For example, the Shopify "Available" format puts each location in its own column. It is refused, and you are asked for the All states format:

For Shopify, load the optional products export in the box that appears. SnotraSheets reads only the Handle, option values, Variant SKU and Variant Barcode columns, and reports how many rows received a barcode.
Counts go into count lists, for example one per zone ("Front shelves", "Back room") or one per person. Lists can be switched off and on later without deleting them.
Scanning station. Choose New list…, click the scan field and scan. A keyboard-wedge scanner types the code and presses Enter. Each scan adds the Quantity (normally 1). To count a closed case of 12, type 12 in Quantity, then scan once; it goes back to 1 afterwards. To correct a mistake, use Undo last scan or scan with a negative quantity. The box under the field shows what the code matched and the running total for that item in this list. A code that is not in the export is kept and flagged for step 3.

Count files. Import count files… accepts:
barcode,quantity, sku;qty, tab separated…).Each file becomes one list. If you import the same file twice, SnotraSheets refuses it, because importing it twice would double the count (the files are compared by SHA-256). Each list can be exported again as CSV, for example to move counts from a laptop to the office computer.
Codes are matched in this order:
012345678905 = 0012345678905);451 after a spreadsheet stripped the zeros from 000451, and is shown as a note.Codes damaged by a spreadsheet, such as 8.51234E+11, are never guessed.

Rows nobody counted.
Rows without stock tracking (blank quantity in Square, "not stocked" in Shopify) are never set to 0. If such a row was counted, it is listed and written only if you tick Also write counted rows whose stock tracking is off.
Codes to resolve.
Assignments and ignored codes are remembered and recorded in the reports. Undo reverses them.
Rows. The filter buttons show rows that will change (the default), have a variance, were not counted, or are flagged with a note. Search finds an item, SKU or barcode. The Calculation and notes column explains every number.
Pause stock movement before taking the baseline export and keep it paused through counting and import. Load a fresh export after the count to check for changed rows. If a row's stock changed between exports, SnotraSheets blocks the import: two snapshots cannot tell whether the sale or delivery occurred before or after that row was physically counted. Take a new baseline while movement is paused and recount the affected row before preparing a new import.


Rows missing from the fresh export, or whose tracking was switched off, are blocked too.

Text in the reports that starts with =, +, - or @ is prefixed with an apostrophe. A spreadsheet then cannot run it as a formula. Import files are never altered this way.
The Shopify review after loading barcodes and a fresh export:

Count lists, assignments and settings are saved automatically in this browser, so a reload or crash during a long count loses nothing. Back up session (.json) saves them to a file. Restore session… loads them on another computer, together with the same export. Clear all counts deletes everything stored in this browser.
| Message | What to do |
|---|---|
| "Not recognised…" | Export again from Square (Export library) or Shopify (Inventory → Export → All states). Do not open and re-save the file in another program first. |
| "Old Excel .xls files are not supported" | Export as .xlsx or .csv. |
| Many unknown codes in Shopify | Load the products export in step 1, so barcodes can be matched. |
A code shows as damaged (…E+11) | A spreadsheet changed it. Count that item again, or fix the count file and import it. |
| Shopify rejected rows after import | Stock changed after the export you based the file on. Pause movement, take a new baseline and recount affected rows, then prepare a new import. |
| The count looks doubled | Check the count lists: switch off or delete a list that was imported twice under another name. |
.xls/.xlsm and Shopify's "Available" export format are not supported. Other POS systems are not supported.