IBKR options trade CSV checker

Check an Interactive Brokers options trade export before you import it into a journal or a spreadsheet. The checker lists missing fields, invalid values, duplicate fills, and rows that it cannot read.

The check runs in your browser. Your file does not leave your device, and TradeRecount does not store it.

Your file

Or choose a file
No file chosen
CSV or text, up to 5 MB.
Date format in the Flex Query Use the format set in the query's general settings.
Download the example

Result

11 errors

Synthetic example. The checker read 12 trade rows. 8 rows have at least one error.

Warnings
1
Unreadable rows
2
Skipped rows
1

Problems

  • Error Line 3 has the same IB Execution ID as line 2. The same fill appears twice.
  • Error Line 5: Trade Date "20261345" is not a real date in the format yyyyMMdd.
  • Error Line 5: Date/Time "20261345;102000" is not a real date and time in the format yyyyMMdd with HHmmss or HH:mm:ss.
  • Error Line 6: Trade Price "0,60" is not a number. Use a decimal point, such as 1.05.
  • Error Line 7: Quantity "1.5" is not a whole number of contracts.
  • Error Line 8 has no Strike value.
  • Error Line 9: Symbol "SYNTH 261120C00050000" shows a strike of 50, but Strike is 55.
  • Error Line 10: Put/Call "X" is not C, P, Call, or Put.
  • Error Line 11: Expiry 2026-10-16 is before the trade date 2026-10-21. An option cannot trade after it expires.
  • Warning Line 14 has the same symbol, date, time, quantity, and price as line 13. Check that it is not a duplicate fill.
  • Error Line 15 has 7 values, but the header has 15. The checker cannot match its values to columns.
  • Error Line 16 opens a quotation mark that does not close. The checker cannot read the file from this line.
  • Note 1 row is not an option trade (Asset Class STK). The checker did not check it.

Preview

The first 12 trade rows of 12 (synthetic example). An em dash (—) marks an empty cell. A marked cell has an error.
LineStatusAsset ClassSymbolUnderlying SymbolCurrencyTrade DateDate/TimeQuantityTrade PriceMultiplierIB CommissionStrikeExpiryPut/CallBuy/SellIB Execution ID
2OKOPT SYNTH 261120C00050000 SYNTH USD 20261019 20261019;093512 2 1.25 100 -1.30 50 20261120 C BUY SYN.0001
31 errorOPT SYNTH 261120C00050000 SYNTH USD 20261019 20261019;093512 2 1.25 100 -1.30 50 20261120 C BUY SYN.0001 (error)
4OKOPT SYNTH 261120P00045000 SYNTH USD 20261019 20261019;101500 -1 0.80 100 -0.65 45 20261120 P SELL SYN.0003
52 errorsOPT SYNTH 261120C00055000 SYNTH USD 20261345 (error)20261345;102000 (error)1 0.60 100 -0.65 55 20261120 C BUY SYN.0004
61 errorOPT SYNTH 261120C00055000 SYNTH USD 20261020 20261020;110241 1 0,60 (error)100 -0.65 55 20261120 C BUY SYN.0005
71 errorOPT SYNTH 261120C00055000 SYNTH USD 20261020 20261020;110509 1.5 (error)0.62 100 -0.65 55 20261120 C BUY SYN.0006
81 errorOPT SYNTH 261120P00040000 SYNTH USD 20261020 20261020;123000 1 0.35 100 -0.65 — (error)20261120 P BUY SYN.0007
91 errorOPT SYNTH 261120C00050000 (error)SYNTH USD 20261021 20261021;094530 1 1.40 100 -0.65 55 20261120 C BUY SYN.0008
101 errorOPT SYNTH 261120C00060000 SYNTH USD 20261021 20261021;131000 1 0.20 100 -0.65 60 20261120 X (error)BUY SYN.0009
111 errorOPT SYNTH 261016C00050000 SYNTH USD 20261021 20261021;140000 -2 0.05 100 -1.30 50 20261016 (error)C SELL SYN.0010
13OKOPT SYNTH 261120C00050000 SYNTH USD 20261022 20261022;100000 3 1.10 100 -1.95 50 20261120 C BUY —
141 warningOPT SYNTH 261120C00050000 SYNTH USD 20261022 20261022;100000 3 1.10 100 -1.95 50 20261120 C BUY —

Rows that the checker cannot read are in the problem list, not in this table.

What the checker reads

The checker reads the Trades section of an Interactive Brokers (IBKR) Flex Query in CSV format. A Flex Query is a report that you configure in your IBKR account. You select its sections, its fields, and its output format.

The file must have one header row with the field names. The checker finds each column by its name. It ignores capital letters, spaces, and punctuation in the name. So Trade Date and TradeDate are the same column. The order of the columns has no effect.

IBKR's field list shows names with spaces, such as Trade Date. Public Flex Query CSV files write the names without spaces, such as TradeDate. Two fields have a different name in the CSV file. The table shows those names.

Fields that the checker uses
FieldUse
Symbol Required
Trade Date Required, or Date/Time in its place
Quantity Required
Trade Price Required
Strike Required
Expiry Required
Put/Call Required
Underlying Symbol Checked when present
Asset Class Checked when present
Currency or CurrencyPrimaryChecked when present
Trade Time Checked when present
Date/Time Checked when present
Multiplier Checked when present
IB Commission Checked when present
Buy/Sell Checked when present
Open/Close Indicator Checked when present
IB Execution ID or IBExecIDChecked when present

