
Inventory costing sounds like one of those topics people promise to “look at later.”
Then later becomes month-end.
Month-end becomes panic.
And panic becomes this question:
“Why is our COGS so weird?”
If you run a Shopify store, especially across multiple channels, inventory costing can go wrong very quietly. Sales may look healthy. Stock may look “more or less okay.” But your Cost of Goods Sold (COGS) can still be wrong because the transactions underneath are messy.
And when COGS is wrong, everything downstream gets distorted:
- gross profit
- margin by product
- stock valuation
- monthly profit
- management reports
- tax reporting
That is why this topic matters.
This article explains how Shopify businesses can avoid COGS errors by protecting transaction integrity. In simple English, that means making sure every sale, return, transfer, adjustment, and stock movement is recorded correctly from the start.
We will cover:
- what inventory costing actually means
- why Shopify sellers get COGS wrong
- the most common transaction integrity problems
- how to build a cleaner costing process
- practical controls for Malaysian SMEs
- what finance and ops must check every month
Let’s make your COGS less “agak-agak” and more trustworthy.
What Inventory Costing Actually Means
Inventory costing is the method your business uses to assign cost to the products you sell.
If you buy or produce a product for RM40 and sell it for RM100, your gross profit is not RM100. It is:
Sales price – Cost of goods sold
So if cost = RM40, then:
- Sales = RM100
- COGS = RM40
- Gross profit = RM60
Simple enough.
But in real life, your actual cost may include:
- product purchase cost
- freight-in
- import duty
- packaging
- landed cost allocation
- warehouse handling, depending on your policy
And when you sell hundreds or thousands of SKUs through Shopify, it is not enough to know the cost “roughly.” You need a process that ties cost to real transactions accurately.
That is where transaction integrity comes in.
What “Transaction Integrity” Means in Shopify Inventory Costing
Transaction integrity means every inventory-related event is captured correctly, consistently, and in the right order.
For example:
- when stock is received, quantity and cost are correct
- when goods are sold, the right units leave stock
- when goods are returned, they go back correctly or get written off properly
- when stock is transferred, both sides are recorded
- when damaged goods are scrapped, inventory is reduced properly
- when manual adjustments happen, there is approval and support
Without transaction integrity, your costing logic falls apart.
You might have:
- correct formula
- nice dashboard
- beautiful accounting software
…but still get wrong COGS because the underlying stock movements are wrong.
That is like using a calculator perfectly on bad data. Very accurate nonsense.
Why Shopify Businesses Commonly Get COGS Wrong
Shopify itself is very good at helping you sell.
But Shopify does not automatically guarantee accurate inventory costing unless your processes and integrations are strong.
Here are the common reasons COGS gets distorted.
1. Inventory quantities are wrong
If stock in the system does not match physical stock, then cost calculation based on that inventory is already weak.
2. Purchase cost is not updated properly
If product cost changes but the system still uses an old average or default cost, margin reports become misleading.
3. Returns are handled badly
A refunded order may reverse revenue, but the stock may not come back properly or may come back in the wrong condition.
4. Manual stock adjustments are uncontrolled
One casual adjustment in the warehouse can quietly affect inventory value and COGS.
5. Multi-channel sales are not synced properly
You may sell on Shopify, Shopee, TikTok Shop, and retail. If the stock movement only appears in one place, COGS gets out of sync with sales.
6. Bundles and kits are not mapped correctly
Selling one bundle should deduct several component SKUs. If that does not happen properly, inventory and COGS become unreliable.
7. Damaged or obsolete stock stays in inventory
If unsellable items remain as active inventory, stock value is overstated and COGS does not reflect reality.
The 8 Biggest COGS Errors Caused by Weak Transaction Integrity
Let’s go through the most common ones.
1. Selling Stock That Was Never Received Properly
This happens when goods arrive physically, but the receiving process is incomplete or wrong.
Example:
- supplier sends 500 units
- warehouse receives 480
- system is updated as 500
- 20 units were actually short or damaged
Now your stock quantity is overstated from day one.
When sales happen later, your system thinks it is consuming good stock that never existed. Eventually, someone adjusts the stock down, and COGS jumps in a later month.
Better control
At goods receipt:
- count properly
- inspect for shortages or defects
- record the true quantity received
- update cost only after receiving is confirmed
Do not receive by invoice only. Receive by physical reality.
2. Using Outdated Product Costs
Many SMEs enter a cost price once and then forget about it for months.
But product costs change:
- suppliers raise prices
- freight goes up
- exchange rates change
- packaging becomes more expensive
- imported goods cost more after duty and delivery
If Shopify or your inventory system keeps using old cost, your reported margin becomes fiction.
Malaysian example
A Kuala Lumpur seller imports drinkware from China. Original cost per unit was RM18. Freight and import changes increase the landed cost to RM23, but the system still uses RM18.
Sales look profitable.
Actual profit is much thinner.
Better control
Review and update:
- purchase cost
- landed cost
- packaging cost, if included in inventory policy
At minimum, do this for major SKUs every month or every new stock receipt batch.
3. Returns Are Refunded but Inventory Is Not Handled Correctly
This is one of the biggest hidden COGS problems.
A customer returns an item. Finance processes the refund. Good.
But what happens to the stock?
Possible outcomes:
- item is resellable and goes back to stock
- item is damaged and should not go back to normal stock
- item is disposed of
- item never physically returns, but refund was still given
If your system treats every refund as if stock came back in good condition, then inventory is overstated and future COGS is distorted.
Better control
Every return must be classified:
- restockable
- damaged
- disposal
- pending inspection
And the accounting treatment should match that condition.
4. Manual Adjustments Are Changing Inventory Value Quietly
Manual inventory adjustments are sometimes necessary.
But if they are frequent, uncontrolled, or undocumented, they destroy transaction integrity.
Common examples:
- “found extra stock”
- “just reduce this item”
- “warehouse forgot to update”
- “customer service said replace one unit”
Each of these affects:
- quantity on hand
- inventory value
- future COGS
- margin analysis
Better control
Require:
- reason code
- user name
- approval
- evidence for adjustment
A manual stock adjustment without documentation is basically a quiet invitation to future reconciliation pain.
5. Bundle Sales Are Not Reducing Component Costs Properly
Bundles are great for sales and terrible for lazy stock control.
Example:
A gift set sells on Shopify as one SKU, but physically it contains:
- 1 serum
- 1 toner
- 1 cleanser
If your system deducts only the bundle shell SKU and not the components, then:
- stock is wrong
- COGS is wrong
- component inventory remains overstated
Better control
Use proper bundle or bill-of-material logic so each bundle sale deducts the correct underlying items and their costs.
This is especially important for:
- festive gift sets
- beauty bundles
- F&B hampers
- subscription boxes
6. Multi-Location Transfers Are Not Recorded Properly
If you use:
- retail outlet
- main warehouse
- third-party fulfilment centre
- pop-up location
then stock transfers must be tracked correctly.
If one location reduces stock but the other side is not recorded properly, your cost and availability data become unreliable.
Example
HQ warehouse sends 100 units to a Johor retail outlet. Ops moves the stock physically, but the system is not updated. Shopify still thinks the warehouse holds those units.
Now online sales may use stock that is already elsewhere, and month-end stock valuation becomes messy.
Better control
Every transfer should have:
- transfer date
- source location
- destination location
- SKU and quantity
- cost basis carried across
- receiving confirmation
A transfer is not just a logistics event. It is an accounting event too.
7. Disposal and Damage Write-Offs Are Delayed
Unsellable stock often stays in the system too long because nobody wants to deal with it.
Common examples:
- expired goods
- damaged returned items
- broken packaging
- obsolete inventory
- discontinued stock
If this stock remains as active inventory, then your closing stock is overstated and future COGS is understated.
That makes margins look healthier than they really are.
Better control
Review damaged and obsolete stock monthly.
If goods are no longer sellable:
- write them off properly
- move them out of active inventory
- document the reason
This is not being negative. It is being honest.
8. Omnichannel Sales Are Not Feeding One Costing Logic
If you sell through:
- Shopify
- Shopee
- TikTok Shop
- wholesale
- retail POS
but your cost system only properly tracks Shopify orders, then your inventory costing is incomplete.
You may have:
- revenue from all channels
- stock movement from some channels only
- manual journals trying to fill the gaps
That leads to:
- wrong stock balances
- weird COGS swings
- clearing accounts that do not tie
Better control
All channels must feed one central inventory movement process.
Omnichannel revenue without omnichannel stock control is a recipe for inaccurate COGS.
How to Build Stronger Inventory Costing With Transaction Integrity
Now let’s move from problems to practical structure.
1. Define One Costing Policy
First, decide what your inventory cost includes.
For example:
- product purchase cost
- freight-in
- import duty
- inward shipping
- packaging, if material and consistent
Document it.
If the warehouse team, purchasing team, and finance team all use different definitions of “cost,” your reports will never align properly.
2. Protect the Receiving Process
Goods receiving is the start of transaction integrity.
Control this carefully:
- count actual quantity received
- inspect condition
- match to PO and supplier documents
- confirm unit cost
- update inventory only after verification
Many COGS problems begin at receiving and only become visible much later.
3. Use Consistent SKU Mapping
One product must have one clear SKU identity across:
- Shopify
- warehouse system
- accounting reports
- marketplaces
- purchasing records
If the same product appears under different names or mismatched codes, costing errors multiply quickly.
4. Separate Return Outcomes Physically and Financially
Returned stock should not all go into one “returns pile”.
Create separate outcomes:
- restockable
- damaged resale
- non-sellable
- disposal
Then make sure the accounting entries reflect those categories.
This improves both stock integrity and COGS accuracy.
5. Restrict Manual Adjustments
Manual inventory entries should be rare, visible, and approved.
At minimum:
- every manual change needs a reason
- every large change needs approval
- every month-end adjustment needs review
This reduces accidental or casual changes that distort COGS.
6. Reconcile Inventory Movements Monthly
Do not only compare closing stock count.
Review the movement chain:
- opening stock
- purchases received
- transfers
- sales
- returns
- write-offs
- adjustments
- closing stock
This helps finance identify where the integrity broke, not just that something is wrong.
7. Align Ops and Finance Reviews
Inventory costing is not a finance-only issue.
Ops controls:
- what physically happens
Finance controls:
- how it is recorded and valued
If those two teams do not review together, inventory integrity weakens fast.
A monthly ops-finance review should cover:
- top stock variances
- damaged and written-off stock
- major returns
- slow-moving or obsolete items
- negative margin SKUs
- unusual manual adjustments
A Practical Example
Let’s say a Shopify seller in Selangor sells insulated tumblers.
Scenario
- 1,000 units received
- system recorded all 1,000 at RM20 each
- actual usable units after inspection = 960
- 40 had dents and cannot be sold as standard stock
If the team records all 1,000 as good inventory, then:
- stock value is overstated by RM800
- future COGS per sale may look fine at first
- later, when the 40 units are written off, one month suddenly shows a big stock loss
- margin appears unstable
Better treatment
At receipt:
- 960 units into saleable inventory
- 40 units into damaged / non-sellable review
- write off or revalue those 40 based on actual recoverable value
Now both inventory and COGS are more accurate from the start.
Suggested Finance Controls for Shopify Inventory Costing
Here is a practical checklist.
Weekly
- review unusual manual stock adjustments
- review major returns and stock treatment
- review negative stock positions
- review top-selling SKUs for stock reasonableness
Monthly
- reconcile opening to closing stock movement
- review purchase cost updates
- review damaged and obsolete stock
- review bundle component deductions
- review multi-location transfers
- test a few sales and returns end-to-end
Quarterly
- test landed cost logic
- review costing method consistency
- review channel integration completeness
- review stock write-off trends
These are not glamorous controls, but they stop ugly surprises later.
Common Mistakes to Avoid
Let’s make these very direct.
Mistake 1: Trusting system stock blindly
System stock is only as good as the transactions feeding it.
Mistake 2: Updating selling prices but not cost prices
Then gross margin analysis becomes misleading.
Mistake 3: Refunding customers without proper stock outcome tracking
Then COGS and inventory drift apart.
Mistake 4: Treating bundles as one item only
Then component cost and stock remain wrong.
Mistake 5: Delaying write-offs
Then stock value looks stronger than reality.
Mistake 6: Letting every staff member adjust stock casually
Then transaction integrity disappears quietly.
Final Thoughts
Shopify inventory costing is not only about choosing a cost method.
It is really about whether your stock transactions are:
- captured correctly
- approved properly
- valued consistently
- linked across operations and finance
That is what transaction integrity means.
If transaction integrity is weak, your COGS will be weak too.
And when COGS is weak, your gross margin becomes a story instead of a fact.
The fix is not complicated, but it does require discipline:
- receive stock properly
- update cost accurately
- control manual adjustments
- classify returns correctly
- track bundles and transfers properly
- review damaged and obsolete stock on time
Do that, and your Shopify COGS becomes much more reliable.
And when management asks,
“Are these margins real?”
finance can say,
“Yes.”
Which is a much nicer answer than,
“More or less.”
