ekPOS
User Guide
User Guide / Import and export

Other imports

Besides products, Import / Export handles opening stock, contacts, sales, discounts, purchases and price lists. Every import works the same way:

  1. Download the template (or the Download Stock Sheet for opening stock).
  2. Fill it in and save it as CSV (UTF-8).
  3. Upload & Preview, check each row's status and the reasons for invalid ones.
  4. Import the valid rows. Nothing is saved before this step.

The Column Guide on each page lists every column, whether it's required, an example and notes.

Opening stock

Import / Export → Import Opening Stock sets the starting quantity of many products at every location in one go.

Import opening stock
Import Opening Stock
  1. Click Download Stock Sheet. It lists every product with no stock movement yet — one row per product, or per variant for variable products — with a quantity column for each location. If your user is limited to some locations, only those have a column.
  2. Fill in the quantities. Leave a cell blank to skip that location; leave a whole row blank to skip the product.
  3. Optionally set an Opening Date (defaults to today).
  4. Upload, preview and import.
Opening stock preview
Preview of an opening stock sheet

Rows are matched on SKU (the variant's SKU for a variant). A product that has had any movement since you downloaded the sheet is rejected, the same rule as Opening stock.

Contacts

Import / Export → Import/Export Contacts adds and updates customers and suppliers.

  • Rows are matched on Email first, then Phone. At least one of the two is required.
  • Columns: first name, last name, company, type (customer, supplier or both), email, phone, tax number, billing and shipping addresses — building, address (the street), city, state (the governorate), postal code, additional info and country — (or Shipping = Billing Yes). An address is all-or-nothing: a row that starts one without its building, street, city, governorate and country is refused, credit limit, opening balance, active.
  • Opening Balance only counts when a contact is created; it is written to their ledger once and ignored on updates.
  • Two contacts cannot share a phone, email or tax number, as on the contact form. A row is refused if one of its values is already on a contact other than the one it updates, inactive contacts included. It is also refused if the same tax number appears on more than one row of the file, or if an earlier row in the file has just taken one of its values. The refusal names the contact that holds the value.

Sales

Import / Export → Import/Export Sales brings in past invoices, for example from your old system.

  • One row per line. Rows with the same Reference become one invoice. The reference must be new — an existing one is skipped. Sales are never updated by import.
  • Invoice-level fields — date, branch, customer and status — are read from the first row of each reference. The date can't be later than today.
  • Branch is matched by name or code. If your user is limited to some locations, a row at any other branch is refused, the same as entering it by hand. Customer Phone / Customer Email link to an existing contact; if none matches, the sale has no customer.
  • Status: completed, draft, quotation or proforma.
  • Each line has a product SKU, quantity, unit price and a flat Line Discount taken off before tax.
  • Taxes names the line's taxes exactly as on Tax Settings, separated by | — for example VAT 14% | Table Tax. Blank means no tax. An invoice-level tax such as withholding can't be put on a line. Tax Type says whether the unit price is exclusive (tax added on top, the default) or inclusive (tax already in the price).
  • The line is charged exactly as on Add Sale: several taxes follow ETA's order of calculation, and the sale shows each tax separately on the invoice and in the tax report.
  • Tax Amount is filled in on export so you can see what each line was charged. It is ignored on import.
  • A file that still has the old Tax % column is refused at preview, so its invoices are never imported without their tax. Download the template and name the taxes instead.
  • Each row can carry one payment: an amount, method (cash, bank, card, mobile_wallet, instapay, cheque, other) and date, which can't be later than today. A sale paid part in cash and part by bank has one payment on each of two rows; a row with a payment and no product carries only that payment.
  • Imported sales are posted to your accounts like any other.
  • If any row of an invoice is invalid, the whole invoice is skipped.

Completed imported sales take stock out and are written to the customer's ledger, and on plans with accounting they are posted to your accounts with their payments. Stock is not checked: an imported sale can take a location below zero.

Discounts

Import / Export → Import/Export Discounts creates and updates discounts, matched on Discount Code: name, type (percentage/fixed), amount, tax type, priority, dates (YYYY-MM-DD HH:MM) and active. Which products, branches and customer groups a discount targets is set on the Discounts screen, not in the file.

Purchases

Import / Export → Import/Export Purchases works like the sales import: one row per line, grouped by Reference, insert only.

  • Supplier Phone / Supplier Email link to an existing supplier.
  • Quantity is what was ordered and Received Quantity is how much of it has arrived; only what arrived is added to stock. Leave Received Quantity blank to follow the status: everything for received, nothing for the rest. A purchase exported while 4 of 10 had arrived comes back in as 4 of 10, with the status partially_received.
  • Status: received, partially_received, ordered, pending, draft or cancelled. It is checked against the lines: a received purchase with a short line is stored as partially received, and one with nothing received as ordered.
  • Lines have product SKU, quantity, unit cost, line discount, Taxes and Tax Type, named and charged as for sales; each row can carry one payment, as for sales, and received purchases are posted to your accounts.

Imported purchases are written to the supplier's ledger. Their date and payment dates can't be later than today, as for sales.

Price lists

Import / Export → Import/Export Price Lists adds and updates the prices in your price lists. It appears only when your plan includes price lists.

Import price lists
Import / Export Price Lists
  • One row per price: a Price List name, a SKU, a Min Quantity (the From qty on the screen; blank means 1) and the Price.
  • Rows are matched on Price List + SKU + Min Quantity. A matching price is updated; otherwise it is added. Prices the file doesn't mention are left as they are — to remove one, use the Price Lists screen.
  • A variant's SKU prices that variant only. A variable product's own SKU prices all variations.
  • A list named in the file that doesn't exist yet is created, active. List names are matched regardless of capitals.
  • Export downloads every price in every list, with the product, variant and normal selling price beside it for reference. Those columns are ignored on import, so you can edit the prices in the export and upload it back.
  • Which customers and groups use a list is set on their own forms, not in the file.
Price list preview
Preview of a price list file: a quantity break, all variations of a case, and one variant

Who can do this

Every import needs Data → Import. Importing or exporting price lists also needs Price Lists → Manage.

© 2026 ekPOS