Journal CSV import: broker exports, column mapping and dedupe

"Import trades from CSV" reads a broker export, detects the delimiter and columns automatically, previews the parsed trades and writes them into the journal. Re-importing the same file updates existing rows instead of duplicating them.

Senzoukria · Documentation · Updated September 2026


Where to find it

Where
Journal → Trades → "Import CSV" button
Sources
Apex Trader Funding (default), Rithmic Trader, NinjaTrader, TradingView, Other CSV
Delimiter
Comma, semicolon or tab, picked from the first line
Dedupe key
The trade id column when present, otherwise "{source}-row-{n}"

What it does

The dialog says: "Export from your broker dashboard, drop the file here. Re-imports dedupe automatically." Choose the broker source, then drop the file or use "Browse file" (.csv or text). The parser strips a UTF-8 byte-order mark, handles quoted fields with embedded commas, quotes and newlines, and picks the delimiter that appears most often in the header line.

The preview shows the file name, the count of parsed and skipped rows, the number of columns, a collapsible "Column auto-mapping" list and the first 8 trades (Time, Symbol, Side, Qty, Entry, Exit, P&L). The button reads "Import N trades". The result panel prints "+N new · N updated" and the number of failed rows if any, with "Import another" and "Done".

Column mapping

Header names recognised for each field (case, spaces, underscores, dashes, dots and slashes ignored; exact match first, then substring)
FieldAccepted headersRequired
symbolsymbol, instrument, contract, tickeryes
sideside, buy/sell, b/s, direction, typeyes
entryPriceentry price, open price, buy price, avg entry price, fill priceyes
exitPriceexit price, close price, sell price, avg exit priceno
quantityqty, quantity, size, contracts, shares, lotsno (default 1)
pnlpnl, p/l, p&l, profit, net pnl, realized pnl, plno
entryTimeentry time, open time, buy time, time, datetime, trade time, fill timeno (defaults to now)
exitTimeexit time, close time, sell timeno
commissioncommission(s), fee(s)no
accountIdaccount, account id, account numberno
externalIdtrade id, order id, ticket id, execution id, id, fill idno
notesnotes, comment, memo, tagno

Value parsing

  • Side: B, BUY, LONG, L become LONG; S, SELL, SHORT, SH become SHORT. Any other value skips the row.
  • Numbers: dollar signs, spaces and thousands separators are removed; a value in parentheses is read as negative.
  • Quantity is rounded to an integer.
  • Dates: anything the JavaScript Date parser accepts (ISO, MM/DD/YYYY…), plus the compact YYYYMMDD HH:MM[:SS] form read as UTC. Output is ISO 8601 UTC.
  • A row without symbol, side or entry price is counted as skipped; empty rows are ignored.

How to use it

Export the trade list from the broker or prop-firm dashboard, keep the header line, and drop the file. Check the auto-mapping list: a field mapped to "—" was not found, and the resulting trades will have that field empty. Time and account columns matter most: trades imported without an account number land in the "No account recorded" bucket of the account selector.

Imports are upserts keyed on the source and the external id. Re-importing an updated export refreshes the matching rows and reports them as "updated" rather than creating duplicates. When the file has no id column, the row number is used, so reordering the rows between two exports changes which trade is updated.

Limits and pitfalls

  • Imported trades keep the P&L of the file; nothing is recomputed from prices and point values.
  • Timeframe, setup, rating, emotion and screenshots are not read from CSV; add them afterwards from the trade form.
  • Only one file at a time. The source choice affects the fallback id prefix, not the column mapping.
  • Dates without a timezone are interpreted by the machine's local zone by the Date parser; the compact form is treated as UTC.

This page in other languages

Frequently asked questions

Why were rows skipped?
A row is skipped when the symbol, the side or the entry price cannot be read. Open the "Column auto-mapping" list to see which columns were not detected.
Will importing twice duplicate my trades?
No, as long as the file has an id column or keeps the same row order. Matching rows are updated and counted as "updated".
Does the import need a broker connection?
No. It reads a local file and writes to the local journal database.

Keep reading