Case Study

How a National Sporting Goods Retailer Replaced a 15-Year Custom System Across 100 Stores Without Breaking a Single Day of Trade

There is a particular kind of dread that comes with replacing software that has run your business for 15 years. Every edge case, every workaround, every piece of institutional knowledge is baked into that system. And now you have to pull it out and put something new in its place, live, across 100 stores, without missing a beat.

This was not a POS replacement. It was a full operational reconstruction.

Serialized product tracking. Distributed fulfillment. Cross-store allocation. Tier-based loyalty. Historical data migration. All running simultaneously across 100 live retail locations.

Here is how it was done.

Scale 100 stores, live, without disruption
Complexity 15 years of custom logic, fully preserved
Outcome One connected system from store floor to ERP

The problem with software that works too well.

The retailer had built something most retailers never manage: a custom system that genuinely fit their business. The problem was not that it stopped working. The problem was that it stopped growing.

Over 15 years, every new requirement had been bolted on. The codebase had become a single developer's institutional knowledge. No updates, no security roadmap, no way to add what a modern retail operation demands.

Inventory control Cross-store fulfillment Ecommerce from stores Historical data migration Tier-based loyalty NetSuite integration Role-based controls
The challenge

Reliable in the way an old boiler is reliable.

Fine until it is not, and catastrophic when it goes. Replacing it was not a software project. It was a controlled reconstruction of an entire operating model, built to run without interruption inside a live, high-volume retail business.

The old system

Custom-built. Deeply embedded. Impossible to grow.

Serialized product sales, store-to-store transfers, ecommerce fulfillment, complex loyalty logic, EDI receiving, and millions of historical transactions — all controlled by a system that could no longer be updated, secured, or extended.

Developer lock-in. No innovation. Old code, old infrastructure, no security roadmap. Nothing could be added without breaking something else.

What was needed

Every workflow preserved. Every store live from day one.

Erply had to take over every inventory movement across 100 stores in real time, integrate cleanly with NetSuite as the corporate ERP, and keep five years of historical sales data fully operational at the point of sale.

Not archived. Not locked in a legacy lookup tool. Right there in the checkout flow, behaving exactly like a transaction made yesterday.

Inventory control

Inventory that tells the truth, in every store, in real time.

In a business like this, inventory is not a number in a spreadsheet. It is the difference between fulfilling a cross-store order and sending a customer home empty-handed.

The system was built so that nothing moves physically without being reflected digitally.

Sales and Returns

When a product sells, inventory drops immediately. When it comes back, the cashier selects a reason code.

That reason code determines whether the item returns to sellable stock or routes to a non-sellable bin. No exceptions, no manual overrides.

Store Transfers

Transfers between stores move through virtual staging bins and only register at the receiving location once physically confirmed.

Inventory cannot appear in two places at once. Reconciliation issues between locations are eliminated by design.

Purchase Order Receiving

Receiving against a purchase order only adds inventory after quantities are verified. Shortages, over-receipts, and damaged goods are flagged before stock is added.

What is received physically matches what is recorded financially in NetSuite.

Cross-store selling

Selling what you do not have in stock.

One of the more complex workflows the retailer runs is the cross-store order: a customer wants something the local store does not have, and the staff need to find it, commit to the sale, and fulfill it from wherever it exists in the network.

The old process relied on phone calls and manual coordination. The new one is entirely governed by the system.

When a cashier creates a sales order for an out-of-stock item, Erply checks inventory across all locations. If the company has none anywhere, the order is blocked. If stock exists elsewhere, the order requires full payment before submission, then routes automatically to the right fulfillment location.

A single order can split across multiple stores. The fulfilling store processes it through the WMS. Inventory deducts only when shipped. The selling store never touches the stock count.

Zero inventory available company-wide — order is blocked automatically
Stock exists elsewhere — full payment required before the order is submitted
One order splits across multiple fulfillment locations seamlessly
Inventory deducts only at the moment of shipment, never before
What used to be a phone call is now a defined workflow with guardrails at every step

Stores as fulfillment centers.

The retailer's ecommerce operation does not run from a central warehouse. It runs from its stores. Every web order is routed, picked, packed, and shipped from a retail location, with the discipline of a single warehouse operation.

Order Routing

When a web order comes in, a best-store routing logic evaluates inventory availability, store priority, and location rules, then assigns the order to the optimal location. If a single store cannot fulfill the whole order, it splits automatically across multiple stores — each receiving its assigned portion.

Pick Queue

An allocated order appears in a pick queue on a handheld device. Staff scan items, validate SKUs and serial numbers, and flag anything missing. Missing items trigger a reassignment to another location and a new routing decision.

Pack and Ship

At packing, box dimensions and weight are captured. ShipEngine generates the shipping label. Payment is validated through NetSuite before the shipment is finalized. If payment fails, the label does not print and the order remains unfulfilled.

Inventory and Status Sync

Once shipped, inventory reduces and order status updates automatically across the store, ERP, and shipping system. No manual coordination. No gaps between what happened and what was recorded.

