Beyond Net Worth: Building FIRE-Specific Beancount Queries (Coast FIRE, Withdrawal Rate, Savings Rate)

When I started my FIRE journey five years ago, I tracked everything in Mint. It was simple, automated, and free. Then Mint shut down in 2024, forcing me to evaluate alternatives. I tried Personal Capital (now Empower), YNAB, and Monarch Money—all great tools, but they all shared the same fundamental limitation: I was constrained by whatever metrics the vendor decided to build.

Want to calculate your Coast FIRE number? Hope your tool supports it. Need to model Roth conversion ladders? Better find a different app. Want to track withdrawal rate readiness across 7 different account types? Good luck.

That’s when I discovered Beancount and its powerful query language (BQL). After 18 months of using it daily, I’ve built a library of FIRE-specific queries that commercial tools simply can’t match. Here’s what I’ve learned.

The Power of Custom Queries

Commercial FIRE tools like Fireleap and My Financial Freedom Tracker offer built-in dashboards, but you’re limited to their feature set. Beancount’s query language gives you SQL-like flexibility to calculate anything—not just what a product manager decided you needed.

Here are the five essential FIRE queries I run monthly:

1. Net Worth by Account Type (Taxable vs Tax-Advantaged)

This is crucial for early retirement planning because you need taxable assets to bridge the gap until you can access retirement accounts penalty-free at 59.5.

SELECT 
  CASE
    WHEN account ~ 'Assets:Brokerage' THEN 'Taxable'
    WHEN account ~ 'Assets:(401k|IRA|Roth)' THEN 'Tax-Advantaged'
    WHEN account ~ 'Assets:RealEstate' THEN 'Real Estate'
    ELSE 'Other'
  END as account_type,
  sum(position) as balance
WHERE account ~ 'Assets|Liabilities'
GROUP BY account_type
ORDER BY balance DESC;

My current breakdown:

  • Tax-Advantaged: $287,000 (401k + IRA)
  • Taxable Brokerage: $143,000
  • Real Estate Equity: $95,000
  • Total Net Worth: $525,000

This tells me I need to shift more savings to taxable accounts since I’m targeting retirement at 45 (14 years before penalty-free 401k access).

2. Savings Rate Percentage

The most important FIRE metric. Every 10% increase in savings rate can cut years off your timeline.

-- Income for year
SELECT sum(position) as total_income
WHERE account ~ 'Income' AND year = 2025;

-- Expenses for year  
SELECT sum(position) as total_expenses
WHERE account ~ 'Expenses' AND year = 2025;

-- Calculate: (Income - Expenses) / Income * 100

My 2025 numbers:

  • Income: $135,000
  • Expenses: $54,000
  • Savings Rate: 60%

At 60% savings rate, I’m about 12 years from FI (started tracking in 2021, so 8 years remaining).

3. Withdrawal Rate Readiness

Are you ready to retire today? This query tells you.

-- Annual expenses (trailing 12 months)
SELECT sum(position) as annual_expenses
WHERE account ~ 'Expenses' 
  AND date >= 2025-01-01 
  AND date < 2026-01-01;

-- Portfolio value
SELECT sum(position) as portfolio
WHERE account ~ 'Assets:(Brokerage|401k|IRA|Roth)';

-- Withdrawal rate = Annual Expenses / Portfolio * 100
-- Target: 4% or lower for "safe" retirement

My current status:

  • Annual Expenses: $54,000
  • Portfolio: $430,000 (excluding real estate)
  • Withdrawal Rate: 12.6%

I need $1.35M to hit the 4% rule ($54k ÷ 0.04). Still a ways to go!

4. Coast FIRE Number

This is my favorite metric. Coast FIRE means you’ve saved enough that compound growth alone will reach your FI number—even if you never invest another dollar.

Formula:
Coast FIRE Number = FIRE Target ÷ (1 + Return Rate)^Years Remaining

-- I calculate this manually since BQL doesn't have exponential functions
-- FIRE Target: $1.35M (25x expenses)
-- Current Age: 33
-- Retirement Age: 65 (conservative Coast FIRE target)
-- Years Remaining: 32
-- Expected Return: 7% annually

-- Coast FIRE Number = 1,350,000 / (1.07^32) = 1,350,000 / 8.72 = $154,817

-- Current portfolio: $430,000
-- Coast FIRE target: $154,817
-- Status: Already achieved Coast FIRE! 🎉

Discovering I’d already reached Coast FIRE was life-changing. It means even if I quit my tech job tomorrow and worked as a barista just covering expenses, I’d still retire a millionaire at 65. The pressure is off.

5. Tax-Advantaged Ratio

For early retirement, you need enough taxable assets to bridge the gap until 59.5 when you can access retirement accounts penalty-free (or use a Roth conversion ladder, but that takes planning).

