If you run a growing eCommerce business long enough, there may be a point where Cost of Goods Sold (COGS) turns from a metric into a mystery. The numbers just stop making sense.
Most teams instinctively look to accounting when this happens. That makes sense. COGS lives on the income statement. Accountants close the books. But after years of watching this pattern repeat, we have learned if your COGS looks wrong, accounting is almost never the place where it broke. Let me explain.
COGS & Your Gross Margin
We usually hear about it after a tense meeting, when someone finally says out loud that gross margin doesn’t really line up with reality. The business seems healthy from the outside, but the income statement tells a stranger story.
At this stage, most teams assume the problem lives in the numbers. Maybe accounting is being too conservative. Maybe costs are hitting the wrong period. When gross margin stops making sense, it’s often because the system reporting that margin has been muddled for some time.
Let’s break down COGS and the effect on gross margin:
What is COGS?
COGS, or Cost of Goods Sold, is the direct cost of producing or purchasing the products a company sells during a given period. Think materials, direct labor, and manufacturing or procurement costs that scale with volume. If it doesn’t change when you sell more or less, it’s probably not COGS.
Cost of Goods Sold, or COGS is the direct cost of producing or purchasing the products a company sells during a given period. It is an expense reported on your income statement.
This number sits between revenue and gross profit on your income statement, which makes it one of the most important levers in your business. Get it wrong and everything downstream—gross margin, pricing strategy, inventory valuation, and even cash flow—becomes unreliable.

What is included in COGS:
For product-based businesses, COGS typically includes:
- raw materials
- components
- direct production labor
- certain factory overhead
- freight in
For distributors, it’s usually the purchase price of inventory plus inbound shipping and handling.
What is not included in COGS:
These live in operating expenses, not COGS:
- sales and marketing
- admin salaries
- office rent
- ERP subscription
And these would be added to find your landed cost:
- freight & duties
- tax
- insurance & risk
Many growing companies misclassify COGS, either by oversimplifying it or by dumping too much overhead into it to make margins look better. That might work for a board deck, but you’re essentially lying to yourself. Accurate COGS gives you a true gross margin, which tells you whether you actually have a scalable business model, or just a busy one.
With good NetSuite accounting for ecomm, properly defining and automating COGS connects operations, inventory, and finance into something real. Because you really want to trust your financial statements.
How COGS break with these 4 inventory mistakes
Accounting inherits the outcome of dozens of upstream decisions about how inventory is received, how items are set up, how orders flow through systems, and how exceptions get handled.
By the time your accounting team sees the numbers, those numbers are locked in. NetSuite is not guessing. It’s doing exactly what it was told to do. If inventory was entered at the wrong cost, if fulfillment relieved inventory inconsistently, or if integrations skipped key steps, accounting can only report the result. No journal entry can undo a workflow that keeps producing distorted data month after month.
Related Read: NetSuite Reporting Issues 6 Warning Signs to Look For
1). Incorrect Inventory Costs
One of the most damaging mistakes we see is inventory entering NetSuite at selling price instead of acquisition cost. This can happen during:
- item creation
- a Shopify or 3PL integration
- entering an old SKU without fully resetting the cost logic
In the moment, margins may even look fantastic. Yay, right?
The problem emerges once inventory starts moving.
Every fulfillment now shows inflated value, pushing COGS higher with each order shipped. Gross margin erodes without any operational explanation that matches reality. Teams chase freight, labor, and discounts, while the true cost sits buried in the item record and inventory layers.
This is what makes the issue so dangerous. The error does not correct itself. It compounds. And fixing it later is not a small undertaking.
2). Failing Shopify Integrations
Most Shopify integrations appear to be stable at the surface-level, but it’s easy to run into problems once gaps begin to form. Some of the issues we see with clients using Shopify Integrations:
- Inventory relief may be missing or delayed
- Cost mappings may be incomplete
- Duplicate items
- Refunds bypass COGS logic entirely
- 3PLs send partial data that NetSuite accepts without resistance
Over time, “mostly working” becomes the most dangerous state an integration can be in. Weeks turn into months before anyone realizes gross margin has been drifting the entire time.
If the integration only delivers part of the story, the financials will reflect that incomplete version with total confidence. Yet another reason it’s so important to run a proper NetSuite implementation.
3). Inventory Adjustments: The Myth of Clean-Up Entries
When margins look wrong, the instinct is to fix them directly. But inventory adjustments are not neutral. They hit COGS immediately and often obscure the operational issue that caused the discrepancy in the first place.
Repeatedly with new clients, we see inventory adjustments wreaking havoc with their margins.
Cleanup entries do not solve COGS problems. They mute the symptoms without addressing the cause.
This is where tightening up your user permissions can have a big impact. Only team members that truly understand the adjustment they’re making and its effect on your financial reporting should have access to make adjustments. Introduce inventory accounting SOPs before your COGS begins lying to you about your margins.
4). Poor or Overlooked Training
Once your business grows, it demands speed. Inventory gets received quickly, orders get pushed through manually when systems lag and here’s where it gets dangerous: counts get adjusted to keep operations moving. None of this is malicious. It is practical decision-making under pressure.
The risk is that inventory transactions carry enormous financial weight. One incorrect receipt affects every order that follows. One skipped step compounds across hundreds or thousands of fulfillments. When untrained hands handle high-impact transactions, NetSuite faithfully records the outcome and locks it into history.
Later, accounting is asked to explain the numbers, even though the numbers were shaped by operational shortcuts taken long before the close ever began.
What Healthy COGS Actually Looks Like in NetSuite
Healthy COGS is not pristine or perfectly smooth.
- Inventory enters the system at acquisition cost.
- Fulfillment relieves it consistently.
- Integrations agree with each other.
- Adjustments are rare and investigated, not normalized.
Gross margin then shifts for reasons you expect like promotions, freight changes or supplier shifts.
This is the result of workflows designed for scale instead of patched together in reaction to growth.