The challenge

Millions of rows. Five years of history. Fully operational from day one.

One of the most technically demanding parts of the project was historical data. The requirement was not to archive it. It was to make it fully operational inside the new system.

From the store team's perspective, there is no line between old data and new data. There is just the system.

What was delivered

Every historical transaction usable at the checkout counter.

A cashier searching for a three-year-old receipt can find it by customer, date, store, product, or serial number. A return against a historical transaction validates the remaining eligible quantity, preserves the original pricing and tax logic, and behaves identically to a return on a sale made yesterday.

Behind that experience is a data retrieval layer built specifically to handle queries at scale, with complete line-item detail and the identifiers required for returns and reporting.

Loyalty and promotions

Loyalty that actually works.

Not a simple points accumulator. A tiered system with real economics, embedded directly into every transaction across stores and ecommerce.

Three tiers. Different earn rates. Automatic upgrades. Cross-channel redemption. Returns that recalculate everything.

Tier-based earning Points calculated based on eligible spend per tier. Tiers upgrade automatically when thresholds are reached. Shipping and gift card purchases do not earn points.
Reward certificates Generated automatically when point thresholds are met. Redeemable in store or online. Expire after 365 days.
Return recalculation When a return is processed, points are deducted and tiers are recalculated. Balances can go negative. The system enforces this automatically.
Coupon and promotion control Coupons validate at checkout and mark as used immediately, preventing duplication across channels. Promotions apply automatically based on quantity or customer group rules.
No manual adjustments All of it runs inside the checkout flow, governed by consistent rules. No room for policy exceptions that rely on a staff member remembering the right answer.

The guardrails that protect the business.

This is the part of a retail platform that rarely gets talked about in product demos. But it is what separates a system that runs cleanly from one that quietly leaks margin every day.

1

Discount limits enforced by employee group, not by memory

2

Manager-level access required for certain refund types and tenders

3

Gift card returns validate against NetSuite before processing

4

Cash operations are permission-based. Voids controlled before day close.

5

Defective returns routed to RMA bins, reviewed, and written off through an approval process

What was built

This was not POS replacement. This was full operational reconstruction.

Eleven distinct systems, all running simultaneously, across 100 live retail locations, from day one.

Serialized tracking Cross-store fulfillment Ecommerce from stores EDI receiving Defective asset management Carrier integration Tier-based loyalty Historical data migration ERP alignment
1 Serialized Product Control Every item tracked by serial number at sale and return.

Specific SKUs are flagged as serialized. When selling more than one of the same SKU, each serial number must be captured individually. A sale cannot complete without valid serial entries.

On return, the system validates the serial against the original sale. If the serial is not found in historical data, the return is blocked. This prevents fraudulent returns and protects warranty integrity.

2 Store-Level WMS Execution Every store operates as a structured fulfillment center.

Employees pick orders using handheld devices. Items are scanned, validated, and moved from showroom into ecommerce staging bins. Missing items are flagged and inventory adjustments are recorded automatically.

Inventory does not deduct until packing is complete. Status updates trigger invoice creation and sync across all systems. Multi-box shipments are tracked at the line-item level.

3 EDI and Box-Level Receiving Physical receipts that match financial records, every time.

Employees scan Box IDs tied to purchase orders, receiving entire contents in one step. If no Box ID is available, items are scanned individually against the purchase order.

The system flags shortages, over-receipts, and damaged goods before inventory is added. Discrepancies are documented and synced to NetSuite. What is received physically matches what is recorded financially.

4 Defective RMA Workflow Damaged goods never quietly re-enter sellable stock.

When a return is processed with a defective reason code, the item is automatically routed to an RMA bin and physically separated from sellable inventory.

On a scheduled review cycle, items are evaluated and either restored to stock or written off through an approval process. Write-offs synchronize to NetSuite so financial inventory reflects operational reality.

5 ShipEngine Carrier Integration No label prints without successful payment capture.

During packing, the shipping address is validated, a request is sent to ShipEngine, and the best rate is retrieved. The label is generated and tracking is stored at the box and line-item level.

The credit card is charged at fulfillment. If payment fails, the label does not print, the order remains unfulfilled, and the customer is notified. Orders auto-cancel after three days if unresolved.

6 Gift Card and Reward System Complex tier logic with dynamic recalculation at every transaction.

Physical gift cards and reward certificates operate on separate logic. Balances are created via API, validated at tender, and recorded in NetSuite. Retry logic handles API timeouts up to five attempts.

Points earn at different rates per tier. Thresholds generate reward certificates automatically. On return, points are deducted, tiers recalculate, and balances can go negative. Everything is governed by rules, not manual adjustment.

One connected operation, from the store floor to NetSuite.

The system that came out the other side is not a collection of integrations holding hands. From the moment a customer walks into a store to the moment that transaction closes in the ERP, everything is connected, governed, and accurate. That is what it looks like when a retail platform is actually built for the weight of the business it runs.