Last month I had one of those “oh no” moments that keeps bookkeepers up at night.
I was doing a quarterly review for one of my Austin-based clients—a small retailer importing home goods, mostly from Vietnam and China. She’d been faithfully recording everything in Beancount since we migrated her off QuickBooks two years ago. Revenue looked fine. Margins looked… not fine. Like, suspiciously not fine.
I dug in, and here’s what I found: she was booking tariff payments as a flat expense line under Expenses:Import-Fees. Just lumping everything together—customs duties, harbor maintenance fees, merchandise processing fees, the works. Her COGS looked artificially low, her expense ratios looked bloated, and when she went to her bank for a line of credit, the banker flagged her financials as “inconsistent with industry norms.”
That was the wake-up call. And honestly? I checked my other import-heavy clients and half of them had the same problem.
The Scale of What We’re Dealing With
If you haven’t been following the tariff situation closely, the numbers are staggering. Small businesses importing goods are now paying an average of $11,400 per month in tariff-related costs, according to the National Small Business Association’s 2026 Trade Impact Survey. That’s roughly triple the ~$3,800 monthly average from early 2024. Chinese goods face an effective combined tariff rate of around 145%. The average US tariff rate across all trading partners is sitting at approximately 17%—highest since Smoot-Hawley in the 1930s.
61% of small businesses report negative tariff impact. 43% importing from China say tariff costs now exceed 10% of their total COGS. This isn’t a rounding error anymore. This is a line item that deserves serious accounting attention.
The Wrong Way (What My Client Was Doing)
2026-03-15 * "Shenzhen Home Goods Co" "Q1 home goods shipment"
Assets:Inventory:HomeGoods 15,000.00 USD
Expenses:Import-Fees 4,200.00 USD
Assets:Bank:Checking -19,200.00 USD
This is wrong for two reasons. First, under GAAP (ASC 330-10-30-1), tariff costs must be capitalized into inventory, not expensed immediately. They flow to COGS only when that inventory is actually sold. Second, you’ve got zero visibility into what’s driving your landed cost. Is it the base product cost? Duties? Freight? You can’t manage what you can’t see.
The Right Way (What We Migrated To)
2026-03-15 * "Shenzhen Home Goods Co" "Q1 home goods shipment - ceramic planters"
hts-code: "6914.90.8000"
country-of-origin: "CN"
duty-rate: "25%"
section301-rate: "7.5%"
shipment-id: "SHZ-2026-0342"
Assets:Inventory:HomeGoods:BaseCost 12,000.00 USD
Assets:Inventory:HomeGoods:Duty:Standard 3,000.00 USD
Assets:Inventory:HomeGoods:Duty:Section301 900.00 USD
Assets:Inventory:HomeGoods:Freight 480.00 USD
Assets:Inventory:HomeGoods:CustomsBrokerage 320.00 USD
Liabilities:AccountsPayable:ShenzhenHG -12,000.00 USD
Assets:Bank:Checking -4,700.00 USD
Then when we sell through:
2026-04-02 * "Sale of ceramic planters - Invoice #4521"
Assets:AccountsReceivable 8,400.00 USD
Income:Sales:HomeGoods -8,400.00 USD
2026-04-02 * "COGS for ceramic planters - Invoice #4521"
Expenses:COGS:HomeGoods:BaseCost 2,400.00 USD
Expenses:COGS:HomeGoods:Duty 780.00 USD
Expenses:COGS:HomeGoods:Freight 96.00 USD
Expenses:COGS:HomeGoods:Brokerage 64.00 USD
Assets:Inventory:HomeGoods:BaseCost -2,400.00 USD
Assets:Inventory:HomeGoods:Duty:Standard -600.00 USD
Assets:Inventory:HomeGoods:Duty:Section301 -180.00 USD
Assets:Inventory:HomeGoods:Freight -96.00 USD
Assets:Inventory:HomeGoods:CustomsBrokerage -64.00 USD
Yes, it’s more verbose. Beancount doesn’t mind verbose. That’s the whole point.
The Cash Flow Timing Problem Nobody Talks About
Here’s the thing that’s quietly killing small importers: 38% report cash flow problems specifically from tariff payments. You pay duties when goods clear customs, but you don’t sell those goods for weeks or months. My client was paying $4,200 in duties upfront on inventory she wouldn’t fully sell through for 90 days. That’s a cash flow gap that doesn’t show up if you’re just looking at a P&L.
With the decomposed chart of accounts above, I can run a quick query to see exactly how much cash is trapped in duty-related inventory at any point in time. That number has been the difference between my clients understanding why their bank account feels tight versus panicking about it.
The Metadata Is the Secret Weapon
Those hts-code and country-of-origin metadata tags aren’t just for show. When tariff rates change (and they change constantly—we’ve had three adjustments in the last six months alone), you need to be able to quickly identify which inventory lots are affected. One of my clients was able to reclassify some products under a different HTS code and save about $800/month. We only spotted the opportunity because we had clean data.
I’ll be honest—I learned most of this the hard way. I spent a decade doing restaurant books where the most complicated import was a case of olive oil from Italy. The tariff landscape in 2026 is a different animal entirely.
So I’m curious: how are the rest of you handling tariff costs in your Beancount setups? Anyone tracking country-of-origin at the transaction level? Has anyone built custom importers for customs broker statements? I’ve got 20+ clients and I feel like I’m reinventing the wheel with each one.