B2B buyers ring, email, or fax their order. Your team builds a draft order in the admin. The customer has store credit on their account. You cannot apply it. So you reach for a discount code and a spreadsheet, and the reconciliation gets worse every month. Codes get reused. Balances drift. Finance ends every month chasing the gap. Customer trust erodes one mishandled order at a time.
This article is the engineering reality of the problem and the fix path I would propose if you brought it to me. It is also a working draft of the engagement. Read it, recognise yourself, and the technical assessment is the route to validating the path against your specific configuration.
The Short Answer
Shopify's native draft-order flow does not expose customer store credit balances at the line where an admin can apply credit on behalf of a customer. The constraint is real and well-known. The common workaround (discount code plus a spreadsheet that tracks the remaining balance) drifts the moment your B2B customer count crosses about fifty.
The real fix is a custom Shopify app that surfaces the store credit balance inside the draft-order flow, applies credit as a real adjustment (not a discount code), decrements the balance, and writes an audit trail per application. On Shopify Plus, the same shape can be implemented as a draft-order app extension and a checkout extension. The engineering choice depends on plan, B2B configuration, and ERP integration.
The fix typically does not require an ERP migration or a Plus upgrade unless one is already on the roadmap.
Why The Obvious Workarounds Fail
Before the fix, the four workarounds I see most often, and exactly why each one drifts.
Discount codes plus a spreadsheet. The discount code (STORE-CREDIT-150-CUSTOMER-ACME) gets created in admin. The remaining balance gets tracked in a spreadsheet. Works for ten customers, fails at fifty. Codes get reused (the next staff member assumes the code is generic). The spreadsheet gets out of sync with Shopify (someone forgets to decrement, someone increments twice). A discount code shows up on a checkout and you cannot tell whether it represents real credit, a manual adjustment, a goodwill gesture, or a typo. Finance treats the entire store-credit pool as untrusted data within a year.
Asking the customer to log in and self-checkout. Defeats the entire B2B order flow. B2B buyers ring or email because that is how they buy. Telling them to switch channels is telling them to switch suppliers. Many will. The ones who do not will resent the friction every month.
Customer metafields without a workflow. A Shopify metafield can hold the customer's store credit balance. The admin can read it. The admin still cannot apply it at the line. Without a workflow, the metafield is read-only context. You are back to discount codes the moment your team needs to use the balance to reduce a draft order.
Native Shopify B2B without customisation. Shopify B2B is real and useful. Wholesale price lists, tax overrides, payment terms, customer-specific catalogs. The store-credit-on-draft-order gap is one of its known edges, and B2B as shipped does not close it. If you adopted B2B and assumed store credit would come along, this is the gap you found.
The Engineering Reality
There are three Shopify surfaces that intersect this problem, and the fix uses one or more of them depending on the diagnosis.
Draft orders (admin-side). The draft-order flow lets your team build an order on behalf of a customer. It supports custom line items, custom discounts (line-level or order-level), and arbitrary adjustments. It does not, by default, surface a customer's store credit balance or apply it as a payment-side credit.
Store credit (customer-side). Shopify exposes store credit on the customer record. Customers can see and use it on self-checkout. The admin can grant it. The admin cannot natively apply it at the draft-order line.
App extensions. A custom Shopify app, with the right access scopes, can read the customer's store credit balance, surface it inside the draft-order flow (via a draft-order app extension on Plus, or via a custom admin page on standard), apply the credit as a recorded adjustment, and decrement the balance. This is the path that closes the gap.
The engineering is plumbing. The architecture is well-defined. The integration points are documented. What makes it a real engagement, not a weekend hack, is the audit trail, the reconciliation, and the customer-facing email that mirrors what the customer sees in their account.
How I Would Approach The Fix
Here is the engagement I would scope on a real store with active discount-code-plus-spreadsheet drift.
Phase 1: Discovery and diagnosis (week zero)
Before any code, I need to know what your current setup actually looks like. Most stores have surprises here.
What I do. Map the current store-credit workflow. Who issues credit? On what basis? Where is the balance recorded today (metafield, spreadsheet, ERP, all three)? How does finance reconcile? What does the customer see today and what should they see after the fix? Which integrations (Xero, QuickBooks, a wholesale ERP, a CRM) need to know about the credit? Are you on standard Shopify, Shopify Advanced, or Shopify Plus? Is Shopify B2B already enabled? Which customer segments need this fix and which do not?
What you get. A written discovery report covering: current data shape, current workflow, current pain points, the recommended fix path, options that are cheaper and options that are more thorough, and an honest read on which option fits.
Phase 2: Source-of-truth migration (week one)
Before we build the new workflow, the existing balance has to live in one place. Right now it lives in a spreadsheet plus some discount codes plus a few metafields. We pick the canonical home.
What I do. Migrate to Shopify customer metafields as the single source of truth (or, if your ERP is the system of record, build the bidirectional sync). Reconcile every existing balance against finance's ledger before any code goes live. Write the migration script as repeatable and reversible.
Why this matters. If we build the new workflow against an unreconciled balance, we are encoding the existing drift into the new system. The migration is non-glamorous and it is the work that makes everything downstream trustworthy.
Phase 3: Custom app (week one to week three)
This is where the actual fix gets built.
What I build.
- Admin UI. Inside the draft-order flow, a panel that shows the customer's current store credit balance. A clear "Apply credit" action with an amount field, capped at the available balance. Validation that prevents over-application. Confirmation dialog so it is not applied accidentally.
- Backend. When credit is applied, the app records: who applied it, when, against which draft order, the amount, and the resulting balance. The balance metafield (or ERP record) is decremented atomically. The draft-order total reflects the credit as a recorded adjustment, not as an opaque discount code.
- Customer-facing email. When the order is finalised, the customer's confirmation email includes a line that says "Store credit applied: R/$/£X. Remaining balance: Y." The number on the email matches the number in the customer's account.
- Reconciliation report. A view finance can run without asking the team. "Show me every credit application this month, with customer, order, amount, and remaining balance." Exportable. Auditable.
- Audit trail. Every credit action is logged with timestamp, actor, and reason. If a balance does not reconcile, the trail tells finance who to ask.
Plan-specific paths.
- Standard Shopify / Advanced. Custom app, GraphQL admin API, custom admin page or app block on the draft-order screen. Works fine. Does not need Plus.
- Shopify Plus. Same architecture, plus the option to use a draft-order app extension and (where the customer eventually self-checks-out) a checkout extension. Cleaner UX, slightly more setup.
Phase 4: Migration and parallel run (week three to week four)
The new workflow runs alongside the old one for a defined window. Discount codes are retired one customer at a time as the new flow proves out.
What I do. Pick a small set of B2B customers who agree to be the pilot. Migrate their balances. Run the new flow for them for two weeks. Reconcile against finance daily. When the pilot is clean, expand to all B2B customers. Retire the discount codes only after every customer is on the new flow.
Phase 5: Documented handover
You keep the code, the docs, the runbook, and the migration scripts. I leave you with a system someone else can extend.
Honest Variables That Change The Cost Shape
The diagnosis tells me which of these apply to yours. I will not give a price before the diagnosis because the cost depends on which of these are true.
Number of B2B customers. Ten customers and a small balance pool is a smaller engagement. Five hundred customers with twenty thousand in outstanding credit is a larger reconciliation.
ERP / accounting integration. If credit issuance is driven from Xero or your wholesale ERP, the bidirectional sync is part of the build. If credit lives in Shopify only, the build is shorter.
Existing technical debt. Stores running on Shopify for five years with Liquid customisations, multiple apps, custom themes, and partial B2B rollouts have surprises. The discovery surfaces them. Stores running on a clean Shopify Plus install with B2B enabled have fewer.
Plan. Standard Shopify works. Plus opens checkout-extension paths. Neither requires you to migrate plans for this fix.
Self-checkout vs admin-only. If only the admin applies credit, the build is admin-side. If the customer also needs to apply credit on self-checkout, that is a checkout extension and the engagement scope grows.
Discount code retirement window. Some stores want the codes gone immediately. Others want a six-month overlap. The longer the overlap, the more reconciliation work during the transition.
Why I Wrote This
Most articles on Shopify B2B store credit either point you at a SaaS app or tell you to upgrade to Plus. Neither is wrong, but neither is a fix for the specific case where your team takes orders by phone and needs to apply credit on draft orders without losing the audit trail. That case is the engineering problem this article is about.
If you read this and recognised your operation, the technical assessment is the route in. It is paid. It produces a written discovery report, a fix path with options, and a scoped engagement quote. Most assessments take two to four hours of focused work plus a written diagnosis returned within a week. You keep the report whether or not you book the build.