I recently took advantage of a strategy called “bunching” where you combine multiple years of charitable contributions into one year. I’ll use a made up example here but you could plug in your own numbers.
This strategy has worked in years past but it’s gotten better because of the 2025 One Big Beautiful Bill Act which increased the SALT cap to $40,000 (from $10,000). SALT = state and local taxes, which can include income taxes (or sales taxes instead), plus property taxes. It’s important here because you are allowed to deduct state and local income taxes from your federal return. This change is effective for tax years 2025-2029.
ImportantCorrection
I was mistaken. The increase in SALT from $10,000 to $40,000 actually makes bunching make sense less in most years because if you live in a high tax state you can now deduct up to $40,000 in SALT. If your SALT is above $31,500 in a given year, it doesn’t make a lot of sense to bunch.
What is Bunching?
The idea is simple:
Year 1: Donate 2 years worth of charity in one year → Itemize deductions
When I’ve done this, I give next year’s amount (2026) in the last month of the prior year (Dec 2025).
You could also put two years of charitable contributions into a Donor Advised Fund, take the itemized deduction in that year and then spread the donations out over two years.
Year 2: Make no charitable donations → Take standard deduction
Result: More total deductions over 2 years than taking the standard deduction both years
You can also prepay property tax payments. Property tax is deductible in the year you pay it, not when it’s due. In Orange County, CA, property tax comes in two installments (December and April). In your bunching year, you can pay three installments: April, December and the next April (early).
It’s kind of interesting if you search “california prepay property taxes”, many of the articles (like this one and this Bogleheads post) are from 2017 because the TCJA capped SALT deductions (including property tax) at $10,000 so it didn’t make a lot of sense to prepay property tax like this.
Example Scenario
Let’s use a realistic example to see how this works:
Income: $150,000 (married filing jointly)
Location: California (or another high tax state)
Charitable giving: 10% of income = $15,000 per year, so $30,000 over 2 years
Property tax: $5,000/year
Mortgage interest: $10,000/year
The Result
Traditional approach: Itemize $36,035 each year (charity + property tax + state tax + mortgage interest), total of $72,070 of total deductions.
Bunching strategy:
Year 1: Itemize $53,535 (bunch 2 years of charity + accelerate property tax)
Year 2: Take $31,500 standard deduction (no charity, less property tax)
Total deductions of $85,035 (increased deductions of $12,965) which results in a tax savings of ~$2,803 over 2 years
Here’s the visual breakdown:
Total deductions over 2 years
Year-by-year breakdown
Should You Do This?
Bunching works when your Year 1 itemized deductions exceed $31,500.
You’re a good candidate if you have:
Mortgage interest ($3,000+)
Regular charitable giving (8-10%+ of income)
High state taxes (CA, NY, NJ, etc.)
Property tax to prepay
Try It Yourself: Interactive Calculator
Want to see if bunching works for your situation? Adjust the sliders below to run your own numbers:
viewof income = Inputs.range([50000,500000], {value:150000,step:5000,label:"Annual Income (MFJ):"})viewof charityPct = Inputs.range([0,20], {value:10,step:1,label:"Charitable Giving (% of income):"})viewof propertyTax = Inputs.range([0,50000], {value:5000,step:500,label:"Annual Property Tax:"})viewof mortgageInterest = Inputs.range([0,30000], {value:10000,step:1000,label:"Annual Mortgage Interest:"})viewof state = Inputs.select(["California","New York","New Jersey","Texas","Florida"], {value:"California",label:"State:"})
html`<div style="background-color: #f0f8ff; padding: 20px; border-radius: 10px; margin: 20px 0; border: 2px solid #3498db;"> <h3 style="margin-top: 0; color: #2c3e50;">📊 Results</h3> <div style="display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin: 20px 0;"> <div style="background: white; padding: 15px; border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,0.1);"> <h4 style="margin-top: 0; color: #555;">Traditional Approach</h4> <p style="margin: 5px 0; font-size: 14px;"><strong>Year 1 Deductions:</strong> $${traditionalDeduction.toLocaleString('en-US', {maximumFractionDigits:0})}</p> <p style="margin: 5px 0; font-size: 14px;"><strong>Year 2 Deductions:</strong> $${traditionalDeduction.toLocaleString('en-US', {maximumFractionDigits:0})}</p> <p style="margin: 5px 0; font-size: 14px;"><strong>2-Year Total Deductions:</strong> $${(traditionalDeduction *2).toLocaleString('en-US', {maximumFractionDigits:0})}</p> <hr style="border: none; border-top: 1px solid #eee; margin: 10px 0;"> <p style="margin: 5px 0; font-size: 16px;"><strong>Total Federal Tax:</strong> $${traditionalTotal2Year.toLocaleString('en-US', {maximumFractionDigits:0})}</p> </div> <div style="background: white; padding: 15px; border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,0.1); border: 2px solid ${worthIt ?'#28a745':'#6c757d'};"> <h4 style="margin-top: 0; color: #555;">Bunching Strategy</h4> <p style="margin: 5px 0; font-size: 14px;"><strong>Year 1 Deductions:</strong> $${bunchedYear1Itemized.toLocaleString('en-US', {maximumFractionDigits:0})}</p> <p style="margin: 5px 0; font-size: 14px;"><strong>Year 2 Deductions:</strong> $${bunchedYear2Deduction.toLocaleString('en-US', {maximumFractionDigits:0})}</p> <p style="margin: 5px 0; font-size: 14px;"><strong>2-Year Total Deductions:</strong> $${(bunchedYear1Itemized + bunchedYear2Deduction).toLocaleString('en-US', {maximumFractionDigits:0})}</p> <hr style="border: none; border-top: 1px solid #eee; margin: 10px 0;"> <p style="margin: 5px 0; font-size: 16px;"><strong>Total Federal Tax:</strong> $${bunchedTotal2Year.toLocaleString('en-US', {maximumFractionDigits:0})}</p> </div> </div> <div style="background: ${worthIt ?'#d4edda':'#fff3cd'}; padding: 20px; border-radius: 8px; text-align: center; border: 3px solid ${worthIt ?'#28a745':'#ffc107'};"> <h3 style="margin: 0; color: ${worthIt ?'#155724':'#856404'}; font-size: 24px;">${worthIt ?'✓':'⚠️'} Tax Savings: ${savings >0?'$':'-$'}${Math.abs(savings).toLocaleString('en-US', {maximumFractionDigits:0})} </h3> <p style="margin: 10px 0 0 0; font-size: 16px; color: ${worthIt ?'#155724':'#856404'};">${worthIt?`You save ${savingsPercent.toFixed(1)}% over 2 years with bunching! 🎉`: savings >0?'Small benefit - bunching might not be worth the hassle':'Bunching doesn\'t help - stick with traditional approach'} </p> </div> <p style="margin-top: 15px; font-size: 12px; color: #666; font-style: italic;"> 💡 Note: This calculator uses simplified tax calculations and assumes you're in the 2025 tax year with the new $40k SALT cap. It doesn't account for AMT, phase-outs, or all state-specific rules. Consult a tax professional for accurate advice specific to your situation. </p></div>`
My Takeaway
After running the numbers on scenarios like this, it’s clear that bunching can be worthwhile for many households, especially with the higher SALT cap in 2025.
Don’t assume bunching works without running your own numbers. The 2025 tax changes help here. Under the old $10k SALT cap, this example would save $2,530. Under the new $40k cap, it saves $2,803.
If you’re in a high-tax state with a mortgage and regular charitable giving, spend some time to run the numbers for your specific situation.
AI Disclaimer: Claude Code & Claude Sonnet 4.5 helped me write this article and generate the ocde for these visualizations. I reviewed the output and made a bunch of edits which included deleting 75% of what was generated.
Disclaimer: This blog post is for educational purposes only and does not constitute tax, legal, or financial advice. Tax laws are complex and change frequently. Consult with a qualified tax professional about your specific situation before making any tax-related decisions.