Skip to main content
This feature is in beta. This means it might at any time be changed, withdrawn from your account, or become part of a paid add-on module. You might also experience interruptions of this service, degradation of user experience or faulty behavior even in critical processes such as automations and sendouts. Voyado welcomes feedback on beta features, and encourages you to try them, but you should not build business critical logic on beta features. Only when a feature reaches its full release can you trust it to function reliably with no further breaking changes.
Your pre-existing review data can be imported into Voyado Customer Engagement as a CSV with semicolon separators like this:

Required fields

These are the compulsory fields in the CSV:
string
required
Used to groups reviews that belong together so they are shown and aggregated as one set.In the example CSV this value equals ProductGroupId.Group: “Product”
Example: “107”
string
required
Identifier of the product feed which the product comes from.In the example it equals the ProductVariantId value.Group: “Product”
Example: “107-blue-xl”
string
required
The parent product shared by all the various colour and size variants. Matches data-product-group-id in the widget.In the example it equals ReviewGroupId.Group: “Product”
Example: “107”
string
required
Product within the group. Matches data-product-id in the widget.Group: “Product”
Example: “107-blue”
string
required
The sellable variant (SKU, size or colour level). Matches data-variant-id in the widget.Group: “Product”
Example: “107-blue-xl”
integer 1-5
required
The star rating (1-5).Group: “Review”
Example: “4”
string
required
The language and market the review was written in (as a BCP 47 language tag string).Group: “Review”
Example: “en-GB”
enum
required
How the reviewer is identified in UserDetail, either:
  • Guest (display name)
  • Email (email address)
  • ContactId (Customer Engagement contact ID)
Group: “Reviewer”
Example: “Email”
string
required
The reviewer, interpreted by UserType (either display name, email address or contact GUID).Group: “Reviewer”
Example: “john.doe@​example.com”
boolean
required
Whether the reviewer is a confirmed purchaser. Controls the verified-buyer badge in the Reviews widget.Group: “Reviewer”
Example: “True”
timestamp (UTC)
required
When the review was originally written on the original platform.Group: “Review”
Example: “01/15/2025 10:30:00 +00:00”
timestamp (UTC)
required
When the review was approved or published. Migrated reviews should already be approved by the previous provider and are not re-moderated.Group: “Review”
Example: “01/16/2025 08:00:00 +00:00”

Optional fields

These are the optional fields in the CSV:
string
The review text in its original language.Group: “Review”
Example: “Great product, highly recommended!”
integer ≥ 0
Number of “helpful” votes carried over.Group: “Review”
Example: “3”
integer ≥ 0
Number of “dislike” votes carried over.Group: “Review”
Example: “0”
JSON object
Free-form metadata. The samples use importId (unique row id for tracing) and contactName.Group: “Review”
Example: “{“importId”:“abc123”,“contactName”:“John D”}”
JSON
Existing translations of ReviewText, with the original locale first. Supplying them avoids the separately priced migration translation.Group: “Review”
Example: “{“translations”:[{“locale”:“en-GB”,“text”:“Great product, highly recommended!”},{“locale”:“es-ES”,“text”:“Great product, highly recommended!”},{“locale”:“sv-SE”,“text”:“Utmärkt produkt, rekommenderas varmt!”}]}”
string
The merchant’s reply to the review.Group: “Reply”
Example: “Thanks for your review!”
JSON
Translations of the reply, same structure as TranslationsJson.Group: “Reply”
Example: “{“translations”:[{“locale”:“es-ES”,“text”:“Thanks for your review!”},{“locale”:“sv-SE”,“text”:“Tack för din recension!”}]}”
timestamp (UTC)
When the reply was written.Group: “Reply”
Example: “01/16/2025 08:00:00 +00:00”
integer ≥ 0
“Helpful” votes on the reply.Group: “Reply”
Example: “1”
integer ≥ 0
“Dislike” votes on the reply.Group: “Reply”
Example: “0”
string
Who replied, shown as the author of the reply.Group: “Reply”
Example: “Admin User”
timestamp (UTC)
When the reply was approved or published.Group: “Reply”
Example: “01/16/2025 08:15:00 +00:00”
JSON
Free-form custom attributes. Matches id in the widget for custom data.Group: “Extension”
Example: “{“size”:{“value”:0.5},“quality”:{“value”:0.8}}”

Service reviews

A service review is about the company rather than a product. In the migration file a service review will have a normal review row, using the same column format as a product reviews. The difference is in the product references. For a service review, the following attributes must all have the literal string value of “service”:
  • ReviewGroupId
  • ProductFeedId
  • ProductGroupId
  • ProductId
  • ProductVariantId
That’s how the import distinguishes a service review from a product review. You can see a service review in the example CSV above (the last row):
Beginning of service review row
Do not map service reviews to a real product ID.

Everything else

The other fields in a service review work as they do for product reviews. That covers rating, text, locale, reviewer (UserType and UserDetail), verified-buyer flag, dates, votes, translations and merchant replies.

Approval

Migrated reviews need to be already approved by the previous provider, because moderation is not re-run on them.

Presentation

In the widgets, service reviews are shown using the same review widgets as product reviews.