Beancount.io LogoBeancount.io

E-Commerce Inventory Accounting With 3PLs and Multi-Channel Fulfillment

14 min readMike ThriftMike Thrift
E-Commerce Inventory Accounting With 3PLs and Multi-Channel Fulfillment

The average Amazon seller loses between $1,500 and $3,000 every year to unclaimed reimbursements and reconciliation errors. Multi-channel sellers running on Amazon, Shopify, Walmart, and eBay simultaneously can see unreconciled deposits-in-transit swell past $500,000 if nobody is watching the settlement reports. Yet most e-commerce founders treat inventory accounting as an afterthought — until a year-end audit reveals that the balance sheet has drifted by tens of thousands of dollars from physical reality.

The problem isn't a lack of sophistication. Modern e-commerce operators juggle multiple warehouses, third-party logistics providers (3PLs), Fulfillment by Amazon (FBA) fulfillment centers, in-transit inventory, and marketplace fees that are deducted before a dollar ever hits the operating account. Every one of those touchpoints is an opportunity for the accounting records to diverge from the truth. This guide walks through how to keep them aligned: how to calculate true landed cost, how to track inventory across distributed locations, how to reconcile marketplace settlements line by line, and how to prevent the phantom cost-of-goods-sold adjustments that accountants discover in the closing pile every January.

Why E-Commerce Inventory Accounting Is Fundamentally Different

Traditional retail inventory accounting assumes a simple model: you buy goods, store them in one warehouse, sell them through one channel, and recognize cost of goods sold when the customer pays. Almost nothing about that model survives contact with a modern direct-to-consumer brand.

A typical mid-sized e-commerce business might hold 2,000 units in its primary warehouse, 1,500 units across multiple FBA regional fulfillment centers, 1,000 units at a 3PL servicing Shopify orders, and another 500 units in transit on an ocean vessel from a supplier in Vietnam. Every one of those units has a different physical location, a different cost basis (depending on which shipment it came in on), and a different probability of becoming damaged, lost, or aged-out before sale.

Layered on top of physical complexity is financial complexity. Amazon takes referral fees, FBA fulfillment fees, storage fees, long-term storage surcharges, and disposal fees out of gross sales before the seller sees a deposit. Shopify orders running through MCF (Multi-Channel Fulfillment) incur a different fee structure entirely. Each marketplace settles on its own cadence — Amazon typically every 14 days, Shopify daily, Walmart twice a month — and each settlement report contains hundreds or thousands of line items that need to be matched against the operating bank account and broken into the right ledger accounts.

The result is that simple bookkeeping shortcuts that work for a small retailer — recording net deposits as revenue, treating shipping as an expense, lumping FBA fees into "fees and services" — silently destroy the accuracy of the financial statements. By the time the founder asks "why does our gross margin keep slipping?", the answer is buried under a year of compounded misclassifications.

Landed Cost: Getting the Cost Side Right Before Anything Else

The first and most consequential decision an e-commerce operator makes about inventory accounting is what counts as the "cost" of an item. Generally Accepted Accounting Principles (GAAP) require that inventory be carried at the full cost of getting it to the point of sale, which includes:

  • Supplier invoice price (the most obvious component)
  • International freight (ocean, air, or trucking from origin)
  • Customs duties and tariffs (often 5–25% depending on country and HTS code)
  • Import broker and clearance fees
  • Insurance during transit
  • Domestic freight from port to warehouse
  • Handling, palletization, and prep fees
  • Inbound 3PL receiving fees

This bundle is called the landed cost, and for many imported goods it represents 15–30% more than the supplier invoice price alone. A founder who treats only the supplier price as COGS will systematically overstate gross margin, under-cost replenishment decisions, and eventually face a painful inventory write-up at year end when the auditor reclassifies the freight expense.

Allocating Shared Costs Across SKUs

The hard part isn't recognizing that freight matters — it's deciding how to split a single freight bill across multiple SKUs in the same shipment. Four common allocation methods exist:

  1. By unit count. Divide total freight evenly by the number of units. Simple but wrong when units differ wildly in size or value.
  2. By weight. Allocate based on the physical weight of each SKU. Best for ocean freight, where pricing usually correlates to weight or volume.
  3. By volume (cubic meters). Better than weight for bulky, lightweight items that take up disproportionate container space.
  4. By value. Allocate based on each SKU's invoice value as a percentage of the total. Conceptually clean and matches how customs duties are typically calculated.

A practical compromise that works for most importers is value-based allocation for duties (since duties are themselves percentage-of-value) and volume-based allocation for freight (since carriers charge by space). Pick one method per cost category, document it, and apply it consistently — auditors care more about consistency than about which method you picked.

Recording Landed Cost in the Books

The journal entry pattern for landed cost is straightforward but easy to botch. Suppose you receive a shipment with $50,000 of supplier invoice value, $8,000 of freight, $3,500 of duties, and $1,000 of customs broker fees. The correct entry is:

Dr. Inventory          $62,500
   Cr. Accounts Payable        $50,000   (supplier)
   Cr. Accrued Freight          $8,000   (carrier)
   Cr. Accrued Duties           $3,500   (customs)
   Cr. Accrued Brokerage        $1,000   (broker)

