Beyond Net Worth: True Wealth Tracking with Beancount (Unrealized Gains, Asset Allocation, Rebalancing)

Hey everyone! :waving_hand:

I’ve been using Beancount for about 18 months now, and I want to share something that completely changed how I think about wealth tracking. Net worth is just the starting point.

My Wake-Up Call

Last month, I was feeling pretty good. My net worth hit a new milestone, my charts were trending up, and I thought I had everything under control. Then I dug deeper into my actual portfolio composition and realized I had a problem: my asset allocation had drifted 15% away from my target without me noticing.

My equity allocation had crept from 70% to 85% because of strong stock performance. My international exposure had shrunk from 30% to 18%. And I had completely missed a $12,000 tax-loss harvesting opportunity sitting right in front of me.

Net worth looked great. Portfolio health? Not so much.

What I Track Now (Beyond Just Net Worth)

After that wake-up call, I completely revamped my Beancount tracking. Here’s what I monitor now:

1. Unrealized Gains/Losses

I enabled Beancount’s unrealized gains plugin:

plugin "beancount.plugins.unrealized" "Unrealized"

This creates synthetic transactions showing my unrealized P/L. It books one side as Income and the other as a change in Assets. Now I can see not just what my investments are worth, but how much paper gain/loss I’m sitting on.

Why this matters: When you’re planning tax strategy or considering rebalancing, you need to know your embedded gains. Selling a position at $100k net might trigger $5k in taxes or $30k in taxes depending on your cost basis.

2. Asset Allocation Monitoring

I track my target allocation:

  • 70% Stocks (40% US, 30% International)
  • 25% Bonds
  • 5% Cash

Every month, I run Fava’s “At Market Value” view and compare my actual allocation to target. I’ve set up a simple spreadsheet that calculates drift percentage.

2026 context: Given elevated equity valuations and increased market concentration (per Goldman Sachs and Cambridge Associates outlooks), I’m being extra vigilant about not letting equity allocation creep too high.

3. Tax-Loss Harvesting Opportunities

I tag every investment purchase with acquisition metadata:

2025-03-15 * "Buy VTSAX"
  Assets:Investments:Vanguard:VTSAX   100 VTSAX {95.00 USD}
    acquisition-date: 2025-03-15
  Assets:Investments:Vanguard:Cash

This lets me track:

  • Which positions are underwater (loss harvest candidates)
  • When I bought them (for wash sale rule tracking)
  • Whether I’ve already harvested losses on similar securities in the last 30 days

Real impact: Last year I identified $8,500 in harvestable losses across my portfolio. I realized those losses to offset gains from rebalancing, saving me about $2,100 in federal taxes.

4. Rebalancing Triggers

I’ve set personal thresholds:

  • Yellow flag: Any asset class drifts >5% from target
  • Red flag: Any asset class drifts >10% from target
  • Action required: Red flag OR annual review date

When I hit a red flag, I calculate exactly what trades are needed to get back to target allocation.

The Portfolio Health Dashboard

My personal “wealth beyond net worth” metrics:

  • Net worth: $487K (up 12% YoY)
  • Unrealized gains: $94K (19.3% of portfolio)
  • Asset allocation drift: Currently 3.2% (yellow flag on equities)
  • TLH opportunities: $2,100 in harvestable losses identified
  • Tax cost of full rebalancing: ~$4,800 if I rebalanced everything today
  • Days until next rebalancing threshold: Tracking monthly

Questions for the Community

I’m curious what metrics you track beyond simple net worth:

  1. Do you track unrealized gains separately? Or just focus on total market value?
  2. How do you monitor asset allocation drift? Manual spreadsheet? Custom Beancount queries? Fava visualizations?
  3. Anyone doing systematic tax-loss harvesting tracking in Beancount? I’d love to see how others handle wash sale monitoring.
  4. What rebalancing schedule works for you? Annual? Threshold-based? Opportunistic?
  5. What other “wealth health” metrics do you track? (Sequence-of-returns risk? Safe withdrawal rates? Something else?)

