Who this page is for
If you sold anything this year across more than one broker — possibly in more than one currency — this page is for you.
The most common setup we see: Schwab or Fidelity for the US side, IBKR or DeGiro for European or Asian markets. Or a UK broker plus a US broker for ADRs. The moment a single ticker lives at two brokers, the realized-gain figure your tax return needs — FIFO-matched lots across the combined position with historical FX applied at trade date — cannot be produced from any single broker's report. This page shows how to actually get the right number.
What “realized gain” actually means
Five distinctions are doing most of the work whenever someone reports realized gains incorrectly. Each one is the kind of detail tax software and broker dashboards quietly skip, and each one moves the final number by enough to matter.
Realized vs unrealized
Realized = the position closed; gain locked in and taxable in the year of disposal. Unrealized = paper, not taxable. Only realized gains belong on a tax return.
Cost-basis method changes the number
FIFO matches oldest lots first; LIFO matches newest; SpecID lets you pick; Average Cost uses the weighted mean. Same trades, different gain — same proceeds, different tax. See method comparison.
Multi-currency uses historical FX, not spot
A €170 buy in 2024 is not worth €170 × today's rate when you sell. We apply the rate at trade date for cost basis and at sell date for proceeds — the only method tax authorities accept.
Multi-broker consolidation is the silent killer
Each broker reports its own lots only. Filing broker-by-broker mis-allocates basis and term whenever shares were bought on one broker and sold on another. See the consolidated tax report across every broker.
Term classification is per-jurisdiction
US splits at >1 year (LT/ST). Australia gives a 50% CGT discount after 12 months. UK pools under Section 104. Spain uses savings-income bands. We apply the rule for your jurisdiction at export time.
How it works: 3 steps
The flow is built around the principle that nothing leaves your hands. Brokers connect read-only, your data stays private, and the final artifact is the actual filable export.
Connect → Choose period & method → Export
Worked example: cross-broker, cross-currency
2025 tax year. You hold AAPL across two brokers, in two currencies. Your display currency is USD. The numbers below are the load-bearing block of this page — the calculation tax software almost always gets wrong, with FX handling that no single broker performs end-to-end.
Buy history (consolidated FIFO ledger)
Lots open before the 2025 sale
| Lot | Broker | Trade date | Qty | Local price | FX @ trade date | Cost basis (USD) | Held @ sell | Term |
|---|---|---|---|---|---|---|---|---|
| A | Schwab (USD) | 2022-05 | 100 | $145.00 | 1.0000 | $14,500 | ~3.4y | LT |
| B | IBKR (EUR) | 2024-04 | 50 | €170.00 | 1 EUR = 1.0700 USD | $9,095 | ~1.5y | LT |
| Total | — | — | 150 | — | — | $23,595 | — | — |
The 2025 sell
100 shares on Schwab, sold 2025-10 at $230.00 = $23,000 proceeds (USD). The question: against which lots does FIFO consume the 100 shares?
FIFO match across the consolidated ledger
Lots consumed to satisfy the 100-share sale at $230
| Step | Lot consumed | From | Qty | Cost (USD) | Proceeds (USD) | Realized gain | Term |
|---|---|---|---|---|---|---|---|
| 1 | A | Schwab | 100 | $14,500 | $23,000 | +$8,500 | LT |
| Total | — | — | 100 | $14,500 | $23,000 | +$8,500 | LT |
Realized gain for 2025: +$8,500 long-term
The IBKR lot (B) stays open. Its €9,095 basis is preserved at the historical FX rate of $9,095 — ready for whatever year it's sold. Spot FX never re-touches it.
Why neither broker shows this answer
Schwab's 1099-B matches the 100-share sell against its own $14,500 lot and reports +$8,500 LT — correct here only because FIFO happened to consume the Schwab lot. Sell 50 more next year and Schwab will report “basis unknown” for the IBKR lot. IBKR's report is in EUR, doesn't see Schwab's trades, and would use today's spot FX if asked to convert — wrong for tax. No broker reconciles cost basis across the consolidated ledger, applies historical FX correctly, and shows the answer in your chosen display currency.
Want a smaller gain? Switching to SpecID-optimal can defer the LT gain by keeping the older lot open and selling the newer one instead. See the method comparison for the five-method side-by-side.
Read-only broker access, results in minutes, your portfolio stays private.
Run this on your own portfolio
Connect your brokers (or import CSVs) and we'll show you the realized gain for any date range, in any currency, against every connected account.
How AllInvestView compares
Four honest alternatives investors actually try when they hit the multi-broker, multi-currency realized-gain problem. We win on consolidation, historical FX, and per-jurisdiction term classification; other tools win on other axes — we say so.
| Capability | AllInvestView | Broker dashboards | Spreadsheet | Generic portfolio trackers |
|---|---|---|---|---|
| Realized gains consolidated across multiple brokers | ||||
| Historical FX at trade date (multi-currency basis) | ||||
| FIFO / LIFO / SpecID / Average — switchable per holding | ||||
| Per-jurisdiction term classification (US >1y, AU 12m, UK pool, ES, DE) | ||||
| Custom date range — not just the calendar tax year | ||||
| Country tax-format export (Schedule D, SA108, Modelo 100, KAP) | ||||
| Dividends + withholding included in income tab | ||||
| Options realized P&L (assignments, expirations, closes) | ||||
| Bond accrued interest at sale | ||||
| Corporate actions (splits, spin-offs, mergers adjust basis) | ||||
| Lot-level audit trail with broker source attribution | ||||
| Wash-sale aware (US) — gracefully ignored elsewhere |
Broker dashboards are accurate within one account and one currency. Spreadsheets work until corporate actions, FX, or wash sales appear. Generic trackers show portfolio value but rarely produce a defensible realized-gain figure. AllInvestView is built for the case where all three break — see the consolidated multi-broker tax report for the wider workflow.
Ready to calculate your realized gains?
Free for 14 days. Read-only broker access. No card to start. Cancel anytime.
Jurisdictional term rules at a glance
Set your jurisdiction once in Settings → Tax. The calculator applies the right rule, the right rate, and the right export form. Six representative jurisdictions below; full set is 14.
How term classification differs by country
| Jurisdiction | Term rule | Treatment |
|---|---|---|
| United States | >1 year = long-term | LT taxed at 0/15/20%; ST at ordinary rates. Schedule D + Form 8949 |
| United Kingdom | No term split | Section 104 pooling + same-day + 30-day matching; annual allowance. SA108 |
| Australia | Held ≥12 months | 50% CGT discount on the gain. MyTax CSV |
| Spain | No term split | Savings income bands (19/21/23/27/28%). Modelo 100 / Modelo 720 |
| Germany | No term split (post-2009 acquisitions) | Flat 25% Abgeltungssteuer + Soli. Anlage KAP |
| Netherlands | No realized-gain tax | Box 3 deemed return on wealth. Wealth disclosure summary |
Set your jurisdiction once in Settings → Tax. The realized-gains calculator applies the right rule, the right rate, and the right form at export.
Frequently asked questions
Realized means the position is closed: the gain is locked in and taxable in the year of disposal. Unrealized is paper, not taxable. Only realized gains appear on a tax return; unrealized matter only for net worth and risk monitoring.
Trades from every connected broker (read-only via SnapTrade) feed a single consolidated FIFO/LIFO/SpecID ledger. Lot matching happens globally, not per-broker, so a buy on IBKR can be matched against a sell on Schwab. See the multi-broker tax report for the full consolidation workflow.
It depends on price trajectory and holding period. SpecID-optimal usually wins; HIFO is a close second in rising markets. The same trades can produce a multi-thousand-dollar tax swing across methods. See the five-method worked example on the FIFO cost basis tracker.
Historical FX at trade date for cost basis, historical FX at sell date for proceeds. Spot FX is wrong for tax. Daily rates are pulled from a published source, stored at trade time, and never re-applied retrospectively. The IBKR lot in the worked example above keeps its $9,095 USD basis indefinitely, regardless of where EUR/USD moves later.
Any range. Calendar tax year, fiscal year (UK 6 Apr – 5 Apr, AU 1 Jul – 30 Jun), quarter-end, custom (e.g., “January through the day I emigrated”). The calculator runs the lot-matching over whatever window you set — including ranges that cross a tax-residency change.
Dividends are realized income, not realized capital gains — they live on a separate line on the return. AllInvestView tracks both: realized gains on the capital-gains export, dividends + withholding on the income export. Both pull from the same trade ledger.
US splits LT (>1y, 0/15/20%) vs ST (ordinary). UK uses Section 104 pool + same-day + 30-day matching with an annual allowance. Spain taxes within savings-income bands. Germany flat 25% + Soli. Australia gives a 50% discount after 12 months. Set your jurisdiction once; the calculator applies the right rule.
Yes. Schedule D + Form 8949 (US, with wash-sale code W flagged), SA108 (UK), Modelo 100 with capital-gains annex (Spain), Anlage KAP (Germany), MyTax-compatible CSV (Australia), plus a universal CSV. The export matches the calculator output exactly — no spreadsheet step in between.
Yes for assets you record manually or import via supported exchanges. US users: from 2025, Rev. Proc. 2024-28 requires per-wallet basis (universal pool is gone) — AllInvestView tracks lots per wallet to match. Stocks remain our primary depth.