Help · Updated 22 October 2026
Importing and exporting data
Import a CSV or Excel file of items, using name and SKU as the required columns, and run Check file first to see every row that cannot be read. Re-importing the same file updates items without adding opening stock twice, and export works even after a trial ends.
A shop's item list already exists somewhere: a spreadsheet, an old system's export, a supplier's price file. Typing a few hundred products into a phone is not a good use of an evening, so the first real job in a new shop is usually an import. The second real job is an export, taken before you trust anyone — including this product — with the only copy of your data.
Before you import
- One row per item. An item is a thing you count, not a variant of a thing. If you sell the same coffee in two sizes, they are two rows with two SKUs.
- Every row needs a name and a SKU. Those two columns are required. A row missing either is a row the importer cannot use.
- Keep the header row. The importer matches columns by name, so without a header it cannot read the file.
- Take an export first if the shop already has items. It is the cheapest undo button there is.
The columns
| Column | Required | What it means |
|---|---|---|
| name | Yes | The item name you will search for on the shop floor |
| sku | Yes | Your own code for the item; the reliable identifier |
| barcode | No | The code a scanner reads, such as an EAN-13 |
| unit | No | What one unit means: bottle, box, kilogram |
| cost | No | What you pay per unit |
| price | No | What you sell it for |
| min_stock | No | The minimum that puts the item on the reorder list |
| quantity | No | The opening quantity on hand for this item |
| supplier | No | Who you buy it from; used for grouping orders |
| tags | No | Labels for finding items in groups |
Leave a column out entirely rather than filling it with guesses. An empty optional column is fine; a made-up cost is a number someone will trust later.
Import in the app or on the web
In the app, import opens the native file picker, so you choose a CSV or an Excel (.xlsx) file from the phone's storage or a cloud drive. On the web, you can paste a CSV into the page or choose a file. Both routes accept the same columns.
- Open the import screen in Items.
- Choose the file, or paste the CSV on the web.
- Run Check file.
- Read the report, fix the source file, and check again.
- Run the import.
Check file before anything is written
Check file lists every row it cannot read, with its line number. Nothing is written during the check. That separation matters: you get to see the damage before it is in the shop, and a broken file does not leave you with half an item list and no idea where the half ended.
Fix the reported rows in the spreadsheet and check again. The line numbers refer to the file, so the header is line 1 and your first item is line 2. A row that fails for a missing SKU is a row to repair, not a row to delete without thinking — it may be an item you actually stock.
Opening stock is written once
If the file carries a quantity, the import turns it into opening stock. That quantity is written as a movement, once, so the item starts with a real ledger entry rather than a number that appeared from nowhere. After that, stock changes because things are received, sold, counted or adjusted — not because the file said so.
This is the part people get wrong on a second import. Re-importing the same file updates the items and does not add the opening stock a second time. You can fix a typo in a name, add a missing barcode and re-import the corrected file without inflating the shelf.
After the first import, run a count rather than importing a second quantity. Counting is the honest way to reconcile a list with a shelf; an import is a way to create the list.
What an export gives you
On the web you can export items as CSV, items as XLSX, history as CSV, and a JSON file that contains everything: items, movements, counts and members. In the app you get a JSON export plus two CSVs through the share sheet.
| Export | Where | Good for |
|---|---|---|
| Items CSV | Web | Opening in a spreadsheet, or editing and re-importing |
| Items XLSX | Web | Sharing a readable list with someone who lives in Excel |
| History CSV | Web | Checking movements, waste and variances line by line |
| JSON, everything | Web and app | A full backup: items, movements, counts, members |
| Two CSVs | App | Getting the data off the phone through the share sheet |
The JSON file is the one to keep. A CSV is convenient and lossy; the JSON export is the complete record. Take one before a big cleanup, before a migration, and before you delete anything.
Export after the trial ends
When the 14-day trial ends, the shop becomes read-only until a plan is chosen. Nothing is deleted, and export still works. That is deliberate: the data is yours, and a lapsed trial is not a reason to hold it hostage. You can export everything, decide later, and come back to a shop that is exactly as you left it.
What deletion removes
You can delete from Settings with Delete my account, or from/account/delete without the app. What happens next depends on ownership.
- A shop you solely own is deleted with its history. Items, movements and counts go with the account.
- A shared shop keeps its ledger for the other members. Ownership passes to another member, and the history they rely on is not removed because one person left.
So export before you delete a shop you solely own. There is no undo after deletion.
What it does not do yet
- No scheduled or automatic import. You run it when you have a new file; there is no sync with a supplier's catalogue.
- No column mapping step. The file is read by the column names in the table above, so rename columns in the spreadsheet first.
- No import of movements. Import creates and updates items and can set opening stock once; it does not replay a movement history.