← All resources

Switching POS Without Recounting Your Shelves

Switching POS Without Recounting Your Shelves

Ask anyone who has moved a small shop from one till to another what the worst part was, and it is rarely the money or the hardware. It is the evening with a clipboard, walking the shelves and typing numbers into a new system, because the import took the names and the prices and silently dropped everything else.

That is not a law of nature. It is a choice the importer made, and it is worth knowing which choice your next till made before you commit a weekend to it.

This is written by the people who make TallyTill, so treat the last section as what it is. The first three sections apply whatever you switch to.

What actually moves, and what usually doesn't

A catalog export from a POS has more in it than most importers read. Roughly, the columns fall into four groups:

What a catalog export carries, and how far it usually getsName, price, SKU, barcode — Every importer reads these. This is the part nobody worries about.; Description, category, image — Usually read. Worth spot-checking — categories often arrive as free text and need tidying.; On-hand count — Routinely dropped. Square writes it as 'New Quantity <location>', Shopify as 'Variant Inventory Qty', QuickBooks as 'Quantity On Hand', WooCommerce as 'Stock'. Four different names for one number is why importers skip it.; Unit cost — Almost always dropped. 'Default Unit Cost', 'Cost per item', 'Purchase Cost', 'Cost'. Same problem.What a catalog export carries, and how far it usually gets1Name, price, SKU, barcodeEvery importer reads these. This is the part nobody worries about.2Description, category, imageUsually read. Worth spot-checking — categories often arrive as freetext and need tidying.3On-hand countRoutinely dropped. Square writes it as 'New Quantity <location>',Shopify as 'Variant Inventory Qty', QuickBooks as 'Quantity OnHand', WooCommerce as 'Stock'. Four different names for one numberis why importers skip it.4Unit costAlmost always dropped. 'Default Unit Cost', 'Cost per item','Purchase Cost', 'Cost'. Same problem.
Based on the export formats TallyTill's importer detects — Square, Shopify, QuickBooks and WooCommerce. Column names are those systems' own headers.

The counts and the costs are the two that cost you an evening, and they are the two most likely to be thrown away — not out of malice, but because every system names them differently and reading them properly means writing a mapping per format.

Before you switch, ask the question directly: does your import read the on-hand column, and what happens to a product I have already counted? If the answer is vague, assume it is a no and plan the evening in.

Three things worth checking before you commit

1. Does it show you what will happen before it writes? An import that runs and then tells you what it did is a bad afternoon if it guessed wrong on a column. You want a preview: this many products, these prices, these counts, and this is the one I could not read.

2. What does it do with a zero, or a blank? This one matters more than it sounds. If a blank cell becomes a zero, your whole catalog arrives marked sold out, and at an unattended till that means customers walking away from a full shelf. A blank should mean "no count supplied", not "none left".

3. What happens to a count you have already typed? If you have been running the new till for a week and then import the old catalog, the import should not overwrite the counting you have already done. Your number is newer than the export's.

What you will redo by hand, wherever you go

Be realistic about this part — an import is a catalog import, not a migration of your business.

  • Sales history. It stays in the old system. Export a CSV of it before you cancel the account; you will want it at tax time and nobody's importer takes it.
  • Customers and loyalty. Different shape in every system. Usually a separate export and a separate decision.
  • Modifiers and options. If you sell prepared food with choices attached, these almost never survive a move.
  • Employees, permissions, shifts. Set up fresh.
  • Photographs. Some exports carry an image URL; some do not. Check before you assume.

How TallyTill handles it

Four export formats are recognised on sight — Square, Shopify, QuickBooks and WooCommerce — and for each one the on-hand column and the cost column are mapped by that system's own header name. Square's is the awkward one: it names the column per location, as New Quantity Main Street, so it is matched by prefix rather than by exact name. Most other spreadsheets come through the general path, where plainly-named columns like On hand, Stock, Quantity or Cost are matched by name. You do not have to tell us which system the file came from; the headers decide.

Then the three checks above, in order:

  • You see a preview before anything is written — products, prices, counts, and anything that could not be read.
  • A blank is a blank. An unreadable or empty count means no count supplied, never zero. Importing a count starts that product tracking, from the number in your file, so guessing zero would mark a catalog sold out on day one. A negative is taken at face value, because your old system said it and that is information.
  • A product you already count keeps your number. The preview says "kept your count" against those rows, so you can see it before you commit.

The cost column is stored on the product for later. Be clear-eyed about what it does today: nothing reports on it yet. The stock report values what you hold at your selling prices — retail value, not what it cost you. There is no cost of goods and no margin report. If you need valuation at cost, that is a real gap on our side.

One more limit worth stating: this brings your catalog and your counts. It does not bring sales history, customers, loyalty or employees, and we have no modifiers at all, so anything sold with options attached will need rethinking rather than importing.

The short version

The counts are the expensive part of switching, and they are sitting in a column of the file you already have. Whatever you move to, ask whether it reads that column — and ask what it does with a blank one, because that answer tells you how carefully the rest of it was built.

Reconnecting…
One moment — we're restoring your session.