## TL;DR
Coupon failures are eligibility problems, not broken codes: expired, wrong plan, one-per-customer already used, or cannot stack with another discount. Check the code's rules against the customer's cart before anything else. Then check the typed code character by character: homoglyphs (0 vs O, 1 vs l) kill more redemptions than bugs do.

## The query

```text
coupon code not working: what to check first
```

## Use this when

- Customers report invalid coupon codes
- During active promotions
- Writing promo help documentation
- Checkout abandonment blamed on coupons

## Not for

- Coupon fraud investigation
- Promo strategy or discount design
- Affiliate commission disputes
- Pricing policy

## Steps

### 1. Read the code's rules

Expiry date, eligible plans or products, new-customers-only, minimum purchase, one per customer, non-stackable. Every rule is a rejection reason. Pull the rules before testing anything.

Expected output: the full rule set for the code.

### 2. Match the rules against the customer's cart

Plan eligible? Customer new or existing? Already used this code? Another discount applied that blocks stacking? Walk the rules top to bottom against their specific situation.

Expected output: the failing rule identified, or rules all pass.

### 3. Check the typed code character by character

Have them read it back or paste it. Homoglyphs (0/O, 1/l/I), trailing spaces, and case sensitivity are the classic killers. Copy-paste from the promo email beats retyping.

Expected output: the exact entered string verified.

### 4. Test it yourself

Apply the code to a test cart matching their situation. If it works for you, it is their input or their eligibility. If it fails for you, it is the code: escalate to whoever owns promos.

Expected output: reproduced or not, on your side.

### 5. Resolve: explain, substitute, or escalate

Eligibility miss: explain which rule and offer the closest valid alternative. Typo: give the correct code. Broken code: escalate and honor the discount manually if the promo is live and the customer qualifies.

Expected output: the customer gets the discount or a clear reason.

## Template: the reply

```text
Let me check that code for you, [Name].

What I see: the code [CODE] is [valid until date], for [eligible plans], [new/existing customers], [stacking rules].

[If a rule fails:] It looks like the snag is [rule]: [why it fails for them]. The closest alternative is [option].
[If it is a typo:] Try copying it directly from [source] and pasting it in. Watch for [0 vs O / spaces].
[If it is broken:] You are right, it is not applying correctly. I have applied the discount manually: [details]. We are fixing the code now.
```

## Variant phrasings

### promo code invalid

Steps 1 through 3. Rules, cart match, typed string.

### discount code not applying at checkout

Steps 2 and 4. Eligibility, then reproduce it yourself.

### coupon expired but promotion still running

Step 1. Check whether the code or the promotion expired; they are different things.

## Why it works

Coupons are rule engines, and users experience rule rejections as "broken." Reading the rules first turns the ticket from debugging into matching, which is faster and more accurate. The character check matters because users will swear they typed it right while a trailing space sits there invisible.

## Edge cases

- The promo email promised broader terms than the code rules: honor the email. Marketing's promise beats the rule engine.
- Stacking with automatic discounts: the cart may already have a better deal. Show the math.
- One-per-customer tracked by email: the customer checking out as guest triggers it. Merge or exempt.
- Fraud patterns (code sharing on deal sites): that is a promo-owner decision, not a support ticket. Do not accuse the customer.

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_Ka8Nnlhj8QKAnKKoIuBcZQ
