The Harsh Truth: How Beancount Showed Me I Was Making $31/Hour (Not $65)

After three years of freelancing, I finally faced a harsh truth: I wasn’t making anywhere near what I thought I was charging.

The Wake-Up Call

I left my day job as a financial analyst to pursue freelance work, thinking I’d make great money at $65/hour. On paper, that’s $135,000 a year at 40 hours per week. Reality? I was making the equivalent of $31/hour when I actually did the math in Beancount.

The Brutal Math

Here’s what I discovered when I started tracking everything in my Beancount ledger:

Quoted rate: $65/hour
Hours worked per week: 45 (thinking I was hustling!)
Billable hours per week: Only 24
Annual billable hours: 1,248 (not the mythical 2,080)

The rest of my time went to:

  • Writing proposals and estimates (8-10 hours/week)
  • Client emails and communication (4-5 hours/week)
  • Invoicing and bookkeeping (2-3 hours/week)
  • Marketing and business development (4-6 hours/week)

Gross income: $81,120
Platform fees (Upwork 10%): -$8,112
Health insurance: -$10,800/year ($900/month)
Business expenses (software, equipment, etc.): -$4,200
Self-employment tax + income tax (~35% effective): -$20,153

Net take-home: $37,855
Actual hours worked: 2,340 (45 hours × 52 weeks)
True hourly rate: $16.18/hour

Wait, it gets worse. That doesn’t include retirement savings (which my old employer matched) or paid time off (which I no longer had). If I factor in 2 weeks unpaid vacation and lost 401k match, my effective rate was even lower.

How Beancount Exposed the Truth

I set up my ledger to track this properly:

2025-01-15 * "Acme Corp" "Project Alpha - Phase 1" #client-acme #billable
  Income:Consulting:Billable              -1300.00 USD
  time: "20 hours"
  effective-rate: "65.00 USD"
  Assets:Bank:Checking                     1300.00 USD

2025-01-15 * "Time spent" "Proposal writing for new client" #unbillable #sales
  Expenses:Time:Unbillable                    0.00 USD
  time: "4 hours"

Every week, I tag my time as #billable or #unbillable. Then I run this query monthly:

SELECT 
  sum(number(time)) as total_hours,
  sum(position) as revenue
WHERE account ~ 'Income:Consulting:Billable'

The dashboard I built in Fava shows:

  • Billable vs unbillable hours
  • Effective hourly rate (after platform fees)
  • Net hourly rate (after all business expenses)
  • True hourly rate (after taxes)

What I Changed

Armed with real data, I made hard decisions:

  1. Raised my rates to $95/hour (lost 2 low-value clients who were shocked)
  2. Stopped bidding on Upwork (20% platform fee was killing me)
  3. Implemented project minimums ($2,000 minimum, no exceptions)
  4. Tracked proposal conversion rates (stopped writing proposals for <30% close rate industries)

Six months later:

  • Billable hours: 28/week (increased by focusing on fewer, better clients)
  • Gross income: $137,280 annually
  • True hourly rate: $52/hour after all expenses and taxes

Still not where I want to be, but 221% better than where I started.

The Question That Haunts Me

How many freelancers out there think they’re making good money but haven’t actually run the numbers?

For those of you tracking consulting/freelance income in Beancount: how do you calculate your true hourly rate? Do you factor in unbillable time? What rate would you need to match your previous W-2 lifestyle?

I’m sharing this because I wish someone had shown me these numbers three years ago. The math is uncomfortable, but it’s the only way to build a sustainable practice.

This hits way too close to home. I had almost the exact same experience last year.

I thought I was doing amazing tracking all my income in Beancount and watching my savings rate climb toward FIRE. Then I actually calculated my effective hourly rate and realized I’d be better off financially (and stress-wise) going back to a W-2 job.

My Tracking Setup

I track time differently but the concept is similar. Here’s my account structure:

Income:Consulting:Billable
Income:Consulting:Unbillable     ; For tracking value of unpaid work
Expenses:Business:Healthcare
Expenses:Business:Software
Expenses:Business:Marketing
Expenses:Business:Professional-Development
Assets:Retirement:Solo401k       ; Track what I'm saving vs employer match I lost

Every Sunday evening, I categorize all my time from the week. I use this custom importer script that reads from my Toggl time tracking and creates Beancount transactions with time metadata.

The BQL Query I Run Monthly

SELECT 
  account,
  sum(number(time)) as hours,
  sum(convert(position, 'USD')) as amount,
  sum(convert(position, 'USD')) / sum(number(time)) as hourly_rate