Fix the Workflow
You won’t find the fix on your income statement. We begin with workflows, accurate costing and structure to help teams untangle COGS issues:
- Diagnosis
- Mapping workflows comes before adjustments
- Structure over speed
Make it best practice to avoid entries as a tool for correction. Instead, make it standard operating procedure to dig into what’s breaking your system.
Use our COGS Scorecard to find out how healthy your margin reporting really is:
A COGS Checklist & Scorecard
Use our COGS checklist and scorecard to find out how healthy your COGS really is.
How to use this:
- Green = Consistently true, documented, and trusted
- Yellow = Inconsistent, person-dependent, or “mostly works”
- Red = Reactive, manual, or fixed after the fact
If you’re debating a color, it’s probably Yellow leaning Red.
1. Inventory Entry & Item Setup
| Area | Green | Yellow | Red |
|---|---|---|---|
| Item cost setup | Items are created with accurate acquisition costs | Costs sometimes corrected later | Placeholder or selling prices used |
| Cost ownership | One clear source of truth | Multiple systems touch cost | No clear owner |
| Costing method | Fully understood across teams | Known by finance only | Misunderstood or ignored |
| SKU creation | Documented, repeatable process | Informal process | Tribal knowledge |
| Cost overrides | Rare and controlled | Occasional overrides | Frequent overrides |
Overall Status: ___ Green ___Yellow ___Red
2. Receiving & Inventory Workflows
| Area | Green | Yellow | Red |
|---|---|---|---|
| Receiving process | Standardized and enforced | Mostly followed | Ad hoc or bulk adjustments |
| Partial receipts | Intentional and tracked | Sometimes skipped | Ignored |
| Timing alignment | Receipt, bill, inventory align | Minor timing issues | Regular timing confusion |
| Error handling | Errors investigated | Errors quietly fixed | Errors normalized |
| Inventory trust | Quantities and values trusted | Frequent spot checks | Regular adjustments needed |
Overall Status: ___ Green ___Yellow ___Red
3. Shopify, 3PL & System Integrations
| Area | Green | Yellow | Red |
|---|---|---|---|
| Inventory relief | Always triggered correctly | Occasional exceptions | Inconsistent or missing |
| COGS flow | Cost flows with orders | Partial cost visibility | Revenue only |
| Refund handling | Fully reverses COGS | Manual review needed | Breaks inventory |
| SKU consistency | Single SKU structure | Occasional duplicates | Frequent duplicates |
| 3PL reconciliation | Regular and documented | Infrequent | Assumed accurate |
| Integration health | Actively monitored | Set-and-forget | “Mostly works” |
Overall Status: ___ Green ___Yellow ___Red
4. Fulfillment & COGS Recognition
| Area | Green | Yellow | Red |
|---|---|---|---|
| Shipment posting | Always posts COGS | Occasional misses | Manual fixes |
| Split shipments | Behave predictably | Inconsistent behavior | Break COGS logic |
| Timing logic | Matches revenue recognition | Some drift | No alignment |
| COGS accuracy | Consistent period to period | Volatile | Unreliable |
| Exception visibility | Clearly surfaced | Hard to find | Buried |
Overall Status: ___ Green ___Yellow ___Red
5. Inventory Adjustments & Write-Offs
| Area | Green | Yellow | Red |
|---|---|---|---|
| Adjustment frequency | Rare | Periodic | Monthly routine |
| Documentation | Operational explanation | Accounting-only | None |
| Shrinkage tracking | Trended over time | Reviewed ad hoc | Ignored |
| Root cause analysis | Investigated upstream | Partial | Never |
| Cleanup entries | Not relied upon | Occasional | Expected |
Overall Status: ___ Green ___Yellow ___Red
6. Staff Access & Transaction Discipline
| Area | Green | Yellow | Red |
|---|---|---|---|
| Access control | Role-based and enforced | Loosely controlled | Wide open |
| Training | Formal and ongoing | Informal | None |
| Process discipline | Structure beats speed | Depends on urgency | Speed wins |
| Overrides | Rare and reviewed | Sometimes needed | Common |
| Financial awareness | Staff understand impact | Partial awareness | No awareness |
Overall Status: ___ Green ___Yellow ___Red
7. Gross Margin Reality Check
| Area | Green | Yellow | Red |
|---|---|---|---|
| Margin movement | Clearly explainable | Broad explanations | Shrugs |
| Finance vs ops | Aligned | Tense | Distrustful |
| Margin discussions | Decision-focused | Defensive | Combative |
| Income statement | Mirrors operations | Partially | Fictional |
| Leadership trust | High | Conditional | Low |
Overall Status: ___ Green ___Yellow ___Red
Interpreting the Results
- Mostly Green: Healthy COGS (is expansion next?)
- Lots of Yellow: Running the risk of false margins and skewed reporting
- Any Red in multiple sections: COGS leakage is structural
Realized you’re in the red when it comes to COGS? Get in touch to learn more about our outsourced controller and NetSuite accounting services

