Salary Negotiation by the Numbers: How I Used My Beancount Data to Justify a 12% Raise

Just got word this morning – my manager approved a 12% salary increase! In a year where most people are getting 3.5%, I’m honestly thrilled. More importantly, I want to share how I did it, because it was 100% powered by three years of obsessive Beancount tracking.

The Setup: Why I Even Asked

I’ve been tracking every transaction in Beancount since early 2023, initially just for FIRE planning. But last month, I ran some queries comparing my 2023 vs 2025 expenses and had an “oh crap” moment: my actual cost of living had increased 8.2% over two years, while my salary had only gone up 4% total (2% in 2024, 2% in 2025).

The gap was getting worse, not better.

The Three-Part Case I Built

1. Cost-of-Living Reality (Not “I feel like everything’s more expensive”)

Instead of vague gestures at inflation, I pulled real numbers from my ledger:

;; My actual increases 2023 → 2025
Expenses:Housing:Rent       +12.0%  ; Landlord raised rent twice
Expenses:Transportation     +15.3%  ; Gas + insurance + parking
Expenses:Food:Groceries     +9.7%   ; Same stores, same items
Expenses:Healthcare         +22.1%  ; Higher deductible plan in 2024

Weighted by my spending mix, that came to 8.2% real increase in my cost structure. I didn’t editorialize – just showed the query output and a clean chart.

2. Lifestyle Inflation From My Last Promotion

Here’s what nobody talks about: my 2024 promotion to senior analyst came with a 6% raise… and a bunch of new costs:

  • Moved closer to office (higher rent) because in-office 3x/week became mandatory
  • Childcare costs increased ($400/month) because new hours weren’t compatible with old arrangement
  • “Professional wardrobe” budget because I’m now in client meetings

I tracked all of this in Beancount with tags: #post-promotion-expenses. Turned out the promotion cost me about $850/month in new recurring expenses, eating up 60% of my raise.

My manager had no idea. He assumed the 6% was pure win. Showing him the math was eye-opening for both of us.

3. Market Rate Evidence + My Reality

I combined external data (Levels.fyi, Payscale, Glassdoor for my role/location/experience) with my Beancount tracking to show:

  • Market rate for my role: $95K-$110K
  • My current salary: $88K
  • My actual purchasing power after real expense increases: equivalent to ~$81K in 2023 dollars

Framed as: “I’m not asking to be overpaid. I’m asking to catch up to market and maintain the purchasing power I had when I started.”

The Conversation

My manager’s first reaction: “I had no idea you tracked this so carefully.”

His second reaction: “This is… actually really compelling. Let me talk to HR.”

The key moment was when I showed him my balance_sheet.py output with year-over-year trends. It wasn’t emotional or demanding – it was data asking a question: Given these facts, what’s fair?

He came back two weeks later with 12%. Not everything I wanted (I’d asked for 15%) but way better than the 3% that was originally budgeted for me.

What I Learned

1. Personal expense data makes “cost of living” concrete
HR thinks in CPI percentages. I think in actual grocery bills. Showing my reality mattered.

2. Employers respect preparation
The fact that I had three years of clean data signaled I was serious, not just fishing for more money.

3. Timing + presentation matter
I didn’t show up with raw Beancount output. I used bean-query to generate clean CSVs, then made simple charts in Google Sheets. Professional but not over-produced.

4. Combine internal + external data
Personal expenses alone = “your problem.” Market rates alone = “just numbers.” Together = “here’s the full picture.”

Questions for the Community

I’m curious what others think:

  • What financial metrics would you track for this? Just expenses? Or also “hidden costs” like commute time, health impacts, etc.?
  • How far back is convincing? I had 3 years. Is 1 year enough? 5 years overkill?
  • Would you ever show raw ledger to employer? I sanitized heavily – is that necessary?
  • Has anyone else done this? Did it work? What happened?

Would love to hear experiences, especially from people on the other side (managers/business owners) – how would you react to an employee showing up with this level of detail?


TL;DR: Used 3 years of Beancount data to document 8.2% real cost increase, lifestyle inflation from previous promotion, and market rate gap. Result: 12% raise in a 3.5% year. Data beats feelings every time.