WHERE account ~ 'Income:Consulting'
GROUP BY account
ORDER BY account

This shows me:

  • Total billable hours and revenue
  • Total unbillable hours (which I value at my target rate to see opportunity cost)
  • My actual effective rate

The Dashboard That Changed Everything

I built custom Fava views that show:

  1. Monthly billable utilization (billable hours / total working hours) - mine was 52%, I thought it’d be 80%+
  2. Client profitability matrix - which clients pay well vs which are time sinks
  3. Revenue per hour trend - is my effective rate improving over time?
  4. Tax burden calculator - shows my effective tax rate increasing with income

The tax one was eye-opening. As a W-2 employee I paid about 28% effective rate. Self-employed? I’m at 37% effective when you include self-employment tax, and it goes up from there.

My Current Numbers

Quoted rate: $85/hour
Billable utilization: 56% (up from 52% last year)
Effective hourly rate: $48/hour after taxes and expenses
Needed to match old W-2 lifestyle: $62/hour effective

So I’m still about 22% short of my old lifestyle, despite charging 70% more per hour than you started at.

The Question I Ask Myself Monthly

“What rate would I need to charge to achieve my FIRE number on this schedule?”

The answer is sobering: $140/hour minimum to maintain my old savings rate toward FIRE, assuming I can keep 56% utilization.

Right now I’m at $85/hour and terrified to raise rates because I’ll lose clients. But this thread is a good reminder that I need to make that leap.

How did you handle the fear of losing clients when you raised to $95? Did you grandfather existing clients or raise everyone?

I see this exact problem with almost every freelance client I work with. You’re not alone, and honestly, most freelancers are in worse shape than you because they’re not even tracking it.

The Pattern I See as a Bookkeeper

When freelancers come to me, here’s what I typically find:

  1. Platform fees buried in deposits - they don’t even realize Upwork/Fiverr took 20%
  2. Quarterly estimated taxes ignored - then panic when they owe $15K in April
  3. Healthcare treated as “personal” expense - not factored into business costs
  4. No retirement contributions - because there’s “nothing left over”
  5. Unbillable time not tracked - so they have no idea it’s 40-50% of their work

When I set up their Beancount ledgers, I create this structure:

Income:
  Freelance:
    Gross                          ; What client agreed to pay
    PlatformFees                   ; Negative income - the cut platforms take

Expenses:
  Business:
    Healthcare                     ; This is a business cost, not personal
    Software
    Equipment
    Marketing
    ProfessionalDevelopment
    
  Taxes:
    FederalIncome                 ; Estimated payments
    StateTax
    SelfEmployment               ; The hidden 15.3%
    
  Retirement:
    Solo401k                      ; Must pay yourself first

Assets:
  Receivables:
    Outstanding                   ; Invoices not yet paid

The “Freelancer Sustainability Test” I Run

I have every client run these numbers quarterly:

Can you hit these targets?

  • Save 20% of gross for retirement? (If not, rates too low)
  • Pay 25-30% for healthcare + self-employment tax? (Build this in)
  • Cover quarterly estimated taxes without panic? (Proof of sufficient margin)
  • Live on remaining 25-30% comfortably? (Lifestyle sustainability)

If they can’t hit all four, their rates are too low. Period.

The Pricing Framework I Teach

Most freelancers price backwards. They think:

“I need $60K to live → 2,000 hours work year → $30/hour”

Wrong. Here’s the right formula:

Target take-home:        $60,000
+ Retirement (20%):      $15,000
+ Healthcare:            $10,800
+ Taxes (30% of gross):  $36,600
+ Business expenses:     $8,000
= Gross needed:          $130,400

÷ Billable hours:        ÷ 1,200 hours (realistic, not theoretical)
= Minimum hourly rate:   $109/hour

Most freelancers quote $40-50/hour and wonder why they’re broke.

My Recommendation: Raise Rates 20% Annually

Here’s what I tell clients:

Year 1: Get your bookkeeping solid. Track everything in Beancount. Calculate your real numbers.

Year 2: Raise rates 20% for all NEW clients. Grandfather existing clients for 6 months.

Year 3: Raise rates another 20%. Tell grandfathered clients “new rate or we part ways.”

Year 4+: Keep raising 20% annually until you lose 1-2 clients per year. That’s your market rate.

The clients you lose were the unprofitable ones anyway. Beancount will prove it when you look at your client profitability queries.

The Reality Check

If you’re working 45 hours per week and taking home less than you did as an employee, you don’t have a business - you have an expensive hobby.