I feel like I’ve leveled up my financial game, but I’m sure there are angles I’m missing. What does your comprehensive wealth tracking look like?


P.S. - For anyone just starting out: don’t let this overwhelm you! Start with basic net worth tracking and add complexity as you learn. I spent my first 6 months just getting my accounts entered correctly. Start simple, evolve gradually.

This resonates so much with my journey, @finance_fred!

I had almost the exact same experience about 2 years ago. I was tracking net worth religiously, celebrating every milestone, and feeling like I had my finances completely dialed in. Then I sat down to actually look at my portfolio composition and realized I was dangerously over-concentrated in real estate.

My Wake-Up: Real Estate Concentration

Between my primary residence equity, two rental properties, and REITs in my investment accounts, I had nearly 40% of my total net worth in real estate. On paper, my net worth looked great! But from a risk management perspective, I was way too exposed to a single asset class and geographic region (Bay Area, no less).

If the local market had a correction, my “diversified” portfolio would have taken a massive hit.

How I Fixed It (With Beancount’s Help)

I started using Fava’s “At Market Value” dropdown view to see my true current allocation across all accounts. This was eye-opening because it showed me the actual market value of everything, not just my cost basis.

I set up a monthly portfolio review ritual:

  • First Sunday of each month
  • 30 minutes max
  • Check current allocation vs target
  • Document any drift >5%
  • Decide if action needed

Custom Queries for Rebalancing

I wrote a custom Beancount query that calculates exactly how much I need to buy/sell to get back to target allocation. I can share the script if others are interested - it’s honestly not complicated, just some basic math on the output of the balance sheet at market value.

The query outputs:

  • Current allocation by asset class
  • Target allocation (I hard-code this)
  • Dollar amount over/under for each class
  • Suggested trades to rebalance

One Piece of Advice: Start Simple

Fred, your tracking is sophisticated and impressive! For anyone reading who feels overwhelmed: don’t try to build Rome in a day.

When I migrated to Beancount from GnuCash 4 years ago, I spent the first 6 months just getting basic transactions entered correctly. Then I added investment tracking. Then market value tracking. Then allocation monitoring. Then tax optimization.

Layer complexity gradually as you understand each piece. The beauty of Beancount is that it grows with you.

Back to Your Questions

To answer your specific questions, Fred:

1. Unrealized gains: Yes, I track them separately using the unrealized plugin. It’s essential for tax planning.

2. Asset allocation drift: Custom Beancount query + manual review monthly. I tried to automate alerts but honestly the monthly ritual works better for me.

4. Rebalancing schedule: I review monthly but only rebalance when drift exceeds 10% OR at annual review (December). Most months I do nothing, which is fine! Rebalancing too frequently can trigger unnecessary taxes and transaction costs.

Great topic! Looking forward to seeing what others track.

As a CPA, I love seeing this level of sophistication in personal portfolio management! @finance_fred, your approach demonstrates exactly the kind of proactive financial planning that separates people who just “track money” from people who actually manage wealth.

The Accounting Perspective on Unrealized Gains

Let me add some professional context to what you’re doing with the unrealized gains plugin. From an accounting standpoint, this is creating a mark-to-market view of your portfolio.

The plugin books:

  • Debit: Assets (increase in market value)
  • Credit: Income:Unrealized (or Equity:UnrealizedGains, depending on configuration)

This gives you a comprehensive P&L that includes not just realized transactions, but paper gains/losses on positions you still hold.

Critical tax reminder: Unrealized gains are NOT taxable until you actually sell. But tracking them is essential for tax planning because they represent your embedded tax liability. When you’re looking at a position worth $100K with a $60K cost basis, you’re looking at $40K of gains that will be taxed the moment you sell.

Tax-Loss Harvesting: The Details Matter

Fred, I’m impressed you’re tracking acquisition dates with metadata. This is exactly right for managing wash sale compliance.

The IRS wash sale rule (IRC Section 1091): You cannot claim a loss on a security if you purchase a “substantially identical” security within 30 days before or after the sale. The 30-day window goes in both directions - it’s actually a 61-day window total (30 days before + the sale date + 30 days after).