The common mistake is to debit "Freight Expense" instead of "Inventory" for the $8,000. That immediately recognizes a cost that should have been capitalized into inventory and released through COGS as the units sell. Over a quarter, this mistake can understate inventory by six figures.

Tracking Inventory Across Locations: The Multi-Warehouse Reality

Once landed cost is locked in per unit, the next problem is keeping track of where those units physically are. For a multi-channel seller, a SKU might exist simultaneously across:

  • The company's own warehouse or office
  • A domestic 3PL servicing the direct-to-consumer Shopify channel
  • Multiple Amazon FBA fulfillment centers (sometimes 30+)
  • Walmart Fulfillment Services (WFS) warehouses
  • Goods in transit from supplier
  • "Reserved" inventory: units committed to orders but not yet shipped

Each location needs its own ledger sub-account so the balance sheet can reconcile to physical counts. Treating "inventory" as one bucket is the single most common cause of audit drift, because errors in one location offset errors in another and become impossible to investigate after the fact.

The FBA Reserved Inventory Trap

Amazon's inventory dashboard distinguishes between "Fulfillable" units (sitting in a warehouse, ready to ship), "Reserved" units (allocated to a customer order, in fulfillment-center transfer, or in a temporary processing state), "Inbound" units (en route to FBA from the seller), "Researching" units (Amazon is investigating a discrepancy), and "Unfulfillable" units (damaged, defective, or stranded).

For accounting purposes, all of these are still your inventory — they sit on your balance sheet at their landed cost — but they have different risk profiles. "Researching" units often turn into write-offs or reimbursements; "Unfulfillable" units almost always do. Sellers who lump everything into a single "FBA inventory" account miss the signal that a few thousand dollars of inventory has been quietly stranded for sixty days and is approaching the reimbursement claim deadline.

A cleaner chart-of-accounts treatment splits FBA inventory into at least three sub-accounts:

  • Inventory — FBA Fulfillable
  • Inventory — FBA In-Transit/Reserved
  • Inventory — FBA Unfulfillable/Researching

This makes aging analysis trivial and turns reimbursement claims into a routine monthly process rather than a panicked year-end scramble.

Inbound and In-Transit Inventory

Inventory that's been paid for but hasn't yet been received needs to live somewhere on the balance sheet. The cleanest treatment is a dedicated "Inventory in Transit" account, debited when the supplier ships and credited (with a matching debit to "Inventory — Warehouse") when the goods arrive. Keeping in-transit goods separate prevents two distinct mistakes: recognizing goods you don't yet own as available stock, and forgetting about goods that take eight weeks to cross the Pacific.

Marketplace Settlements: Where Cash Hides

A common founder belief is that revenue equals the sum of bank deposits from Amazon. It does not. Amazon's deposit is the net of gross sales minus referral fees, FBA fulfillment fees, FBA storage fees, FBA inbound transportation fees, returns, refunds, chargebacks, advertising spend (if you're enrolled in Amazon's hold-back system), promotional rebates, and a half-dozen other categories. Recording only the net deposit as revenue makes the income statement useless.

What a Settlement Reconciliation Actually Looks Like

A proper marketplace settlement reconciliation has three steps:

  1. Decompose the settlement report. Amazon's settlement report is downloadable from Seller Central in CSV or XML form. It contains every transaction in the settlement period, each tagged with a type (Order, Refund, FBA Inventory Fee, Service Fee, Adjustment, etc.).
  2. Map each transaction type to a ledger account. Orders flow to gross revenue; referral fees flow to "Marketplace Commission Expense"; FBA fulfillment fees flow to "Fulfillment Expense"; storage fees flow to "Storage Expense"; returns flow as contra-revenue; refunded fees flow as contra-expense.
  3. Match the net total to the bank deposit. The sum of all the components in the settlement report should equal the cash deposit posted to the operating account (within a few cents of rounding). If it doesn't, there's a missing transaction type or a misclassified fee.

The discipline that makes this work is not collapsing fees into gross margin. Referral fees, fulfillment fees, and storage fees are variable expenses that come after gross margin in the contribution-margin waterfall. Putting them above gross margin makes Amazon's gross margin look worse than Shopify's even when the unit economics are identical, and it destroys the comparability that founders need to make channel-mix decisions.

The "Write Off the Difference" Anti-Pattern

When a bookkeeper can't make a settlement reconcile to the penny, the tempting shortcut is to plug the difference into a generic "Marketplace Adjustments" account. Across four channels and twelve months, those small write-offs routinely add up to five-figure shortfalls. The discipline that prevents this is a hard rule: every settlement must reconcile to the deposit within $5, and any larger discrepancy gets investigated and documented before the books close for the month. Reimbursement claims for lost or damaged FBA inventory typically have a 60-day claim window, so an unexplained discrepancy is often a reimbursement opportunity slipping through the cracks.

Phantom COGS at Year-End: The Negative Inventory Problem

