Bulk importing items from a spreadsheet

If you're moving a project's worth of items in at once — from a spreadsheet you already keep, or an export from another tool — Data Import is faster than adding items one at a time.

Where to find it

Go to Data Import (linked from the sidebar). Choose the Project you're importing into.

1. Upload your file

Drop a .csv or .xlsx file onto the upload area, or click to browse for one. Mortar reads the header row and the first rows of data for you to check before anything is imported.

Limit: 500 rows per import. If your file has more, split it into batches.

2. Map your columns

For each column in your file, tell Mortar what it means:

Target What it maps to
Name Item name
Price (client) What the client sees / pays
Cost (designer) Your trade/wholesale cost — never shown to the client
Qty Quantity
Currency Native currency of that row's price (must be one of USD/EUR/GBP/AUD/NZD — see Currencies)
Product URL Link to the product page
Vendor Supplier/retailer name
Category Becomes the item's tag (drives the category tabs in Room Details)
Room Which room the item belongs to
Image URL Product photo
SKU / Product Code
Notes / Description
Status Draft / Proposed / Approved
Ignore Skip this column entirely

Mortar guesses a sensible mapping automatically from your column headers (e.g. a header called "Sell Price" or "Client Price" auto-maps to Price; "Trade Cost" or "Wholesale Cost" auto-maps to Cost) — check it over and correct anything it got wrong, especially the Price vs. Cost split, since mixing those up would leak your margin to a client.

If you map a Status column, you'll get a short extra step to map each distinct value in that column (e.g. "Pending Approval") to one of Draft / Proposed / Approved / Skip row.

Save this mapping for next time

If you'll be importing from the same spreadsheet format again (e.g. a recurring supplier export), click Save this mapping and give it a name. Saved mapping templates appear next time you start an import from a file with a matching set of headers, so you don't have to re-map from scratch.

3. Room column: find-or-create

If you map a column to Room, Mortar matches each row's value against your project's existing rooms by name. If a row names a room that doesn't exist yet, Mortar creates it. If you don't map a Room column, choose a single Target room up front and every row lands there instead.

4. Review and import

The preview shows your first rows fully mapped, plus a summary of the whole file:

  • Rows that fail validation are flagged with the reason (bad currency code, missing name, unreadable price, etc.) and are skipped — the rest of the import still goes ahead.
  • Rows that look like duplicates of an existing item are called out separately.

Every row runs through the same validation as adding an item by hand or via the API — currency codes are checked against the supported list, and required fields (at minimum a name) are enforced per row.

Click Import to commit. Imported items land as items in their mapped rooms, in the status you set (or draft by default if you didn't map a Status column).

FAQ

What happens to a row Mortar can't validate? It's skipped, with a reason shown in the results (e.g. an unsupported currency code, or a missing item name), and the rest of the file still imports.

Can I import more than 500 rows? Not in a single import — split the file and run it more than once.

Does the import affect existing items? No — import only creates new items, it never edits or deletes existing ones. Rows that look like duplicates are flagged for your attention, not silently merged.

Did this answer your question? Thanks for the feedback There was a problem submitting your feedback. Please try again later.