Tariff Chaos 2026: How Are You Tracking Landed Costs and Tariff Duties in Beancount When Rates Change Every Week?

Three of my clients are in full-on panic mode right now. Between the 145% China tariffs, the baseline 10% reciprocal tariffs, and rates that seem to change with every news cycle, their bookkeeping has turned into a nightmare. I’m reaching out because I’m genuinely struggling with how to model this cleanly in Beancount.

The Problem

I manage books for about 20 small businesses here in Austin. Five of them import goods—everything from restaurant supplies to specialty retail products. Before 2025, tariffs were a line item I barely thought about. Now? Tariffs are 15-40% of some clients’ COGS, and the rates keep shifting.

Here’s what I’m wrestling with:

1. Landed Cost Allocation

Per GAAP, tariffs must be capitalized into inventory, not expensed immediately. They hit COGS only when inventory is sold (matching principle). But in Beancount, I’m currently doing this:

2026-04-01 * "Shanghai Supplier" "Q2 Restaurant Supplies"
  Assets:Inventory:Supplies        5,000.00 USD
  Expenses:Tariffs:China              2,250.00 USD   ; 45% tariff rate
  Liabilities:AccountsPayable    -7,250.00 USD

This is wrong—the tariff should be part of the inventory cost, not a separate expense. But if I lump it all into Assets:Inventory, I lose visibility into how much I’m paying in tariffs vs. actual product cost.

2. Rates Change Constantly

The China rate was 25% under the original Section 301 tariffs, then jumped in waves through 2025, and now sits at 145% on most goods. The 10% baseline reciprocal tariff hit in April 2025. Some clients import from multiple countries, each with different rates. How do you track which tariff rate applied to which shipment?

3. Potential Tariff Refunds

After the February 2026 Supreme Court ruling questioning tariffs levied under IEEPA, some of these duties might be refundable. How do I set up my books so I can quickly identify which tariff payments might be recoverable?

What I’ve Tried

I created a metadata-heavy approach:

2026-04-01 * "Shanghai Supplier" "Q2 Restaurant Supplies"
  Assets:Inventory:Supplies        7,250.00 USD
    tariff_rate: "45%"
    tariff_amount: "2250.00"
    tariff_authority: "Section-301"
    origin_country: "CN"
    base_product_cost: "5000.00"
  Liabilities:AccountsPayable    -7,250.00 USD

This capitalizes correctly, but I can’t easily query “show me total tariff costs across all clients” because the tariff amount is buried in metadata strings, not actual postings.

My Questions for the Community

  1. What’s your account structure for tariff-affected inventory? Do you use sub-accounts like Assets:Inventory:Supplies:BaseCost and Assets:Inventory:Supplies:TariffDuty? Or a completely different approach?

  2. How do you handle rate changes mid-shipment? If a tariff rate changes between when goods ship and when they clear customs, which rate do you book?

  3. Anyone built a Beancount plugin or importer that pulls tariff rates automatically (from CBP data or similar)?

  4. For the CPAs here: what’s the correct treatment if tariffs paid under IEEPA get ruled invalid and refunds are issued? Reduce COGS retroactively? Book as Other Income?

I know I’m not the only bookkeeper drowning in this. 61% of small businesses report tariffs have negatively impacted operations according to the 2026 NSBA Trade Impact Survey, and most of them are doing this tracking in Excel or not at all. Beancount should be able to do this better—I just need help figuring out how.

Looking forward to hearing how others are handling this.

Bob, good question and I see this exact problem across my client base. Let me address the GAAP side first because getting this wrong has real consequences.

The Correct Treatment Under ASC 330

Tariffs are a component of inventory cost under ASC 330 (Inventory). The standard requires that all costs of purchase—including duties, freight, handling—be capitalized into inventory. This means your first example (separate Expenses:Tariffs:China posting) is indeed incorrect for financial reporting purposes. Tariffs should flow through COGS only when the related inventory is sold.

However, your instinct to track tariff costs separately is exactly right. You just need to do it without breaking the accounting treatment.

The Account Structure I Recommend

Here’s what I’ve set up for three clients who import heavily:

Assets:Inventory:RawMaterials:ProductCost
Assets:Inventory:RawMaterials:TariffDuty
Assets:Inventory:RawMaterials:Freight

Each sub-account rolls up into Assets:Inventory:RawMaterials for balance sheet purposes, but you can query each component independently. When inventory is sold:

2026-04-15 * "COGS Recognition - March shipment"
  Expenses:COGS:Materials:ProductCost     5,000.00 USD
  Expenses:COGS:Materials:TariffDuty      2,250.00 USD
  Assets:Inventory:RawMaterials:ProductCost  -5,000.00 USD
  Assets:Inventory:RawMaterials:TariffDuty   -2,250.00 USD

Now you have full GAAP compliance AND you can run a BQL query like:

SELECT account, sum(position) WHERE account ~ "TariffDuty" GROUP BY account

This gives you total tariff exposure at a glance.

On Potential Refunds