The most insidious year-end inventory issue comes from what NetSuite users call "phantom COGS." It happens when the accounting system records a sale (and a corresponding COGS entry) at a moment when the on-hand inventory in the system is at or below zero. The system can't post a real COGS amount, so it posts a placeholder — sometimes zero, sometimes a stale cost from a prior period. Weeks or months later, an inventory adjustment finally brings the on-hand quantity positive, and the system "trues up" by posting a catch-up COGS entry, often with a cost that bears no relationship to the original sale.

These phantom adjustments compound silently throughout the year. By December, the year-to-date COGS line on the income statement might be off by tens of thousands of dollars in either direction, gross margin trends look erratic, and the inventory balance on the balance sheet has quietly drifted away from the physical count.

Preventing Negative Inventory in the First Place

The structural fix is to prevent inventory from going negative in the system. That means:

  • Reconciling inbound shipments promptly. When FBA receives a shipment, the seller dashboard shows units received, but unless the operator records the receipt in their accounting system, the system thinks those units are still in transit.
  • Posting marketplace fulfillments in real time. A daily Amazon-to-accounting sync (via tools like A2X, Webgility, Link My Books, or Entriwise) prevents the multi-week lag that lets sales outrun on-hand quantities.
  • Treating commingled inventory carefully. Amazon's commingled inventory program (where your SKUs are pooled with other sellers' identical SKUs) creates timing issues that look like negative inventory even when the physical reality is fine. The cleanest answer is to opt out of commingling for any SKU where quality control matters.

Year-End Inventory Count and True-Up

Even with perfect daily hygiene, the only way to confirm that the books match physical reality is a year-end inventory count. Counts should happen at every storage location:

  • Physical count at the company warehouse
  • Inventory report download from Amazon Seller Central (Inventory Ledger report)
  • Inventory report download from the 3PL's portal
  • Confirmation of in-transit quantities from supplier and freight forwarder

The total should match the inventory line on the balance sheet. Where it doesn't, the difference is investigated; what can't be explained is written off as shrinkage with a journal entry to "Inventory Shrinkage Expense." Shrinkage above 2% of inventory value usually signals a process problem (theft, miscounts at the 3PL, or persistent FBA reimbursement gaps) rather than a one-off discrepancy.

Costing Methods: FIFO, Weighted Average, and Why Most E-Commerce Sellers Should Pick Weighted Average

GAAP allows three primary inventory costing methods: First-In-First-Out (FIFO), Last-In-First-Out (LIFO), and Weighted Average. LIFO is rarely used outside of the U.S. and is incompatible with International Financial Reporting Standards, so the practical choice is between FIFO and weighted average.

FIFO matches the oldest inventory cost to the next unit sold. It produces the most accurate gross margin during periods of stable costs but requires the system to track each batch's cost separately and assign sales to the oldest batch first.

Weighted average recalculates a blended cost per unit every time a new shipment is received. It's mathematically simpler, plays well with commingled FBA inventory (where physical batches are indistinguishable anyway), and is the default in most modern e-commerce accounting tools.

For most direct-to-consumer brands selling consumer goods at moderate volume, weighted average is the right answer. It's good enough for accurate financial statements, easy to automate, and resilient to the kind of inbound/outbound timing noise that's endemic to multi-channel operations. FIFO is worth the additional complexity only when product cost is highly volatile (lithium, semiconductors, certain agricultural commodities) or when the operator needs to track lot or expiration data for compliance reasons.

Channel Profitability: The Final Payoff of Doing This Right

The reason all of this discipline matters is that an e-commerce business cannot make good growth decisions without accurate channel P&Ls. Should you push more inventory into FBA or into your 3PL? Is your Shopify channel actually more profitable than Amazon, or does Shopify just look better because the books are hiding FBA fees in the wrong account? Is wholesale subsidizing direct-to-consumer, or the other way around?

Answering those questions requires a chart of accounts that separates revenue, returns, COGS, fulfillment expenses, marketplace fees, and advertising spend per channel. Most modern accounting platforms support this through a combination of classes, locations, departments, or tags — the exact mechanism varies by tool, but the principle is the same: every transaction should be tagged with the channel it originated from, and the income statement should be filterable by channel.

The payoff is significant. Operators who maintain clean channel-level P&Ls routinely discover that their "best" channel is actually their worst on a contribution-margin basis, or that a small, unloved channel is throwing off oversized cash flow per dollar of working capital. Those insights only show up when the underlying data is clean — which is to say, when landed cost is correctly allocated, settlements are correctly reconciled, and phantom COGS is prevented from polluting the picture.

Keep Your Inventory Books Tight from Day One

Accurate inventory accounting is the difference between knowing your business and guessing about it. As your operation grows across warehouses, fulfillment centers, and marketplaces, the only sustainable way to keep the books aligned with physical reality is a system that's transparent, auditable, and version-controlled. Beancount.io provides plain-text accounting designed for exactly that — every transaction is a readable, diff-able record, every account hierarchy maps cleanly to multi-location inventory tracking, and your historical data is yours forever with no vendor lock-in. Get started for free and see why finance teams running complex multi-channel operations are switching to plain-text accounting.