@helpful_veteran, your numbers are solid proof of this. You’re charging $65/hour but making $31/hour effective. That’s a 52% discount on your own labor.

The good news? You’re tracking it, which means you can fix it. Most freelancers never even see the problem.

My question for this thread: How many of you have actually calculated your effective hourly rate including ALL costs? And how many are scared to run the numbers?

As a CPA who works with freelancers and consultants, I want to add a critical piece that both @helpful_veteran and @finance_fred might be missing: the true cost of lost benefits.

The Hidden W-2 Benefits You’re Not Accounting For

When you left your W-2 job, you lost more than just a paycheck. You lost:

  1. Employer FICA match: 7.65% of your salary (now you pay both halves = 15.3%)
  2. Employer 401k match: Typically 3-6% of salary
  3. Subsidized health insurance: Employer paid 70-80% of premium
  4. Paid time off: 15-20 days = 6-8% of working time
  5. Workers comp insurance: Protects you if injured
  6. Unemployment insurance: Safety net you no longer have
  7. Professional development budget: Conferences, training, books
  8. Equipment and software: Laptop, phone, subscriptions
  9. Liability insurance: E&O coverage for professional services

Let me show you the math on a $80,000/year W-2 job:

Salary:                          $80,000
Employer FICA match:             $6,120
Employer 401k match (5%):        $4,000
Health insurance subsidy:        $8,400  ($700/mo employer portion)
Paid time off value:             $6,154  (20 days × $307.69/day)
Professional development:        $2,000
Equipment/software:              $1,500
Unemployment insurance:          $480
Workers comp:                    $400
= TOTAL COMPENSATION:            $109,054

To match that compensation as a freelancer with the same take-home, you’d need to earn $109,054 gross, not $80,000.

The Beancount Setup for True Cost Tracking

I recommend my freelance clients set up “shadow accounts” to track opportunity costs:

Equity:Benefits:Lost:FICA-Match
Equity:Benefits:Lost:401k-Match
Equity:Benefits:Lost:Healthcare-Subsidy
Equity:Benefits:Lost:PTO

; Then monthly, record what you would have had:

2026-01-31 * "Lost benefits opportunity cost" #analysis
  Expenses:OpportunityCost:FICA               510.00 USD
  Expenses:OpportunityCost:401k-Match         333.33 USD
  Expenses:OpportunityCost:Healthcare         700.00 USD
  Expenses:OpportunityCost:PTO                512.95 USD
  Equity:Benefits:Lost                              -2,056.28 USD

This doesn’t affect your tax return, but it shows you the real comparison between freelancing and W-2 work.

The Tax Planning Piece You’re Missing

@bookkeeper_bob is right about the sustainability test, but there’s another layer: tax optimization opportunities freelancers should use:

  1. Solo 401k contributions: Up to $69,000/year (2026 limit)
  2. Health Savings Account: $4,150 for individuals (triple tax advantaged)
  3. Home office deduction: Typically $5-8K for dedicated space
  4. SEP IRA or Solo 401k: Reduce taxable income significantly
  5. Quarterly estimated tax strategy: Pay exactly safe harbor, invest the rest

If you’re not using these, you’re overpaying taxes by $5-10K annually.

The Real Numbers for Matching $80K W-2

Here’s what you actually need to charge to match an $80K W-2 job:

Target net income:               $80,000
+ Retirement (20%):              $20,000
+ Healthcare (unsubsidized):     $10,800
+ Lost benefits:                 $9,054
+ Business expenses:             $6,000
= Subtotal:                      $125,854

+ Self-employment tax (15.3%):   $19,256
+ Federal/State income tax:      $28,500
= Gross income needed:           $173,610

÷ Realistic billable hours:      ÷ 1,200
= Required hourly rate:          $145/hour

That’s nearly double what most people think they need to charge.

My Professional Advice

  1. Run your real numbers in Beancount - set up the accounts properly
  2. Calculate your true costs - including lost benefits and opportunity costs
  3. Set a target rate - based on math, not fear
  4. Raise rates incrementally - 20-30% annually until you hit market ceiling
  5. Fire unprofitable clients - Beancount will show you who they are
  6. Invest in tax optimization - a good CPA pays for themselves

@helpful_veteran - your story is powerful because you’re tracking it. But $52/hour effective after raising to $95/hour means you’re still undercharging if you want to match typical W-2 compensation + benefits.

The question isn’t “should I raise rates?” It’s “how fast can I raise rates without losing all my clients at once?”

Has anyone here successfully made the transition from undercharging to sustainable rates? What worked?