Check wash sales from your IBKR statements (across every account you own)

By Wash-Sale Guardian (who's behind it) · Published 2026-07-14 · Last updated 2026-10-02 · How the checker works

Get the year-end reminders by email ↓

High-volume IBKR traders often have the most windows open at once — and IBKR's export has the richest data to check them with. High trade counts mean more 61-day windows open at once — and if you also run accounts at Schwab or Fidelity, or your IRA sits elsewhere, IBKR's own wash-sale netting can't see any of it (why). Drop your Activity Statement CSV into our free checker — it parses IBKR's multi-section format directly, in your browser, nothing uploaded.

How to export your IBKR trade history (CSV)

  1. Log in to Client Portal → Performance & Reports → Statements.
  2. Run an Activity statement for the widest period you need → download as CSV.
  3. Drop the whole file into the checker — no need to trim it; we read the Trades section (plus Corporate Actions and Transfers, so a split or share transfer gets flagged) and ignore the rest.
  4. Power-user alternative: Flex Queries (Performance & Reports → Flex Queries) give execution-level exports with exactly the fields you pick, and can be automated with a read-only token. The checker reads a Flex Query CSV directly if the query is set up like this (otherwise the import stops with an error):
    • Include the Level of Detail field in the Trades section. Without it, executions, order summaries and closed-lot rows can't be told apart, and importing more than one of them double-counts shares.
    • Leave Date Format at yyyyMMdd (the default). Slash formats are refused, because a Flex Query can be set to either MM/dd or dd/MM and guessing wrong would move trades across wash-sale windows.
    • Cover one account per query. Each file is imported into one account here, so run the query once per account.

IBKR CSV quirks (what our parser handles for you)

Quirk What it looks like Why it matters
Multi-section file Every row prefixed: Statement, Trades, Open Positions… Only the Trades section is trade data; the rest must be ignored cleanly
Order vs Trade rows DataDiscriminator "Order" AND "Trade" for one fill The classic double-count trap — ingesting both doubles your share counts and corrupts every downstream number
Signed quantities -100 = sell; "1,000" with commas Sign carries the side; comma grouping breaks naive number parsing
Real timestamps "2026-06-10, 09:30:15" Gives intraday trade times (tastytrade does too) — improves same-day ordering
Option symbology "NVDA 18SEP26 500 C" Must normalize to contract identity to match Schwab/Fidelity/Robinhood formats

1099-B behavior

IBKR applies same-account wash adjustments in box 1g and is popular with traders who make hundreds of fills — which is precisely when deferral snowballs get big (what those 1g totals really mean). Cross-account adjustments go on Form 8949, code W.

Check it free

Open the checker, drop the Activity Statement CSV plus your other accounts' exports, and get the wash sales it finds, open windows with the first clean re-buy date for each loss, IRA-permanent flags, and a year-end summary — free, in your browser (methodology).

Frequently asked questions

Does Interactive Brokers adjust for wash sales?

Within one account, yes — IBKR applies wash-sale adjustments on the 1099-B for identical securities in that account. Brokers must report only same-account wash sales, and IBKR can’t see your accounts at other brokers. Purchases in your spouse’s accounts or outside IRAs are not required to appear either, so check what your 1099-B shows; the IRS-level answer is on you.

What is the best IBKR report for wash sale checking?

An Activity Statement exported as CSV (Performance & Reports → Statements → Activity) works directly. Power users can build a Flex Query for execution-level trade data: include the Level of Detail field in its Trades section, keep the default yyyyMMdd date format, and run one account per query. Either way, include the full period you have traded the symbols you want checked.

Why does my IBKR statement show both Order and Trade rows for one fill?

Statements exported with execution detail contain an Order summary row plus its constituent Trade execution rows. Counting both double-counts the fill — a wash-sale tool must use one level only. Ours uses the execution (Trade) rows when both are present.

Do IBKR partial fills mess up wash sale math?

They shouldn’t — partial fills are separate execution rows with timestamps, which is more precise data than most brokers give. Don’t manually de-duplicate them; they are genuinely distinct fills.

Get the year-end wash-sale reminders

Short emails at the moments that matter: before Nov 30 (the last day to sell at a loss and still re-buy within 2026); before Dec 31; when 1099-Bs arrive in February; and the day Guardian Pro goes on sale. The one-page year-end checklist PDF comes with it.

Sign up and a link to the PDF appears right here. Confirm the email we send and you're on the list: about four to six emails a year, and you can unsubscribe in one click from any of them. Your trades stay in your browser. The form sends Kit only your email address and the page you signed up from — nothing else (see Privacy).