SELECT 
  sum(CASE WHEN account ~ 'Assets:Brokerage' THEN position ELSE 0 END) as taxable,
  sum(CASE WHEN account ~ 'Assets:(401k|IRA|Roth)' THEN position ELSE 0 END) as tax_advantaged,
  sum(CASE WHEN account ~ 'Assets:Brokerage' THEN position ELSE 0 END) / 
    sum(CASE WHEN account ~ 'Assets:(401k|IRA|Roth)' THEN position ELSE 0 END) * 100 as taxable_ratio
WHERE account ~ 'Assets:(Brokerage|401k|IRA|Roth)';

My ratio:

  • Taxable: $143,000
  • Tax-Advantaged: $287,000
  • Ratio: 50% taxable

I’m aiming for 60-70% taxable to ensure I have enough liquid assets in early retirement.

The Learning Curve Is Worth It

I won’t sugarcoat it: BQL has a learning curve. I spent probably 15-20 hours over 3 months building these queries. But compare that to:

  • Mint shutting down: Lost 9 years of data, spent 40 hours migrating
  • YNAB subscription: $99/year forever
  • Monarch Money: $99/year with features I don’t need
  • Personal Capital: “Free” but aggressively upsells wealth management

Beancount queries are permanent. I control my data. These queries will work in 10 years, 20 years, 30 years—regardless of what companies shut down or change pricing.

Tips for Getting Started

  1. Start with one query: Don’t try to build all five at once. Master net worth first.
  2. Save queries as .bql files: I have a folder with reusable templates.
  3. Use metadata liberally: Tags like make queries more flexible.
  4. Test in small increments: Run queries on one month of data first, then expand.
  5. Join the community: People here have solved problems you’ll encounter.

What FIRE Metrics Do You Track?

I’m curious what other FIRE folks are tracking in Beancount:

  • Anyone modeling Roth conversion ladders?
  • Tracking geographic arbitrage scenarios (moving to lower cost-of-living area)?
  • Calculating true “time to FI” accounting for market volatility?
  • Building Monte Carlo simulations for success probability?

I’m happy to share my full query library on GitHub if there’s interest. These five queries have transformed how I think about my FIRE journey—no longer constrained by what a vendor decides to build.

What queries do you wish existed but haven’t built yet? Let’s crowdsource the ultimate FIRE query library.


Tools mentioned: Beancount query language, Coast FIRE calculator principles, Trinity Study (4% rule)

This is fantastic, Fred! Your breakdown really validates the journey so many of us have taken.

I went through a similar migration path: started with GnuCash back in 2018, tried Personal Capital in 2022, and finally landed on Beancount in 2023. Like you said, the permanence is what sold me. I’m tired of rebuilding my financial tracking every few years when companies pivot or shut down.

Start Simple - Learn From My Mistakes

One piece of advice for anyone reading this and feeling overwhelmed: Don’t try to build all five queries on day one. I made that mistake when I first started with Beancount. I spent three weekends trying to build the “perfect” tracking system and got so frustrated I almost gave up.

Here’s what worked better: Start with just the basic net worth query. Get comfortable with BQL syntax. Once that clicks, add savings rate tracking. Then withdrawal rate. Build complexity gradually, and you’ll actually enjoy the process instead of drowning in it.

The Coast FIRE Revelation

Fred, I love that you highlighted Coast FIRE—it’s such an underrated milestone! I had my own “Coast FIRE moment” at age 38. I was stressing about hitting my full FI number, running projections constantly, feeling like I’d never get there. Then I ran the Coast FIRE calculation and realized: I’d already crossed the finish line for a traditional 65 retirement.

That changes everything psychologically. Suddenly work became optional, not mandatory. I could take career risks, negotiate harder, even consider lower-paying but more fulfilling work. The stress just… evaporated.

Query Refinement Takes Time (And That’s OK)

Your tax-advantaged ratio query is something I wish I’d built sooner. I spent my twenties maxing out 401k contributions because “tax-advantaged is always better,” right? Wrong—at least for early retirement. I ended up with 85% of my portfolio locked away until 59.5. Had to spend two years aggressively building up taxable accounts to rebalance.

Now I track that ratio monthly and keep it around 60/40 (taxable/tax-advantaged). Your 50% split looks solid for a 45 retirement target.

Roth Conversion Ladder Question

Since you asked: Yes! I’ve been modeling Roth conversion ladders. The basic idea is converting traditional IRA → Roth IRA during early retirement years when your income is low (so the tax hit is minimal), then accessing that money penalty-free after the 5-year seasoning period.

I haven’t figured out the perfect BQL query for this yet, but I’m tracking:

  • Current traditional IRA balance
  • Annual conversion amount I can afford (based on my tax bracket)
  • 5-year “pipeline” of conversions waiting to become accessible
  • Projected taxable account drawdown during the pipeline filling phase

