Importing orders

Bring your order history across from another platform so Meisei knows who bought what, can ask the right customers for reviews, and can credit loyalty points for past purchases.

Before you start

Every order attaches to a customer and to the products it contains, so import those first:

  1. Importing products.
  2. Your customers, from Customers. Meisei matches each order to a customer by email address.

If you skip this, every order is skipped because it has no customer or product to attach to.

Import your orders

  1. Export your orders from your current platform as a CSV file and arrange the columns to match the list under For developers below. Each item in an order is one row, with the order's own details repeated on every row.

  2. Open Orders, choose Import from the actions menu, and pick your file.

    The Import orders dialog with the Earn loyalty rewards switch turned off

  3. Decide about Earn loyalty rewards on the import dialog, which gives imported orders points and rewards. It starts off, so importing history never hands out points by accident. Review requests need no switch. The Send review requests automation asks an imported order only if its day came in the last three days, so recent orders are asked and old history is not. A customer who only reached Meisei through an import, and has never had an email from your store, is skipped, because an old list is the main cause of bounced email.

  4. Start the import. It runs in the background, so you can leave the page.

  5. Check Settings → Imports when it finishes. Open the job to see any rows that were skipped, with the row number and the reason.

    A finished orders import listing the orders it created

Good to know

  • Include the date each order was placed. Without it, Meisei dates every order on the day you import it, so old orders look new: charts put them all on one day and review requests can go out for them.
  • Importing the same file again is safe. Meisei recognizes each order by the order ID from your old platform and updates it in place, replacing its items with the ones in the file, rather than adding a copy.
  • One bad item skips the whole order. Meisei won't import an order with only some of its items. Fix the row and import again.
  • A bad row never stops the import. The rest of the file is imported.

If something isn't working

Message on the jobWhat to do
"No customer with the email ..."Orders need their customer in Meisei first. Import your customers, then run the orders file again.
"No product with the slug ... The order ... was skipped."One line item's product is missing, so the whole order was left out. Import the product, then run the file again.
"This row has no order row before it."A row with a blank remoteId belongs to the order above it, so the first row needs one. Fill it in.

See Imports and exports for the messages every import can show.

  • Nobody got a review request. The orders were older than the review request window, the Send review requests automation is off (see Settings → Features → Reviews), or the customers were imported and have never had an email from your store. They get review requests from their next order on. See Collecting reviews.

Next steps

For developers

One row per line item. Rows that share a remoteId (and site, when you fill it) are one order, wherever they sit in the file. Files in the older format (a full row starts an order, the rows below carry only their line item) still import: a row with a blank remoteId belongs to the order above it.

ColumnRequiredDescription
customerYesEmail of the customer who placed the order. Must already exist.
remoteIdYesThe order's ID in the system you are migrating from. Ties the rows of one order together.
numberYesThe order number shown to the customer.
totalCentsYesOrder total in the smallest currency unit (5999 for $59.99).
productNoSlug of the product on this row. Must already exist. Blank for an order with no line items.
productVariantNoSlug of the variant bought, if the product has variants. Has to be a variant of product.
quantityNoUnits bought. Required when product is filled.
unitPriceCentsNoPrice of one unit, in the smallest currency unit. Required when product is filled.
siteNoSlug of the site the order was placed on. Defaults to your first site.
subtotalCentsNoDiscounted subtotal excluding shipping and tax. Loyalty earning uses it where given.
shippingCentsNoShipping charged.
taxCentsNoTax charged.
currencyCodeNoISO 4217 code. Defaults to USD.
createdAtNoWhen the order was placed, e.g. 2024-01-12T08:15:00Z. Blank dates it on the import day.
shippedAtNoWhen the order shipped, e.g. 2024-01-15T10:30:00Z. Blank if it hasn't.
deliveredAtNoWhen the order was delivered.
cancelledAtNoWhen the order was canceled.
metadataNoA JSON object of your own string key/value pairs.
customer,remoteId,number,totalCents,product,quantity,unitPriceCents
ada@example.com,1001,ORD-1001,5998,classic-tee,1,1999
ada@example.com,1001,ORD-1001,5998,plant-pot,1,3999

Where two rows of one order disagree on an order-level value, the first non-empty value in the file wins and the ignored row is reported. A blank cell means "not specified" and never overwrites what another row said. The same import is available as POST /import-jobs.