Here’s how I recommend structuring this in Beancount:

2025-03-15 * "Buy VTSAX - Lot 1"
  Assets:Investments:Vanguard:VTSAX   100 VTSAX {95.00 USD}
    acquisition-date: "2025-03-15"
    lot-id: "VTSAX-2025-03-15-A"
  Assets:Investments:Vanguard:Cash   -9500.00 USD

2025-11-20 * "Sell VTSAX - Lot 1 for TLH"
  Assets:Investments:Vanguard:VTSAX   -100 VTSAX {95.00 USD} @ 88.00 USD
    sale-date: "2025-11-20"
    sale-reason: "tax-loss-harvest"
    wash-sale-window-start: "2025-10-21"
    wash-sale-window-end: "2025-12-20"
  Assets:Investments:Vanguard:Cash    8800.00 USD
  Income:Investments:CapitalGainsLoss 700.00 USD

With this metadata, you can query your ledger to check if you’re about to violate wash sale rules before making a purchase.

Real Client Example (Anonymized)

I had a client last year who saved $8,000 in federal taxes through systematic tax-loss harvesting tracked in Beancount. Here’s what we did:

  1. Quarterly TLH review: Identified underwater positions
  2. Harvested losses: Sold positions at a loss, immediately reinvested in similar-but-not-identical funds (e.g., sold VFIAX, bought SPLG)
  3. Offset gains: Used harvested losses to offset realized gains from necessary rebalancing
  4. Carried forward: Had $12K in excess losses to carry forward to future tax years

The key was having clean, detailed records in Beancount. When it came time to prepare their tax return, we had perfect documentation of every lot, every sale, every wash sale compliance check.

State Tax Considerations

One thing to watch: not all states follow federal capital gains treatment. For example:

  • California taxes capital gains as ordinary income
  • New Hampshire doesn’t have capital gains tax but does tax dividends and interest
  • Washington has no income tax but does have a capital gains excise tax on high earners

Make sure your tax planning accounts for your state’s specific rules.

Question for You, Fred

You mentioned tracking “tax cost of full rebalancing” - are you calculating this based on federal only, or are you including state tax liability? And are you using long-term vs short-term capital gains rates based on holding periods?

I’d love to discuss tax-optimized rebalancing strategies further. There are some techniques around:

  • Tax lot selection (selling highest cost basis lots first to minimize gains)
  • Asset location optimization (holding tax-inefficient assets in tax-advantaged accounts)
  • Rebalancing with new contributions (avoiding sales by directing new money to underweight asset classes)

This is exactly the kind of proactive planning that can save thousands in taxes over a lifetime of investing. Great work!

Great tax overview, @accountant_alice! Let me add some 2026-specific context and nuance to your excellent points.

The 2026 Tax Environment

We’re operating in an unusually uncertain tax environment this year. Between economic volatility, regulatory changes at both federal and state levels, and ongoing debates about tax policy, it’s more important than ever to have detailed, audit-ready records.

This is where Beancount shines. When the rules are changing, having transparent, queryable financial data gives you the flexibility to adapt quickly.

Specific Tracking Recommendations

Building on Alice’s wash sale guidance, here’s what I recommend for metadata tagging in 2026:

1. Acquisition Date (Essential)

acquisition-date: "2025-03-15"

2. Cost Basis Method (Critical for Tax Lots)

cost-basis-method: "specific-identification"

You have choices here:

  • FIFO (First In, First Out) - Default for most brokers
  • LIFO (Last In, First Out) - Rarely used
  • Specific Identification - YOU choose which lot to sell (most tax-efficient)
  • Average Cost - Only for mutual funds

Pro tip: If you’re not explicitly using specific identification, your broker is probably using FIFO, which may NOT be tax-optimal. Beancount lets you model different scenarios to see which method minimizes taxes.

3. Holding Period Tracking

holding-period: "short-term"  # or "long-term"

This matters HUGELY for tax rates:

  • Short-term gains (\u003c1 year): Taxed as ordinary income (up to 37% federal)
  • Long-term gains (≥1 year): Preferential rates (0%, 15%, or 20% federal depending on income)

