Go Back

Shopify Customer Wants a Discount After a Bad Experience: What to Offer and What to Skip

When a Shopify customer wants a discount after a bad experience, offer one only if your store caused the problem and fixing it doesn't fully make up for the trouble. In that case, send a one-time code for their next order, sized to how much the problem cost them. Skip the discount when the problem came from somewhere else, when the fix already settles it, or when the same customer keeps asking for one. Fix the actual problem first. A code given before the fix reads like a bribe.

This guide is for founders and small teams who answer support themselves. It gives you a rule to write down once. The answer then stays the same no matter who reads the ticket, and you stop deciding from scratch every time.

Who caused the problem decides the answer

Before you think about a discount, answer one question: whose fault was it? Most "I want something for my trouble" emails fall into one of four groups.

  • Wrong item, missing item, damaged in your packing. Caused by your store. Discount: yes, after the fix.
  • Order shipped late because of your stock or your team. Caused by your store. Discount: yes, if the delay was real and you didn't warn them.
  • Slow or rude reply from your support. Caused by your store. Discount: apology first. Code only if the delay cost the customer something.
  • Carrier delay after on-time shipping, customs fees, weather. Outside your control. Discount: usually no. Help and explain instead.
  • Customer ordered the wrong size or changed their mind. Caused by the customer. Discount: no. Apply your normal return policy.
  • Product works as described, customer "expected more". Unclear. Discount: rarely. Send it to your team if the order value is high.

The point is simple. A discount pays back trouble your store caused. Other problems still deserve a fast, kind answer, just not a code.

Fix first, compensate second

A discount sits on top of the fix. It never replaces it. Do things in this order:

  • Fix the problem. Reship the missing item, send the right size, or refund the damaged product.
  • Say what went wrong. One sentence, no excuses: "We packed the wrong color."
  • Add the gesture if the rule says so. A code for the next order, with a clear amount and expiry date.

If you skip step 1 and lead with a code, the customer hears "please stop complaining." If you do step 1 well, a small code feels generous. A large code isn't needed.

For billing problems, the fix is usually the whole answer. Our guide on what to do when a Shopify customer is charged twice, listed at the end of this article, shows how to check the case and refund the right amount.

What to offer: a goodwill ladder

Pick the step that matches the trouble, not how loud the email is. Set the amounts once based on your own margins, then stick to them.

  • Step 1, apology only. When it fits: small slip, fixed fast, no cost to the customer (a slow first reply, a typo in an email). What to offer: a clear apology and the fix. No code.
  • Step 2, small code. When it fits: the customer lost some time (a reshipped item, a delay you didn't warn them about). What to offer: one-time code for the next order, your smallest amount, short expiry.
  • Step 3, larger code or free shipping. When it fits: the customer lost time and effort (two failed deliveries, a return they had to post, an order missed for an event). What to offer: your larger code amount, or free shipping on the next order.
  • Step 4, team decision. When it fits: high order value, repeat failures on the same customer, a public complaint, anything you're unsure about. What to offer: partial refund, gift, or a call. Decided by a person.

Why a code instead of money back? A refund is money gone. A code only costs you something when the customer orders again, and that new order brings its own margin. So for bad experiences, make the code your default and keep partial refunds for step 4.

Three settings make each code safe:

  • One use, one customer. Create a unique code, not a public one that gets shared.
  • An expiry date. Short enough to bring the customer back, long enough to be useful.
  • No stacking. It doesn't combine with sale prices or other codes, unless you choose to allow it.

What to skip

Some requests should get a polite no, even from a frustrated customer. Skip the discount when:

  • The problem wasn't yours and you already helped. Carrier lost a day after you shipped on time? Share the tracking, explain what happened, and don't pay for the carrier's delay.
  • The fix already settles it. Customer got a full refund for a damaged item and wasn't out of pocket? A code on top is optional, not owed.
  • The ask comes before any problem. "I'll leave a bad review unless you give me 20% off" is a threat, not a complaint. Answer the real issue, if there is one, and don't negotiate.
  • The same customer asks every order. Check their order history. A second request inside a short window goes to your team, not straight to a code.
  • The order was already heavily discounted or final sale. Stacking goodwill on a clearance order can turn it into a loss.

Saying no well matters as much as saying yes. Give the reason in one line, point to what you did do, and offer a next step.

How to spot discount fishing

Most customers who ask for a discount have a real reason. A few learn that complaining pays. Watch for these signs:

  • The complaint is vague ("not happy with the experience") with no order detail.
  • The discount request comes in the first message, before any problem is described.
  • The order history shows the same pattern on earlier orders.
  • The amount asked for is bigger than the order itself.

None of these alone proves anything. Together, they mean the ticket should go to a person who can look at the full history before replying.

Three replies you can copy

Reply (step 2, small code after a mistake you fixed): "Hi Sarah, we sent you the wrong color, and that's on us. Your correct item shipped today. The tracking link is in your shipping confirmation email. To make up for the extra wait, here is a code for your next order: SORRY-SARAH. It works once and is valid until the end of next month."

Reply (no discount, carrier delay after on-time shipping): "Hi Tom, your order left our warehouse on the day we promised, but the carrier is running late in your area. The tracking link is in your shipping confirmation email, and it shows the latest update. We'll keep an eye on it. If it hasn't moved by Friday, reply to this email and we'll open a claim with the carrier for you."

Reply (no discount, request with no problem described): "Hi Alex, thanks for your message. I checked your order and it was delivered complete on Monday. If something is wrong with an item, tell me what happened and send a photo, and I'll sort it out with you."

Each reply does the same three things: it names the facts, it shows what was done, and it gives one next step.

Write the rule once, then let it run

The hard part isn't writing a nice reply. It's making the same decision every time, including at 11 pm during a sale. Write your goodwill ladder down as a short rule:

  • what counts as "our fault";
  • which step applies to which case;
  • the code amount and expiry for steps 2 and 3;
  • what always goes to a person (step 4, repeat requests, threats).

Relay applies that rule to each ticket. It reads the request, looks up the Shopify order, checks what happened, and acts within the permissions you give it, including creating a discount code when your rule allows one. Cases outside your rule go to your team. To decide where that line sits, use our guide to setting up human handoff rules in a Shopify AI agent. For a wider view of which tickets to hand over, see what AI support should and shouldn't answer. Both are listed at the end of this article.

FAQ

Should I give a discount to every customer who complains? No. Give one when your store caused the problem and the fix alone doesn't make up for the trouble. For problems outside your control, help the customer and explain, but don't pay for someone else's mistake.

Is a discount code better than a partial refund? For most bad experiences, yes. A refund is money gone. A code only costs you when the customer orders again, and that order has its own margin. Keep partial refunds for high-value or repeated failures, decided by a person.

What if the customer threatens a bad review unless I give a discount? Don't trade a code for a review. Answer the real problem if there is one, the same way you would for anyone else. If there isn't one, reply politely with the facts of the order.

Can an AI agent send discount codes on its own? Relay can create a discount code when you give it that permission and your rule says the case qualifies. Anything outside the rule, like high order values or repeat requests, goes to your team.

Ready to replace your first support hire?

Join fast-growing Shopify stores automating 80–95% of customer support in under 10 minutes.

Start Free Trial

From $59/month • 14-day trial