December is the most important month for tax planning. Here’s my comprehensive year-end checklist and how Beancount helps execute each move.
The December Tax Planning Dashboard
2026-12-01 custom "year-end-review" "Annual tax planning checklist"
; Income summary
ytd-gross-income: 245000.00
projected-december-income: 20000.00
total-projected-income: 265000.00
; Deductions
standard-deduction: 32200.00
projected-taxable-income: 232800.00
current-bracket: "24%"
; Action items
tax-loss-harvest-opportunity: 8500.00
roth-conversion-room: 0.00 ; already in 24%
charitable-contribution-planned: 15000.00
hsa-max-remaining: 2000.00
December Checklist by Category
1. Max Out Tax-Advantaged Accounts
SELECT
'401k' as account,
24500 - sum(position) as remaining
WHERE account ~ 'Income:Salary:401k'
AND year = 2026
UNION
SELECT
'HSA' as account,
8750 - sum(position) as remaining
WHERE account ~ 'Income:HSA'
AND year = 2026
2. Tax Loss Harvesting
SELECT
account,
sum(position) as cost_basis,
sum(value(position)) as current_value,
sum(value(position)) - sum(position) as unrealized_gain_loss
WHERE account ~ 'Assets:Brokerage'
AND commodity != 'USD'
GROUP BY account
HAVING sum(value(position)) - sum(position) < 0
3. Charitable Giving (Bunching Year?)
4. Roth Conversions
5. Required Minimum Distributions (if 73+)
6. Estimated Tax Payments Q4
What’s on your December checklist?
My December routine has become very systematic thanks to Beancount. Here’s my expanded checklist:
The “First Week of December” Queries
I run these on December 1st every year:
-- 1. Capital gains/losses YTD
SELECT
'Realized Gains' as category,
sum(position) as amount
WHERE account ~ 'Income:.*:CapGains'
AND year = 2026
-- 2. Unrealized losses for harvesting
-- (use Fava's holdings report)
-- 3. Retirement contribution room
SELECT
account,
sum(position) as contributed
WHERE account ~ 'Assets:Retirement'
AND year = 2026
GROUP BY account
My Tax Loss Harvesting Protocol
; Step 1: Sell the loser
2026-12-10 * "Vanguard" "Tax loss harvest - sell VTI"
Assets:Brokerage:Cash 9500.00 USD
Assets:Brokerage:VTI -100 VTI {120.00 USD}
Income:Investment:CapGains:LongTerm 2500.00 USD ; loss
harvest-type: "tax-loss"
wash-sale-window-ends: 2027-01-09
; Step 2: Buy similar (not identical) fund
2026-12-10 * "Vanguard" "Replace with ITOT"
Assets:Brokerage:ITOT 95 ITOT @ 100.00 USD
Assets:Brokerage:Cash -9500.00 USD
replacement-for: "VTI"
substantially-identical: FALSE
Don’t Forget: Gifting!
Annual gift exclusion for 2026 is $19,000 per recipient. If you’re doing estate planning, December is the deadline.
As a CPA, December is my busiest month for client planning calls. Here’s what I always remind people:
Key December Deadlines
| Deadline |
Action |
| Dec 31 |
Last day for Roth conversions to count in 2026 |
| Dec 31 |
Last day to realize capital gains/losses |
| Dec 31 |
Charitable donations (cash must clear bank) |
| Dec 31 |
RMDs must be taken |
| Dec 31 |
HSA contributions via payroll |
| Apr 15, 2027 |
IRA/HSA contributions for 2026 (not employer plans!) |
The Wash Sale Trap
@finance_fred mentioned this, but I can’t stress it enough. Watch ALL your accounts:
-- Check for potential wash sales across all accounts
SELECT
commodity,
account,
date,
sum(position) as shares
WHERE commodity IN ('VTI', 'ITOT', 'VTSAX', 'FSKAX') -- similar funds
AND date >= 2026-11-01
AND date <= 2027-01-31
GROUP BY commodity, account, date
ORDER BY commodity, date
The “Mid-December Review” Meeting
I schedule 30 minutes with every client in mid-December. We review:
- YTD income vs projection
- Unrealized gains/losses
- Retirement contribution status
- Any expected windfalls before year-end
Beancount users: your data makes this meeting SO much easier. Bring your queries!