The checker ignores other columns. It also reads text output with a tab or pipe delimiter. It skips the BOF, EOF, BOS, and EOS rows that IBKR adds when the query includes header and trailer records.

A Flex Query can contain stock, cash, and option trades. When the file has an Asset Class column, the checker reads only the rows with the value OPT. It counts the other rows as skipped. When the query has more than one section, each section starts with its own header row. The checker reads only the first trade section.

Settings in the Flex Query

  • Select CSV as the output format.
  • Turn on column headers. Without them, the checker cannot find the fields.
  • Add the required fields to the Trades section.
  • Add IB Execution ID. The CSV file calls it IBExecID. With it, the checker can find exact duplicate fills.
  • Note the date format in the general settings. IBKR uses yyyyMMdd if you do not change it. Select the same format in the checker.

IBKR states that queries created after June 2019 have a Date/Time field and no Trade Time field. The checker accepts either form.

Worked example Synthetic example

The example file has 14 trade lines for an invented underlying, SYNTH. It has no real account data. Its header row uses the field names of a public Flex Query CSV file. It also has one stock trade. Most lines contain one deliberate error. You can load it in the checker or download it above.

The checker reads 12 rows and reports 11 errors and 1 warning. 2 lines cannot be read.

Problems in the synthetic example
LineTypeMessage
3Duplicate fillLine 3 has the same IB Execution ID as line 2. The same fill appears twice.
5Invalid valueLine 5: Trade Date "20261345" is not a real date in the format yyyyMMdd.
5Invalid valueLine 5: Date/Time "20261345;102000" is not a real date and time in the format yyyyMMdd with HHmmss or HH:mm:ss.
6Invalid valueLine 6: Trade Price "0,60" is not a number. Use a decimal point, such as 1.05.
7Invalid valueLine 7: Quantity "1.5" is not a whole number of contracts.
8Missing valueLine 8 has no Strike value.
9Invalid valueLine 9: Symbol "SYNTH 261120C00050000" shows a strike of 50, but Strike is 55.
10Invalid valueLine 10: Put/Call "X" is not C, P, Call, or Put.
11Invalid valueLine 11: Expiry 2026-10-16 is before the trade date 2026-10-21. An option cannot trade after it expires.
14Duplicate fillLine 14 has the same symbol, date, time, quantity, and price as line 13. Check that it is not a duplicate fill.
15Unreadable rowLine 15 has 7 values, but the header has 15. The checker cannot match its values to columns.
16Unreadable rowLine 16 opens a quotation mark that does not close. The checker cannot read the file from this line.
—Skipped row1 row is not an option trade (Asset Class STK). The checker did not check it.

A missing column

Remove the Trade Price column from the first two trade rows of the example. The checker then reports 2 errors. The first one is for the whole file:

The file has no "Trade Price" column. Add this field to the Trades section of the Flex Query.

The other errors are in the rows:

  • Line 3 has the same IB Execution ID as line 2. The same fill appears twice.

What each problem means

Missing field
A required column is not in the header row. Add the field to the query and export again.
Missing value
A required column has an empty cell in a trade row.
Invalid value
A value has the wrong form. Examples are a date that does not exist, a price with a decimal comma, a quantity that is not a whole number, and a Put/Call value other than C or P. An OCC symbol that does not agree with Strike, Expiry, or Put/Call is also invalid.
Duplicate fill
Two rows with the same IB Execution ID are the same fill. That is an error. Two rows without an ID can have the same symbol, time, quantity, and price. That is a warning, because separate fills can have the same details.
Unreadable row
The row has a different number of values than the header, or a quotation mark that does not close. The checker cannot match its values to columns.
Skipped row
The row is not an option trade. Examples are a repeated header, a trailer record, a stock trade, and a row in another section of the query.
Unsupported layout
The file is an IBKR Activity Statement. The checker cannot read that layout.

An OCC symbol uses the option symbol format of the Options Clearing Corporation. It contains the underlying, the expiry date, C or P, and the strike. The checker compares it with the other columns only when the symbol has that format.

Common questions

Does TradeRecount store my file?

No. The page reads the file in your browser. It does not send the file or its rows to a server. When you close the page, the data is gone.

Can I check an Activity Statement CSV?

Not yet. The checker finds this layout and stops with an error. Each Activity Statement row starts with the section name, as in Trades,Data,Order. The columns have other names, such as T. Price and Comm/Fee. Export a Flex Query with the Trades section instead.

Why does every date show an error?

The date format in the checker is probably different from the format in your query. If one other format reads every trade date, the result tells you which one.

Why is a partial fill marked as a possible duplicate?

Without an execution ID, two fills at the same second, quantity, and price look the same. Add IB Execution ID to the query to remove this doubt.

Does the checker convert time zones?

No. It checks that each time is a real time. The IBKR pages that we read do not state the time zone of the trade time.

Does it work with other brokers?

No. It reads the IBKR field names only.

Limits of this check

  • It checks the form of each value. It does not compare the trades with your IBKR account.
  • It assumes that Expiry uses the same date format as Trade Date.
  • It does not check that the quantity sign matches a buy or a sale.
  • It does not read the Activity Statement layout or XML output.
  • We compared the field names with public test files, not with an export from every account type. A header with a different word will not match.
  • It reads at most 20,000 trade rows and files up to 5 MB.

See all options tools

Sources

The field names and settings come from these IBKR pages, read on 26 October 2026:

The CSV header names and value formats come from these public test files: