Most traders abandon their trading journal before logging a single trade — not because they lack discipline, but because the CSV export from their broker doesn’t match what the journal expects. Here’s the exact import process for five major brokers, including the specific fields and gotchas that trip up new users every time.

Interactive Brokers: Use Flex Query, Not the Activity Statement

The most common Interactive Brokers import mistake is downloading the standard Activity Statement and uploading it directly. That file is designed for humans to read, not for parsers — it contains merged cells, summary rows, and inconsistent column names.

The correct path is the Flex Query tool under Reports > Flex Queries. Create a new Flex Query, select “Trades” as the data type, and include exactly these fields: TradeDate, Symbol, Buy/Sell, Quantity, TradePrice, IBCommission, AssetCategory, and OpenCloseIndicator.

The OpenCloseIndicator field is the most frequently missed. Without it, day trades import as two separate open positions instead of a matched round trip. A trader who makes 40 round-trip day trades in a week ends up with 80 phantom open positions in their journal — a confusing mess that takes hours to untangle manually.

Once your Flex Query is configured, run it with a date range and download the XML or CSV output. IB’s Flex CSV is clean, consistent, and parseable by any journal that supports it.

Schwab (Formerly TD Ameritrade): Date Format Warning

Schwab completed the TD Ameritrade platform migration in Q4 2024. If you’re working with pre-migration exports from thinkorswim, the column layout differs from what current Schwab accounts produce — so old import templates won’t work.

For current Schwab exports, go to History & Statements > History, select your date range, and export as CSV. The file uses a non-standard date format: MM/DD/YYYY HH:MM:SS rather than ISO 8601 (YYYY-MM-DD). Most journal parsers expect ISO 8601 and will throw a parse error or silently misread the dates, shifting all your trades to wrong calendar positions.

If your journal doesn’t auto-handle this format, open the CSV in Google Sheets, select the date column, and use Format > Number > Custom date and time to convert before re-exporting. Alternatively, a simple find-replace with a regex substitution handles it in seconds for anyone comfortable with a spreadsheet formula.

Fidelity: Filter Before You Import

Fidelity’s export bundles everything — stock trades, dividend reinvestments, bond interest payments, and fee deductions — into a single file with 12 columns: Run Date, Action, Symbol, Security Description, Security Type, Quantity, Price ($), Commission ($), Fees ($), Accrued Interest ($), Amount ($), and Settlement Date.

The critical column is Action (column C). Only rows with the value YOU BOUGHT or YOU SOLD represent actual trade executions. Everything else — DIVIDEND RECEIVED, REINVESTMENT, INTEREST INCOME — is account activity, not a trade.

Here’s why this matters in practice: a new user imports 6 months of Fidelity history with 847 total rows. The raw file contains 312 dividend reinvestments, 89 bond interest payments, and 446 actual stock trades. Without filtering, a journal would create 847 entries and report a wildly distorted win rate — because a $43 dividend classified as a “trade” is always a winner, artificially inflating the stats.

The fix takes under two minutes:

  1. Open the CSV in Excel or Google Sheets
  2. Filter column C (Action) to show only YOU BOUGHT and YOU SOLD
  3. Save the filtered 446 rows as a new file
  4. Upload that file to your journal

The result is a clean 446-trade history with accurate P&L per trade and no phantom entries from dividend events. If you want to track dividend income separately, most journals have a dedicated income log for that purpose.

Webull: Options Symbol Parsing

Webull’s trade history export lives at App > More > Account > Realized P&L — not in the web platform. Download as CSV from that screen.

For equity trades, the format is straightforward. The complication is options: Webull uses the full 18-character OCC format for options symbols, like AAPL 260117C00200000. That string encodes the underlying (AAPL), expiration (January 17, 2026), type (Call), and strike ($200.00). A journal parser that expects a simple ticker symbol will either fail to import the row or create a symbol called AAPL 260117C00200000 as if it were an equity.

Any journal that supports options trading should parse OCC-format symbols correctly. If yours doesn’t, you’ll need to either manually map option rows post-import or use a journal with native OCC support. Webull’s export also uses fractional share quantities for stocks eligible for fractional trading — confirm your journal handles quantities like 0.5432 without rounding.

Zerodha: Currency and Comma Formatting

