Inventory accounting journal entries are the bookkeeping records that move dollars between Inventory, COGS, AP, and cash as stock flows through a Shopify business. This tutorial walks through the exact entries DTC brands post for sales, refunds, 3PL receipts, shrinkage, transfers, and landed cost true-ups using a perpetual system.

1Key Takeaways

  • Perpetual inventory is the only practical system for scaling Shopify brands. Inventory and COGS update with every order.
  • Each Shopify sale generates two paired entries: one for revenue and the Shopify Payments receivable, one for COGS and the Inventory reduction.
  • 3PL receiving discrepancies, landed cost true-ups, and shrinkage write-offs are the three entries most Shopify books get wrong.
  • Month-end COGS should reconcile units sold in Shopify to the inventory drop recorded in QuickBooks or Xero.
  • Tools like Bookkeep, Cin7, and ShipBob feed the data, but a bookkeeper still owns the journal logic.

2What You'll Need

  • Shopify admin access with reports permission
  • QuickBooks Online or Xero with a properly structured chart of accounts
  • 3PL receiving reports (ShipBob, ShipMonk, or in-house WMS)
  • Landed cost data per SKU (freight, duty, customs broker fees)
  • Monthly inventory valuation report from your IMS or 3PL
  • A revenue sync tool like Bookkeep or the A2X documentation for Shopify accounting workflow
  • Supplier invoices and freight forwarder bills for the period

3What Is an Inventory Accounting Journal Entry?

An inventory accounting journal entry is a double-entry bookkeeping record that updates the Inventory asset account when stock moves through the business. Every entry has equal debits and credits. The offsetting account depends on the event: AP for a purchase, COGS for a sale, an expense account for shrinkage, or a transfer account for inter-warehouse moves.

Under perpetual inventory, the books update in real time. Under periodic inventory, the books only update at month-end after a physical count. The AICPA GAAP overview describes both methods as acceptable under the AICPA GAAP overview, but in our work with 100+ Shopify brands, periodic accounting is rare past $1M in revenue. The visibility gap is too painful.

Perpetual vs. periodic at a glance

DimensionPerpetualPeriodic
When COGS hits the booksAt the moment of saleOnly at period-end
Inventory account balanceAlways currentStale until count
Margin visibilityDaily / weeklyMonthly at best
Best fit for ShopifyYes — standard for DTCRare, only sub-$500K brands
Tools that support itCin7, ShipBob, ShipMonk, QBO, XeroSpreadsheet-driven only

Takeaway: most Shopify brands operate perpetual whether they realize it or not, because their 3PL and Shopify report inventory in real time. The bookkeeping just needs to match that reality. For a deeper structure layer, see our chart of accounts playbook.

4Set Up the Chart of Accounts for Inventory

Before posting entries, the chart of accounts needs the right inventory-side accounts. The typical Shopify setup includes Inventory on Hand (current asset), Inventory in Transit, Accrued Freight & Duty, COGS - Product, COGS - Freight In, and Inventory Shrinkage. Sub-accounts per warehouse or SKU class are optional but useful for brands using multiple 3PLs.

  • 1300 Inventory on Hand — units physically at the 3PL or warehouse
  • 1310 Inventory in Transit — units paid for but not yet received
  • 2110 Accrued Freight & Duty — costs incurred but not yet invoiced
  • 5000 COGS - Product — landed cost of units sold
  • 5010 COGS - Freight Out — outbound shipping (a separate question from inventory)
  • 5900 Inventory Shrinkage — write-offs for damage, loss, count variance

You'll know this worked when every inventory event in the business has a clear home. If a freight forwarder invoice arrives and the bookkeeper has to ask 'where does this go,' the COA is missing an account.

5Record a Shopify Sale (Revenue Side and COGS Side)

Every Shopify sale generates two journal entries. The first records revenue and the Shopify Payments receivable. The second records COGS and reduces Inventory. Most brands batch these daily or per payout using a tool like Bookkeep, which we use for the 100+ Shopify stores Ottit closes books for monthly.

Example: 100 units of a $40 candle sell on 2026-06-08. Landed cost is $9.50 per unit. Shopify Payments processing fee is 2.9% + $0.30 per transaction. For simplicity, assume one payout batch.

Revenue entry (Shopify Payments payout)
DRShopify Payments Clearing$3,854.00
DRMerchant Processing Fees$146.00
CRSales Revenue$4,000.00
Shopify orders 2026-06-08, 100 units @ $40, net of 2.9% + $0.30 fees
COGS entry (inventory drop)
DRCOGS - Product$950.00
CRInventory on Hand$950.00
100 units shipped at $9.50 landed cost