Would love to see what others have built for this. It’s complex!

The Value of This Community

One last thing: Fred’s offer to share his query library on GitHub is exactly the kind of thing that makes this community valuable. When commercial tools shut down, their knowledge base disappears. When we share openly here, these queries become community resources that outlive any single tool or company.

Happy to review anyone’s queries if you get stuck—we’ve all been there. BQL looks intimidating at first (“Why is income negative??”), but once it clicks, you’ll wonder how you ever managed without it.

Keep up the great work, Fred. You’re 8 years into your FIRE journey with an incredible 60% savings rate. You’re going to crush this.

Fred, this is an excellent technical breakdown of FIRE metrics! As a CPA who works with early retirement clients, I’m impressed by how thoroughly you’ve thought through the tax implications.

The Professional Perspective

What strikes me about these queries is they’re actually more sophisticated than what most CPAs use for retirement planning. I’ve had clients pay thousands for financial planning that gave them less actionable insight than what you’ve built here with Beancount.

The distinction you’re making between taxable and tax-advantaged accounts is absolutely critical for early retirement, and many people miss this until it’s too late. I’ve seen too many clients in their late 30s realize they’ve over-funded 401ks and under-funded taxable accounts, creating a liquidity crisis for early retirement.

A Tax Consideration for Your Withdrawal Rate

One refinement I’d suggest for your withdrawal rate calculation: account for taxes on the withdrawal itself. Your current query calculates withdrawal rate as:

Withdrawal Rate = Annual Expenses / Portfolio * 100

But if you’re withdrawing from a traditional 401k/IRA, you’ll owe income tax on that withdrawal. So your true withdrawal rate (the amount you need to pull from accounts) is higher than your expense rate.

A more accurate formula for early retirees:

Tax-Adjusted Withdrawal Rate = Annual Expenses / (Portfolio * (1 - Effective Tax Rate))

For example, if your effective tax rate in retirement is 15%:

  • Expenses: $54,000
  • After-tax money needed: $54,000 / (1 - 0.15) = $63,529
  • Portfolio: $430,000
  • True withdrawal rate: $63,529 / $430,000 = 14.8% (vs your calculated 12.6%)

This matters more for people with heavy traditional IRA/401k balances. If you have significant Roth and taxable assets (which you do), the impact is smaller—but still worth modeling.

Client Use Case: Beancount for Retirement Scenario Planning

I recently helped a FIRE client model different scenarios using Beancount queries, and it completely changed her retirement timeline:

Scenario 1: Retire at 42 in San Francisco

  • Annual expenses: $75,000
  • Need: $1.875M (25x rule)
  • Years to save: 9 years

Scenario 2: Retire at 42, relocate to Austin

  • Annual expenses: $52,000 (30% lower cost of living)
  • Need: $1.3M
  • Years to save: 6 years

Scenario 3: “Barista FIRE” at 40, full FIRE at 48

  • Work part-time for health insurance + basic expenses
  • Let portfolio compound without withdrawals for 8 years
  • Reduces overall savings need by 35%

The ability to model multiple scenarios in BQL gave her confidence to pull the trigger on geographic arbitrage. She’s moving to Austin next year and retiring 3 years earlier than her original SF plan.

Don’t Let Perfect Queries Prevent Starting

One warning I give clients: Don’t let the pursuit of perfect queries prevent you from taking action. I’ve seen people spend six months building the “ultimate” tracking system but never actually start saving aggressively.

Your queries are excellent, Fred, but even a basic “Income minus Expenses equals Savings” calculation would have gotten you 90% of the value. The sophistication comes over time.

Question for the Thread: Roth Conversion Ladder Planning

Since Mike mentioned Roth conversion ladders: Has anyone built BQL queries to model the 5-year Roth conversion pipeline?

The challenge is tracking:

  1. Current year conversions (taxable income this year)
  2. Years 1-4 waiting period (can’t touch yet)
  3. Year 5+ accessible conversions (penalty-free withdrawal)
  4. Optimal annual conversion amount (stay within 12% or 22% tax bracket)

This is exactly the kind of complex scenario planning where Beancount’s flexibility shines, but I haven’t cracked the query structure yet. Would love to collaborate on this.

Metadata Makes Queries Future-Proof

One last technical tip: Use metadata tags liberally. Instead of hard-coding account names in queries, tag transactions with metadata:

2026-03-15 * "Vanguard contribution"
  Assets:Vanguard:Brokerage  1000.00 USD
    account-type: "taxable"
    tax-treatment: "long-term-capital-gains"
  Assets:Checking  -1000.00 USD

Then your queries can filter on metadata rather than account patterns. Makes your system more resilient when you add new accounts or restructure your chart of accounts.

