Blog·August 9, 2026

How to cap Klaviyo discount codes in Shopify

Codes minted by Klaviyo or SMS apps can't be edited after the fact, but you can swap what they send. How to put a ceiling on app-generated codes.

Your Klaviyo welcome flow mints a unique 10% code for every signup. It’s a good flow, right up until one of those codes lands in an $1,800 cart and hands out $180. Then you realize the same thing can happen tomorrow, and the day after, on every code the flow will ever send.

Capping this has two locked doors, and it helps to see both clearly. First, Shopify percentage discounts have no maximum-amount field. That’s true for every discount in your store, app-generated or not. Second, even if a cap field existed, these codes aren’t exactly yours to edit. Klaviyo creates and manages them as part of running the flow. You can watch them redeem, but you can’t reach into the app’s supply and change what they give.

The native route: change what the flow gives

The setting you can reach is in Klaviyo, not Shopify: switch the flow’s discount from a percentage to a fixed amount. “$10 off your first order” is capped by its own definition. Every redemption costs $10, whether the cart is $40 or $1,800.

For a welcome flow specifically, this is often the honest end of the story. First-time buyers respond to a clear, concrete number, and most welcome carts cluster in a narrow range anyway, so the percentage wasn’t earning you much there. If that describes your store, make the change in Klaviyo and you’re done. No new tools involved.

The fixed-amount route runs out when the percentage is the point: a VIP win-back where big carts are the goal, an SMS campaign advertised as “15% off everything,” a referral reward that should feel proportional. Then you’re back at the two locked doors.

The swap: let the app send codes you minted

There is a move that opens both doors. Klaviyo, like most email and SMS tools, doesn’t insist on minting its own codes. It also accepts an imported list of codes and deals them out one per recipient, exactly like the codes it generates itself. Which means you can change who supplies the codes:

  1. In PromoLock, open Discounts → Bulk codes and create a set: your percentage, plus Max discount amount for the ceiling (“15% off, up to $40”), and whatever else the offer needs (minimum spend, excluded collections, the On-sale items guard left on No discount).
  2. Generate the batch, up to 100,000 unique single-use codes, and hit Download codes for the CSV.
  3. Import that CSV into Klaviyo’s coupon section as an uploaded code list, point the flow at it, and the flow keeps doing exactly what it did. The only difference is that every code it sends now carries your cap.

One import, and the supply problem is solved going forward. There’s a bonus that comes with it: bulk sets get PromoLock’s Fraud Guard treatment, one code per person across the whole set rather than one per account, which app-minted codes never had.

Two loose ends to be straight about:

  • The codes already in circulation stay as they are. A code Klaviyo sent last month keeps its uncapped behavior until it’s redeemed or expires. Retire the old coupon in Klaviyo so no new sends use it, and let the tail run out. Blocking the old codes outright punishes subscribers who did nothing wrong.
  • Watch your batch level. An imported list is finite. Klaviyo warns as a coupon list runs low, and generating another batch and exporting it takes a minute, but it’s now a chore you own. That’s the real price of the swap. You traded an uncapped liability for a small recurring task.

What this doesn’t work on

Apps that must mint their own codes can’t be handed a list. Verification services like GovX ID or student-discount platforms fall in this bucket, because the code is proof someone qualified. For those, the levers are store-side: stacking rules and pattern controls bound what any code can combine with, even ones you’ll never own. And if you’re not sure which of your app-generated code families is worth all this, PromoLock’s Discount given report groups them by pattern and shows what each family hands out, with a what-if table of what a cap would have saved.

Choosing your route

Your situation Do this
Welcome flow, similar-sized first orders Switch the Klaviyo discount to a fixed amount. Done natively
Percentage matters, app accepts code imports Capped bulk set → Download codes → import into the app
Verification/referral app that mints its own codes Store-side Controller rules; caps aren’t reachable
Not sure the tail is big enough to bother Check the code family in Discount given first

Last tip: after the import, trigger the flow with a test signup and take that code through a big test cart. You want to see the discount line stop at your cap once, end to end, before the flow goes back to running on its own.

Loss calculator

Estimate your unintended loss.

Four quick questions. Planned promotions never count.

?$3.5M
Which of these are true for you?
?
?
?
?