Review import columns

The columns a review file uses when its Format is set to Meisei. Exports use the same columns, so an exported file can be edited and imported back in. For the everyday steps see Importing reviews.

A minimal file needs three columns:

customer,product,rating
alice@example.com,running-shoes,5
bob@example.com,coffee-mug,2

Columns

ColumnRequiredDescription
customerYesEmail address of the reviewer. A customer Meisei has never seen is created from it.
productYes*Slug of the product being reviewed. It must already exist. On Shopify this is the product handle.
ratingYesWhole number from 1 to 5. A decimal is rounded to the nearest star.
titleNoThe review's headline.
bodyNoThe review's text.
externalIdNoThe review's ID in the app you are migrating from. See Running it twice.
productExternalIdNoThe product's Shopify ID. See Finding the product.
productUrlNoThe product's page URL on your storefront. See Finding the product.
siteNoSlug of the site the review belongs to. Leave it out and the product's own site is used.
productVariantNoSlug of the variant being reviewed, if the reviewer named one. Has to be a variant of the row's product.
publishedNotrue or false. Defaults to true. See Moderation.
hiddenNotrue or false, the opposite of published, for apps that export the flag that way round.
moderationStatusNoThe moderation word your old app used, such as published, pending or spam. See Moderation.
verifiedBuyerNotrue or false. Defaults to false. Shows the Verified buyer badge.
orderReferenceNoThe order the review came from. Any row with one counts as a verified buyer.
incentivizedNotrue or false. Shows the Rewarded review label. A blank cell leaves an existing review's label as it is.
connectedReviewerNotrue or false. Shows the Connected to the store label. A blank cell leaves an existing review's label as it is.
responseNoYour store's reply to the review, published with your organization's name above it.
responderNameNoThe name shown above the reply. Defaults to your organization's name.
responseCreatedAtNoWhen the reply was written. Without it the reply is dated from the import.
createdAtNoWhen the review was written, for example 2023-04-11T09:15:00Z. Without it the review is dated from the import.
imageUrlsNoURLs of the review's photos and videos. See Photos and videos.
importedFromNoThe app the review came from, shown on the review as "Imported from". Ignored when you pick another app's format.
metadataNoA JSON object of your own string key/value pairs.
question:<label>NoOne column per review question. See Review questions.

* A row needs one of product, productExternalId or productUrl.

Finding the product

Meisei looks for the product in this order:

  1. product, matched against the product's slug (the Shopify handle).
  2. productExternalId, matched against the product's ID on any of your sites, such as the Shopify product ID your connected store records. The numeric form (7788) and the gid:// form both work.
  3. productUrl, whose last path segment is read as a slug, so https://example.com/products/running-shoes finds running-shoes.

A row that matches nothing is skipped and the job says which identifiers it tried.

Moderation

Imported reviews are published unless the file says otherwise, and count as decided, so they stay out of the moderation queue. The one exception is a review your old app had not decided on yet, which arrives unpublished and waits in the queue for you.

moderationStatus accepts the words apps print: published, approved, live, visible, ok and public publish the review; unpublished, hidden, rejected, draft and private keep it off the storefront; pending, unapproved and held put it in the moderation queue; unknown and an empty cell publish it. A spam row is not imported at all and is listed on the job.

Where a file has more than one of these columns, published wins, then hidden, then moderationStatus.

Verified buyers

verifiedBuyer accepts true, false, and the words apps print on the badge: buyer, verified and verified purchase mean true; unverified and guest mean false. A row with an orderReference counts as verified, unless its verifiedBuyer cell says otherwise. The reference is kept in the review's metadata.

Photos and videos

imageUrls takes publicly reachable URLs separated by commas, spaces or semicolons, or a JSON array of URLs (or of objects with a url field). Meisei downloads and stores its own copy of each. JPEG, PNG, GIF and WebP images and MP4, QuickTime and WebM video are accepted. An attachment that can't be fetched is reported against its row and the review is still imported. A URL already attached to the review is not fetched twice.

Review questions

Each live review question gets a column named question: followed by its label, such as question:How is the fit?. A scale takes the step number counting from 1. A list of options takes the option labels separated by |, such as Yes|No. An empty cell means the review didn't answer. A value the question doesn't offer skips the row and reports why. Required questions can be left unanswered on an import.

Running it twice

externalId makes an import safe to repeat: importing the same file again updates those reviews in place instead of adding a second copy. Without it, every import adds new reviews. Exports fill externalId in for you, using the review's own Meisei ID where there is no external one.

A review holds one reply, so re-importing rewrites the reply rather than adding a second.

When a row doesn't match

Rows that can't be placed are skipped and listed with their row number on the import job under Settings → Imports:

An import job whose one problem names the row and the product slug it could not find

Row 4: No product with the slug "discontinued-widget".

Fix those rows and import the file again, with externalId set so the rows that worked aren't duplicated.