Every operations leader I work with can describe their order to cash process in detail. They know how a sale moves from the storefront into NetSuite, how it gets billed, how the cash posts. Ask the same leader to walk me through what happens when a customer sends something back, and the story gets noticeably thinner. Somewhere around the words “and then the refund goes through,” the confidence fades. That fade is not a coincidence. Returns are the part of the operation that most brands never fully designed. They built a buying process on purpose and let the giving-back process assemble itself out of whatever each system happened to do by default. For a fast-growing eCommerce brand, that’s where the money and the inventory both start to disagree.
I have spent a long time inside this problem, first building commerce capability inside NetSuite and now running an operations consultancy that lives in it every day. The pattern is remarkably consistent. A brand obsesses over conversion, checkout, and fulfillment because those are the processes that obviously make money. Returns feel like the opposite of making money, so they get less attention, less testing, and far less integration discipline. Then the return rate climbs to where it sits for most direct to consumer brands, somewhere between 20% and 30% of orders, and the process that nobody designed is suddenly responsible for a fifth of the revenue moving backward through the business. That’s when returns reconciliation stops being a back-office chore and becomes a finance problem the CFO can feel.
Why a return is harder than a sale
A sale is a single direction of travel. Money comes in, a product goes out, and the systems agree because there’s only one thing to record. A return is the same journey run in reverse, except reverse is never as clean. A single return can trigger a refund to the customer, a financial record in NetSuite, an inventory adjustment if the item is restockable, and sometimes an entirely new order if the customer wanted an exchange. Four things have to happen, in the right order, in the right systems, every time, and most of them have to happen without a human watching the individual transaction. When any one of those four steps drifts out of sync with the others, the brand ends up right where so many do at month end, with Shopify refund totals that do not match the credit memos in NetSuite and inventory counts that are off because returned product was refunded but never restocked.
The reason this is so much harder to automate than a sale is that returns do not come in one flavor. There are full refunds and partial refunds. There is store credit and there are gift card refunds. There are exchanges for a different size and exchanges for an entirely different item. There are returns against orders that were paid with a discount code, returns against orders that were split across two payment methods, and marketplace returns that follow rules the brand does not even control. Each of those scenarios wants a slightly different financial treatment, and a returns process that handles the simple full refund beautifully can quietly mangle every one of the harder cases. The brand does not find out until someone in finance tries to tie the numbers together.
The rule that decides whether your books stay clean
The single most important principle in returns reconciliation is one that most brands have never been told out loud. The correct financial record in NetSuite depends entirely on how the original sale was billed. If the original order was billed as an invoice, the return should generate a credit memo and a customer refund. If the original order was a cash sale, the return should generate a cash refund. If the customer had only put down a deposit, the refund has to be applied against that deposit. These are not interchangeable. A refund that creates the wrong record type will technically move the money, which is why nobody notices in the moment, but it leaves the accounts receivable subledger and the general ledger telling slightly different stories. Multiply that by a few thousand returns a quarter and you have a reconciliation that takes days instead of minutes and a controller who no longer trusts the refund line.
This is the part of returns integration that separates a process that closes cleanly from one that generates a monthly fire drill. When the mapping between the original billing record and the resulting refund record is correct, every return lands as the right kind of transaction, inventory updates in step with the financial event, and the month closes without anyone reconciling Shopify against NetSuite by hand. When that mapping is wrong or missing, the brand inherits a permanent manual tax on the finance team, paid every single close, forever, until someone fixes the underlying flow.
Where the inventory side breaks
The financial half of returns gets most of the attention because finance is the team that complains loudest. The inventory half is quieter and just as expensive. When a customer returns a restockable item, two separate things should happen. The customer gets their money back, and the product goes back into available inventory so it can be sold again. Those two events are easy to treat as one, and that is exactly the trap. A returns flow that issues the refund but does not reliably restock leaves the brand holding inventory it has already paid for but cannot see, which means it gets reordered when it did not need to be. A flow that restocks before the product has actually been inspected and received puts damaged or unsellable units back into the available count, which means a customer buys something that is not really there.
Good returns management in NetSuite treats the refund and the restock as related but distinct events, each tied to the real-world moment it represents, so that inventory accuracy and financial accuracy hold together instead of drifting apart.
Exchanges are a second sale wearing a costume
Exchanges deserve their own warning, because they are where the most well-intentioned returns processes fall down. An exchange is not really a return. It’s a return and a new sale stitched together, and the new sale needs to flow through the same order to cash process as any other order. When brands treat an exchange as a simple swap inside the returns tool, the replacement item often never becomes a real order in NetSuite. The revenue is never recorded, the inventory is never committed properly, and the fulfillment team ends up shipping product that the financial system does not know left the building. The brands that handle this well let the return close out the original transaction correctly and let the exchange start a clean new order to cash cycle, so the replacement is treated with the same rigor as a first-time purchase.
Returns reconciliation across channels and settlements
The final layer, and the one that catches brands as they scale past a single storefront, is reconciliation across channels and against payout settlements. A direct to consumer return on the brand’s own Shopify store, a return managed through a dedicated returns platform like Loop, and a marketplace return on Amazon are three different processes with three different sets of rules. Marketplace returns in particular often refund the customer on a timeline and in a manner the brand does not directly govern, and the money shows up netted inside a settlement rather than as a clean one-to-one refund. If the refund records in NetSuite are not built to reconcile against those settlements, the brand ends up with refund activity it cannot match to deposits, which is exactly the kind of unexplained variance that turns a routine close into a week of investigation. Reconciling refund records against the actual settlement and payout data is what lets a multichannel brand close returns with the same confidence it closes sales.
Treat returns like a process you designed on purpose
The throughline across all of this is simple. Returns are not the leftover step after the real work of selling. They are a full operations process in their own right, with financial, inventory, and customer-experience consequences that scale right alongside revenue. The brands that struggle are the ones that let the returns process assemble itself by accident. The brands that stay clean are the ones that designed returns reconciliation deliberately, with the original billing record driving the refund type, the restock event held distinct from the refund, exchanges routed through order to cash, and every refund built to reconcile against the settlements that actually move the cash.
This is the work we do every day. As a top Celigo implementation partner and a long-term NetSuite continued success provider, Hairball builds the connections that carry returns from the storefront, the returns platform, and the marketplace into NetSuite as the correct financial and inventory records, so the process closes cleanly every month without anyone reconciling it by hand.
If your refund totals and your credit memos have been telling different stories at close, that gap is not a mystery and it is not permanent. It is a returns process that was never fully designed, and designing it is exactly the kind of problem worth solving before the next peak season makes it louder. The best time to look at your returns reconciliation is the quarter before you need it to hold.