This is absolutely brilliant, and honestly, I’m kicking myself for not thinking of this sooner! I’ve been using Beancount obsessively for 4+ years for my FIRE tracking, investment analysis, tax planning… but somehow NEVER connected the dots to salary negotiation.

You’re 100% right that the discipline of tracking builds confidence. When you have years of clean data, you know your numbers cold. There’s no hesitation, no “I think maybe…” It’s just facts. That confidence probably came through in your conversation with your manager.

Start Tracking NOW

Here’s my biggest takeaway for anyone reading: Don’t wait until 3 months before your review to start tracking. Start now, even if your next salary conversation is 6-12 months away. Future you will thank present you for having that historical baseline.

I’m actually going to start a dedicated “salary-negotiation-prep” branch in my ledger repo right now to organize this kind of analysis.

Presentation Matters

One thing I’d emphasize: you were smart to NOT share your raw Beancount ledger. Even sanitized, I think showing raw transaction data to an employer crosses a privacy line. What you did – using bean-query to generate summary statistics and then presenting clean charts – is the perfect middle ground.

Employers don’t need to know you spent $47.23 at Trader Joe’s on March 15th. They need to see “Food expenses increased 9.7% over 2 years.” That’s the insight, not the raw data.

The Housing Question

Quick question: did you include your full housing costs in the analysis, or just rent? I’m thinking about things like:

  • Utilities (which have definitely increased with electricity rates)
  • Renter’s insurance (mine went up 15% last year)
  • Internet (ISPs love their annual “promotional rate expired” bumps)

My suspicion is that true housing cost inflation is even higher than the rent number alone suggests. For anyone doing this analysis, I’d recommend a comprehensive Expenses:Housing:* query to capture the full picture.

Next Steps for Me

I’m actually inspired to do this analysis even though I’m not currently job hunting. My theory: knowing your “real” compensation trajectory vs cost-of-living trajectory is valuable information regardless. If the gap is widening, that’s a signal to either negotiate or start updating the resume.

Going to create a Fava custom query for “Real Purchasing Power Over Time” this weekend. If it works well, I’ll share it here.

Congrats again on the 12% – that’s a huge win! :tada:

As someone who helps small business owners justify price increases to their customers, I LOVE this approach. The framework is identical: know your numbers, know your value, know your market.

What you did here is textbook good negotiation – you removed emotion and replaced it with evidence. That’s powerful.

The Employer Response Factor

One thing I want to flag, though, based on years of client conversations: not all managers respond well to personal expense data. I’ve seen it go both ways.

The positive response (like yours): Manager sees you as analytical, prepared, serious. Respects the homework. Views it as collaboration – “Let’s figure out what’s fair together.”

The negative response: Manager thinks “Your grocery bill isn’t my problem. We pay market rate for your role, and what you do with that money is your business.”

The difference often comes down to company culture and the individual manager’s empathy level. Some genuinely care about employee financial wellness. Others see compensation purely as labor market pricing.

Better Framing Strategy

Here’s how I’d recommend framing this to maximize success across different manager types:

Lead with Market Data + Performance

Start with: “Based on my research, market rate for my role with my experience level is $X-Y. Combined with the scope expansion in my responsibilities over the past year, I’d like to discuss a compensation adjustment to $Z.”

This is the business case. No manager can argue with market rate + performance. It’s about your value to the company, not your personal situation.

Follow with Cost-of-Living Reality (If Needed)

If the manager pushes back or seems skeptical, then bring in your personal expense analysis: “I want to add some context. I’ve been tracking my actual expenses, and my cost structure has increased 8.2% over two years while salary grew 4%. That’s not a complaint – it’s just the reality that makes this adjustment more urgent for me.”

This positions personal data as supporting evidence, not the primary argument. It humanizes the request without making it about your grocery bills.

The Small Business Parallel

I have a client who roasts coffee beans. Last year, green coffee prices jumped 18%, packaging increased 12%, and shipping went up 15%. When she raised retail prices 10%, some customers complained.

Her response: “Here’s my cost breakdown. Here’s what competitors charge. Here’s why this price reflects the value you’re getting.”

She combined internal cost data (like your Beancount tracking) with market positioning (like your Levels.fyi research). Same playbook. Different context.

Presentation Question

I’m really curious: How did you present this?

  • Printed report you handed to your manager?
  • Slides during a scheduled meeting?
  • Charts in a shared doc?
  • Casual conversation with phone screenshots?

