How to build a sustainable loyalty program that spends points
A discount-only reward menu leaves points sitting. Here's how an environmental reward spends that balance without cutting into your margin again.

Summarize this post with AI
A customer has 500 points sitting in your loyalty program. Their only option today is a discount code. So they glance at it, decide it isn't worth the click, and close the widget.
That balance doesn't disappear when they close the tab. It stays on your books as something you owe, and it grows every time someone places an order.
A sustainable loyalty program gives that balance somewhere to go. Instead of another coupon, they spend those points to plant real mangrove trees or pull plastic bottles out of the ocean. No code gets generated, no $0 order lands in your reports, and nobody has to pass through checkout for it.
This guide covers the redemption flow itself: what a clean one looks like, how to set one up, what each unit of impact costs you, and how to price it in points.
Key takeaways
- Unspent points are a liability, not a milestone. In 2025, 27% of the points customers earned went unspent, and 12% expired outright in programs that use expiration.
- A discount-only reward menu stalls because "10% off" is something customers can get anywhere, including from your own sale campaigns.
- An environmental reward spends idle points as a fixed cash cost per unit of impact instead of another cut to your margin.
- The common workaround puts a fake product in your catalog and pushes customers through checkout to claim it. A clean flow needs no product, no code, and no checkout.
- Price the reward against what one redemption actually costs you, and set your monthly budget cap in GoodAPI before you activate the program.
What a sustainable loyalty program actually rewards
A sustainable loyalty program ties rewards to environmental outcomes you can verify, not just to how much someone spends. That verification part is what separates it from a green marketing campaign: a campaign talks about a commitment, while a program produces a confirmed result per customer.
Most articles about green loyalty programs treat this as one idea. In practice it splits into two halves that solve completely different problems, and mixing them up is where a lot of programs go wrong.
Earn side versus redeem side
The earn side hands out points for green behavior. You give points when someone recycles packaging, returns a container, or picks a slower consolidated shipping option. Those mechanics change what customers do.
The redeem side works in the opposite direction. Customers hand back points and something real happens because of it.
Both are useful, but only one of them touches your points balance. The earn side issues more points, which means it grows what you owe. The redeem side is the only half that shrinks it, so a store already sitting on a pile of untouched points needs that half first. Everything below is about the redeem side, or the burn half of any earn and burn loyalty program.
Why a discount-only redeem menu leaves points sitting
Points nobody spends are a debt on your books, not a sign the program is working. In 2025, 27% of the points customers earned went unspent, and 12% expired outright in programs that use expiration, according to Antavo's Global Customer Loyalty Report 2026.
The menu itself causes much of that. Three things keep those balances frozen:
- The reward is available elsewhere. When every option is a percentage off, you're offering something customers can get anywhere, including from your own sale week.
- Your best customers need it least. Someone sitting on a large balance has already seen every discount you run, so another few dollars off carries almost no weight. They hold the biggest balances and have the least reason to spend them.
- Expiration only moves the problem. Wiping balances clears the liability, but it tells customers the loyalty points they earned were never really theirs. A trust problem is harder to repair than a balance sheet one.
So the fix is a reward they'd actually choose. That pays off beyond tidying the liability, because the best-performing programs raise revenue from customers who redeem points by 15 to 25% a year, according to McKinsey. Lifting your redemption rate both clears debt and earns revenue.
What an impact reward does that another ten percent off cannot
An environmental reward works because it's valuable to the customer without being worth money to them. That sounds like a contradiction until you look at what it does to your numbers.
It spends points as a fixed cash cost, not as margin. A discount reward reduces the revenue on an order you were going to get anyway. An impact reward costs you a small set amount paid to a partner, and nothing comes off the order. So the same 500 points leave your books either way, but only one of them touches your pricing.
It gives your heaviest buyers a reason to redeem. For a customer sitting on 2,000 points they've never touched, a free product or another discount has less and less pull. A reward that does something they care about lands differently, because the value isn't sitting in their cart.
It leaves the customer with a number that keeps growing. A discount code has one life and it ends at checkout. Thirteen trees planted is a running total that only goes up, and totals like that pull people back.
There's a tradeoff worth stating plainly. This reward won't drive an extra order in the session where someone redeems it, because no order is created. What it does instead is clear out idle balances and give customers a reason to open your widget again, which is a slower and more durable kind of return.
It also isn't for every store. If most of your customers buy once and never come back, you don't have an idle balance problem yet, and paying cash per redemption won't create the repeat behavior you're missing. The same goes if your average balance sits well below the cost of a single unit of impact, since nobody will reach the threshold.
What a clean impact redemption looks like
Once you agree the reward is worth offering, the mechanics are usually where it goes sideways. A clean environmental redemption meets four conditions:
- No product. Nothing gets added to your catalog to represent the reward.
- No code. Redeeming doesn't generate a discount code for the customer to copy.
- No checkout. The whole action completes in the widget with one tap.
- Confirmation per redemption. Each individual redemption comes back verified, not rolled into a yearly total.
Compare that to the way most stores do it today. You create a product in Shopify called something like "Plant ten trees", set it to skip shipping and tax, then build it as a free-product reward. When a customer redeems, the system generates a discount code. The customer then has to find that product, add it to their cart, apply the code, and complete checkout to make the tree happen.
That path costs you four things. Your catalog fills with items you never intended to sell. Your reports collect $0 orders that muddy revenue and average order value. A one-tap action becomes a four-step errand, and every step in a checkout flow drops a share of the people who started it. Worst of all, nothing in that chain confirms the tree was actually planted.
The workaround persists for a simple reason: it needs no cooperation from the loyalty app at all. Any app that can give away a free product can be bent into offering trees. But bending a discount mechanism into an environmental reward means the customer pays for it in friction, and you pay for it in reporting mess.
How to set up an environmental reward with Joy and GoodAPI
A native redemption skips all of that because the reward is its own program type rather than a product in disguise. GoodAPI isn't the only platform carrying out impact actions, but it's the one Joy Loyalty connects to directly, so the setup below runs through six pieces:
Connect GoodAPI to your Joy admin
The connection is a one-time job, and it runs in three steps:
- Install GoodAPI. Get the app from the Shopify App Store, open its API section, and copy your Sprout API key.
- Paste the key into Joy. Go to Integrations → GoodAPI, paste the key, and click Connect.
- Check the badge. Joy verifies the key right away, then shows a masked version of it plus the connection type, either test or live. Start in test mode so you can walk the whole flow before real money moves.
Notice what isn't in those steps: no product to create, no coupon to generate, and no reward details to copy back and forth between two dashboards.
One thing to know before you go further. Disconnecting later clears the credentials and shuts down all active environmental programs at once, so treat it as a program-level action rather than a quick toggle.
Create the environmental impact program
The reward itself sits in the same list as your discount and free shipping programs. Go to Reward programs → Redeeming programs, click Add program, and pick the Environmental impact event. From there you set four things:
- Impact type. Either Plant trees or Remove plastic bottles.
- Quantity. How many units one redemption buys.
- Points cost. What the customer pays for it.
- Dashboard link, optional. Paste your public GoodAPI dashboard URL and customers get a View impact dashboard link.
Save and activate, and the program goes live in your widget.
One limitation is worth planning around: the impact provider and type lock after the first redemption. So decide between trees and bottles before you launch, because you can't swap them once a single customer has redeemed.
What the customer sees
From the customer's side this is a single tap. They open the widget, see the environmental reward next to the discount options, and redeem it. Their points come off immediately, and no code appears because there's nothing to apply anywhere.
What they get instead is a total, and it follows them to three places:
- The Profile card in the storefront widget
- The Joy Loyalty Hub page
- Their Shopify Customer Account, through GoodAPI's own block
So the reward stays visible wherever they already check their points, rather than living in a separate reward page they'd have to be sent to.
How the impact gets confirmed
Behind that tap, Joy calls GoodAPI to fund the action, and GoodAPI carries it out through field partners. Trees run through veritree, Eden Reforestation, and the Arbor Day Foundation, while plastic removal runs through Plastic Bank. When the call succeeds, the customer's impact total moves up right away.
Per-redemption confirmation matters more than it sounds. A brand that publishes one impact total at the end of the year is asking customers to take the whole thing on faith. When each redemption is confirmed on its own, the claim is tied to a specific action a specific customer paid for, which is the difference between a verifiable program and a sustainability statement.
The customer's running impact record
Every customer builds a cumulative record they can check any time. It reads like a count: thirteen trees, thirty-one bottles. If a total ever looks out of date, the Refresh button on the customer profile pulls the live figures from GoodAPI.
This is the part that drives repeat redemptions. A discount code finishes its life the moment it's used, so it gives the customer nothing to come back to. A total behaves the other way around, because the only way to move it is to redeem again. Over time that record does the work a campaign would otherwise have to do.
What happens when a redemption fails
Two things can go wrong here, and they end differently. If GoodAPI rejects the call, the points refund automatically, so a rejected redemption never costs the customer a balance.
The second case is rarer and more awkward. Sometimes the tree gets funded but the confirmation doesn't come back, so the activity sits as pending. Points aren't refunded in that case, because the impact was paid for and refunding would mean covering it twice. Say so plainly when a customer asks, since the honest version holds up better than a vague error would. How you handle that one redemption decides whether they try a second one, and they paid points for something happening well out of their sight.
That covers the flow end to end. What it doesn't cover yet is the part that leaves your account.
What impact rewards cost, and how to price them in points
This is the one reward in your program you pay for in cash, so treat the cost question first. GoodAPI charges $0.43 per tree planted and $0.05 per ocean-bound plastic bottle removed, and the app itself installs free with no monthly fee.
Billing runs separately from Joy, which catches people out. GoodAPI charges your GoodAPI account for every tree planted or bottle removed, so the spending happens on that side of the connection while the redemptions happen on yours.
Those numbers also mean your cost scales with redemptions, not with revenue. A discount reward gets more expensive as order values rise, while an environmental reward costs the same $4.30 for ten trees whether the customer spends $40 or $400 with you. Both are predictable, but they behave differently, so budget for this one as a line item rather than a percentage.
Here's what a single redemption costs at each size:
| Impact type | Cost per unit | Ten units | Fifty units |
|---|---|---|---|
| Trees planted | $0.43 | $4.30 | $21.50 |
| Ocean-bound bottles removed | $0.05 | $0.50 | $2.50 |
Two controls keep that line item in check:
- A monthly budget cap, set in GoodAPI. Put the ceiling in place before you activate the program. GoodAPI won't spend past the cap you set, so the worst case is bounded rather than open-ended.
- The program dashboard in Joy. It shows confirmed units funded, redemptions for the month, your success rate, and the underlying redemption activity. Check it while the numbers are still small enough to act on.
Now to pricing. Anchor the point cost to what one redemption costs you, not to what feels generous. Start with the cash cost of the reward, then compare it to the point value already running in your program.
Say 500 points currently buys $5 off, which puts each point at one cent. Ten trees cost you $4.30, so pricing a ten-tree reward at 500 points keeps it slightly cheaper for you than the discount reward customers already redeem at that level. Price it at 300 points instead and you're selling $4.30 of impact for $3 of point value, which is how a reward quietly becomes your most expensive one. That example is a starting point rather than a recommendation, since your own point value and loyalty program cost set the real floor.
With the price set, the only question left is where to look once customers start redeeming.
What to measure after launch
Three numbers tell you whether this is working, and none of them is revenue from the redemption itself. No order gets created, so looking for direct revenue on these redemptions will only make a working reward look broken.
- Share of points redeemed. This is the one that answers the original question. If idle balances start moving after you turn the reward on, it's doing its job.
- Repeat redemption rate. How many customers redeem a second and third time tells you whether the running impact record is actually pulling people back.
- Partner confirmation rate. The share of redemptions that come back confirmed tells you how much the flow can be trusted, and it's the first number to check if customers start asking questions.
Your Joy dashboard reports retention rate, repeat purchase rate, customer lifetime value, ROI, and assisted orders, which is where the first two live alongside the rest of your program. Those figures are your own store's data rather than an industry benchmark, so read them against your own baseline from before launch.
Watch all three for a full purchase cycle before you judge the reward. They'll also tell you when it's worth adding a second kind of contribution, since a program with healthy repeat redemptions has already proven customers want this type of reward.
If you want the step-by-step version with every screen in the admin, the GoodAPI setup guide in the Joy help center walks through it.
A sustainable loyalty program starts with the points already sitting idle
The case for this reward is a balance sheet case before it's an environmental one. Most of the points your program issues never get spent, and a menu made entirely of discounts is the reason why. Adding a reward that customers actually want gives those balances a way out that doesn't cost you another slice of margin.
The mechanics decide whether it holds up. A reward that arrives as a code and sends customers through checkout will clutter your catalog, pollute your reports, and lose people between the tap and the result. One that finishes in the widget and comes back confirmed gives the customer a total that grows, which is what brings them back to redeem again.
If you want to see what that looks like in your own program, add one environmental impact program under Redeeming programs in Joy, set your GoodAPI budget cap before you activate it, then watch your share of points redeemed for a full purchase cycle. Start with a single impact type and one point price, since the type locks after the first redemption and one price is enough to tell you whether your customers want this at all.
Frequently asked questions
Does an environmental reward create a discount code or an order in Shopify?
No. The redemption happens inside the widget, so no discount code is generated and no order is created. That's the main practical difference from a free-product reward, which relies on both.
Do customers really redeem points for impact instead of a discount?
Design for both rather than betting on one. A first-time buyer usually wants the discount, while a repeat buyer with a large balance has less use for another coupon. Run the two side by side and let your own redemption data settle it.
How much does one tree cost, and who pays for it?
Your store pays, through your GoodAPI account rather than your Joy bill. GoodAPI charges $0.43 per tree and $0.05 per plastic bottle, billed per unit of impact, and you set a monthly cap there so the total stays inside a budget you choose.
How many points should one tree cost?
Work backwards from your current point value. Find what one redemption costs you in cash, then set the point price so it isn't cheaper for you than an equivalent discount reward. Ten trees at $4.30 fits naturally at the same level as a $5 discount in most programs.
What happens to the points if the impact action fails?
If GoodAPI rejects the call, the points refund automatically. There's a rarer case where the impact gets funded but the confirmation doesn't come back, and the activity stays pending without a refund, because the tree was already paid for. Tell customers that version straight if they ask.
Is this the same as a green loyalty program?
It's one half of one. Green loyalty programs cover both rewarding eco-friendly behavior and letting customers spend points on impact. This guide covers the second half, and our overview of green loyalty programs covers the wider picture.
Related reading
Product updateSend a Reward to a Friend: Turn Redemption Into Acquisition
Redemption doesn't have to be the finish line. See how sending a reward to a friend turns your happiest customers into your next acquisition channel.
Thomas Nguyen
Product updateStore Credit Rewards: Real Cashback, Spent at Checkout
Real cashback customers spend at checkout — no points math, no coupon codes. How store credit rewards work, and why the value stays in your store.
Thomas Nguyen
Product updateHow to Run Your Loyalty Program Inside LINE
Points, tiers, expiry reminders, referrals — every loyalty moment can happen in the chat your customers already use. Here's how to run it on LINE.
Thomas Nguyen