Fred, fantastic work on this. If you do put your query library on GitHub, please share the link—I’d love to adapt some of these for my clients (with your permission, of course). The FIRE community needs more open-source financial planning tools like this.

Mike and Alice, thank you both for the thoughtful feedback! This is exactly the kind of discussion that makes this community valuable.

Taking the “Start Simple” Advice to Heart

Mike, you’re absolutely right about not trying to build everything at once. I definitely went through that phase—spent two weekends in January trying to create the “perfect” system and almost gave up in frustration. What worked was building one query, using it for a month, then adding the next one.

That incremental approach also helped me understand why each metric mattered, rather than just blindly tracking numbers. When I built the Coast FIRE query and realized I’d already crossed that threshold, it genuinely changed my relationship with work. Suddenly I wasn’t working because I had to, but because I chose to. That psychological shift is huge.

Tax-Adjusted Withdrawal Rate - Great Catch!

Alice, thank you for the tax adjustment suggestion! You’re absolutely right that I’m oversimplifying by not accounting for taxes on withdrawals. Let me recalculate with your formula:

My Situation:

  • Expenses: $54,000/year
  • Portfolio breakdown: $143k taxable, $287k tax-advantaged
  • If I retire at 45, I’ll draw primarily from taxable accounts initially (long-term capital gains at 15%)
  • As I do Roth conversions, I’ll manage to stay in the 12% bracket

So my effective tax rate in early retirement will be somewhere between 10-15% (much lower than my current 24% marginal rate).

Using 12% effective rate:

  • After-tax needed: $54,000 / (1 - 0.12) = $61,364
  • True withdrawal rate: $61,364 / $430,000 = 14.3%

That’s significantly higher than my naive 12.6% calculation! This reinforces that I need to keep building my portfolio before I can comfortably retire. Targeting that 4% safe withdrawal rate means I need closer to $1.53M, not $1.35M.

This is a perfect example of why BQL is so valuable—I can refine the query to include tax considerations and get a more accurate picture.

Roth Conversion Ladder Queries - Let’s Collaborate!

Both of you mentioned Roth conversion ladders, and I’ve been thinking about this too. I haven’t built the perfect query yet, but here’s my current approach:

Step 1: Track conversion tranches by year

2026-03-15 * "Roth conversion - 2026 tranche"
  Assets:Roth-IRA  12000.00 USD
    conversion-year: "2026"
    accessible-date: "2031-03-15"
  Assets:Traditional-IRA  -12000.00 USD

; Also record tax payment
2026-04-15 * "Tax on Roth conversion"
  Expenses:Taxes:Roth-Conversion  1440.00 USD  ; 12% bracket
    conversion-year: "2026"
  Assets:Checking  -1440.00 USD

Step 2: Query accessible conversions by year

SELECT 
  YEAR(metadata('conversion-year')) as conversion_year,
  metadata('accessible-date') as accessible_date,
  sum(position) as amount_accessible
WHERE account ~ 'Assets:Roth-IRA'
  AND metadata('accessible-date') <= '2031-12-31'  -- Current year + 5
GROUP BY conversion_year, accessible_date;

This is rough and needs refinement, but the idea is: tag each conversion with its “vintage year” and calculate when it becomes accessible. Then I can model the pipeline.

Mike, if you’ve built something more sophisticated, I’d love to see it!

Metadata for Future-Proofing - Implementing Now

Alice, your metadata tip is gold. I’ve been hard-coding account names in queries (like ), which means if I ever restructure my chart of accounts, all my queries break.

I’m going to start tagging transactions with metadata like:

  • vs
  • vs
  • vs vs

That way queries filter on attributes rather than specific account names. Much more resilient.

Query Library on GitHub - Coming Soon

Based on the interest here, I’ll clean up my queries and put them on GitHub this week. I’ll organize them by:

  • Basic queries: Net worth, income, expenses, savings rate
  • FIRE-specific queries: Withdrawal rate, Coast FIRE, tax-advantaged ratio
  • Advanced queries: Roth conversion modeling, geographic arbitrage scenarios, tax bracket optimization

I’ll post the link here once it’s ready. And Alice, absolutely—please use/adapt for your clients! The whole point is making this knowledge accessible.

Lessons from This Thread

What I love about this discussion:

  1. Mike’s wisdom: Start simple, add complexity gradually. Don’t let perfect be enemy of good.
  2. Alice’s expertise: Professional-grade tax planning is accessible to self-directed investors with the right tools.
  3. Community value: Sharing openly creates resources that outlive any commercial product.

If Mint hadn’t shut down, I might never have discovered Beancount. But now I have a permanent, portable system that grows with me. No vendor lock-in, no subscription fees, no risk of the tool disappearing.

The FIRE journey is long enough that your tracking system needs to last decades. Beancount is the only tool I’ve found that can make that promise.