I find presentation format often matters as much as the content itself. Professional presentation = serious request. Casual conversation = “just thinking out loud.”

For Small Business Owners Reading This

If an employee came to you with this level of analysis, here’s my advice as a consultant:

  1. Appreciate the preparation – this person cares enough to do homework
  2. Separate personal data from market data – you’re not obligated to match their cost increases, but you are competing with market rates
  3. Be honest about what’s possible – if budget is tight, say so and discuss timeline
  4. Use it as a retention signal – someone doing this analysis might also be doing job search research

This is a conversation starter, not a demand. Treat it that way.

Final Thought

The Beancount community is uniquely positioned to do this well because we already have the data discipline built in. Most people feel their expenses going up. We can prove it.

That’s a negotiating superpower if used strategically.

Congrats on the outcome – and thanks for sharing the playbook! :seedling:

This is absolutely brilliant – and I’m feeling a bit embarrassed that I haven’t done this myself! As a CPA who advises clients on business financial decisions all day, I’ve somehow completely neglected to apply the same rigor to my own compensation.

The irony is not lost on me: I track client dollars obsessively, analyze their revenue trends, optimize their expenses… but I’ve never thought to use Beancount data to justify asking for a raise at my own firm.

The CPA Blind Spot

I think there’s something about working in accounting that makes us terrible at advocating for our own compensation. We’re so used to being behind the scenes, helping other people make money decisions, that we forget to apply those same principles to ourselves.

Plus, there’s this culture in accounting firms where you’re supposed to just accept whatever the standard merit increase is and be grateful. Pushing back feels almost… unprofessional? Which is ridiculous when you think about it.

The “True Take-Home” Calculation

One thing I’d add to your analysis: have you calculated your true take-home after accounting for taxes, benefits costs, retirement contributions, and other deductions?

I bet if you did a query like:

SELECT year, 
  account_balance('Income:Salary') as gross_salary,
  account_balance('Expenses:Taxes:Federal') + account_balance('Expenses:Taxes:State') as taxes_paid,
  account_balance('Expenses:Healthcare:Insurance') as healthcare_costs,
  (gross_salary - taxes_paid - healthcare_costs) as net_purchasing_power
FROM year in [2023, 2024, 2025]

You’d probably find your actual purchasing power increased even less than the nominal 4% salary bump.

This is especially true if:

  • Your healthcare premiums went up (mine jumped 18% in 2024)
  • You maxed out your 401(k) (which is great for retirement but reduces current cash flow)
  • You’re in a higher tax bracket now (congratulations, but also ouch)

The Opportunity Cost Angle

Here’s another metric I’ve been thinking about: opportunity cost of NOT asking for a raise.

Let’s say you spend 10 hours total:

  • 2 hours setting up Beancount queries and analysis
  • 2 hours researching market rates
  • 1 hour creating the presentation
  • 5 hours spread across: initial conversation, follow-ups, negotiation

If those 10 hours result in a $10,000 raise, that’s an effective “hourly rate” of $1,000 for your negotiation work. And that compounds every year you stay at the company.

Compare that to the alternative: spending 10 hours on a side gig or consulting work that might pay $50-150/hour one time.

The ROI on salary negotiation is INSANE when you think about it this way.

My Personal Challenge

You’ve inspired me. I’m going to do this exact analysis this quarter to prepare for my year-end review in December.

My hypothesis: my real purchasing power has declined over the past 3 years despite nominal raises, and I’ve been subsidizing firm profitability with my wage stagnation.

That’s not sustainable. And I have the data to prove it.

Question for You

How did you handle the psychological/emotional aspect of this? Were you nervous going into the conversation? Did you worry about seeming greedy or demanding?

I think one barrier for many people (especially in accounting, especially women in accounting) is the discomfort with self-advocacy. Even when you have the data, actually saying “I deserve more money” feels hard.

Did your Beancount data give you confidence to push through that? Or was it still uncomfortable?

Would love to hear the behind-the-scenes emotional journey, not just the tactical approach.


Bottom line: CPAs need to take our own advice. If we wouldn’t let a client accept stagnant revenue while costs rise, why do we accept it for ourselves?

Thanks for the wake-up call. :bar_chart: