TraderMemos
Guides

Importing trades

Bring broker fills into TraderMemos — CSV with column mapping, journal exports, or JSON backups. Duplicates are skipped automatically.

Open Import in the sidebar (hotkey G I). The flow is Upload → Map columns → Result — pick an account, drop a file, confirm the mapping, import. Your file is parsed on your server; nothing goes to third parties.

Supported formats

Format is auto-detected from the file's headers. Exports from a known broker pre-fill the column mapping and timezone; any other broker's fill export works once its columns are mapped:

FormatWhat it isMapping step?
Fill CSVOne row per execution/fill — the shape most broker statement exports haveYes (pre-filled for known brokers)
MetaTrader statementThe MT5 Trade History Report (XLSX/HTML) or MT4 Statement (HTML), uploaded as-is — see Supported brokersNo
Journal exportOne row per finished trade with entry/exit (Stonk Journal-style: Date, Symbol, Side, Qty, Entry, Exit, …, Tags, Setup, Notes). Each row becomes a round-trip trade plus journal annotationsNo
JSON backupA TraderMemos export — restores fills, playbook setups, cash transactions, and account metadataNo

Sample files are downloadable on the Import page.

Column mapping (fill CSV)

Each canonical field maps to one of your CSV's headers, or (skip). Common header names are suggested automatically:

FieldRequiredAuto-detected from headers like
symbolSymbol, Ticker, Instrument
sideSide, B/S, Action (buy/b/bot, sell/s/sld)
quantityQty, Quantity, Shares, Contracts
priceFill Price, Price, Avg Price, Exec Price
executed_atTrade Date, Date/Time, Datetime
fees / commissionFee(s) / Commission, Comm
instrument_typeMarket, Asset Type, Sec Type
option_rightCall/Put, Option Type, Right

Timestamps accept ISO 8601 (2026-07-01T15:04:05Z), 2026-07-01 15:04:05, 07/01/2026 15:04:05, and plain dates — all normalized to UTC. Option fills get the call/put right (explicit column or inferred from the symbol) and a ×100 multiplier.

Duplicates & re-importing

A fill's identity is the combination symbol + side + quantity + price + timestamp, scoped to the account. Importing the same statement twice — or overlapping date ranges — just counts the repeats as Skipped (duplicates). Re-importing is always safe.

How fills become trades

After every import the account is regrouped automatically: fills for the same symbol/instrument are walked in time order — same-direction fills scale in, opposite fills reduce, and the trade closes when the position returns to zero (a crossing fill opens the next trade). Journal notes attach to the trade and survive regrouping.

Made a mess? Every import is a batch — the Import page lists past batches and deleting a batch reverses it (removes its fills and regroups).

Limits

Uploads are capped by TM_IMPORT_MAX_BYTES (default 10 MiB, roughly tens of thousands of rows). Self-hosters can raise it — see Configuration — and should keep the proxy body-size limit above it. Split giant histories by year if needed; dedup makes overlapping files harmless.

Other ways in

  • tm-sync — a small desktop watcher that monitors your statement folders and imports MT4/MT5 exports as they appear, via a personal access token — see tm-sync
  • IBKR Flex sync — schedule automatic imports from an IBKR Flex Query (Settings → Accounts → Flex sync; interval via TM_JOB_FLEX_SYNC_INTERVAL_MIN)
  • Screenshot scan — extract fills from a broker screenshot with an LLM, see AI features
  • Manual entry — the New Trade drawer (hotkey c t)
  • API / scriptsPOST /api/v1/executions with a personal access token; the same dedup applies
  • CLItradermemos import --account … --file … inside the API container

On this page