The Shopify Payments Clearing balance gets cleared when the actual bank deposit lands, typically 1-3 business days later. That second leg is a simple bank-to-clearing entry. For the full deposit reconciliation flow, see our Shopify bank reconciliation walkthrough.

You'll know this worked when gross margin for the day equals revenue minus COGS — $4,000 minus $950, or $3,050 — and the Inventory on Hand balance drops by exactly $950.

6Book a Shopify Refund and Restock

Refunds reverse the original revenue entry. If the inventory returns sellable, COGS also reverses and Inventory goes back up. If the unit comes back damaged, COGS stays booked and the unit moves to a damaged-inventory or shrinkage account instead. The accounting treatment hinges on whether the unit can be resold.

Example: a customer returns 2 candles from the prior order. Both come back sellable.

Refund entry (sellable return)
DRSales Returns & Allowances$80.00
CRShopify Payments Clearing$77.08
CRMerchant Processing Fees$2.92
Refund 2 units, processing fee partially refunded by Shopify
Restock entry
DRInventory on Hand$19.00
CRCOGS - Product$19.00
2 units returned to sellable inventory at $9.50 landed cost

If the units came back damaged, the restock entry would debit Inventory Shrinkage instead of Inventory on Hand. We covered that pattern in detail in our inventory shrinkage accounting fix.

7Record a PO Receipt with 3PL Discrepancy

A common scenario: the supplier invoices for 5,000 units, but the 3PL receives 4,985. The 15-unit gap could be damage in transit, miscount, or theft. The supplier still expects payment for 5,000. The accounting needs to recognize the AP, the actual inventory received, and the variance.

Example: PO for 5,000 candles at $7.00 per unit ex-factory ($35,000). 3PL receives 4,985. Freight and duty add $2.50 per unit in landed cost, allocated based on received units.

Landed cost allocation
Supplier invoice (5,000 units × $7.00)$35,000.00
Freight and duty (accrued)$12,462.50
Total landed cost$47,462.50
Units actually received4,985
Inventory value booked (4,985 × $9.52)$47,457.20
Shrinkage variance (15 units × $9.52)$142.80
PO receipt with discrepancy
DRInventory on Hand$47,457.20
DRInventory Shrinkage$142.80
CRAccounts Payable - Supplier$35,000.00
CRAccrued Freight & Duty$12,600.00
PO-2026-0421 receipt, 4,985 of 5,000 units received at 3PL

Note the total debits match total credits at $47,600. The 15-unit shortfall hits the P&L immediately as shrinkage rather than inflating Inventory. You'll know this worked when the Inventory on Hand subledger matches the 3PL's on-hand count for that SKU.

8Post a Landed Cost True-Up Entry

Landed cost true-ups happen when freight forwarder, customs broker, or duty invoices arrive after the PO was received. The accrual posted at receipt is rarely exact. The true-up entry adjusts Inventory (for units still on hand) or COGS (for units already sold) to the correct landed cost.

Example: the freight forwarder invoices $13,100 against the $12,600 accrued. The $500 variance needs to land somewhere. By month-end, 1,200 of the 4,985 units have sold and 3,785 remain on hand.

True-up allocation
Actual freight invoice$13,100.00
Accrued at receipt$12,600.00
Total variance$500.00
Variance allocated to COGS (1,200/4,985)$120.36
Variance allocated to Inventory (3,785/4,985)$379.64
Landed cost true-up
DRInventory on Hand$379.64
DRCOGS - Product$120.36
DRAccrued Freight & Duty$12,600.00
CRAccounts Payable - Freight Forwarder$13,100.00
True-up freight invoice FF-9921 against PO-2026-0421 accrual

For the full process of identifying which costs belong in landed cost, see our landed cost playbook for Shopify brands. You'll know the true-up worked when the Accrued Freight & Duty account zeros out for that PO.

9Reconcile Month-End COGS to Shopify Units Sold

The month-end check most brands skip: tying units sold per Shopify to the inventory drop recorded in QuickBooks or Xero. If Shopify shows 8,400 units sold in May but Inventory on Hand only dropped by the equivalent of 8,200 units, there's a 200-unit gap. That gap is either unposted COGS, unrecorded shrinkage, or a sync error.

The reconciliation flow looks like this:

  1. Pull total units sold from Shopify's Sales by Product report for the month.
  2. Pull the period's COGS entries from QBO or Xero by SKU or product class.
  3. Divide COGS dollars by weighted-average landed cost to get implied units sold.
  4. Compare implied units to Shopify units. Investigate any gap over 1-2%.
  5. Pull the 3PL inventory valuation report and reconcile ending Inventory on Hand.

