If you've been trading options at Schwab for any length of time, your transaction history is enormous. A few covered calls a week, the occasional roll, a handful of cash-secured puts, dividends rolling in, deposits and withdrawals — over four years that easily turns into thousands of individual rows. Typing all that into a tracker by hand isn't a project; it's a punishment.
That's where MyATMM's AI Import for CSV files comes in. Schwab gives you a CSV export of your transaction history. MyATMM accepts that file directly, parses every row, categorizes options, stocks, dividends, and ledger entries, flags duplicates, and surfaces anything ambiguous so you can decide what to do with it. In the walk-through above, a 4,907-row Schwab CSV is fully ingested in seconds.
This article walks through the whole flow — the export from Schwab, the drag-and-drop import inside MyATMM, the per-ticker drill-down view, the review queue, duplicate handling, and the reconciliation pass that brings your portfolio into agreement with your brokerage balance.
Before exporting, it's worth understanding what you're going to get. Schwab's CSV transaction history isn't options-only; it's a complete chronological dump of activity in your account. A typical four-year export will include:
One important constraint up front: Schwab only lets you select a custom date range up to four years in the past. If you've been with Schwab (or with TD Ameritrade before the migration) for longer than that, the CSV will not include anything older. That doesn't make the import less valuable — it just means you should go in expecting to do a reconciliation pass afterward, which we'll cover in detail.
Log in to your Schwab account on the website (the mobile app's transaction history view doesn't offer a CSV export). Navigate to the transaction history screen for the account you want to track.
That's the entire export side of the workflow. Schwab will package up every transaction in your selected range into a single CSV. The file is plain text, so it isn't huge — even a busy four-year history typically lands under a megabyte.
Inside MyATMM, the cleanest approach for a bulk import is to start with a dedicated portfolio. If you're a returning user and you've been hand-entering trades, you may want a fresh portfolio so the bulk import doesn't collide with your existing data. If you're brand new to the platform, just create your first portfolio and name it something memorable like "Schwab" or "Schwab Main."
Once the portfolio is created and selected, head to the Tools menu and open Import / Export. The AI Import tab is the default. There's a broker auto-detect dropdown at the top of the screen — for CSV imports it isn't strictly necessary because the parser can figure out the format from the file structure itself, but it doesn't hurt to leave it on auto-detect or explicitly pick Schwab.
With the AI Import screen open, take the CSV file you downloaded from Schwab and drag it directly onto the upload zone. There's no need to click through a file picker — the drop target handles it.
As soon as the file lands, MyATMM runs a quick pre-parse. This is a lightweight check that confirms the file is a valid CSV and counts the rows. You'll see a row count appear immediately — in the video, the four-year Schwab dump shows 4,907 rows detected. That number is your sanity check: it tells you the file uploaded correctly and the parser can read it.
Nothing has been written into your portfolio yet at this stage. The pre-parse is read-only, so if the row count looks wrong (way too small, or zero) you can drop a different file before doing anything destructive.
When the row count looks right, click the Parse CSV button. This is where the actual import happens. MyATMM walks every row, classifies the transaction type, maps the broker-specific columns onto the MyATMM data model, builds out the ticker list, and writes the transactions into the selected portfolio.
For a 4,907-row file, the parse completes in seconds. There is no waiting screen, no spinner that takes a coffee break — it's effectively immediate. The result page comes back with a structured summary of what was imported.
The summary that appears after the parse is your first real look at what just happened. It includes counts and aggregated dollar amounts for each transaction type:
You'll also see a count of skipped rows. The parser deliberately ignores rows that don't carry useful financial information — a row with a zero dollar amount, for instance, or a row whose type couldn't be confidently classified. These aren't errors; they're rows the parser decided to leave alone rather than guess wrong on. The skipped count appears in the summary so you know exactly how many rows it walked past.
The summary page exposes a View Import Details button. Clicking through opens a grouped grid: every ticker in the import is its own row, with a transaction count next to it. In the demo, the Schwab CSV produces over four thousand ticker-level groupings.
Expanding a ticker shows the individual transactions inside that group, ten per page by default (configurable to more if you want a longer view). This is where you can spot-check that a particular ticker has the transaction history you expect — wheel strategy traders, for example, can quickly verify that the buy-to-opens and sell-to-closes on a single underlying line up correctly.
There's also a ticker search field that filters the grouped list in real time. Type
TSLA and the grid narrows to only Tesla-related rows; clear the filter
and you're back to the full list. For an account with four thousand tickers across
four years, that filter is the difference between finding what you need in a few
seconds versus scrolling forever.
Some rows in any broker export can't be cleanly classified. Maybe the transaction type column has a value the parser hasn't seen before. Maybe the row is a legacy TD Ameritrade entry that got dragged into the Schwab CSV during the broker migration. Whatever the reason, the parser doesn't silently drop these — it imports them with a "Review" flag attached, so you know they need a human look.
In the import details view there's a Review toggle that filters the grid to show only flagged rows. A single click and you're looking at a tight list of things to sort out, instead of trying to find them inside thousands of clean imports.
In the walk-through, the only review-flagged row in a four-year Schwab CSV is a 100-share NVAX line at $8.99 that came across as part of the TD Ameritrade migration to Schwab. The transaction type column was a TDA-specific value the parser didn't have a Schwab mapping for, so it punted.
The fix is straightforward: open the flagged transaction, set the type to Stock, the side to Buy to Open (because the shares were arriving into the account), keep the amount at $8.99 and the quantity at 100, leave expiration blank since it's a share trade, and save. The review flag clears, the count decrements, and the row drops off the filtered grid.
Most four-year Schwab CSVs land somewhere between zero and a small handful of review flags. If you're seeing dozens, that usually means there's a broker-specific quirk worth flagging to support so we can extend the mapping for everyone.
What happens if you accidentally drop the same CSV twice — or drop a partial CSV that overlaps with a previous import? MyATMM watches for this. After an import, it looks back at the transactions already in your portfolio and flags anything that matches an existing row on the key identifying fields. These get marked as probable duplicates.
The summary page calls out the duplicate count up front. In the video, a seven-row test CSV is dropped after the big four-year import — every single row matches an existing transaction, and the summary reports seven probable duplicates. The detail view splits them so you can see exactly which rows are dupes, including in the ledger entries section if any of the duplicates were cash movements.
The platform then gives you two clean cleanup paths:
Both options are scoped to a single import batch, so you can clean up a mistake without touching the rest of your portfolio. The full Import History screen — which we'll cover in a separate video — is the place to manage these batches over time.
Once the import is clean, head back to the dashboard. Your portfolio is now populated with thousands of transactions — but there's a good chance the dashboard will surface one or two warning banners along the top. The most common one for a Schwab CSV import is some variation of "stock position issues."
Here's what that means in practice. Suppose you've been trading SOFI for five years. Your four-year Schwab CSV only includes the most recent four years of activity. If your oldest SOFI buy happened five years ago, the original buy-to-open row isn't in the CSV — but the subsequent sell-to-close rows from years two, three, and four are. The dashboard sees a sell with no matching buy and politely points that out.
The dashboard offers a Fix All shortcut that resolves the unmatched rows in one click using sensible defaults. For a quick cleanup that's fine. For a more deliberate pass — especially if you care about tracking the wheel strategy's rolling cost basis across long-running positions — the reconciliation page is the better tool.
The reconciliation page is where you bring your imported MyATMM portfolio into agreement with what your Schwab account actually shows. The mindset matters here: you're not trying to recreate every transaction since the dawn of your trading career. You're trying to establish a credible reset point from which forward-going tracking will be accurate.
That reset point has two halves:
The adjustment entry lives in the deposits/withdrawals section. You add a row, set the type to Adjustment, enter the dollar delta (positive or negative) needed to make MyATMM's running cash balance match Schwab's, and save. After that, the summary screen in MyATMM should match the brokerage screen at Schwab — that's the reset point. Going forward, every new trade you log will keep both numbers in lockstep.
It's worth saying this out loud: no four-year CSV import will reproduce every dollar you've ever traded. What it can do is give you a substantial, accurate base of recent history plus a clean adjustment to absorb the pre-window gap, so you have a real cost basis foundation to track against from today onward.
The whole reason this workflow exists is that the alternative — typing four years of trades into a tracker manually — isn't realistic for anyone who actually trades actively. Spreadsheets tend to break down not because the formulas are wrong but because the data entry burden makes them impossible to keep current. A single missed roll cascades through everything after it.
Bulk import inverts that problem. You pay the one-time cost of pulling the CSV and running the reconciliation pass, and from that point on you're only adding the handful of trades you actually placed this week. The system stays current because the ongoing maintenance load is tiny — a few trades a day max, not four years of catch-up.
The same AI Import surface handles ThinkOrSwim screenshots, Tastytrade screenshots, and Schwab CSVs, so multi-broker traders can seed each portfolio using whichever path their broker supports best.
Once the import and reconciliation are done, you've turned a generic broker export into something purpose-built: a per-ticker view of your cost basis with option premiums folded in, a portfolio summary that tracks realized and unrealized P&L, and a transaction grid where every new trade you log adjusts the cost basis the way option sellers actually need.
For wheel strategy traders specifically, the post-import state is where the platform starts paying for itself. Schwab's native UI doesn't know that a buy-to-open cash-secured put plus an assignment plus a subsequent covered call are three legs of the same income cycle on the same underlying. MyATMM does. The same is true of rolling: Schwab shows two separate trades; MyATMM treats it as a single position whose cost basis is rolling with you. If you've been managing this in a spreadsheet up to now, the bulk import is the moment you stop maintaining formulas and start running a tool that actually understands the strategy.
Options trading involves risk and is not suitable for all investors. Past performance does not guarantee future results. This content is for educational purposes only and should not be considered financial advice. Always consult with a qualified financial advisor before making investment decisions.
MyATMM provides purpose-built cost basis tracking for option sellers, with the flexibility to track covered calls, cash-secured puts, and wheel strategy positions.
Track up to 3 tickers completely free forever. No credit card required.
Create Your Free Account TodayBuilt for covered calls, cash-secured puts, and the wheel strategy