Thanks again for the discussion. Looking forward to seeing what other queries the community builds!

FIRE Calculator Precision: Why Your Actual Beancount Data Beats Generic Online Calculators

I’ve been thinking a lot about this after reading the excellent queries shared in this thread. I want to add a critical perspective: generic online FIRE calculators can be dangerously misleading because they’re built on population averages, not YOUR actual financial reality.

The Generic Calculator Problem

I’ve used every online calculator out there: FIRECalc, The FI Calculator, Engaging Data’s tool, you name it. Most make the same assumptions:

  • 7% investment returns (some use 10% historical S&P 500 average)
  • 3% inflation rate
  • 4% safe withdrawal rate
  • Smooth, predictable expense patterns
  • Average healthcare costs

Sounds reasonable, right? But here’s the catch: your life isn’t average.

What My Beancount Data Revealed

When I finally analyzed my actual Beancount ledger (3+ years of complete tracking), I discovered:

  1. My real annual expenses were 18% higher than my “budgeted” estimates. Those small recurring subscriptions, irregular car repairs, and lifestyle inflation I wasn’t tracking? They add up. If I’d relied on my aspirational budget instead of actual data, my FIRE number would’ve been off by $300k+.

  2. My expense volatility was much higher than the smooth curves in calculators. I had years that were 25% more expensive than baseline (home repairs, medical surprises). Generic calculators don’t capture this lumpiness.

  3. Investment returns varied wildly by account type and tax treatment. My Roth IRA performed differently than my taxable brokerage. My 401k had different fee structures. Population-average returns masked important personal portfolio characteristics.

  4. Inflation hit my spending categories unevenly. Healthcare and housing inflated at 6-7% annually for me, while other categories were flat. Using a single 3% inflation assumption was naive.

Building Better FIRE Models with Beancount

The beauty of Beancount is that you can build FIRE projections from your actual historical data instead of generic assumptions. Here’s my approach:

1. Calculate Your True Annual Burn Rate

Use BQL to query your actual spending across multiple years:

SELECT year, sum(position) AS total_expenses
WHERE account ~ 'Expenses:'
GROUP BY year
ORDER BY year;

This gives you real data on spending trends, not guesses. Track the variance year-over-year. That variance matters for Monte Carlo simulations.

2. Stress Test with Your Worst Year

Generic calculators use smooth averages. I model my FIRE plan using my worst expense year as the baseline, then add a 10% safety margin. If I can survive early retirement during my most expensive year, I’m much more confident.

3. Model Tax Complexity

Here’s where Beancount shines over web calculators: you can use metadata tags to distinguish account types (Roth, Traditional, Taxable) and model withdrawal sequencing. Most generic FIRE calculators don’t handle Roth conversion ladders, 72(t) SEPP distributions, or state tax implications.

4. Export to Python for Advanced Scenarios

Beancount’s Python integration lets you export data to pandas and run Monte Carlo simulations with YOUR historical return patterns, YOUR spending volatility, and YOUR tax situation. I wrote a simple script that models 10,000 retirement scenarios using my actual Beancount data. The results were eye-opening compared to generic web tools.

The Projection Gap

Generic FIRE calculators told me I could retire at 45 with $1.2M. My Beancount-based analysis, using actual data, showed I need $1.6M to maintain the same confidence level. That’s 4 more years of work if I’d trusted the generic calculator.

This isn’t about being pessimistic. It’s about being precise. Plain text accounting gives us the data precision to model our actual lives, not hypothetical average lives.

What I’m Still Figuring Out

I’m working on better ways to:

  • Model sequence-of-returns risk using historical Beancount portfolio data
  • Incorporate Social Security uncertainty and policy changes
  • Track healthcare cost inflation separately (it’s brutal for early retirees in the Medicare gap years)
  • Build dynamic withdrawal strategies that adjust based on market performance

Question for this thread: Have you discovered gaps between generic calculator projections and your actual Beancount data? What queries or scripts have you built for retirement planning that go beyond the standard online FIRE tools?

This resonates so much with my experience, Fred. I made the exact same mistake early in my FIRE journey – trusting those shiny online calculators without questioning their assumptions.

My Wake-Up Call

About 2 years into tracking with Beancount, I ran the numbers and discovered my actual annual spending was 15% higher than what I’d been plugging into FIRE calculators. Turns out my “mental budget” was aspirational, not real. I was conveniently forgetting:

  • Irregular but inevitable expenses (car registration, annual insurance, property tax)
  • The creeping lifestyle inflation I wasn’t consciously tracking
  • Medical expenses that varied wildly year to year
  • Home maintenance costs that hit in lumps, not smooth monthly amounts

That 15% gap meant my FIRE number was off by nearly $250k. I would have retired early, only to discover I couldn’t afford my actual lifestyle. Terrifying thought.