A position you sell at 364 days vs 366 days can have drastically different tax consequences.

Real Scenario: Lot Tracking Saved a Client $4,200

Last tax season, I had a client who needed to rebalance their portfolio - they had to sell $50K of VTSAX to reduce equity allocation.

They had three lots of VTSAX:

  • Lot A: $20K value, $15K cost basis, held 3 years → $5K long-term gain
  • Lot B: $20K value, $18K cost basis, held 8 months → $2K short-term gain
  • Lot C: $20K value, $19K cost basis, held 2 years → $1K long-term gain

Scenario 1 (FIFO - Default): Sell Lots A + B

  • $5K long-term gain @ 15% = $750
  • $2K short-term gain @ 32% = $640
  • Total tax: $1,390

Scenario 2 (Specific ID - Optimized): Sell Lots B + C

  • $2K short-term gain @ 32% = $640
  • $1K long-term gain @ 15% = $150
  • Total tax: $790

But wait, we can do better!

Scenario 3 (Tax-Loss Harvest + Rebalance):
They also had $3K in unrealized losses in an international fund. We:

  1. Harvested the $3K loss
  2. Sold Lots B + C of VTSAX ($3K total gain)
  3. Gains offset by losses = $0 tax
  4. Reinvested proceeds to maintain target allocation

Savings: $790 (vs Scenario 2) or $1,390 (vs default FIFO)

This was only possible because we had perfect lot-level tracking in Beancount.

Quarterly Review Schedule

I recommend aligning your portfolio review with estimated tax payment deadlines:

  • Q1: April 15 review (harvest losses to offset Q1 gains)
  • Q2: June 15 review
  • Q3: September 15 review
  • Q4: December 31 review (last chance for current tax year)

This keeps you thinking about the tax implications of your investment decisions throughout the year, not just in April when it’s too late.

Estimated Tax Implications

@finance_fred - One thing I didn’t see in your dashboard: projected quarterly estimated tax payments based on your investment activity.

If you’re realizing significant gains through rebalancing, you may need to increase estimated payments to avoid underpayment penalties. The IRS wants you to pay as you earn, not just settle up in April.

Safe harbor rules:

  • Pay 90% of current year tax, OR
  • Pay 100% of prior year tax (110% if AGI \u003e $150K), OR
  • Keep withholding + estimates within $1,000 of actual tax owed

Your Beancount tracking is sophisticated enough that you could calculate projected tax liability in real-time and adjust quarterly estimates accordingly.

State Tax Complexity

Alice mentioned state variations - this is huge. I’m in Arizona, but I have clients in:

  • California: 13.3% top rate on capital gains (ouch!)
  • Texas/Florida: No state income tax
  • New York: 10.9% top rate + NYC adds another 3.876%

Your rebalancing strategy might look very different if you’re paying an extra 13% to California vs 0% in Texas. Some clients have even timed major rebalancing events around moves to no-income-tax states (though be careful - states are cracking down on domicile gaming).

My Beancount Tag System

I tag EVERY investment transaction with:

acquisition-date: "2025-03-15"
cost-basis-method: "specific-identification"
lot-id: "VTSAX-20250315-A"
tax-year: "2025"
holding-period: "short-term"  # Auto-update to long-term after 1 year

Then I can query:

  • All short-term positions (avoid selling if possible)
  • All long-term positions (preferentially sell these)
  • All positions with unrealized losses (TLH candidates)
  • Wash sale window violations (before making a purchase)

Bottom Line

Your records are your first line of defense in an audit. The IRS respects documentation. When you can show detailed lot-level tracking, acquisition dates, and clear tax lot selection methodology, you’re in a much stronger position than someone who just has a 1099-B from their broker.

Great discussion! This is exactly the kind of planning that separates good investors from great investors.

Thanks for that detailed breakdown, @tax_tina! The lot tracking example really drives home how much money is on the table.

I Learned This the Hard Way

Your scenario reminds me of my first year using Beancount for investment tracking. I didn’t properly track lot IDs and acquisition dates, which made tax time absolutely painful.

