Store credit on Shopify shifted from a third-party app feature to a native platform capability in 2025. That change is bigger than it looks. It moved store credit from a marketing tool into the core ledger of the customer record, which means accounting teams, returns teams, and developers all have to think about it differently than they did two years ago.
This guide covers store credit on Shopify from four angles: what it is, how to operate it, how to account for it, and how to extend it with apps when the native version runs out of road. It is written for the merchant who has to make the decision, not the developer who has to build it, though there is a section for developers further down.
What is store credit on Shopify
Store credit on Shopify is a customer-specific balance, stored on the customer record in the shop's currency, that the customer can apply at checkout against any future order. It is not a discount code. It is not a gift card. It is a per-customer balance that Shopify tracks natively as part of the customer object, with full ledger history of credits issued and credits spent. Merchants can issue it manually from the admin, automatically as part of a refund, or programmatically through the Admin API. Store credit cannot be transferred between customers and does not have a code.
That definition is what Shopify's native store credit feature provides. Apps in the ecosystem extend the model in ways covered later in this guide.
How store credit works on Shopify natively
Shopify released native store credit in 2025. Before that, every store-credit workflow on Shopify ran through a third-party app or a workaround using draft orders and discount codes. The native release fixed the most painful gaps, but it did not solve everything, and merchants should be honest about where the line falls. For Shopify's own reference, see the Shopify Help Center store credit page (https://help.shopify.com/en/manual/customers/store-credit).
What the native feature does
- Tracks a balance per customer, in the shop's currency, on the customer record.
- Lets staff with the right permission add or subtract credit from the customer detail page.
- Surfaces the credit at checkout as a payment method the customer can select.
- Logs every credit and every spend as an event in the customer's transaction history.
- Records refund-to-store-credit as a refund event on the original order, not as a new gift card.
- Exposes the balance and the issue action through the Admin GraphQL API.
What it does not do
- It does not let you set expiration dates per credit issuance. The balance has no built-in decay rule.
- It does not stack rules like "earn 5% back on every order" without manual or API-driven crediting.
- It does not segment by reason. A refund credit and a loyalty credit look the same on the balance.
- It does not surface a wallet widget on the storefront product or cart pages. Customers see the balance only at checkout or in their account if your theme exposes it.
- It does not handle multi-currency conversion at spend time. The credit is in the shop's primary currency.
- It does not enforce a minimum or maximum order value for credit application.
This is the gap that apps and custom code fill. Native store credit is the ledger and the checkout integration. Anything beyond that — rules, expirations, wallets, cashback automation, and segmented credit pools — is on the merchant or the app. The subZwallet cashback wallet (/shopify-cashback-wallet) sits on top of this native ledger to add the rules layer.
Store credit vs gift cards
These two feel similar from a customer perspective but behave very differently on the back end. Choosing the wrong one for a use case is one of the most common errors in returns and loyalty workflows. The short comparison:
- Code required — store credit: no, tied to customer account. Gift card: yes, code-based.
- Transferable — store credit: no. Gift card: yes.
- Identification — store credit: customer ID. Gift card: card number.
- Best for — store credit: refunds, loyalty, cashback. Gift card: gifting, marketing campaigns.
- Native expiration — store credit: no expiry control. Gift card: configurable expiry.
- Surfaced at checkout — store credit: payment method tied to logged-in customer. Gift card: code entry field.
- Accounting treatment — store credit: liability tied to a known customer. Gift card: liability with breakage potential.
- Tax treatment on issue — both generally non-taxable at issue in US and EU.
- Resale risk — store credit: none. Gift card: high, can leak to resale sites.
- Use without an account — store credit: no. Gift card: yes.
The short version: use store credit when you know who the customer is and want the balance to stay with them. Use a gift card when the credit needs to move, get gifted, or work for someone without a store account.
When the two collide
A common confusion: a customer returns a product and asks for "a gift card refund." If the merchant issues a Shopify gift card, the customer can sell or transfer it. If the merchant issues store credit, it stays on the account. For returns, store credit is almost always the right answer. For marketing giveaways, the opposite.
Store credit vs discount codes
A discount code reduces the price of a specific order at checkout. Store credit reduces the amount due using a balance that exists outside any single order. They sound interchangeable but they hit margin and behavior in opposite ways.
Discount codes
- Reduce revenue on the current order.
- Can be applied anonymously, which means codes leak.
- Have a single use or quantity limit set at creation.
- Train customers to wait for the next promotion.
- Easy to issue, hard to control distribution.
Store credit
- Protects current-order margin and shifts the discount to a future order.
- Tied to a customer account, no leakage.
- Has an indefinite balance until spent or manually expired.
- Trains customers to return.
- Harder to issue at scale without an app or the API.
The behavioral gap matters more than the operational one. A 20% discount code teaches the customer that the catalog price is 20% high. A $20 store credit teaches the customer that they have $20 waiting for them. Same money, opposite signal.
Common use cases for store credit
Refunds in lieu of cash
The most common reason merchants issue store credit. A customer returns a product, the merchant prefers to keep the cash inside the store rather than process a card refund. Store credit converts a cash-out moment into a future-order moment. Some stores require credit for non-defective returns and offer cash refunds only for defective products. Others give the customer a choice with a small bonus for choosing credit.
Goodwill and service recovery
A shipment is late, a product is damaged, a support ticket goes sideways. Issuing $10 or $20 in store credit is faster than processing a partial refund and signals goodwill in a way that a discount code does not. It also keeps the money in the customer relationship.
Loyalty rewards
Many loyalty programs convert points into store credit at a fixed ratio. 1,000 points becomes $10 in store credit. This is cleaner than a one-time discount code because the credit can be split across orders, can be partially applied, and shows up on the customer's account page. See the loyalty program setup (/shopify-loyalty-program) for the points-to-credit mapping.
Cashback on purchases
A percentage of every order is returned to the customer's balance after the order ships. This is the model subZwallet implements as a wallet, covered below. It is harder to do natively because Shopify's store credit ledger has no automation rules attached to it. Apps or API code create the cashback events; Shopify holds the ledger.
Returns automation
A return is approved, store credit is issued automatically with no human in the loop. The customer sees the balance in their account the moment the return is marked received. This needs either a return management app or API automation.
Bulk corporate accounts
Wholesale and corporate buyers often prepay an account balance and draw against it order by order. Store credit handles this cleanly because it is account-linked, balance-tracked, and applied at checkout. The corporate accounting story is simpler than tracking a gift card per buyer.
Employee and ambassador discounts
A $200 monthly store credit for employees or content creators is easier to manage than monthly discount codes. The balance does not refresh automatically in the native feature, so this typically requires a monthly cron job or a scheduled API call.
How to issue store credit on Shopify (step by step)
For merchants on Shopify with native store credit enabled, here is the path from the admin:
- 1Open the Shopify admin and go to Customers.
- 2Find the customer in the list or search by name or email.
- 3Open the customer's detail page.
- 4Locate the Store credit card. If you do not see it, the feature may not be available on your plan or region yet, the staff role does not include the permission, or the customer's primary market is not in a supported region.
- 5Click Add credit.
- 6Enter the amount and the currency (locked to your shop's primary currency).
- 7Optionally enter an internal note explaining why. The note is visible to staff, not to the customer.
- 8Save. The balance appears immediately on the customer record and is available at their next checkout.
Issuing store credit as a refund
- 1Open the order.
- 2Click Refund.
- 3Select the line items and the amount to refund.
- 4Choose Store credit as the refund destination instead of the original payment method.
- 5Confirm. The refund event is logged against the order and the credit appears on the customer record.
The customer can apply the credit on their next order during checkout. The credit appears as a selectable payment option once they sign in to their account.
What customers see at checkout
At checkout, after signing in, the store credit balance appears as an available payment method. The customer can choose to apply it in full, partial, or skip it. If the credit covers the order in full, no other payment is needed beyond any taxes or shipping that the credit does not cover (depending on configuration).
Why store credit is not showing
If a merchant or a customer reports that store credit is not visible, the usual causes are:
- The customer is not signed in at checkout. Guest checkout does not show store credit because there is no customer to attach the balance to.
- The currency at checkout does not match the credit currency. Cross-currency stores need to confirm the credit and the order are in the same currency.
- The feature is not enabled for the region or plan. Shopify rolled native store credit out by region, and some plans gate it.
- A discount code is applied that conflicts with store credit application rules.
- The theme is on a custom checkout that does not surface store credit. Stores on the standard Shopify checkout get this for free; heavily customized headless checkouts may need to call the API to attach the credit.
- An app is intercepting the checkout and not passing the store credit option through.
Store credit accounting on Shopify
This is the section finance teams care about and that almost no Shopify guide covers properly. Store credit is a liability the moment you issue it. It moves to revenue only when the customer applies it to an order. The accounting treatment matters for monthly close, for breakage estimates, and for any business doing GAAP or IFRS reporting.
The basic journal entries
When you issue $100 of store credit as part of a return: debit Sales returns (revenue contra-account) $100; credit Customer deposits / store credit liability $100.
When the customer redeems $40 of that credit on a future order: debit Store credit liability $40; credit Revenue $40.
The credit balance is a liability on the balance sheet. It is not revenue until it is spent. This is the same treatment as a gift card, with one important difference covered below.
Breakage
Breakage is the portion of issued store credit that will never be redeemed. The customer forgets, moves on, closes the account, or the balance sits below a useful threshold. For Shopify gift cards, breakage rates of 10% to 20% are common; for store credit issued in the refund context, breakage is typically lower (5% to 10%) because the customer who returned a product is more likely to come back than the recipient of a marketing gift card.
US GAAP (ASC 606) lets you recognize breakage as revenue over the redemption pattern of the population, once redemption history supports an estimate. IFRS 15 has similar treatment. Until you have a defensible history, you should not be booking breakage. Most Shopify merchants do not, which is fine until an auditor or an acquirer asks.
State escheatment risk (US): in Delaware, Maine, New Jersey, and other states, unredeemed store credit and gift card balances become unclaimed property after a dormancy period of typically 3 to 5 years. The merchant may owe the unredeemed balance to the state, not get to keep it. Shopify does not handle escheatment for you. A few states exempt store credit issued in returns; most do not. If your customer balances are large and aging, talk to a CPA who knows your states.
Deferred revenue line item
If your store credit liability is material, the cleanest treatment is a separate line on the balance sheet called "Customer deposits, store credit" or "Deferred revenue, store credit" rather than commingling with the gift card liability. Auditors look for this separation.
What Shopify reports
Shopify gives you store credit issued, store credit redeemed, and current outstanding balance through the customer report and the Admin API. It does not give you breakage estimates, age buckets, or escheatment-ready exports. Most merchants pull the balance via the API monthly and age it in a spreadsheet or BI tool.
Store credit on Shopify POS
In-store and in-person credit is where most retailers want store credit to work but where things tend to break. The good news: Shopify POS supports native store credit. The bad news: a handful of edge cases trip up retail teams.
What works
- A customer signs in at POS and the store credit balance is visible to the staff member.
- The balance can be applied at checkout as a payment method, partial or full.
- Refunds processed at the POS can be issued as store credit instead of the original payment method.
- Credits issued in-store sync to the online store and vice versa.
What requires attention
- The customer must be attached to the POS cart. Anonymous walk-in sales cannot apply store credit because there is no customer to look up.
- Staff need the right permission set. By default, only specific staff roles can apply or refund to store credit.
- Multi-location currency: if your POS location operates in a different currency than the credit was issued in, the credit may not apply. Confirm currency parity at issuance.
- Returns processed at POS that originated online still apply correctly, but the credit issued goes to the customer record, not back to the in-store register.
Frequent POS issue: store credit not applying at checkout
- 1Confirm the customer is attached to the cart.
- 2Confirm the customer's market matches the store's market.
- 3Confirm staff permissions include the store credit payment method.
- 4Confirm the POS app is updated to a version that supports native store credit.
Store credit API for developers
For developers building automations on top of store credit, Shopify exposes the feature through the Admin GraphQL API. There is no REST equivalent; this is GraphQL only. Full reference at shopify.dev (https://shopify.dev/docs/api/admin-graphql/latest/objects/StoreCreditAccount).
Core types
- Customer.storeCreditAccounts returns the credit accounts for a customer, with balance, currency, and transaction history.
- StoreCreditAccountCredit is the input type for adding credit.
- StoreCreditAccountDebit is the input type for spending credit programmatically.
- storeCreditAccountCredit mutation adds credit to a customer's account.
- storeCreditAccountDebit mutation removes credit from a customer's account.
Common API patterns
- Cashback automation: listen to orders/paid webhook, calculate a percentage, call storeCreditAccountCredit.
- Loyalty point redemption: customer redeems points in a loyalty app, the app calls the credit mutation, the credit appears in their next checkout.
- Scheduled employee or ambassador stipend: a monthly cron job iterates a list of customer IDs and credits each with the stipend amount.
- Refund automation: a return management app marks a return as received, calls the credit mutation, and notifies the customer.
Rate limits and idempotency
Shopify's GraphQL API uses a leaky-bucket calculated query cost model. Bulk crediting hundreds of customers in a tight loop will hit throttling. Build with backoff and idempotency keys — use an internal reference ID in the transaction note so you can detect double-credits. Shopify does not enforce idempotency on the credit mutation, so you have to.
Store credit limit
There is no native maximum on a customer's store credit balance in the API or admin. You can issue $10 or $100,000 to a single customer; Shopify will not stop you. If you need a cap for fraud or accounting reasons, enforce it in your application logic before calling the mutation.
Store credit and subscriptions: the compounding wallet model
Now the interesting part for stores doing subscriptions (/shopify-subscription-app). Native store credit is a flat ledger. It does not know about the subscription contract, it does not auto-credit on renewal, and it does not show the customer a running balance forecast based on their subscription cadence. This is where the cashback wallet model, which is what subZwallet implements, changes the math.
What changes when subscriptions are in the picture
A customer on a monthly subscription generates a predictable transaction every 30 days. If every renewal credits 5% back to the customer's wallet, the balance compounds. After 6 months of $50 renewals, the customer has $15 sitting in their wallet. That balance is more than retention insurance. It is a behavioral lock. The cost of cancellation is now visibly higher than zero. The customer can see the money they are walking away from.
This is the wedge subZwallet was built around. Native store credit handles the ledger. The cashback wallet sits on top and creates the rules: which renewals earn, at what rate, with what visibility to the customer, and what happens to the balance at cancellation.
Real example: $40-per-month coffee subscription
A $40-per-month coffee subscription with 5% cashback on every renewal. After 12 renewals, the customer has $24 in their wallet. When the cancellation flow surfaces "you have $24 in your wallet, apply to a free month?" the cancel rate drops in a way no discount code matches. The discount is reactive and trains the customer to threaten cancellation. The wallet was earned over the relationship and feels like the customer's own money, because mechanically it is. They earned it. The merchant is just reminding them it exists.
Why apps add value here
Shopify's native store credit gives you the ledger. It does not give you:
- A storefront widget showing the running balance on the product page.
- Automatic crediting on subscription renewal events.
- Tier-based earn rates (e.g., Gold subscribers earn 8%, Silver 5%).
- Expiration rules per credit pool.
- Win-back automation that deposits credit into the wallet and emails the customer.
- A cancellation flow that surfaces the wallet balance as a save offer.
That is the app layer. The subZwallet cashback wallet (/shopify-cashback-wallet) handles all of the above on top of Shopify's native credit ledger, which means the merchant gets the accounting cleanliness of native store credit plus the behavioral automation of the wallet model.
Where this guide points next
Store credit is the foundation. The interesting work happens in what you build on top of it.
If you are setting up store credit for the first time on Shopify, the native feature is the right starting point. It is built into the checkout, it is in the customer record, and it handles refunds-to-credit cleanly. Start there before adding an app.
If you are running subscriptions, points, or cashback rules and you want the credit ledger to be active rather than passive — crediting on renewal, surfacing in the cancellation flow, decaying on a schedule — then you need the rules layer. That is where subZwallet fits. The cashback wallet (/shopify-cashback-wallet) sits on top of Shopify's native store credit ledger and turns it into a compounding retention asset, particularly on subscription stores (/shopify-subscription-app) where every renewal can earn back to the customer's balance.
The accounting team should be in the conversation either way. Store credit is a liability the moment it is issued, and the cleaner that ledger looks, the cleaner the close, the audit, and the eventual acquisition diligence.
