COGS posts the moment a box leaves the warehouse. Not when it's invoiced. Not at month-end.
No manual journal entries, no month-end true-up. The cost of goods sold journal entry happens automatically, tied to the physical moment stock leaves the building - completely independent of invoicing or payment timing.
Reading time: 6 min | Best for: distributors, manufacturers, multichannel sellers with physical inventory | Setup time: 30-60 minutes per product category
COGS shouldn't depend on someone remembering to post it.
In a lot of systems, cost of goods sold is a month-end exercise: someone pulls a shipment report, calculates cost manually, and posts a journal entry - usually weeks after the goods actually shipped. Until that happens, margin reporting is wrong, and nobody necessarily knows by how much.
The fix isn't a better spreadsheet. It's tying the COGS entry directly to the moment that actually matters: when stock physically leaves the warehouse.
If COGS only posts at month-end, every report run mid-month is wrong by construction.
Hand-calculated journal entries depend on someone remembering to do them, correctly, every time.
If COGS is tied to invoicing instead of shipment, prepaid or delayed-invoice orders post cost at the wrong time entirely.
One trigger. The moment goods physically leave.
MurrCloud posts the COGS journal entry at exactly one point in the order lifecycle: delivery validation - not order confirmation, and not invoicing. That single rule keeps cost reporting tied to physical reality instead of paperwork timing.
Three settings have to be right. All three, every category.
Automatic COGS depends on three configuration points lining up. Get all three right on a product category, and shipments in that category post cost automatically, forever - no journal entries required.
| Setting | Required value |
|---|---|
| Inventory Valuation | Automated (not Manual) |
| Costing Method | Average Cost (AVCO) |
| Expense Account | 500000 - Cost of Goods Sold |
Five accounts. Each with one job.
Behind automatic COGS sits a small, deliberate set of GL accounts. Revenue and cost are kept fully separate, and two interim accounts absorb the timing gap between physical movement and financial reconciliation.
| Account | Code | Role |
|---|---|---|
| Income Account | 400000 | Default revenue account, remapped per channel by fiscal position. |
| Expense Account | 500000 | Cost of Goods Sold - every delivery posts here, regardless of channel or warehouse. |
| Stock Valuation Account | 110100 | Balance sheet asset - value of inventory currently on hand. |
| Stock Input Account | 110200 | Interim account for goods received but not yet fully processed. |
| Stock Output Account | 110300 | Interim account for goods shipped but not yet invoiced or reconciled. |
From confirmed order to posted journal entry, with no manual steps.
One COGS account. Channel differentiation lives in revenue, not cost.
Cost of goods sold posts based on physical shipment - not on which channel's invoice triggered it. When an order for an Amazon customer ships, COGS hits the same single account using AVCO at that moment, regardless of channel or warehouse.
This is intentional, and it's consistent with how channel contribution margin reporting is structured: a single shared COGS account, with channel and revenue differentiation handled entirely through fiscal position-driven revenue routing - not by splitting cost across separate channel-specific COGS accounts.
Partial shipments, returns, and backorders - all handled correctly.
| Case | Behavior |
|---|---|
| Partial deliveries | Each delivery validation posts its own COGS entry independently, using whatever the AVCO unit cost is at that moment. If average cost changed between batches, the two shipments may post at slightly different unit costs - this is correct AVCO behavior, not an error. |
| Returns | When a customer return is received back into stock, the reverse entry posts (debit Stock Valuation, credit COGS), and the returned units re-enter the AVCO pool - unless routed through a repair quarantine first. |
| Backorders | If a delivery validates with less than the full ordered quantity, only the shipped quantity's COGS posts at that time. The backorder's COGS posts separately, automatically, whenever it eventually ships. |
See real-time COGS, not month-end COGS.
Book a 30-minute walkthrough and we'll map your product categories and accounts to automatic COGS.
Book a Demo Read: Landed Cost & COGS