Start Simple, Then Get Fancy

Fred, I love your Python Monte Carlo approach, but I want to encourage folks just getting started: you don’t need to build a sophisticated model on day one.

Here’s my “beginner FIRE tracking” workflow with Beancount:

Step 1: Get one full year of real data
Just track everything honestly for 12 months. Don’t change your behavior. Don’t optimize yet. Establish your actual baseline.

Step 2: Run this simple query to calculate annual expenses

SELECT year, sum(position) AS total_expenses
WHERE account ~ 'Expenses:' 
  AND NOT account ~ 'Expenses:Taxes'
GROUP BY year;

(I exclude taxes because those will be different in retirement for most people.)

Step 3: Multiply by 25 (the basic 4% rule)

Your baseline FIRE number = Annual Expenses × 25

Step 4: Add safety margins based on what you learned

  • Had an expensive year with major repairs? Add 10-15% buffer
  • Healthcare costs unclear? Add $10-15k/year until Medicare (age 65)
  • Want to travel more in early retirement? Add projected increase

The Multi-Year Reality Check

What Beancount showed me over 4+ years of tracking: expense variance is real and matters.

My annual spending ranged from $62k (a “cheap” year) to $81k (expensive year with roof replacement and medical issues). Generic calculators would use the average (~$71k) and call it good.

But if you retire and hit several expensive years in a row (sequence-of-expenses risk, anyone?), you’re in trouble. I now model my FIRE plan around $85k annual spending (worst year + buffer) instead of the average.

The BQL Query That Changed My Planning

Here’s one I use all the time – tracking expense trends by category over multiple years:

SELECT account, year, sum(position) AS amount
WHERE account ~ 'Expenses:'
GROUP BY account, year
ORDER BY account, year;

Export that to CSV and you can see exactly which categories are inflating faster than others. For me, healthcare and housing jumped 6-7% annually, while food stayed relatively flat. Generic FIRE calculators assume uniform inflation across all spending. That’s naive.

My Advice: Measure First, Optimize Second

Don’t start by building complex models. Start by tracking honestly for 12 months, then look at your actual numbers. You might be surprised (I was). Then gradually add sophistication.

And Fred’s right – exporting to Python + pandas opens up incredible analysis possibilities once you have the data foundation. But you need that foundation first.

Question for you, Fred: How do you handle modeling investment returns in your Monte Carlo simulation? Do you use your actual historical portfolio performance, or do you use market-wide historical data? I’ve been debating which approach is more realistic for long-term projections.

Great post. This is exactly the kind of practical FIRE discussion this community needs.

This is exactly the kind of discussion I’ve been looking for! I’ve spent the past year diving deep into the FIRE movement, and I’ve realized there’s actually a whole spectrum of FIRE approaches beyond just “regular FIRE.”

The Four Main FIRE Variations I’ve Identified

Let me break down what I’ve learned about the different FIRE paths and how they change your target numbers:

LeanFIRE ($25k-40k/year)

  • Annual expenses: $25,000-$40,000
  • Target portfolio: $625k-$1M (using 25X rule)
  • Philosophy: Extreme frugality, minimalism, often involves geographic arbitrage
  • Reality: Requires significant lifestyle adjustments but achievable much faster

FatFIRE ($100k-200k+/year)

  • Annual expenses: $100,000-$200,000+
  • Target portfolio: $2.5M-$5M+
  • Philosophy: Maintain or exceed middle-class lifestyle in retirement
  • Reality: Takes much longer to achieve, but provides substantial cushion for unexpected expenses

CoastFIRE (Front-load savings, coast later)

  • Save aggressively in your 20s-30s until you hit your “Coast number”
  • Stop contributing, let compound interest grow the portfolio to your FI number by traditional retirement age
  • Can take lower-stress or lower-paying jobs without worrying about retirement savings
  • Provides career flexibility decades before actual retirement

BaristaFIRE (Semi-retirement with part-time work)

  • Portfolio covers ~50-75% of living expenses
  • Part-time work covers the gap (and often provides health insurance benefits)
  • Reduces portfolio withdrawal pressure during market downturns
  • Provides social engagement and sense of purpose

Modeling This in Beancount: My Approach

Here’s where Beancount becomes incredibly powerful for FIRE planning:

1. Calculate True Annual Expenses
Not what you think you spend, but what you actually spend based on historical transaction data. This is critical because your FIRE number depends on it.

2. Track Net Worth Progression
Monitor whether you’re on track to hit your target number. I track this monthly.

3. Identify Which FIRE Path You’re Actually On
This was a revelation for me: I started thinking I wanted FatFIRE, but when I analyzed 3 years of actual Beancount data, I discovered I’m living a lifestyle somewhere between Lean and Coast FIRE. The data doesn’t lie.

