CSV import and export

Last updated: August 28, 2026

If your existing review platform isn’t Okendo or Judge.me, CSV is the universal escape hatch. Every major review platform (Yotpo, Loox, Feefo, Trustpilot, Google Reviews, and others) can export your reviews as a CSV. Upload the file into BetterReviews and our LLM-assisted mapper figures out how to fit it to our schema.

CSV is the connect-step option for Yotpo, Loox, and other platforms during onboarding — /onboarding/connect routes the “Yotpo, Loox, or other” card straight here.

You can also export your BetterReviews reviews as CSV for backup or migration.

Importing via CSV

Where to find it

In the BetterReviews admin, go to Settings → Import & Export.

Screenshot of the Import & Export settings page — manual capture, drop in here.

The 7-phase flow

The importer walks you through a series of steps — not a drop-and-go. This is deliberate: review data is messy and we’d rather catch mismatches before they land in your store.

  1. Upload. Drop your CSV file in. Hard limits: 50 MB, 100,000 rows, one concurrent import per store.
  2. LLM column mapping. We run an LLM pass to map your columns to our schema. It’s good at recognising “author_name” → reviewer_name, “rating_stars” → rating, “posted_on” → review_date, etc.
  3. Review the mapping. You see the proposed mapping in an editable table. Override any mapping you don’t like. The importer warns if rating, content, or product_id isn’t mapped — those three are effectively required for a useful review.
  4. Dry run. We simulate the import against a sample of your data and report how many rows would succeed, fail, or dedupe against existing reviews.
  5. Dry run preview. You see the dry-run summary. If anything looks wrong, go back to step 3 and re-map. If it looks good, continue.
  6. Start import. Click to begin the real import. Runs in the background.
  7. Batch processing. Runs in the background — you can safely close this tab. The page shows a banner confirming this. When the import finishes, we email the store’s admin address with row counts (imported / skipped / errors) and, if there were errors, a link to the error report. If you navigate away and return to Settings → Import & Export, the page picks up the running import automatically.

Screenshot of the CSV column-mapping review step — manual capture, drop in here.

Canonical columns

We recognise these in the mapping step:

Required (must be mapped, explicitly or via LLM):

  • rating — integer 1–5
  • content — review body text
  • product_id — Shopify product ID (numeric or gid://shopify/Product/…)

Recommended:

  • reviewer_name — reviewer display name
  • reviewer_email — email (stored encrypted at rest)
  • review_date — submission date (ISO 8601 preferred; we also accept MM/DD/YYYY US / DD/MM/YYYY EU when day > 12 / Unix timestamps)
  • statusapproved, pending, or rejected. We also recognise published/live/active/ok as approved, review/moderation/requested as pending, and spam/hidden/removed/deleted as rejected.
  • verified_buyertrue or false
  • title — review title. A column named Summary maps here.
  • media_urlspipe-delimited URLs (https://.../one.jpg|https://.../two.jpg). Not comma-delimited.
  • merchant_reply — the public reply you’ve already written to this review on the source platform. When populated, we create a reply alongside the imported review. Synonyms the importer recognises: reply, response, owner_response, store_reply, reply_body. Cap: 10,000 characters.
  • language — the review’s language as a 2-letter ISO 639-1 code (en, pl, de, …). Optional: when you don’t provide it, we auto-detect each review’s language on import. A value you supply always wins over auto-detection. Synonyms the importer recognises: lang, locale, content_locale.

Imported status is preserved — imports don’t force everything to “approved.” But if status is missing, empty, or holds a value we don’t recognise, the row imports as approved and goes live on your storefront. If you want everything held for moderation, map status explicitly and make sure the values are ones we recognise (see the bullet above), or bulk-unpublish after the import.

Some source columns are deliberately ignored, never mapped: product_link (a review or product URL — writing it into product_id would silently break every product join), plus ip_address, location, and source.

Feefo exports work out of the box: Product Ratingrating, Product Feedback Commentcontent, Summarytitle, Product Feedback IDexternal_review_id, Product Feedback Received Datereview_date, Product Moderation Statusstatus.

Need a starting point? Download our template from the upload UI.

Common pitfalls

  • Pipe vs comma in media_urls — we use | so URLs with commas in their query strings don’t break.
  • Product IDs that don’t match your Shopify catalog — the row is skipped. Spot-check before importing.
  • Ambiguous two-digit year dates (6/15/24) — not supported. Use 4-digit years.
  • duplicate review id — not imported in the error report — the row’s external_review_id collided with an existing record and was not imported. This is rare. Re-importing a file you have already imported does not produce these — those rows are detected before insert and counted as skipped. If you see more than a handful, contact support.
  • Rows counted as “skipped” — two cases, both normal: the review’s external_review_id already exists in your store (this is what makes re-importing a file safe), or the same customer already reviewed the same product.
  • 50 MB file cap — split large files into batches.

Exporting

On the same Settings → Import & Export page, click Export all reviews. The export:

  • Runs asynchronously — close the page if you like and come back to grab the link when ready
  • Covers every review for your store, regardless of status (no date-range or status filters today)

Screenshot of the Export section — manual capture, drop in here.

What’s in the export

All core fields plus platform and sentiment. The column set overlaps with what the importer accepts, so you can round-trip most fields.

Importing Q&A

The same importer handles Q&A (questions and answers) in addition to reviews. Upload a Q&A CSV export from Okendo or any other platform using the Import Q&A tab on the Import & Export page. The importer auto-detects Q&A format from column headers and switches to the Q&A column mapping schema automatically.

See Importing Q&A → for the full column reference, answerer type inference, and dedup behavior.

When CSV is the right tool

  • Migrating from a platform we don’t have a direct integration for — Yotpo, Loox, Trustpilot, Google Reviews
  • Migrating Q&A from Okendo or another platform — bring historical questions and answers before disconnecting
  • Backing up your reviews — periodic exports for safekeeping
  • Loading historical reviews from a non-standard source — reviews your team collected manually, imported from an older tool, etc.

For platforms we have direct integrations with (Okendo, Judge.me), the direct connection is easier and brings over richer data.