Documentation

Trade Import

Bulk-import historical trades from CSV, Excel, PDF, broker exports, images, or plain text using the AI-powered import wizard.

The Trade Import wizard lets you bring in trades from sources that aren't connected via SnapTrade - a closed account, an unsupported broker, a paper-trading platform, or a screenshot of your history. Upload a file, review what the AI extracted, and import in minutes.

Trade Import is available on both tiers. Free accounts can import up to 500 trades total, lifetime; Pro accounts have no limit. See Subscription for plan details.

Trade Import is being rolled out gradually and isn't enabled for every organization yet. If Import Trades isn't in your navigation, it isn't available for your account.

Supported formats

  • CSV / TSV - any comma- or tab-separated export.
  • Excel (.xlsx, .xls) - single or multi-sheet workbooks.
  • PDF - text-based PDFs and scanned (image-based) PDFs.
  • Images (PNG, JPG, JPEG) - screenshots of trade history.
  • Text files - plain-text broker exports or copy-pasted history.

One file per import run. Use Import More on the summary screen to run another file through the wizard.

The four-step flow

1. Upload

Drag a file onto the upload zone or click to browse. The wizard parses the file in your browser and sends the AI extraction pipeline only what it needs to read: rows and cell values for spreadsheets, and extracted text for text-based PDFs. Scanned PDFs are rendered to page images, and screenshots are sent as images, since both have to be read visually. A live progress log shows each phase as it happens: file analysis, structure detection, deterministic parsing, then AI extraction per file section. The trade count increments as records are identified.

When extraction finishes, the wizard checks the extracted trades against the trades already in your account and shows a brief "Checking for existing duplicates..." status. If nothing needs your attention - no questions, no skipped rows, no flags, no duplicates - the wizard skips Reconcile and takes you straight to Review.

2. Reconcile (conditional)

This step appears only when the extractor flagged rows, found duplicates, or has questions for you. A header summary tracks how many trades are ready, flagged (awaiting a decision), and skipped.

Questions

The AI may ask you to clarify ambiguities (for example, "Is a quantity of 100 meant to be 1 contract?"). Where many rows were skipped for the same reason, you get one bulk question for that whole group rather than a question per row.

Duplicates

If any extracted trades exactly match trades already in your account, the wizard asks what to do with them up front:

  • Ignore all (recommended) - leave every duplicate out of the import.
  • Include all - import them anyway, creating a second copy of each.
  • Include or exclude individually - decide row by row in the table below.

See Duplicate detection for the exact match rule.

Rows to review

Parser-skipped rows and duplicates share one Rows to review table so both read the same way. Each row shows a Reason badge (the skip reason, or Duplicate), the Date & Time so you can find the row in your original export, and a preview of the Row data.

You can act on rows three ways:

  • Per row - the green check includes the row (a skipped row becomes an editable placeholder trade; a duplicate is imported anyway), and the red X excludes it.
  • By reason - the Bulk actions card offers "Include N reason" and "Ignore N reason" for each group, plus "Include All N Duplicates" and "Exclude All Duplicates".
  • By selection - tick any mix of rows and use Include Selected or Ignore Selected.

Resolved rows drop out of the table. Duplicates you don't act on stay excluded by default.

Flagged entries

Rows the AI extracted but flagged as ambiguous appear on a separate Flagged tab. These are excluded from the import; dismiss each flag once you've checked it against your source file.

If you want to start over, Restore and Restart Reconciliation discards every decision (including duplicate choices) and re-surfaces all skipped rows.

All questions - including the duplicates question - must be answered before the Continue to Review button activates. Its label shows how many trades will carry forward.

3. Review

An editable table shows every trade heading into the import. Each row has:

  • Symbol, Date, Time, Option Type (Call/Put), Strike, Expiration, Trade Type (BTO / STO / BTC / STC), Quantity, Price, Amount (price times quantity times 100).

Each row is validated against the live options chain. A status indicator shows the current state:

IndicatorMeaning
SpinnerValidating against the options chain.
Green dotValidated - trade matches a real contract.
Yellow dotIncomplete - required fields are empty.
Red dotInvalid - hover for the specific error.

A progress card tracks validation as the chain fetches complete, and an All / Needs attention toggle above the table filters down to just the rows that aren't valid yet.

You must resolve every incomplete and invalid row before importing - fix them inline or delete them with the trash icon. Once no rows need attention, the Import N Trades button activates.

4. Summary

After importing, the summary screen shows how many trades were imported and, if any duplicates were left out, how many were skipped. From here you can:

  • Add Fees to Imported Trades - apply a single fee override across the entire batch you just imported, instead of editing trades one at a time. Choose $ / Contract, $ / Trade, % / Contract, or % / Trade. If the imported trades already carry fees, the button reads Modify Fees for Imported Trades, and the dialog can also clear an override you've applied. P&L recomputes once when the batch finishes.
  • View Trades - go to the Trades page.
  • Import More - start a fresh import.

Duplicate detection

Before Reconcile, the wizard compares each extracted trade against the trades already in your account and flags exact matches. Matching is on every one of these fields:

underlying symbol, trade date, trade type (BTO / STO / BTC / STC), option type, strike, expiration, quantity, and price.

A few consequences worth knowing:

  • The match is exact. A row that differs from an existing trade in any of those fields - a different fill price, a partial quantity, a different trade date format - is not a duplicate and will import normally.
  • Only complete rows can be flagged. Rows still missing quantity, price, or amount are skipped by detection.
  • Matching runs against all existing trades regardless of source, so an imported row can match a broker-synced or manually-entered trade, not just a previous import.
  • Duplicates are excluded by default. You have to opt them in, per row or in bulk, for a second copy to be created.
  • The check runs once, right after extraction. A placeholder row you include from the skipped-rows list in Reconcile is never compared, so it won't be flagged as a duplicate in that session even once you've filled in its contract details.
  • The check is a convenience, not a gate. If it fails - a network error, say - the wizard proceeds without duplicate flags rather than blocking the import.

Duplicate detection is best-effort insurance against re-importing the same export, not a guarantee against every double-entry. Overlapping exports whose formatting differs can still produce near-matches that don't flag, so it's still worth reviewing the extracted rows.

After import

Imported trades are tagged source: "import" and behave exactly like manually-entered trades - they can be edited by deletion and re-entry, deleted individually, and are not protected the way broker-synced trades are. Multi-leg structures that match a known pattern are detected when you open the Strategies page, so imported spreads show up there on your next visit with no extra step. Portfolio assignment is not part of the import flow; assign trades afterward using the inline Portfolio column in the Trades table.

Free-tier import limit

Free accounts have a cumulative, lifetime allowance of 500 imported trades. A usage meter above the upload zone shows how much of that allowance remains. Imports made while you were subscribed or on trial never count against it. Once you're over the limit:

  • If a single batch would push you past the allowance, the wizard still imports as many trades as fit within your remaining allowance rather than blocking the whole batch, and flags the rest with an upsell callout.
  • Once the allowance is fully used, further imports are paywalled until you upgrade.

Pro accounts have no import cap.

Limitations

  • Every row must pass options-chain validation to be imported, so a contract that has since expired or delisted may fail to match and cannot be pushed through the wizard. Delete the row and use Manual Trade Entry to add that trade without chain validation.
  • Duplicate detection only catches exact matches (see Duplicate detection). Re-importing an overlapping date range from a differently-formatted export can still create duplicates, so review the extracted rows before confirming.
  • Imported trades can be deleted individually from the Trades table (they're manual trades), but there is no bulk-undo for an import session once it completes.

On this page