Bulk Import
If you are migrating from another system — or simply want to add hundreds of products at once — StockFlow’s bulk import accepts a CSV file with up to 500,000 rows (Enterprise plan) or 25,000 rows (Growth plan).
What can be imported?
| Import type | What it creates |
|---|---|
| Products only | Goods List entries — no stock |
| Stock only | Inventory records for products that already exist |
| Products + stock | Both in one file |
| Clients | Client profiles — see Add a Client |
This page covers Products + Stock imports. The format is the same for products-only or stock-only — just omit the unused columns.
Step 1 — Download the template
- Go to Goods List → Import → Download Template
- Open the template in Excel, Google Sheets, or any CSV editor
The template includes all supported columns with example rows and a “Field Reference” tab.
Step 2 — Fill in the CSV
Required columns
| Column | Type | Example | Notes |
|---|---|---|---|
name | Text | Wireless Headphones Pro | Max 255 characters |
sku | Text | WHP-001 | Must be unique. Leave blank to auto-generate. |
unit | Text | piece | Must match an existing unit name. See Units & Variants. |
retail_price | Number | 89.99 | Without currency symbol. Use . as decimal separator. |
Optional columns — product details
| Column | Type | Example | Notes |
|---|---|---|---|
category | Text | Electronics / Audio | Use / for sub-category path. Created if it doesn’t exist. |
tags | Text | bluetooth, wireless | Comma-separated |
description | Text | Free text | HTML not allowed |
barcode | Text | 5901234123457 | EAN-13, UPC-A, or custom |
cost_price | Number | 42.00 | Used for inventory valuation |
wholesale_price | Number | 65.00 | Optional pricing tier |
weight_kg | Number | 0.35 | Used for shipping calculations |
brand | Text | Sony | Free text |
supplier_code | Text | SON-WHP-001 | Your supplier’s part number |
active | Boolean | true | Defaults to true. Set false to import as inactive. |
Optional columns — initial stock
| Column | Type | Example | Notes |
|---|---|---|---|
warehouse | Text | Main Store | Must match an existing warehouse name exactly |
quantity | Number | 50 | Units to add to the specified warehouse |
cost_per_unit | Number | 42.00 | Overrides cost_price for this stock entry only |
Step 3 — Validate your CSV
Before importing, StockFlow validates your file:
-
Go to Goods List → Import → Upload CSV
-
Select your file
-
StockFlow runs a pre-import validation — this takes a few seconds
-
Any errors are shown in a validation report, e.g.:
Row 14: SKU "WHP-001" already exists. Update is not allowed during import. Row 27: unit "boxes" not found. Use "box" instead. Row 88: retail_price value "-5.00" is invalid — must be 0 or greater.
Fix the errors in your CSV and re-upload. You can also download the validation report as a CSV.
Step 4 — Run the import
Once validation passes:
- Review the import summary — how many products to create, how many stock records to add
- Click Run Import
- For large files (>1,000 rows), the import runs in the background
- You’ll receive an in-app notification and email when it’s complete
Updating existing products
By default, bulk import will not overwrite existing products (to prevent accidental data loss). To update existing records:
- Check the box Update existing products if SKU matches
- Only the columns you include in the CSV will be updated — blank columns leave existing values untouched
Common errors and fixes
| Error | Cause | Fix |
|---|---|---|
Unit not found | Unit name doesn’t match | Go to Settings → Units to see exact names |
Warehouse not found | Warehouse name doesn’t match exactly | Copy the name exactly from Settings → Warehouses |
SKU already exists | Duplicate SKU | Either enable “Update existing” mode or remove the row |
retail_price required | Missing price | Add a value or set 0.00 for free products |
File too large | Exceeds row limit | Split into multiple files |
Encoding error | Non-UTF-8 characters | Save the CSV as UTF-8 from Excel (File → Save As → CSV UTF-8) |
Import history
All past imports are logged in Goods List → Import → Import History. Each log entry shows:
- Import date and time
- Number of products created / updated
- Number of rows skipped (with reasons)
- The user who ran the import
- A downloadable copy of the original file