If the books use the QuickBooks Online help center native inventory module, this reconciliation runs against the QBO inventory valuation summary. For brands on Xero, see the Xero Central help center for inventory item reports. Most scaling brands run inventory in a dedicated IMS like Cin7 instead and treat QBO or Xero as the financial layer only.

Takeaway: if month-end COGS isn't reconciled to Shopify units, the gross margin number on the P&L is a guess. We see this fixed reconciliation tie out gross margin to within 0.5% across most of our clients.

10Record an Inter-Warehouse Transfer

Brands using two or more 3PLs need to move inventory between locations. The transfer itself doesn't affect total Inventory on Hand — it only moves dollars between sub-accounts. Freight on the transfer can either capitalize into landed cost (if material) or expense to COGS - Freight (if minor).

Inter-warehouse transfer
DRInventory on Hand - West 3PL$8,550.00
CRInventory on Hand - East 3PL$8,550.00
Transfer 900 units @ $9.50 from East to West for fulfillment balance

If freight to move the units was $280 and the brand chooses to expense it, that's a separate entry debiting COGS - Freight and crediting AP or cash. You'll know this worked when both sub-accounts adjust and total Inventory on Hand stays unchanged.

11Common Mistakes Shopify Brands Make

  • Booking gross revenue instead of net of processing fees — the Shopify Payments deposit is already net. Booking the gross amount and ignoring fees overstates revenue and miscategorizes the bank deposit.
  • Skipping the COGS entry until month-end — this works in periodic but breaks perpetual. Daily or per-payout COGS entries via Bookkeep or A2X keep margin visible all month.
  • Capitalizing only the FOB cost into Inventory — freight, duty, customs broker fees, and inbound insurance all belong in landed cost. Expensing them inflates current-period costs and understates inventory.
  • Ignoring 3PL receiving discrepancies — the AP gets paid in full but the inventory short shows up months later in a count. Booking the variance at receipt catches the issue early.
  • Not reconciling Shopify units to QBO COGS units — without this check, margin reporting is unreliable. The reconciliation should run every single month-end close.

12Troubleshooting

Inventory on Hand balance is negative

Negative inventory usually means COGS was posted before the corresponding PO receipt. This happens when stock arrives at the 3PL but the receipt entry didn't post in QBO or Xero yet. Fix: pull the 3PL receiving log for the period and post the missing PO receipts. The balance should recover.

Gross margin swings 5%+ month over month

Margin volatility usually traces to landed cost timing. Freight invoices arrive late, then a big true-up hits one month's COGS. Fix: accrue freight and duty at receipt based on a per-unit estimate, then true up monthly. Smoothed accruals stabilize margin reporting.

Accrued Freight & Duty balance keeps growing

If this account grows month over month and never clears, freight invoices aren't being matched back to the original accrual. Fix: tag every accrual with a PO number, then clear it when the invoice posts. Anything aged past 90 days needs investigation — the supplier may not be invoicing, or the receiving team booked the accrual but forgot the bill.

13FAQ

What is an inventory accounting journal entry?

An inventory accounting journal entry is a double-entry record that updates the Inventory asset account and an offsetting account (AP, COGS, cash, or an expense account) when stock is purchased, sold, transferred, written off, or adjusted. Every entry has equal debits and credits.

How do you record COGS in a perpetual system?

At the moment of sale, debit COGS for the landed cost of the units sold and credit Inventory on Hand for the same amount. Revenue and the Shopify Payments receivable post as a separate paired entry. Together, the two entries complete the sale.

Why use Bookkeep for Shopify revenue posting?

Bookkeep posts daily summarized journal entries from Shopify into QuickBooks or Xero, broken out by revenue, fees, taxes, and gift cards. It's the tool we use for the 100+ Shopify stores Ottit closes books for monthly because the entries reconcile cleanly to payouts and the audit trail holds up.

Should freight be capitalized or expensed?

Inbound freight on inventory purchases is capitalized into landed cost and flows through Inventory until the units sell. Outbound freight to customers is expensed to COGS - Freight Out or a separate Shipping Expense account in the current period.

How are inventory write-offs recorded?

Inventory write-offs debit an expense account like Inventory Shrinkage or Obsolete Inventory and credit Inventory on Hand for the landed cost of the written-off units. Material write-offs may require disclosure, depending on the brand's financial reporting requirements.

Is a CPA needed for inventory journal entries?

Mechanical entries can be handled by a competent bookkeeper. A CPA becomes important for inventory valuation methods (FIFO vs. weighted-average), tax treatment of write-offs, Section 263A capitalization, and audit-ready documentation. The rules described here are general; specific situations should be reviewed with a CPA.

14Sources