Regarding the IEEPA tariff refund question—this is still evolving post-Supreme Court ruling, but the conservative approach:

  1. Do NOT adjust COGS retroactively unless the refund is virtually certain and the amount is reliably estimable
  2. Book a receivable when refund probability crosses the “probable” threshold (ASC 450): Assets:Receivable:TariffRefund / Income:Other:TariffRefund
  3. Keep detailed records of which shipments, tariff authority (Section 301 vs IEEPA), and amounts paid—this is where your metadata approach is smart

My firm is advising all import-dependent clients to maintain a tariff exposure schedule outside of Beancount (we use a simple spreadsheet cross-referenced to transaction metadata) until the legal landscape settles.

The 61% negative impact stat you cited is consistent with what I’m seeing. For my small business clients, tariffs have turned what used to be a 2-hour monthly bookkeeping task into an 8-hour forensic exercise.

This thread is incredibly timely. I’m not a bookkeeper, but the tariff situation is affecting my personal finances and FIRE planning in ways I didn’t anticipate.

The Hidden Personal Finance Impact

I’ve been tracking my household spending in Beancount religiously for 4 years. Here’s what my data shows since tariffs escalated:

  • Grocery costs: Up 12.3% YoY (produce, specialty items from affected countries)
  • Electronics/home goods: Up 18.7% YoY (basically everything from China)
  • Overall household COGS (yes, I think of my family as a business): Up 9.4% annualized

For FIRE planning, this is significant. If my annual spend increases by $6,200/year due to tariff-driven inflation, that’s $155,000 more I need in my portfolio at a 4% withdrawal rate. That’s real.

How I Track Tariff-Exposed Spending

I don’t track tariff rates directly (too granular for personal finance), but I use metadata to flag purchases likely affected:

2026-04-02 * "Costco" "Monthly bulk shopping"
  Expenses:Food:Groceries          487.32 USD
    import_exposure: "high"
    price_change_yoy: "+14%"
  Assets:Checking:Chase           -487.32 USD

Then I run quarterly analysis:

SELECT quarter(date), sum(position)
WHERE account ~ "Expenses" AND META("import_exposure") = "high"
GROUP BY quarter(date)

This lets me see how tariff-sensitive my spending is over time.

Investment Portfolio Exposure

The other angle I’m watching: which of my index fund holdings are most exposed to tariff risk? Companies with heavy China supply chains (Apple, Nike, etc.) versus domestic-focused companies. I built a Python script that cross-references my Beancount portfolio holdings with tariff exposure data from the USITC.

For anyone on the FIRE path: if your portfolio is 60% total market index, roughly 15-20% of your equity holdings have significant tariff exposure. Worth modeling in your withdrawal projections.

For Bob’s Specific Problem

Alice’s sub-account approach is elegant. One addition: for the rate-change-between-ship-and-customs problem, the applicable rate is the rate in effect when goods are formally entered through customs (CBP Form 7501 date), not the shipping date. So you book at the customs clearance rate, and if the rate changed between shipment and entry, that’s just a normal part of landed cost calculation—no adjustment needed.

Might be worth building a simple Python importer that reads CBP entry summaries and auto-generates the Beancount entries with correct rates and metadata.

Everyone is focused on the bookkeeping mechanics, but I want to flag the tax landmines here because this is where clients get hurt.

Tariff Refunds Are a Tax Event

If the IEEPA tariffs are eventually ruled invalid and CBP issues refunds, you need to understand the tax treatment:

Scenario A: Refund received in the same tax year as payment. Reduce COGS for the year. Straightforward—your taxable income increases by the refund amount because your costs were overstated.

Scenario B: Refund received in a later tax year. This falls under the tax benefit rule (Section 111). If you deducted the tariff-inflated COGS in a prior year and got a tax benefit from it, the refund is includable in gross income in the year received. You’d book it as:

2027-03-15 * "CBP" "IEEPA tariff refund - 2026 Q2 shipments"
  Assets:Checking:Business        2,250.00 USD
  Income:Other:TariffRefund      -2,250.00 USD
    original_payment_date: "2026-04-01"
    tariff_authority: "IEEPA"
    cbp_entry_number: "ABC-1234567"

Keep that metadata—you’ll need it when the IRS inevitably wants documentation.

Duty Drawback Program

Something most small businesses don’t know about: if your clients re-export any imported goods (even after modification), they may qualify for duty drawback—a refund of up to 99% of duties paid. This is a legitimate program through CBP, not contingent on court rulings.

I have two clients who qualify but never filed because they didn’t realize the program existed. One is leaving approximately $40,000/year on the table.

In Beancount, I’d track drawback-eligible inventory with metadata:

2026-04-01 * "Shanghai Supplier" "Electronic components"
  Assets:Inventory:Components:ProductCost  5,000.00 USD
  Assets:Inventory:Components:TariffDuty   2,250.00 USD
    drawback_eligible: TRUE
    customs_entry: "2026-0401-001"
  Liabilities:AccountsPayable            -7,250.00 USD

Quarterly Estimated Tax Impact

The other thing nobody’s talking about: if tariffs significantly increase your clients’ COGS, their quarterly estimated tax payments might be too high. Lower profits = lower tax liability. Run the numbers before April 15th—some clients may be able to reduce Q2 estimated payments.

For your clients panicking about cash flow, Bob—a properly calculated reduction in estimated tax payments could free up meaningful working capital. Every dollar counts when margins are getting squeezed by 15-40% tariff surcharges.