Reviews & UGC
Reward customers with a discount code for reviews
Asking for a review is asking a customer for free work. A small reward for the people who actually do it lifts your response rate without bribing anyone for a five-star. Here's how to mint a unique, single-use discount code the moment a verified customer leaves a review, deliver it through the email you already send, and do it without the legal and abuse traps that come with paying for reviews.
- Klaviyo
- Shopify
The manual way today
The review email goes out with a plain 'we'd love your feedback' and nothing on the other side of it. Whoever owns reviews knows an incentive would help, so every so often they generate a blanket code like REVIEW10, paste it into the email, and hope it isn't screenshotted onto a coupon site within the week. Or they go fully manual: skim new reviews, and for the ones worth thanking, hand-create a code in Shopify and reply one at a time. Both fall apart the moment volume picks up.
Most customers won't write a review for nothing — it's unpaid effort, and a thank-you email asking for it competes with everything else in the inbox. So a no-incentive ask collects only a slice of the reviews you could have, and reviews are the social proof doing the actual converting on a product page. The blanket-code shortcut is worse than it looks: a public REVIEW10 leaks to coupon-extension users and bargain forums, so you end up discounting orders from people who never reviewed anything, while the customers who did the work get the same code as everyone else. And the manual version doesn't scale past a trickle. The quiet cost is a thin review wall on your newest products — the ones that need proof most — plus margin bleeding out through a code that was never meant to be a public sale.
What running looks like
A verified customer submits a review, and within minutes a discount code that only they can use is created in Shopify — single-use, capped to one redemption, tied to their email, with an expiry and a minimum order so it can't be stacked or farmed. The code lands in a thank-you email Klaviyo sends on consent and quiet hours, the reward fires exactly once per review (an edit or a duplicate webhook can't mint a second), and the incentive is offered for an honest review regardless of the star rating — never for a positive one. Anonymous site reviews with no order behind them get nothing.
01The build
How to build it
Set the reward, the rules, and the line you won't cross
Needs a humanDecide this before automating anything, because it's the part software can't judge. The reward: a modest percentage or fixed amount that's worth a customer's effort without eating the next order's margin — most stores land at 10-15% or a flat few dollars. The guardrails: single redemption, one per customer, a minimum order subtotal so it can't be used on a $4 add-on, an expiry (30-60 days keeps it fresh and limits liability), exclude sale items and wholesale, and no stacking with other codes. And the non-negotiable legal line: you reward an honest review, not a positive one. Never condition the code on the rating, and make sure the incentive is disclosed — the FTC treats an undisclosed incentivized review as deceptive, and most review platforms add an 'incentivized' badge automatically when you tell them a reward is attached. Write all of this down; every step below just enforces it.
Trigger on a verified review, not any review
Runs itselfThe reward fires off a 'Review Submitted' / 'Reviewed Product' event from your review platform — Yotpo, Okendo, Judge.me, Loox, and Stamped all emit one, either as a webhook or as a metric synced into Klaviyo. The trap is rewarding reviews that have no purchase behind them: a site visitor, or worse, someone who realizes anonymous reviews mint codes and writes ten. Gate the trigger on the platform's verified-buyer flag, and confirm the review carries an order ID and a real customer. No verified order, no reward. This single filter is what stops the automation from becoming a code printer for fake reviews.
Check you haven't already rewarded this review
Runs itselfBefore minting anything, look up whether this specific review has already paid out. Key off the review's unique ID — not the customer, and not the order, because a customer can legitimately review several products from one order and a review can be edited later, which re-fires the event. Keep the issued review IDs in a place a re-run can read: a customer metafield (e.g. a JSON list under custom.rewarded_review_ids), a tag, or an Airtable row. If this review ID is already on the list, stop. Idempotency keyed to the review ID is what keeps an edited review or a duplicate webhook from minting a second code.
Mint a unique, single-use code in Shopify
Runs itselfCall the Shopify Admin GraphQL API's discountCodeBasicCreate mutation to create one fresh code per review — generate a readable, unguessable code like THANKS-7QF2K rather than a reusable word. Set the fields from step one explicitly: usageLimit: 1 and appliesOncePerCustomer: true (both, so it dies after a single redemption), startsAt/endsAt for the expiry, a minimumRequirement subtotal, the value as a percentage or fixed discountAmount, and combinesWith with productDiscounts/orderDiscounts/shippingDiscounts all false so it can't be stacked. Read back the created code and ID from the mutation response — you'll need them in the next two steps.
Lock the code to the reviewing customer
Runs itselfSet customerSelection on the discount to that one customer (customers.add: [customerId]) instead of leaving it open to everyone. This is the difference between a private reward and a public coupon: a code restricted to a customer ID can't be redeemed by whoever screenshots it onto a coupon extension or a deals forum, so the margin you're spending actually goes to the person who did the work. If you'd rather the code be giftable, you can leave it open and lean on the single-use limit instead — but for a review reward, customer-locked is the safer default and the one worth keeping.
Record the code and review ID so it can't fire twice
Runs itselfThe moment the code is created, write the review ID — and the code itself — back to the idempotency record from step three (the customer metafield, tag, or Airtable row). Completing this write immediately, before the email send, closes the gap where a crash or a retry mid-flow could mint a second code for the same review. This record is also your audit trail: which review earned which code, when it expires, and whether it's been redeemed when you reconcile against Shopify's discount usage later.
Hand the code to Klaviyo and let a flow send it
Runs itselfFire a custom 'Review Reward Issued' event to the customer's Klaviyo profile with the code, the discount value, and the expiry date as event properties, then trigger a thank-you flow off that event. Letting Klaviyo own the send means consent, quiet hours, and unsubscribes are all respected automatically — far safer than a raw API email that ignores them. Keep the email honest and short: thank them for the specific product they reviewed, show the code and its expiry plainly, and don't dress a 10% code up as a 'VIP exclusive.' If they consented to SMS and that's their channel, send it there instead.
Watch for refunds and abuse after the fact
Needs a humanTwo edge cases the up-front filter can't catch. First, a customer can review, collect the code, then return the order — decide your policy and enforce it: most stores let a small reward stand, but if you want to claw it back you can deactivate an unredeemed code via the API when a refund posts. Second, abuse patterns: many reviews from one account in a short window, or a spike in review-triggered codes, should post to a Slack channel for a human to glance at rather than paying out silently. Everything else runs untouched; these two are the cases worth a person's eyes.
02The stack
What it’s built on
- Shopify
- Where the code is minted and where it lives. The Admin GraphQL API's discountCodeBasicCreate mutation builds each single-use, customer-locked code with the usage limit, expiry, minimum, and no-stacking rules; Shopify also tracks redemption, which is how you reconcile rewards against revenue later.
- Klaviyo
- Owns the delivery. The 'Review Reward Issued' event triggers a thank-you flow that sends the code while respecting consent, quiet hours, and unsubscribes. The review signal it can also trigger from comes through your review platform's native Klaviyo integration.Klaviyo's free tier covers building and testing this, and you're almost certainly already running it for email. Any ESP that accepts a custom event with properties can deliver the code the same way — only the event API shape changes.
- n8n
- The glue between the two: it catches the verified-review event, runs the dedupe check, calls the Shopify mutation to mint the code, writes the idempotency record, and fires the Klaviyo event.Before building this, check whether your review platform already does it natively — Loox, Judge.me, and Yotpo all have a built-in 'reward a coupon for a review or photo' feature that's free and made for exactly this. n8n (open-source and self-hostable; their cloud tier just saves you hosting) is the right tool when you've outgrown the native version — you want Shopify-native single-use codes, per-customer locking, margin guardrails the built-in feature won't enforce, or you're consolidating across more than one review tool. Zapier can do the same wiring if you'd rather not host anything.
03Questions
Before you build
Isn't paying for reviews against the rules?
Paying for a positive review is. Offering a small reward for an honest review — whatever the rating — is allowed, as long as the incentive is disclosed. That's why step one draws the line hard: the code fires regardless of stars, you never condition it on a good review, and the review platform adds an 'incentivized' badge so it's disclosed. The FTC's concern is deception and undisclosed bias; an honest, disclosed thank-you for any review stays on the right side of it. (This is general guidance, not legal advice — check your jurisdiction if you're unsure.)
Won't the discount code leak to coupon sites?
Not if you lock it to the customer. Each code is minted fresh per review, capped to a single redemption, and tied to the reviewing customer's ID via Shopify's customerSelection — so even if someone screenshots it onto a coupon extension, no one else can redeem it. That's the whole reason this build mints per-customer codes instead of reusing one public REVIEW10, which is exactly the code that does leak.
What stops someone writing fake reviews to farm codes?
The verified-buyer gate. The reward only fires on reviews tied to a real order and a real customer, so an anonymous site review or a drive-by gets nothing. On top of that, the dedupe step keys off the review ID, so a customer can't edit one review repeatedly to re-trigger payouts, and the final step flags unusual bursts — many reviews from one account in a short window — to Slack for a human before anything's paid out.
Do I even need to build this, or does my review app already do it?
Check first. Loox, Judge.me, and Yotpo have a native 'reward customers with a coupon for a review' feature that's free and built for this — if you're on one of those and the built-in version covers you, use it and skip the build. This custom recipe earns its keep when you've outgrown the native feature: you want true single-use, customer-locked Shopify codes, margin guardrails the app won't enforce, codes only issued to verified buyers, or you're running more than one review tool and need one consistent reward system across them.
What if the customer returns the order after getting the code?
Your call, and step eight is where you make it. Most stores let a small reward stand — clawing back a 10% code on a returned order costs more goodwill than it saves. If you do want to reclaim it, watch for the refund event and deactivate the code through the API as long as it hasn't been redeemed yet. Either way it's a deliberate policy, not an accident, and the recipe surfaces the refund so you're not paying out blind.
Can I build this myself, or should you build it?
Every trigger, field, and guardrail is spelled out above, so if you're comfortable with the Shopify Admin API and a flow tool, an afternoon gets it live. If you'd rather not own the discount-API edge cases, the dedupe logic, and the FTC disclosure details, we'll build it on the Shopify and Klaviyo accounts you already pay for, document it, and hand you the keys — you own the workflow outright, no monthly retainer. It starts with a free 20-minute teardown, not a contract, and you keep the plan either way.
Related recipes
Reviews & UGC
Trigger review requests after delivery
Most stores send their review email a fixed number of days after an order ships — which means it often lands before the customer has the product in hand. Here's how to trigger the ask on the actual delivery event instead, wait a sensible settle-in window, and only ask the people who aren't mid-return.
- Klaviyo
- Shopify
- ShipBob
Reviews & UGC
Send a second review request to non-openers
One review email per order leaves most of your reviews uncollected — the majority of customers never act on the first ask. Here's how to wire a single, different second request that goes only to the people who genuinely didn't review, stops at two, and never nags someone who already left a review or sent the item back.
- Klaviyo
Reviews & UGC
Collect photo and video UGC in Airtable
Your best content is already being made — customers shoot it and drop it in photo reviews, email replies, and DMs, where it dies. This pulls every photo and video into one Airtable library the moment it lands: the file attached, who sent it, which product, which source, and — the part most teams skip — whether you actually have the right to run it in an ad. Build it yourself with the steps below, or we build it on the accounts you already pay for and hand you the keys, so you own the whole thing with no monthly fee. Free teardown of where your UGC is currently leaking first.
- Airtable
- Klaviyo
- n8n
Reviews & UGC
Flag negative reviews for follow-up
A one-star review is a customer telling you something's wrong in the most public place they have. This watches every review as it's submitted, catches the low ones, and drops them in a Slack channel with the rating, the product, what they wrote, and who they are — so someone reaches out while it still matters instead of finding it a week later in the app's dashboard. Build it yourself with the steps below, or we build it, wire the routing, and hand you the keys so you own it with no monthly fee. Free teardown of your current review setup first.
- Slack
- Klaviyo