My broker’s 1099-B showed all my sales, but I couldn’t easily reconstruct which specific lots I had sold. I had to spend hours cross-referencing statements and trying to piece together what I’d done. Never again!

Now I’m obsessive about lot tracking from day one.

My Current Lot Naming Convention

I’ve settled on this format for lot IDs:

lot-id: "TICKER-YYYYMMDD-SEQNO"

Examples:

  • VTSAX-20250315-A (first purchase that day)
  • VTSAX-20250315-B (second purchase same day)
  • VTI-20251107-A

This makes it crystal clear at a glance:

  • What security
  • When I bought it
  • If there were multiple purchases that day

Then in Fava, I can easily filter and see all my lots sorted chronologically.

Example Transaction with Full Metadata

Here’s what one of my actual investment purchases looks like now:

2025-08-12 * "Vanguard - Buy VTSAX"
  Assets:Investments:Vanguard:VTSAX   50 VTSAX {102.45 USD}
    acquisition-date: "2025-08-12"
    cost-basis-method: "specific-identification"
    lot-id: "VTSAX-20250812-A"
    holding-period: "short-term"
    purchase-type: "regular-contribution"
  Assets:Investments:Vanguard:Cash   -5122.50 USD

Then when I sell (for rebalancing or TLH):

2026-02-18 * "Vanguard - Sell VTSAX Lot VTSAX-20250812-A for rebalancing"
  Assets:Investments:Vanguard:VTSAX   -50 VTSAX {102.45 USD} @ 108.20 USD
    sale-date: "2026-02-18"
    sale-reason: "rebalance"
    lot-id: "VTSAX-20250812-A"
    holding-period: "short-term"
    days-held: "190"
  Assets:Investments:Vanguard:Cash    5410.00 USD
  Income:Investments:CapitalGains:ShortTerm  287.50 USD

I even track days-held so I can see if I’m close to the 1-year mark (and maybe should wait a few more days for long-term treatment).

Linking Back to Fred’s Original Question

@finance_fred asked about metrics beyond net worth. Here’s what I track quarterly:

My Portfolio Health Metrics:

  1. Net worth (the headline number)
  2. Unrealized gains breakdown (by account and security)
  3. Asset allocation vs target (equity/bond/cash/real estate)
  4. Geographic allocation (US/International split)
  5. Tax lot summary:
    • Number of short-term lots (avoid selling)
    • Number of long-term lots (can sell with lower tax impact)
    • Total unrealized losses (TLH opportunity pool)
    • Total unrealized gains (embedded tax liability)
  6. Projected tax impact of full rebalancing (what Tina described)

Quarterly Review Ritual

First Sunday of each quarter:

  1. Run Fava balance sheet at market value
  2. Export to spreadsheet for allocation analysis
  3. Identify drift \u003e5% from target
  4. Check for TLH opportunities
  5. Decide: rebalance now, or wait?
  6. If rebalancing: model tax impact of different scenarios
  7. Document decision in Beancount as a note transaction

This whole process takes about 45 minutes every 3 months. The quarterly rhythm keeps me aware without becoming obsessive.

Don’t Let Perfect Be the Enemy of Good

One final thought for anyone reading this thread feeling overwhelmed:

Fred’s tracking is sophisticated. Alice and Tina’s professional advice is top-tier. My system works well for me.

But you don’t need to do ALL of this on day one.

If you’re just starting with Beancount:

  1. Month 1-3: Get basic accounts and transactions entered correctly
  2. Month 4-6: Add investment tracking with cost basis
  3. Month 7-9: Add unrealized gains plugin and market value tracking
  4. Month 10-12: Add detailed lot metadata and tax optimization

Layer the complexity as you understand each piece. Each layer adds value, but the foundation (accurate transaction recording) is what matters most.

Resources I Found Helpful

  • Beancount’s official docs on trading and portfolio returns
  • The Plain Text Accounting wiki
  • This community (seriously, ask questions!)

Great discussion, everyone. This is exactly why I love this forum - real people sharing real experiences with practical advice.