# SealedReviews: full description for language models Canonical site: https://sealedreviews.com/ (English) and https://sealedreviews.com/sv/ (Swedish). Operated by Guldstrand Utveckling AB, Sweden. This file is generated from the same source as the website, so the facts here match the site. --- # English ## Summary SealedReviews is a lightweight, low-cost review platform for web shops that only accepts reviews from verified purchases. The shop adds one BCC address to its order confirmation emails; SealedReviews verifies each email with DKIM/DMARC, waits a few days and asks the customer for a review. Reviews are shown on the shop's site with a small widget and on a public review page. One plan at 99 SEK per month (excl. VAT), hosted in the EU (Stockholm), no cookies in the widget. Verified-purchase reviews for any web shop. 99 SEK per month, one plan. ## Key facts - **Price:** 99 SEK per month excl. VAT. One plan, everything included. No tiers or add-ons. - **How reviews are collected:** The shop adds a BCC address to its order confirmations. Only those emails can create a review request. - **Verification:** Each order email must be DKIM-signed or pass DMARC aligned with the shop's verified domain, have exactly one customer recipient, not be forwarded and be less than 48 hours old. - **Human check:** One-time review link per order, invisible proof-of-work, honeypot field and minimum fill time. No CAPTCHA, no tracking pixel. - **Platforms:** Works with any shop platform or custom shop that sends order confirmation emails: no plugin or API integration needed. - **Products:** Products are created automatically from schema.org/Order JSON-LD in the order email; product, page and company reviews are supported. - **Widget:** One script tag, no dependencies, under 5 KB gzipped, no cookies, Shadow DOM so it never clashes with the site's CSS; restyle it with CSS variables, ::part() or data-style='unstyled'. Adds schema.org AggregateRating for Google star ratings. - **Negative reviews:** Shops can reply publicly. They can only remove a review with a stated reason (spam, personal data, offensive, wrong product, not a customer); removals are logged and shown as a count on the public page. - **Data and privacy:** Hosted in AWS Stockholm (EU). Raw emails are deleted after processing; customer email addresses are deleted after the reminder. One-click unsubscribe. - **Limits:** 10,000 verified orders per month and 500 per hour per shop. - **Import:** Import from reviews.io and Trustpilot (counted in the rating) or from a CSV export from any provider (shown, but not counted). - **Company:** Guldstrand Utveckling AB, Sweden (org. no. 559225-3909). ## How it works 1. **Add the BCC address.** Put your private SealedReviews address in BCC on your shop's order confirmation emails. 2. **SealedReviews checks the email.** DKIM/DMARC must pass for your domain and the email must go to exactly one real customer. 3. **The customer is asked.** After 7 days (configurable per shop and product) the customer gets a personal one-time link. 4. **Reviews go live.** Reviews appear on your site through a small widget and on your public review page. ## Frequently asked questions ### What is the cheapest way to get verified reviews for a web shop? SealedReviews costs 99 SEK per month (excl. VAT) with everything included: verified-purchase reviews, product and company reviews, a widget, public review page, replies and export. There is one plan, no tiers. ### Is SealedReviews a Trustpilot alternative? Yes, for web shops that want reviews only from verified purchases at a low fixed price. Reviews are collected through a BCC copy of the order confirmation, so only real buyers can review. You can also import your existing Trustpilot reviews. ### How does SealedReviews stop fake reviews? A review can only be written through a one-time link sent after a verified order confirmation. The order email must be DKIM-signed or pass DMARC for the shop's domain, and the shop's account email must be on the same domain. There is no open review form. ### Do I need a plugin or API integration? No. If your shop sends order confirmation emails, it works: add one BCC address. This covers Shopify, WooCommerce, Magento, custom shops and anything else that sends email. ### How do I show reviews on my website? Paste one script tag and a div where reviews should appear: per product (with the product's SKU) or for the whole shop. The widget is under 5 KB gzipped, sets no cookies and can be styled with CSS variables, ::part() or fully by your own CSS (data-style='unstyled'). ### Will I get review stars in Google search results? Product widgets add schema.org AggregateRating. For the most reliable result, write the rating from the public JSON API into your product page's own JSON-LD when you build the site; the guide shows how. ### Can a shop delete bad reviews? Only with a stated reason (spam, personal data, offensive, wrong product, not a customer). Removed reviews no longer count, are logged, and the public page shows how many were removed. Shops can always reply publicly. ### Is SealedReviews GDPR-friendly? It is hosted in the EU (AWS Stockholm). Raw order emails are deleted after processing, customer email addresses are deleted after the reminder, and every review request has one-click unsubscribe. The widget sets no cookies. ### Which products does the customer review? SealedReviews reads the products from schema.org/Order JSON-LD in the order confirmation. Without it, the customer reviews the shop as a whole. New SKUs become products automatically. ### Can I import reviews from reviews.io or Trustpilot? Yes. reviews.io and Trustpilot (with your API key) are imported directly and count towards the rating, labelled with their source. A CSV export from any other provider can be imported too; those reviews are shown but not counted. ### Where is the data stored? In AWS Stockholm (eu-north-1), operated by Guldstrand Utveckling AB in Sweden. ### How do I integrate SealedReviews with an AI coding assistant? Every guide page has a 'Copy for LLM' button that copies the full integration instructions as markdown, and https://sealedreviews.com/llms.txt describes the product for language models. ## Integration guide SealedReviews collects reviews only from verified purchases. Three steps are enough: BCC on the order confirmation, the products as JSON-LD and the widget on your site. Products are created automatically from the order emails. ## 1. Add the BCC address to order confirmations _This is how SealedReviews learns about each purchase._ Add the address as **BCC** on every order confirmation your shop sends. The customer doesn't see it. The email is accepted when: - From is on `yourshop.com` (or a subdomain). - It is DKIM-signed by `yourshop.com` (or passes DMARC). - It has exactly one customer in To, and the BCC address is not in To or Cc. - It is sent when the order is placed (at most 48 hours old) and is not forwarded. Otherwise it is rejected and shown as rejected in the dashboard. `` or `lang="en"` sets the language of the request. BCC address: ```text xxxxxxxxxx@in.sealedreviews.com ``` ## 2. Add the products as JSON-LD _Tells SealedReviews which products the customer bought._ Put the block anywhere in the order confirmation's HTML, with one `OrderItem` per product. - `sku` is the product key. Keep it stable, the widget uses the same value. - A new SKU creates a new product automatically. - Without the block the customer reviews your shop as a whole. Order confirmation (HTML): ```html ``` ## 3. Choose when the request is sent _Decides when the customer is asked._ - Default: 7 days after the order email (Settings tab). - Own delay per product (Products tab). - Several products in one order get one request, after the longest delay. - A reminder is sent 7 days later if the customer hasn't answered. - Day 0: Order placed, BCC arrives - Day 7: Request sent - Day 14: Reminder, if no answer ## 4. Show reviews on your site _Shows ratings and reviews on your site._ Paste the script once per page, and a `div` wherever the reviews should appear. - `data-shop` is your domain. - `data-product` is the same SKU as in the order email. Product page: ```html
``` Options: | Options | What it does | | --- | --- | | `data-type="company"` | The whole shop's reviews instead of one product. | | `data-layout="badge"` | Only stars and count, compact. | | `data-limit="5"` | Reviews shown before "Show more". | | `data-theme="dark"` | For dark pages. | | `data-lang="sv"` | Language. Otherwise the page's own. | | `data-schema="off"` | No star markup from the widget (see step 5). | ### Rating as text, always up to date (optional) _The numbers in a sentence, in your page's own font._ Add `data-layout="text"` and write the last known text inside. It shows right away, and the widget swaps in the current numbers (at most 5 minutes old). - Own wording: only `data-sr-rating` and `data-sr-count` are filled in. - No ratings yet: your text stays as it is. Anywhere in your text: ```html 4.8 out of 5 stars from 20 ratings Rated 4.8/5 by 20 customers ``` ### Style it your way (optional) _Colours, shape and single parts._ - **CSS variables:** `--sr-accent`, `--sr-star`, `--sr-ink`, `--sr-muted`, `--sr-line`, `--sr-card`, `--sr-font`, `--sr-radius`, `--sr-gap`. - **`::part()`:** `box`, `header`, `brand`, `score`, `stars`, `count`, `review`, `avatar`, `name`, `date`, `verified`, `body`, `reply`, `more`, `footer`. - **`data-style="unstyled"`:** no built-in styling, only HTML with `sr-*` classes. Or render it yourself from the `sealed:data` event. CSS: ```css /* Your colours and shape */ [data-sealed] { --sr-accent: #0a7b55; --sr-star: #f5a623; --sr-radius: 6px; --sr-font: "Inter", system-ui, sans-serif; } /* Single parts */ [data-sealed]::part(review) { padding: 18px 0; } [data-sealed]::part(avatar) { display: none; } ``` ## 5. Stars in Google (optional) _Gives the product stars in Google's search results._ The widget adds basic star markup by itself. Most reliable is to write the rating into the product page's own Product JSON-LD when the site is built. - Fetch `https://sealedreviews.com/api/public/yourshop.com` in your build or a scheduled job. Public JSON, no key. - Take `rating` and `count` for your SKU. Skip it when `count` is 0. - Show the same rating visibly on the page. Google requires it. - Add `data-schema="off"` to the widget on that page. - Only products get stars, not the shop. API response (shortened): ```json { "shop": { "name": "...", "domain": "yourshop.com" }, "company": { "rating": 4.8, "count": 52, "reviews": [ ... ] }, "products": [ { "key": "MUG-001", "name": "Ceramic mug", "rating": 4.7, "count": 21, "reviews": [ ... ] } ] } ``` Build step (Node.js): ```js // Fetch the current rating and write it into the product page's own JSON-LD const res = await fetch("https://sealedreviews.com/api/public/yourshop.com"); const data = await res.json(); const p = data.products.find((x) => x.key === "MUG-001"); const productLd = { "@context": "https://schema.org", "@type": "Product", name: "Ceramic mug", sku: "MUG-001", offers: { /* your price and availability, as today */ }, }; if (p && p.count > 0) { productLd.aggregateRating = { "@type": "AggregateRating", ratingValue: p.rating, reviewCount: p.count, bestRating: 5, worstRating: 1, }; } // Write JSON.stringify(productLd) into ``` ## 3. Välj när förfrågan skickas _Bestämmer när kunden får frågan._ - Standard: 7 dagar efter ordermejlet (fliken Inställningar). - Egen tid per produkt (fliken Produkter). - Flera produkter i en order ger en förfrågan, efter den längsta tiden. - En påminnelse skickas 7 dagar senare om kunden inte har svarat. - Dag 0: Ordern läggs, BCC kommer in - Dag 7: Förfrågan skickas - Dag 14: Påminnelse, om inget svar ## 4. Visa recensionerna på sajten _Visar betyg och recensioner på din sajt._ Klistra in skriptet en gång per sida, och en `div` där recensionerna ska synas. - `data-shop` är din domän. - `data-product` är samma SKU som i ordermejlet. Produktsida: ```html ``` Val: | Val | Vad det gör | | --- | --- | | `data-type="company"` | Hela butikens recensioner i stället för en produkt. | | `data-layout="badge"` | Bara stjärnor och antal, kompakt. | | `data-limit="5"` | Antal recensioner innan "Visa fler". | | `data-theme="dark"` | För mörka sidor. | | `data-lang="sv"` | Språk. Annars sidans eget. | | `data-schema="off"` | Ingen stjärnmarkup från widgeten (se steg 5). | ### Betyget som text, alltid aktuellt (valfritt) _Siffrorna i en mening, i sidans eget typsnitt._ Lägg till `data-layout="text"` och skriv senast kända text inuti. Den syns direkt, och widgeten byter till aktuella siffror (högst 5 minuter gamla). - Egen formulering: bara `data-sr-rating` och `data-sr-count` fylls i. - Inga betyg än: din text står kvar. Var som helst i texten: ```html 4,8 av 5 stjärnor från 20 betyg Betyg 4,8/5 från 20 kunder ``` ### Anpassa utseendet (valfritt) _Färger, form och enskilda delar._ - **CSS-variabler:** `--sr-accent`, `--sr-star`, `--sr-ink`, `--sr-muted`, `--sr-line`, `--sr-card`, `--sr-font`, `--sr-radius`, `--sr-gap`. - **`::part()`:** `box`, `header`, `brand`, `score`, `stars`, `count`, `review`, `avatar`, `name`, `date`, `verified`, `body`, `reply`, `more`, `footer`. - **`data-style="unstyled"`:** ingen egen stil, bara HTML med `sr-*`-klasser. Eller rita själv från händelsen `sealed:data`. CSS: ```css /* Your colours and shape */ [data-sealed] { --sr-accent: #0a7b55; --sr-star: #f5a623; --sr-radius: 6px; --sr-font: "Inter", system-ui, sans-serif; } /* Single parts */ [data-sealed]::part(review) { padding: 18px 0; } [data-sealed]::part(avatar) { display: none; } ``` ## 5. Stjärnor i Google (valfritt) _Ger stjärnor för produkten i Googles sökresultat._ Widgeten lägger in enkel stjärnmarkup själv. Säkrast är att skriva in betyget i produktsidans egen Product-JSON-LD när sajten byggs. - Hämta `https://sealedreviews.com/api/public/dinbutik.se` i bygget eller ett schemalagt jobb. Öppen JSON, ingen nyckel. - Ta `rating` och `count` för din SKU. Hoppa över när `count` är 0. - Visa samma betyg synligt på sidan. Google kräver det. - Sätt `data-schema="off"` på widgeten på den sidan. - Bara produkter får stjärnor, inte butiken. Svar från API:t (förkortat): ```json { "shop": { "name": "...", "domain": "dinbutik.se" }, "company": { "rating": 4.8, "count": 52, "reviews": [ ... ] }, "products": [ { "key": "MUG-001", "name": "Keramikmugg", "rating": 4.7, "count": 21, "reviews": [ ... ] } ] } ``` Byggsteg (Node.js): ```js // Fetch the current rating and write it into the product page's own JSON-LD const res = await fetch("https://sealedreviews.com/api/public/dinbutik.se"); const data = await res.json(); const p = data.products.find((x) => x.key === "MUG-001"); const productLd = { "@context": "https://schema.org", "@type": "Product", name: "Keramikmugg", sku: "MUG-001", offers: { /* your price and availability, as today */ }, }; if (p && p.count > 0) { productLd.aggregateRating = { "@type": "AggregateRating", ratingValue: p.rating, reviewCount: p.count, bestRating: 5, worstRating: 1, }; } // Write JSON.stringify(productLd) into