1. Open the importer and download a template
Sign in as the shop owner on the DuQana website. Open Inventory, then Import products from Excel. Staff accounts cannot use this uploader.
Choose the XLSX template for most spreadsheet apps, or XLS for older Excel versions. You can fill it in Excel, Google Sheets or another spreadsheet app. Export back to .xlsx or .xls before uploading. Changing a file extension does not convert the file.
2. Keep the workbook structure
- Products: one parent product per row. Start entering products on row 2; row 1 contains the headings.
- Variants: only for configurable products, such as sizes or colours. Each variant has its own price and stock.
- Bundles: list each component and the quantity used in a bundle.
- Instructions: a reminder of the rules. Leave unused Variants and Bundles sheets empty.
- Keep the sheet names and column headings exactly as downloaded. Do not add extra sheets or formulas.
- Maximum: 5 MB per file, 2,000 products and 2,000 rows on each supporting sheet. Split larger catalogues into separate files. Empty formatting beyond row 2001 can also exceed the limit.
3. Fill the Products sheet
| Column | What to enter |
|---|---|
| name | A clear product name, unique within your shop. Maximum 160 characters. |
| category | For example groceries, drinks or clothing. Maximum 100 characters. |
| sellingPrice | The selling price for one unit, or the whole bundle. Use a positive number. A configurable parent may use 0 because its variants hold the prices. |
| costPrice | Your purchase cost per unit. Positive for ordinary stock. Services, bundles and configurable parents may use 0. Bundle review uses the costs of its components. |
| quantity | Stock currently available, or 0 if none. Do not put currency symbols or words in number cells. Bundles use component stock and configurable products use variant stock. |
| sku / barcode | Keep as text, especially values like 001234. These must be unique within the shop, including variants. A SKU is required to link configurable or bundle parents. |
| productType | Leave blank for standard, or use variable, weighted, refillable, service, bundle or configurable. |
| unitOfMeasure | For example unit, kg, g, l or ml. Keep price, cost and quantity in the same unit. |
| trackInventory / creditEligible | Optional true or false. Use false for a service whose stock is not tracked. |
| minPrice / maxPrice | Optional allowed prices for variable products. Maximum cannot be below minimum. |
| allowPriceOverride | Optional true or false for services only. |
A small example
These are examples only. Enter your own products and actual purchase costs. Prices use your shop currency.
The oil pack below uses two units of Cooking oil. Its review cost is 400, calculated from the component cost of 200 each. The parent cost placeholder of 0 is not used to estimate its margin.
| name | category | productType | sellingPrice | costPrice | quantity | sku |
|---|---|---|---|---|---|---|
| Cooking oil | groceries | standard | 250 | 200 | 20 | OIL-1 |
| T-shirt | clothing | configurable | 0 | 0 | 0 | TSHIRT |
| Oil pack | groceries | bundle | 450 | 0 | 0 | OIL-PACK |
| Local delivery | services | service | 100 | 0 | 0 | DELIVERY |
4. Add variants or bundle components
Give each parent a unique SKU on Products first. Match that SKU exactly in parentSku on the supporting sheet. A variant SKU and barcode must also be unique.
On Variants, enter parentSku, name, sellingPrice, costPrice and quantity. Purchase cost is required. A zero selling price or zero purchase cost requires your review before saving.
On Bundles, enter parentSku, componentSku and quantity. Components must be standard, weighted or refillable products already in the shop or included in this same file. A missing or ambiguous component SKU is rejected.
| Sheet | Example values |
|---|---|
| Variants | parentSku: TSHIRT; name: Small; sellingPrice: 700; costPrice: 500; quantity: 6; sku: TSHIRT-S |
| Bundles | parentSku: OIL-PACK; componentSku: OIL-1; quantity: 2 |
5. Preview and correct errors
Choose one file and select Preview products. Uploading and checking does not add products to inventory.
The preview identifies the row and the reason for each rejection. Use Show only rows with errors to find the entries that need correction. Fix them in the spreadsheet, save it and upload again. The complete batch must pass; valid rows are not silently imported on their own.
Open Review variants or Review components to inspect their prices, costs and stock. Review every price warning before ticking the acknowledgement. Below-cost prices may be intentional, but do not acknowledge an unknown purchase cost as accurate.
Why was my file or row rejected?
| Reason | How to fix it |
|---|---|
| Unsupported, empty or unreadable file | Save a non-empty .xls or .xlsx workbook. Remove password protection. Do not upload a PDF, CSV or image, or simply rename one. |
| File or row limit exceeded | Keep the file under 5 MB and each data sheet within 2,000 rows. Remove unused formatted rows beyond the template area or split the list. Extremely compressed files exceeding 25 MB when expanded are rejected. |
| Formula, macro or unsupported sheet | Paste calculated results as values. Remove macros and extra sheets, or copy your values into a fresh template. |
| Unknown or repeated heading | Restore the exact headings from the template. Do not rename sellingPrice or costPrice. |
| Missing or invalid number | Enter a number without KES, commas stored as text or units. Ordinary selling prices and purchase costs must be positive. Stock cannot be negative. |
| Duplicate name, SKU or barcode | The identifier is already used in this file or shop, including case-only differences. Choose a unique identifier. To change an existing product, edit it in Inventory instead. |
| Missing variant or component | Check the parent SKU, component SKU and product type. Add the required supporting rows. Resolve duplicate component SKUs in inventory first. |
| Catalogue changed since preview | Another edit, purchase or import affected the products or bundle costs. Upload again to review the current catalogue. |
| Preview expired or unavailable | Previews last up to 24 hours. Check inventory before uploading again, especially after an interrupted save. |
| Too many import attempts | Wait one minute before retrying. Use the same preview when checking an interrupted save. |
| Access or subscription restriction | Sign in as the shop owner. If the shop subscription has ended, renew it before saving new products. |
6. Save and confirm the result
Select Add products after correcting all errors and acknowledging any intentional price warnings. The button shows that saving is in progress and the page confirms the number added on success.
If the connection drops during saving, the app may not know whether the server finished. Use Check save status or Retry this save safely on the same preview. Do not assume the save failed and start a second upload. Retrying the same preview does not add duplicates.
The browser remembers the preview identity for up to 24 hours when session storage is available. Reopening the importer in the same tab can restore it. The remembered identity contains no product prices; the owner must be signed in to read the preview.
This importer adds new products only. It does not update or delete existing products. After success, open Inventory to check your products and any price alerts.