4. Stress-Test Your Assumptions

  • What if markets return 6% instead of 8%?
  • What if inflation runs at 4% instead of 2.5%?
  • What if you need expensive healthcare before Medicare eligibility at 65?
  • What about sequence of returns risk if you retire into a bear market?

My Current Numbers (Real Data)

I’m 8 years into my career as a financial analyst, using Beancount for 3 years:

  • Current annual expenses: ~$45k (based on actual Beancount queries)
  • Target FIRE number: $1.35M (using conservative 30X instead of 25X for longer time horizon)
  • Current portfolio: $380k
  • Projected timeline: 12-15 years at current 55% savings rate

The beautiful thing about Beancount is that I can query my last 3 years of spending, break it down by category, and see exactly where my money goes. No guessing. No spreadsheet drift. Just accurate data.

Questions for Everyone Here

How are you modeling your specific FIRE path in Beancount?

  • Do you separate essential vs discretionary expenses in your account structure?
  • How do you handle one-time expenses (new car, home repair) vs recurring costs in your FIRE calculations?
  • Are you tracking toward a specific FIRE number, or more of a flexible range?
  • Which FIRE variation are you actually pursuing?

I’m working on a custom Fava plugin to visualize FIRE progress and show which path I’m trending toward based on actual spending patterns. Would love to hear what others are building or what queries you’re finding most useful.

The key insight: Your FIRE path might change as your life evolves. Having solid Beancount data lets you adapt your plan based on reality, not hopes or outdated assumptions.

Fred

@finance_fred - Really appreciate you breaking down all the FIRE variations so clearly! This is one of the best summaries I’ve seen.

My FIRE Journey: From FatFIRE Dreams to CoastFIRE Reality

I want to share my own experience because I think it’ll resonate with what Fred described about your actual data revealing your true path.

When I started with Beancount 4+ years ago, I was convinced I needed FatFIRE. I was modeling for $120k/year spending and a $3M+ target. But after tracking my actual expenses for 18 months in Beancount, I realized something: I don’t actually spend anywhere near that much, and I don’t want to.

My real annual expenses: ~$52k
My original FatFIRE target: $3M
My adjusted CoastFIRE reality: $1.5M by age 50, then coast to traditional retirement

The data forced me to confront the difference between what I thought I wanted and what I actually valued.

Start Simple: My Advice for Anyone Beginning FIRE Tracking

Here’s what I wish someone had told me when I started:

1. Just track expenses accurately for 6-12 months first
Don’t try to build the perfect account structure or sophisticated FIRE dashboard right away. Get clean data flowing in. Understand your baseline.

2. Use a simple expense categorization
I started with like 40 expense categories. Way too granular. Now I use:

  • Housing (rent/mortgage, utilities, maintenance)
  • Food (groceries + dining)
  • Transportation
  • Healthcare
  • Entertainment/discretionary
  • Everything else

That’s it. You can always add detail later if you need it.

3. Don’t obsess over the multiplier (25X vs 30X vs 33X)
I see people spending hours debating whether to use 25X or 30X before they even know their real annual expenses. Get 12 months of accurate spending data first, then stress-test different multipliers.

4. Your FIRE path WILL change
I’ve adjusted my target three times in 4 years. Life changes. Priorities shift. Having Beancount data lets you adapt intelligently instead of just guessing.

A Simple Beancount Query to Get Started

For anyone just beginning FIRE tracking, here’s the most valuable query I run monthly:

SELECT year, sum(position) as total_expenses
WHERE account ~ "^Expenses:"
  AND NOT account ~ "^Expenses:Taxes"
  AND NOT account ~ "^Expenses:OneTime"
GROUP BY year

This gives you your annual recurring expenses (excluding taxes and one-time purchases like a new car). That’s your baseline FIRE number calculation.

Once you have 12 months of clean data, multiply by 25-30X. That’s your target.

The Real Value of Beancount for FIRE

What makes Beancount special for FIRE planning isn’t fancy plugins or complex queries. It’s this:

Beancount makes it impossible to lie to yourself about your spending.

Spreadsheets drift. You forget to log transactions. You round numbers. You make optimistic assumptions.

With Beancount, every transaction is recorded. Your queries run against real data. Your FIRE projections are based on what you actually do, not what you hope you’ll do.

That honesty is worth more than any sophisticated dashboard.

To Answer Fred’s Questions

Do you separate essential vs discretionary expenses?

Yes, but loosely. I use metadata tags like #essential and #discretionary on transactions rather than separate account hierarchies. Easier to reclassify when priorities change.

Which FIRE variation are you pursuing?

Started with FatFIRE dreams, now solidly CoastFIRE. Hit my coast number last year at 36. Now I can take career risks I couldn’t before.

Great post, Fred. Looking forward to seeing your Fava plugin!

