Review request emails
Last updated: April 20, 2026
Most stores collect reviews through automated request emails — sent a set number of days after a trigger event (order fulfilled by default, with order created, paid, or delivery-confirmed as alternatives), with a link to the BetterReviews chat. This page covers how those emails work, when they’re sent, and how to tune the timing.
How it works
When the trigger event fires, BetterReviews schedules the review request email for the trigger’s timestamp plus your configured delay. Fulfilled and delivered triggers fire per physical shipment — if an order ships in two boxes, the customer gets two emails, each scoped to that shipment’s products. Created and paid triggers fire per order (they’re order-level events, nothing to split). The delay options depend on which trigger you pick:
- Order fulfilled (default): 3, 5, 7 (recommended), 14, or 30 days
- Order paid: 1, 7, 14 (recommended), 30, or 60 days
- Order created: 1, 7, 14 (recommended), 30, or 60 days
- Order delivered: 0, 1, 3 (recommended), 7, 14, or 30 days
The delay runs from the event’s actual Shopify timestamp, not from when BetterReviews receives it. An order that was paid three days ago with a 7-day delay will send four days from today, not seven.
The email includes:
- A friendly short message
- A prominent Leave a review button linking to their personal review chat
- Your store’s logo and branding (see customizing the email template)
- A CAN-SPAM-compliant footer with the BetterReviews business address and an unsubscribe link
Each email includes a unique 32-byte random token in the link. Anyone with the link can open the hub or chat, so treat the link itself as the credential — don’t forward review-request emails. The token expires after 90 days by default (configurable 30–180 in Settings).
What triggers a review request
A review request email is scheduled when all of these are true:
- Collection is enabled in your Collect settings — off by default on new installs. You explicitly opt in so nothing goes out until you’re ready.
- The configured trigger event fired on the order. Shopify tells us when each order is created, paid, and fulfilled. We only create a request for the event you’ve chosen in Collect → Request timing.
- The order had at least one line item.
- The customer has marketing consent in Shopify (
emailMarketingConsent.marketingState = SUBSCRIBED). Customers who never opted in, who explicitly unsubscribed, or whose consent is pending are skipped — no email is sent, and any leaked link we would have generated is rejected if opened. - The trigger fired recently enough. If the event is more than ~90 days old, or its timestamp puts the send date in the past (e.g. you install today but the trigger fired a month ago and your delay is 7 days), the request is marked
skippedinstead of being queued. This keeps install day from dumping a month of backlogged emails. - The customer isn’t on our suppression list (they haven’t unsubscribed, bounced, or complained). Suppression is rechecked right before delivery, not just at the time the request is created — if a customer unsubscribes between queue and send, the email is cancelled.
- The customer hasn’t already received a request for the same shipment or order. Dedup is per shipment for fulfilled/delivered triggers (one email per fulfillment, so a retry from Shopify won’t double-send), and per order for created/paid triggers. Switching triggers mid-flight doesn’t double-send.
If the order includes multiple products, the customer is sent to the customer review hub — a single page where they can choose which product to review first.
Timing
You set both the trigger event and the delay in Collect → Request timing.
Trigger event — which Shopify order event starts the countdown:
- Order fulfilled (recommended) — the countdown starts at each fulfillment. Every physical shipment triggers its own email, scoped to that shipment’s products. Split-warehouse orders and gift-card-plus-physical orders produce one email per physical shipment. Closest to when the customer actually receives the product, without relying on carrier tracking.
- Order delivered — the countdown starts when Shopify confirms the carrier delivered the package. The most accurate signal when it works, but not every carrier reports delivery reliably. See “Carrier reliability” below.
- Order paid — the countdown starts when payment is captured. Useful for pre-orders or dropship flows where “fulfilled” lags far behind the purchase decision.
- Order created — the countdown starts when the customer places the order. Useful for digital products or made-to-order where fulfillment may never fire.
Send request after — how many days after the trigger event to send. The option list adjusts based on your trigger:
- Fulfilled: 3, 5, 7 (recommended), 14, 30
- Delivered: 0, 1, 3 (recommended), 7, 14, 30
- Paid / Created: 1, 7, 14 (recommended), 30, 60
Stores with short-lived excitement (novelty items, food) typically prefer shorter delays. Stores selling products with a break-in period (shoes, skincare, kitchenware) do better at 7–14 days. Subscriptions and pre-orders usually pair “Order paid” with a 14–30 day delay. “Order delivered + 3 days” is a popular choice for merchants migrating from Okendo or Yotpo.
Changing trigger or delay. When you change either one and save, BetterReviews re-schedules every pending request that was queued under the same trigger — the new delay is applied to each request’s original event timestamp. Requests whose new send time is now in the past fire on the next scheduler tick (within ~15 min). Requests queued under a different trigger are left alone. Past orders that didn’t make it into the queue (e.g. because their send window had already passed) are not retroactively included.
Delivery fallback (for the “Order delivered” trigger)
Shopify’s carrier tracking data drives the delivered trigger, but not every carrier reports delivery. Major US carriers (USPS, UPS, FedEx, DHL Express) are reliable. Many European regional carriers (DPD, Evri, Royal Mail non-tracked, Yodel) and most smaller Latin American / Southeast Asian carriers rarely send a “delivered” status. International shipments often lose tracking at cross-border handoffs.
To make sure no customer is silently skipped, BetterReviews runs a fallback timer. When you pick the delivered trigger, every physical fulfillment creates a placeholder row with status awaiting_delivery. If delivery is confirmed, we promote that row to scheduled and send on time. If delivery is never confirmed within your fallback window, a background worker promotes the row anyway and sends the email. Each shipment gets its own placeholder — split shipments produce two emails, one per delivery.
The fallback window is configurable per merchant (3–30 days, default 14). You’ll find it in Collect → Request timing, visible only when you’ve selected the delivered trigger. The shorter you set it, the more emails fire without a delivery confirmation. 14 days is a safe middle ground for most carriers.
Carrier reliability — which trigger should you pick?
If you ship primarily via USPS, UPS, FedEx, DHL Express, Canada Post, or Australia Post → delivered is the best signal. The email arrives while the purchase is freshest in the customer’s mind.
If you ship via regional or international carriers that don’t consistently report delivery → stick with fulfilled. The fallback timer will catch up, but a lot of your sends will be “fallback-fired” anyway, which defeats the point of the delivered trigger.
Not sure which carriers your shipments use? Check any recent order in the Shopify admin → the fulfillment detail shows the tracking company. If most of your orders have no delivered status after a week, your carriers are silent — use fulfilled.
Sending a review request manually
If you want to send a review link outside the automatic flow — say, to a customer who emailed asking to leave a review after-the-fact — you can generate a review link via the API without triggering an email:
curl -X POST https://api.betterreviews.app/api/v1/review-requests/send \
-H "X-API-Key: YOUR_API_KEY" \
-d '{"email": "customer@example.com", "product_ids": ["shopify-7125386199075"], "skip_email": true}'
The response includes a hub_url you can paste into your own reply. skip_email: true creates the request with status manual (not scheduled), so the scheduler never touches it. See the API docs for details.
Review requests can also end up in one of two audit-only statuses:
skipped— the customer doesn’t have Shopify marketing consent, OR the trigger event is older than your delay window at the moment we process it (so sending now would be silently late). No email is sent, and the token won’t authorize a submission if anyone opens the link.awaiting_delivery— placeholder while we wait for the carrier-delivery signal (only used when you’ve picked the delivered trigger). The email is neither sent nor authorize-able from this state; it promotes toscheduledwhen the delivered event arrives or the fallback window expires.
Unsubscribes
Every email includes an unsubscribe link, as required by CAN-SPAM. When a customer unsubscribes:
- They’re added to your store’s suppression list
- No future BetterReviews emails will go to them
- They can still use a review link you share manually (e.g. from the API skip-email flow) — unsubscribe only blocks automated emails
You don’t have to do anything — suppression is automatic.
Turning off request emails entirely
Some stores prefer to collect reviews only via the widget “Write a Review” button. You can turn off automated review request emails without disabling review collection:
- Open Collect
- Toggle Review collection off
Screenshot of the Collect page with the collection toggle — manual capture, drop in here.
Your widget continues to work — customers can still start reviews from your product pages. We just stop sending anything post-purchase.
Screenshot of the Request timing section with the four-option trigger dropdown (Order fulfilled, Order delivered, Order paid, Order created) and the conditional fallback-days input that appears when “Order delivered” is selected — manual capture, drop in here.
Customizing the email itself
The look and copy of the review request email are configurable — logo, colors, subject, body. See the dedicated page:
Customizing the email template →