Skip to content

Import your customers and inventory from a spreadsheet

Bring contacts and products into OnTote with the import wizard, from upload to preview to result, without typing it all in by hand.

You don't have to type your contact list or your product list in by hand. The import wizard takes a CSV or Excel file, shows you exactly what it will do with every row, and only writes anything when you click Import. Nothing goes in on a guess.

One row is one record: one contact per row for customers, one SKU per row for inventory.

Before you start

If your file has no header row the wizard can't map it, so add one. If you're not sure about the format, skip your file entirely and click Download the template on the first step. It's a CSV with the right columns already in place, and it's the fastest way to start.

For customers, the only required column is Name. Email, phone, company, and notes are optional, but email or phone is what the import uses to recognize a duplicate, so include at least one.

For inventory, the required columns are Kind, SKU, and Name. Kind has to be one of `rental`, `good`, or `service`. The rest (unit label, category, quantity, location, price, rate unit, deposit, min duration, active) are optional.

Running the import

1. Open the Customers or Inventory page and click Import. The Import customers or Import inventory dialog opens.

2. Click Choose a file and pick your CSV or .xlsx file. If the workbook has more than one sheet, a Sheet dropdown appears on the next step: pick the sheet and the wizard re-reads it without re-uploading.

3. Check the column mapping. The wizard guesses, and it says so: "We've guessed the columns; change anything that looks wrong." Any field you leave set to — not imported — is skipped entirely.

4. On the Review step, decide what happens when a row matches something already in OnTote. The two choices are Update the existing contact (or item), which is pre-selected, and Leave it as it is, which skips the row. For inventory you'll also see a Fallback location picker, used when a row leaves the location column blank.

5. Check the counts at the top: N new, N updated, N skipped, N with problems. Then click Import N. The result step reads out what actually happened: how many were created, updated, left unchanged, and not imported.

If some rows can't go in, the wizard says so plainly and offers Download the problem rows: a CSV with just the bad ones. Fix them in place and upload that file again.

How duplicates are handled

Customers are matched on email first, then phone. Inventory is matched on SKU. The match is case-insensitive, so `tote@acme.com` and `Tote@acme.com` are the same contact.

  • With Update the existing contact selected, the file's filled-in cells overwrite the matching record, and blank cells leave it alone. Only the columns you filled in change.
  • With Leave it as it is, matching rows are skipped and the existing records are untouched.
  • A row with no email and no phone can't be matched, so it always imports as a new contact.
  • If two rows in the same file would match the same record, the first row imports and the later ones are flagged in the preview and left out.

For inventory, one thing can't change: the kind. If a SKU already exists as a `rental` and the file says `good`, that row errors with "Item type cannot be changed by import." You'd change it on the product itself, not through the file.

Quantities are a recount, not an addition

This is the part that trips people up. When the quantity column is filled in, the number you import replaces the current stock, it doesn't add to it. Importing a row that says 200 when you currently show 350 sets it to 200, not 550.

Two guardrails on that: a service can't carry a quantity at all, and for rentals you can't set a number below what is already out, damaged, or lost. If 80 totes are on jobs and you try to import 60, the row errors and the preview tells you why.

An import cannot be undone, so if you want to be cautious, import a small file first and check the result before the big one.

When something goes wrong

  • The wizard maps a column to the wrong field. It guesses, and guesses are sometimes wrong. Re-check the mapping step before you commit, especially the quantity column (a guess that lands quantity on price moves stock).
  • The Sheet dropdown never appears. The wizard only shows it when the workbook has more than one sheet. A CSV always has exactly one sheet.
  • "Pick a column for Name before continuing." Every required field needs a mapped column. Either map one or set the field to — not imported — if it truly isn't in the file.
  • The import stopped part-way. What already went in stays in; the result counts show what landed. Fix the file and re-import. Rows that already imported are matched and updated or skipped, never duplicated.

See also: Import past and upcoming orders, Export customers, orders and inventory to CSV.

Updated October 9, 2026

Didn't answer it?

Send us the question and you'll hear back in a business day or two, usually the same day. A real person reads every one.