— Mike

Great discussion here! As a CPA who works with many clients pursuing FIRE, I want to add some professional perspective on what people often overlook when modeling early retirement.

The Three Critical Factors Most FIRE Plans Ignore

1. Healthcare Costs Before Medicare (Age 65)

This is the biggest gap I see in FIRE planning. Fred mentioned $45k annual expenses and Mike mentioned $52k, but I’d bet neither of those includes realistic healthcare costs if you leave employer-sponsored insurance.

Current reality for early retirees:

  • ACA marketplace plans: $400-$1,200/month per person (depending on subsidies)
  • High deductible: $5,000-$8,000/year before insurance pays anything
  • Out-of-pocket maximum: $8,000-$15,000/year per person

A healthy 40-year-old couple planning to FIRE needs to budget $15k-$25k/year for healthcare alone until Medicare eligibility at 65. That’s not a minor line item—it can add $375k-$625k to your FIRE number (using 25X rule).

2. Tax Planning for Early Withdrawals

The 4% rule assumes you’re withdrawing from a diversified portfolio, but the tax implications of those withdrawals vary dramatically:

  • Traditional 401k/IRA: Fully taxable as ordinary income + 10% penalty if under 59.5 (unless you use 72(t) SEPP or Roth conversion ladder)
  • Roth IRA: Contributions can be withdrawn tax-free anytime; earnings tax-free after 59.5
  • Taxable brokerage: Only capital gains taxed, potentially at 0% if you stay in low bracket

Most FIRE enthusiasts I work with need a withdrawal sequencing strategy, not just a simple 4% calculation. Beancount can model this, but you need to track account types and tax treatment separately.

3. Sequence of Returns Risk

If you retire into a market downturn and start withdrawing 4% immediately, you can deplete your portfolio much faster than historical averages suggest. This is called sequence of returns risk.

The 4% rule was validated for 30-year retirements. For 40-50 year early retirements, many financial planners now recommend:

  • 3% withdrawal rate (33X expenses instead of 25X)
  • 3.5% withdrawal rate with flexible spending (cut discretionary in down years)
  • Variable withdrawal strategies tied to market performance

Conservative FIRE planning means using 30X-33X instead of 25X, especially if you’re retiring in your 30s-40s.

What I Recommend for Beancount FIRE Tracking

Based on working with actual FIRE clients:

Track these separately in your account structure:

  1. Essential expenses (housing, food, utilities, insurance)
  2. Discretionary expenses (travel, entertainment, dining out)
  3. One-time expenses (car replacement, home repairs)
  4. Healthcare costs (separately, because they change dramatically at 65)
  5. Taxes (varies based on withdrawal strategy)

Model different scenarios:

  • Best case: 25X with 4% withdrawal, 7% real returns
  • Realistic case: 30X with 3.5% withdrawal, 5% real returns, elevated healthcare
  • Conservative case: 33X with 3% withdrawal, 4% real returns, high healthcare

Query your tax-advantaged account types separately:

; Track 401k vs Roth vs taxable separately
Assets:Investment:Retirement401k
Assets:Investment:RothIRA
Assets:Investment:Taxable

This lets you model withdrawal sequencing and optimize for taxes.

Real Client Example (Numbers Changed)

I have a client who came to me excited about hitting their FIRE number at age 42 using the 25X rule:

  • Annual expenses tracked in Beancount: $60k
  • FIRE target (25X): $1.5M
  • Actual portfolio: $1.52M
  • They thought they were ready to quit.

After tax and healthcare analysis:

  • Healthcare: +$18k/year until 65 (23 years)
  • Tax-inefficient withdrawals: +$8k/year
  • Real annual need: $86k, not $60k
  • Adjusted FIRE number (30X): $2.58M
  • They were $1M short.

They’re still working, now age 45, but with a realistic plan. Better to know the truth than retire and run out of money at 65.

My Take on the FIRE Variations

  • LeanFIRE: Achievable but requires extreme discipline and healthcare is still expensive
  • FatFIRE: Much safer margin for error, healthcare costs are manageable, allows for lifestyle inflation
  • CoastFIRE: Smart middle ground—reduces career pressure while avoiding early withdrawal risks
  • BaristaFIRE: Often the most realistic for healthcare reasons alone (part-time work for insurance)

Mike’s CoastFIRE approach is actually what I recommend to most clients. You get financial security and career flexibility decades before you need to tap your portfolio, avoiding the most dangerous period for sequence of returns risk.

Questions for Fred and Mike

Fred - are you modeling healthcare costs separately? What’s your plan for insurance between FIRE and Medicare?

Mike - did you include healthcare in your $52k annual expenses, or is that on top?

Great conversation. Happy to discuss tax-efficient withdrawal strategies if anyone’s interested.

— Alice