Documentation
Imports User Guide
What this page does
The Imports tool lets you upload CSV files and immediately apply changes to your data. It supports four import types: inventory, products, customers, and prices.
All imports are upserts - they update existing records and add new ones when needed. Nothing is deleted by an import.
Before you start
- Save as UTF-8 CSV with a header row.
- Separator must be a comma. If a value contains a comma, wrap it in quotes, for example:
"Large, Blue". - Dates use
YYYY-MM-DD. Quantities are integers. Prices use two decimals, for example12.50. - Any referenced
sku,warehouse_code, orcustomer_codemust already exist unless otherwise noted below.
Quick tour
- Open Imports. You will see a list of prior uploads with status and counts.
- Start a new import. Use the New Import button.
- Choose the import type. Pick one: inventory, products, customers, or prices.
- Select your CSV. Choose a file and submit.
- Review results. After processing completes, the detail view shows per-row status and any errors.
CSV formats by type
inventory - set on-hand stock by warehouse
Required: sku, warehouse_code, qty_on_hand.
If a product+warehouse row exists it is updated; if not, it is created. Any change writes a ledger entry.
sku,warehouse_code,qty_on_hand
ABC-001,MAIN,120
ABC-001,SECONDARY,30
KIT-500,MAIN,0
DEF-777,MAIN,-5
products - create or update product master data
Required: sku, name.
Optional: description,unit_of_measure,case_pack_qty,weight_grams,length_mm,width_mm,height_mm,base_price,is_active.
sku,name,description,base_price,unit_of_measure,case_pack_qty,weight_grams,length_mm,width_mm,height_mm,is_active
ABC-001,Widget A,"Aluminum body, blue",12.50,ea,12,250,100,50,30,1
KIT-500,Starter Kit,,49.00,set,1,,,,,yes
DEF-777,Gizmo D,,0.00,ea,,120,,,,0
customers - create or update buyer companies
Required: code, name.
Optional: email,phone,order_minimum,credit_terms,credit_limit,is_active,bill_to_*,ship_to_*.
credit_terms: one of prepaid, net15, net30, net45, net60.
code,name,email,phone,order_minimum,credit_terms,credit_limit,is_active,bill_to_address1,bill_to_city,bill_to_region,bill_to_postal,bill_to_country,ship_to_address1,ship_to_city,ship_to_region,ship_to_postal,ship_to_country
ACME,ACME Corp,ap@acme.com,555-123-9999,250.00,net30,5000.00,yes,1 Main St,Springfield,IL,62704,US,1 Warehouse Rd,Springfield,IL,62704,US
BETA,Beta Stores,,555-222-3333,0.00,prepaid,,1,88 High St,Portland,OR,97201,US,88 High St,Portland,OR,97201,US
prices - customer overrides or price lists
A) Customer specific pricing
Required: customer_code, sku, price.
Optional: currency, starts_at, ends_at. Exact date windows replace existing overlaps.
customer_code,sku,price,currency,starts_at,ends_at
ACME,ABC-001,10.00,USD,2025-01-01,2025-12-31
BETA,ABC-001,11.25,USD,,
BETA,KIT-500,45.00,USD,,
B) Price list pricing
Required: price_list, sku, price for price rows.
Optional: currency, map_customer_code to link customers to the list.
The list is auto-created if it does not exist.
price_list,sku,price,currency,map_customer_code
Wholesale,ABC-001,11.00,USD,
Wholesale,KIT-500,47.50,USD,
Wholesale,, , ,ACME
Wholesale,, , ,BETA
price_list and map_customer_code (blank sku and price) map the customer to the list.
How processing works
- Validation. Each row is validated for required fields and basic formats.
- Per row result. The import detail page shows each row as OK or Error with an error message.
- Transaction scope. Rows are processed inside a transaction for the file. If a database error occurs, the transaction is rolled back.
- Inventory ledger. Changes to on hand quantities write an inventory_tx ledger entry with type adjust and reference csv_import.
- File copies. Your uploaded CSV is stored under your tenant folder for audit and download.
Status and counts
processing, completed, or failed
Total rows read from the file
How many rows ended in Error
Uploaded At and Processed At for audit
Common errors and fixes
- Missing sku, warehouse_code, or customer_code. Add the missing values or create the referenced records first.
- Unknown product sku. Import the product first (products), then run the inventory or prices import.
- qty_on_hand must be integer. Remove decimals or text. Use whole numbers, including negatives if needed.
- Invalid date. Use YYYY-MM-DD and ensure the date is a real calendar date.
- Price not a number. Only digits, optional decimal point, and sign are allowed. Example: 12.50
- Duplicate headers or typos. Header names must match exactly as shown. Avoid accidental spaces or different casing.
Best practices
- Keep a master CSV template per import type and reuse it.
- Test with 5 to 10 rows before a large upload.
- Schedule inventory updates during low traffic hours.
- Use price lists to manage groups of customers more easily.
Reference: field rules
- Booleans:
1,0,yes,no,true,false. Blank defaults to active. - Numbers: quantities are integers, prices allow decimals such as
12.50. - Dates:
YYYY-MM-DDformat. - Currency: defaults to
USDif blank.
FAQ
Can I reupload the same file?
Yes. Reprocessing will upsert again. Nothing is deleted.
Can I download my original file?
Yes. The import detail view provides a download for the stored file.
What about very large files?
Start with smaller batches to confirm formatting, then upload the full file.
Do imports notify buyers?
No. Imports only update your admin data.
Quick checklist
- File is UTF-8 CSV with headers.
- Dates are YYYY-MM-DD. Quantities are integers. Prices have two decimals.
- All referenced codes exist (except auto-created price lists).
- You tested with a small sample first.
Glossary
Upsert - Update if the record exists, insert if it does not.
On hand - Physical stock quantity at a warehouse, not including reserved.
Price list - A named set of product prices that can be mapped to customers.