Items, item kits, customers and past sales import through a three-step Excel wizard — download the template, map your columns, validate and import. Suppliers and gift cards use a simpler upload, sales lines batch-import at the register, Import Sales brings history in with its original dates, and every list exports back out. This article covers each template, every step, and the errors you may hit.
If your data lives in another system or a stack of spreadsheets, you don't have to retype it. PHP Point Of Sale imports from Excel (.xlsx) and CSV files, and exports back out the same way — so migration, bulk edits and backups of a single list are all spreadsheet jobs. Templates and exports download as XLSX or CSV depending on the Spreadsheet Format setting in Store Config.
What imports and exports where
| Data | Where | Import style |
|---|---|---|
| Items | Items → … → Excel Import | Three-step wizard |
| Item kits | Item Kits → … → Excel Import | Three-step wizard |
| Customers | Customers → … → Excel Import | Three-step wizard |
| Work orders | Work Orders → … → Import Work Orders | Three-step wizard |
| Suppliers | Suppliers → … → Excel Import | Template + upload |
| Gift cards | Gift Cards → … → Excel Import | Template + upload |
| Sale lines | Sales → … → Batch sale | Template + upload into the current sale |
| Sales history | Sales → … → Import Sales | Three-step wizard |
| Inventory counts | Inside an open count → Excel Import | Template + upload — see counting inventory |
| Damaged inventory | Items → … → Count Damage Inventory | Template + upload — see stock levels, adjustments and damaged items |
Each of those modules also offers Excel Export from the same … (more) menu. Employees export only — there is no employee import. Exports are permission-gated: the employee needs the module's Excel Export permission before the option appears, and imports require the module's add/update permission.
The three-step wizard (items, item kits, customers, work orders)
The wizard works the same way in every module that uses it — learn it once. Using items as the example:
Step 1 — Upload File
- Go to Items, open the … menu and choose Excel Import.
-
Under Download Spreadsheet Template, pick one:
- Template for Existing Items — an export of everything already in the store, ready to edit and re-import. Use this to update records without creating duplicates: bulk price changes, description cleanups, adding barcodes.
- Template for New Items — a blank sheet with the right headings, for adding records.
- With more than one location, check Include location specific columns first to add per-location quantity, price, reorder-level and other columns to the template.
- Fill in the template in your spreadsheet program and upload the finished file (.xlsx or .csv).
Step 2 — Match Spreadsheet to Database
The wizard lists each Spreadsheet Column next to a Database Field dropdown. Columns whose headings match the template are matched automatically — if everything matched, a "Spreadsheet Column Mapping Complete" dialog offers to jump straight to step 3. Otherwise, pick the right field for each remaining column; each database field can be used only once, and columns you leave unmatched are simply not imported. For items, Item Name must be mapped or the wizard will not proceed.
Custom fields are part of the mapping too: in the customer import, every customer custom field you have defined appears in the Database Field list under its own label, and a spreadsheet column headed with that label is matched automatically — capitalization doesn't matter, but the wording must be the field's exact label. Item and sale custom fields work the same way in their own imports.
Step 3 — Validate Data and Complete Import
Click Complete Excel Import. The wizard first checks the file for duplicate item numbers and product ids within the spreadsheet and stops with row-by-row errors if it finds any. Then it validates and imports every row, ending in one of three states:
- Success — everything imported cleanly.
- Warnings — the import finished, but the system had to take corrective action on some rows (for example an item id was expected but missing, or you updated an item that had been deleted). Each warning names the spreadsheet row. The outcome is not affected.
- Failed — errors are listed with their spreadsheet row and message, and the import is rolled back — nothing is half-imported. Fix the flagged rows in your file (or the mapping) and run the import again.
What the items template can carry
The items import covers essentially the whole item form: item number, product id, name, barcode name, variations, category (created automatically if it does not exist yet — no separate category import needed), supplier, cost and unit price, price tiers, promo price with start and end dates, min/max edit price, max discount percent, tax class and price-includes-tax, quantity, reorder and replenish levels, descriptions, dimensions and weight, serialized/service/favorite/inactive flags, commission, tags, days to expiration, manufacturer, location at store, loyalty settings, EBT and ecommerce flags, age verification, an image URL, the item custom fields — plus per-location quantity, prices, promo and reorder columns when location columns are enabled.
Two item-import specifics worth knowing:
-
Additional item numbers — put extra barcodes in the Item Number column separated by a pipe (
|), e.g.4001|4002|4003; all of them will scan at the register. - To update existing records, keep the Item Id column from the existing-items template intact — it is how rows are matched to items.
A few template columns have longer headings than the form options they mirror, so they are easy to misread in the mapping grid (headings verbatim): Quantity Unit Quantity, Allow price override regardless of permissions, Disable From Price Rules, Only allow items to be sold in whole numbers, the series trio Sold in a series, Series Quantity and Number of days series must be used within (see series, packages and recurring charges), Is Barcoded, Default Quantity When Selling or Receiving, Information Popup when adding to sale, and Change cost price during sale. Each sets the same-named option on the item form — creating items explains what they do.
Simpler imports: suppliers and gift cards
Suppliers (Suppliers → … → Excel Import) and gift cards (Gift Cards → … → Excel Import) skip the mapping grid: download one of the two files — the new-records template or the existing-records export — edit it, and upload it on the same page. Keep the column layout as the template has it. See suppliers and gift cards for the fields each supports.
Batch sale: import lines into a sale
Batch sale fills the register from a spreadsheet — useful when you rang sales outside the system (a fair, an outage) or are migrating and want a big order entered in one go:
- Open Sales, click the … menu above the customer panel and choose Batch sale.
- Click Download Excel Template for Batch Sale. Its columns: Item Id/Item Number/Product ID, Unit Price, Quantity, Discount Percent, Description, Serial Number.
- Fill in one row per line — item kits work too, and leaving Unit Price blank uses the item's normal price.
- Upload the file and click Save. Every row is added to the current sale as a line item; if any row references an item that does not exist, the import fails with "Your import has failed as one or more items do not exist" and the sale is left empty.
- Complete the sale as usual — payments, customer, receipt — see ringing up a sale.
Batch sale creates one new sale per import, and it completes at today's date — it fills the register, it does not recreate past sales. To bring in completed sales with their original dates, use Import Sales instead (next section).
Importing sales history (Import Sales)
Completed sales from your old system come in — original dates included — through their own three-step wizard: open Sales, click the … menu and choose Import Sales. The steps are the same as the other wizards (upload, match columns, validate and import), and the menu entry appears for anyone with access to the Sales module.
On step 1, Download Spreadsheet Template offers Template for New Sales. Fill it with one row per line item — rows that share a Sale ID become one sale — and note that Sale ID is the column that must be mapped on step 2 before the wizard lets you continue. The columns:
- Sale ID — groups rows into sales. Imported sales keep these IDs unless Do NOT preserve sale ID when importing sales is turned on in Store Config, which assigns fresh sale numbers instead (rows sharing a spreadsheet Sale ID still land in one sale).
- Sale Date — the sale's original date and time, kept as-is on the imported sale; a blank or unreadable date falls back to the import date.
- Person ID/Customer Name — an existing customer's ID or name; a name that matches nobody creates a new customer on the fly.
- Employee ID and Sold By Employee ID — a blank or unknown Employee ID falls back to whoever runs the import; a blank or unknown Sold By is left empty.
- Location ID — a location's ID or name; anything else lands the sale at your current location.
- Comment and Suspended — leave Suspended at 0 (or blank) for completed sales; a suspended-sale type id (1 = layaway, 2 = estimate on a fresh store) brings the sale in suspended — see suspended sales, layaways and estimates.
- Item Id/Item Number/Product ID — required on every row. The value is matched as an item id, then an item number, then a product id, then an item name — and if nothing matches, a new item is created with that name.
- Quantity Ordered (required), Cost, Selling Price, Tax — the line's quantity, per-unit cost and price, and its tax as a money amount for the whole line (the tax percent on the sale is derived from it).
- Paid Amount, Payment Date, Payment Type — a payment is recorded whenever Paid Amount is above zero and a Payment Type is filled in, so put the payment on only one row of each sale; every row carrying both records another payment. A blank Payment Date falls back to the import date; Payment Type is the payment's name as your store uses it — see payment types.
- One column per sale custom field, under the field's label.
Step 3 ends like the other imports: Complete Excel Import either succeeds, finishes with warnings, or fails — and on errors (a row missing its item or quantity, or a database rejection) the whole import is rolled back while the error log grid lists each problem with its spreadsheet row, message and type. Re-running a file is safe while sale IDs are preserved: rows whose sale already contains that item are skipped, and only missing lines are added.
There is no existing-sales template on the upload page, but the app can export your entire sales history in exactly this import layout from the sales/excel_export_sales address of your store (it has no menu button) — useful for moving history between stores or keeping a re-importable backup.
Getting data back out
The same … menus offer Excel Export: the current list (respecting your search filter in most modules) downloads as a spreadsheet. Use exports for backups of a single list, mail merges, feeding other tools — or the round trip: export, edit in bulk, re-import with the existing-records template. The items export can include location-specific columns, which is also how you bulk-edit per-location prices and stock levels.
A sensible order for a new store
Imports go smoothest when each file can refer to records that already exist:
- Suppliers first, so your items can name their supplier — see suppliers.
- Items next — the items file creates categories as it imports, so there is no separate category import to run beforehand. Creating items explains the fields.
- Customers last — see customer profiles.
- Then anything that references items or customers: gift cards, item kits, opening inventory counts — and sales history last of all, so Import Sales rows match your real items and customers instead of auto-creating bare ones.
If you'd like help migrating
Moving a whole store's history is a bigger job than one spreadsheet. If you'd rather have help — or your old system exports data in an awkward format — onboarding services include data migration help.
Common questions
What file formats can I upload? .xlsx and .csv. Anything else is rejected with "Your upload file has no data or not in supported format." Templates download in the format set by Spreadsheet Format in Store Config.
How do I update existing items without creating duplicates? Download the Template for Existing Items — it includes every item with its Item Id. Edit the columns you want, leave the Item Id column alone, and import. Rows with an Item Id update that item instead of creating a new one.
Why did my import fail? The step-3 error grid lists each problem with its spreadsheet row: unmapped required fields (Item Name for items), duplicate item numbers or product ids inside the file, or invalid values. Errors roll the whole import back, so fix the rows and re-run — nothing was partially imported.
What is the difference between a warning and an error? Errors stop the import and roll it back. Warnings mean the import completed but the system corrected something on the way in (for example a row updated an item that had been deleted) — review them, but your data is in.
Can I import quantities for each of my locations? Yes — on step 1 check Include location specific columns, and the template gains per-location quantity, price, promo, reorder and replenish columns.
Can I import my sales history from my old POS? Yes, with the original dates — use Sales → … → Import Sales, not Batch sale. Download the Template for New Sales, fill one row per line item with the Sale Date column carrying each sale's real date and time, repeat the Sale ID on rows that belong together, and run the wizard. Batch sale is the one that can't do this: it rings lines into a new sale that completes at today's date.
Why don't my employees see the Excel Export option? Exports need the module's Excel Export permission, and imports the add/update permission — see permissions and templates.
Can I import employees? No — employees are created in the app (see employee accounts). Employee lists can be exported.
How do I import extra barcodes for one item?
In the items file, put all the numbers in the Item Number column separated by | (pipe). Each one becomes a scannable item number.
Comments
0 comments
Article is closed for comments.