Zerodha’s Console tradebook CSV export uses a specific column set: trade_date, trade_time, settlement_id, exchange, segment, series, trade_type, auction, quantity, price, trade_id, order_id, order_execution_time.

The two issues that break imports elsewhere are currency and number formatting. Prices are in INR, not USD, so any journal that assumes USD will mis-report P&L by a factor of roughly 85x at current exchange rates. More technically, INR amounts use commas as thousand separators — a price of ₹1,24,500 appears as 124,500 in the CSV, which some parsers misread as two fields instead of one number.

JournalPlus handles both natively. For other journals, you may need to open the CSV, select the price column, and use a find-replace to strip commas before importing. If your journal doesn’t support multi-currency, tag all Zerodha trades with an INR currency flag manually and convert to USD for performance reporting. The Zerodha trading journal setup guide walks through this in detail.

Field Mapping Cheat Sheet

Regardless of broker, run through this checklist before every import:

  • Date/time format: Is it ISO 8601 (YYYY-MM-DD), US format (MM/DD/YYYY), or epoch? Does it include time?
  • Symbol format: Plain ticker, or OCC format for options? Are there suffix characters to strip?
  • Side/action field: Does your journal expect BUY/SELL, B/S, Long/Short, or YOU BOUGHT/YOU SOLD?
  • Quantity: Shares (equities), contracts (futures/options), or lots (forex)? Are fractional quantities allowed?
  • Price: Per share, per contract, or total notional? Per-leg or aggregate for multi-leg options?
  • Commission: Flat per order, per share, or split across open and close legs for options?

Getting these six fields right before importing prevents 90% of data quality issues. A mismatched quantity field — for example, importing ES futures contracts as shares — will make your P&L numbers completely unusable.

Key Takeaways

  • Interactive Brokers requires a Flex Query with OpenCloseIndicator included — the standard Activity Statement export will break day trade matching
  • Schwab exports use MM/DD/YYYY date format post-migration; convert to ISO 8601 if your journal doesn’t auto-handle it
  • Fidelity CSVs must be filtered to Action = YOU BOUGHT / YOU SOLD before import — a raw 847-row export may contain only 446 actual trades
  • Webull options use 18-character OCC symbol format; confirm your journal parses these before importing a large options history
  • Run the 6-field mapping checklist (date, symbol, side, quantity, price, commission) on every new broker format before committing the import

JournalPlus auto-detects all five of these broker formats by their header fingerprints and shows a field-mapping preview before any data is committed — so you can catch mismatches before 300 trades land incorrectly tagged. It’s available for a one-time payment of $159 with no subscription. If you’re starting fresh, the trading journal for beginners guide covers what to track once your import is clean.

People Also Ask

Why does my broker CSV fail to import into a trading journal?

The most common causes are mismatched date formats (brokers often use MM/DD/YYYY while journals expect ISO 8601), non-trade rows like dividends mixed in with executions, and missing fields like Open/Close Indicator that journals need to pair entries and exits correctly.

How do I export trades from Interactive Brokers?

Use the Flex Query tool, not the standard Activity Statement download. In the Flex Report builder, select Trade data and include TradeDate, Symbol, Buy/Sell, Quantity, TradePrice, IBCommission, AssetCategory, and OpenCloseIndicator. The standard CSV export lacks several of these fields.

What happened to TD Ameritrade CSV exports after the Schwab migration?

TD Ameritrade completed its migration to Schwab in Q4 2024. Exports now come from Schwab's History & Statements tab and use a MM/DD/YYYY HH:MM:SS date format. Pre-migration thinkorswim exports have a different column layout than current Schwab exports.

How do I clean a Fidelity CSV before importing?

Open the export in Excel or Google Sheets, filter column C (Action) to show only rows where the value is YOU BOUGHT or YOU SOLD, then save the filtered data as a new CSV. This removes dividends, interest payments, and other non-trade rows that would inflate your trade count.

Does JournalPlus support Zerodha imports?

Yes. JournalPlus auto-detects Zerodha's Console tradebook format by its header fingerprint and handles INR comma-formatted numbers natively. See the full setup walkthrough at the Zerodha integration page.

Was this article helpful?

J
Written by

JournalPlus Team

Helping traders improve through better journaling