Understanding the Tax Treatment of Dividends in Your Beancount Ledger
As a tax professional (IRS Enrolled Agent), I see a lot of confusion around how dividends are taxed and how to properly categorize them in plain-text accounting systems. This post aims to be a definitive reference for the Beancount community on qualified vs. ordinary dividends, their tax implications, and how to structure your ledger for painless tax filing.
The Two Types of Dividends
The IRS distinguishes between two categories of dividends, and they are taxed very differently:
Qualified Dividends are taxed at the preferential long-term capital gains rates:
- 0% for taxable income up to $48,350 (single) / $96,700 (married filing jointly) in 2025
- 15% for income up to $533,400 (single) / $600,050 (MFJ)
- 20% for income above those thresholds
- Plus the potential 3.8% Net Investment Income Tax (NIIT) if your modified AGI exceeds $200,000 (single) / $250,000 (MFJ)
Ordinary (Nonqualified) Dividends are taxed at your marginal income tax rate, which ranges from 10% to 37%.
What Makes a Dividend “Qualified”?
Three requirements must be met:
-
Paid by a U.S. corporation or qualifying foreign entity. Most major foreign companies traded on U.S. exchanges through ADRs qualify, but companies in some countries (certain tax havens) do not.
-
Holding period requirement. You must have held the stock for more than 60 days during the 121-day period beginning 60 days before the ex-dividend date. For preferred stock, it is 90 days out of a 181-day period.
-
Not specifically excluded. Dividends from REITs, money market funds, tax-exempt organizations, and employee stock options are generally NOT qualified.
Beancount Account Structure for Tax-Accurate Categorization
Here is the account hierarchy I recommend to my clients who use Beancount:
; === Qualified Dividend Income ===
2024-01-01 open Income:Dividends:Qualified USD
2024-01-01 open Income:Dividends:Qualified:AAPL USD
2024-01-01 open Income:Dividends:Qualified:MSFT USD
2024-01-01 open Income:Dividends:Qualified:JNJ USD
; === Ordinary Dividend Income ===
2024-01-01 open Income:Dividends:Ordinary USD
2024-01-01 open Income:Dividends:Ordinary:JEPI USD
2024-01-01 open Income:Dividends:Ordinary:HYG USD
; === REIT Dividends (Ordinary, but 199A eligible) ===
2024-01-01 open Income:Dividends:REIT USD
2024-01-01 open Income:Dividends:REIT:O USD
2024-01-01 open Income:Dividends:REIT:VNQ USD
; === Return of Capital (not currently taxable) ===
2024-01-01 open Income:Dividends:ReturnOfCapital USD
; === Foreign Tax Withheld ===
2024-01-01 open Expenses:Taxes:Foreign:Withholding USD
Mapping to 1099-DIV Boxes
This is where things get practical. Your 1099-DIV from your broker maps directly to your Beancount accounts:
| 1099-DIV Box | Description | Beancount Account |
|---|---|---|
| Box 1a | Total ordinary dividends | Sum of Ordinary + REIT + portion of Qualified |
| Box 1b | Qualified dividends | Income:Dividends:Qualified:* |
| Box 3 | Nondividend distributions | Income:Dividends:ReturnOfCapital |
| Box 5 | Section 199A dividends | Income:Dividends:REIT:* |
| Box 7 | Foreign tax paid | Expenses:Taxes:Foreign:Withholding |
Example Transactions
Apple dividend (qualified):
2025-02-14 * "Apple Inc" "Quarterly dividend - qualified"
Assets:Investments:Schwab:Cash 96.00 USD
Income:Dividends:Qualified:AAPL -96.00 USD
JEPI distribution (primarily ordinary):
2025-02-03 * "JPMorgan Equity Premium Income ETF" "Monthly distribution"
Assets:Investments:Schwab:Cash 187.50 USD
Income:Dividends:Ordinary:JEPI -187.50 USD
International ETF with foreign tax withholding:
2025-03-28 * "Vanguard FTSE All-World ex-US" "Quarterly dividend with foreign tax"
Assets:Investments:Vanguard:Cash 142.30 USD
Expenses:Taxes:Foreign:Withholding 15.80 USD
Income:Dividends:Qualified:VXUS -158.10 USD
REIT dividend (ordinary, 199A eligible):
2025-01-15 * "Realty Income Corp" "Monthly dividend - REIT ordinary"
Assets:Investments:Fidelity:Cash 52.70 USD
Income:Dividends:REIT:O -52.70 USD
Return of Capital: The Hidden Complexity
Some distributions, particularly from REITs and MLPs, include a return of capital component. This is NOT current income — it reduces your cost basis in the shares. In Beancount, you would handle this by reducing the asset cost basis:
2025-03-15 * "Realty Income Corp" "Distribution - return of capital portion"
Assets:Investments:Fidelity:Cash 8.40 USD
Income:Dividends:ReturnOfCapital -8.40 USD
Note that in a pure accounting sense, you would ideally adjust the cost basis of your shares. However, most Beancount users I work with find it simpler to track return of capital as a separate income category and handle the basis adjustment at sale time. The key is that you have a record of all return of capital received per position.
FIRE Planning Implications
For those pursuing FIRE, the qualified vs. ordinary distinction has a massive impact on your after-tax income:
- A $50,000 dividend income at the 0% qualified rate = $50,000 after tax
- A $50,000 dividend income at the 22% ordinary rate = $39,000 after tax
That is an $11,000/year difference, which means you need roughly $314,000 less in your portfolio if your dividends are qualified. Structure your portfolio and your Beancount accounts to make this distinction crystal clear.
Year-End Reconciliation Checklist
- Compare your Beancount totals against each 1099-DIV
- Verify the qualified/ordinary split matches Box 1b vs. Box 1a
- Confirm foreign tax paid matches Box 7
- Check Section 199A dividends against Box 5
- Review return of capital (Box 3) and adjust basis records
I am happy to answer any questions about specific dividend tax situations. Getting this right in your Beancount ledger saves enormous headaches during tax season.