Skip to content
ignitai Get the app
← Back to blog · · 9 min read

Convert brokerage statement PDF to Excel on Mac (2026 guide)

Turn Fidelity, Schwab, Vanguard, and Robinhood statement PDFs into one clean Excel sheet on Mac — on-device on macOS 14.4+, with trades and dividends split out.

guides investing mac bookkeeping

It is the run-up to the filing deadline, or the quarter just closed, and you need your brokerage activity as spreadsheet rows — not as a forty-page PDF. Maybe your accountant asked for every realized sale with its cost basis so the Schedule D ties out. Maybe you hold accounts at three different brokers and want one combined view of what you actually own. Maybe you are reconciling dividend income against the 1099-DIV before you file. Whatever the reason, you have a stack of monthly or quarterly statements — downloaded one at a time from Fidelity, Schwab, Vanguard, Robinhood, or E*Trade — and you need them as Excel rows you can sort, sum, and filter.

The single-statement case is annoying but survivable: you can scroll one PDF and copy a dozen lines into a sheet. The batch case is the one that eats an afternoon. Every broker lays the statement out differently, the sections you care about are scattered across pages, and the numbers — share counts, cost basis, proceeds, dividends, fees — live inside tables that copy-paste into a single mangled column the moment you try to drag them out of Preview.

This guide is the Mac-native workflow: convert brokerage statement PDFs to Excel on Mac, in batch, on-device on macOS 14.4+, with positions, trades, and income each broken into their own clean rows.

Why a brokerage statement is harder than a bank statement

A checking-account statement is essentially one ledger: date, description, amount, balance. A bank statement converts to Excel as a single flat table, and that is the whole job.

A brokerage statement is not one table. It is four or five different tables that happen to share a cover page, and a generic extractor that grabs “all the tables” hands you a denormalized mess where holdings, trades, and dividends blur together. The regions you actually need:

  1. Holdings / positions. What you own at the statement close: symbol, description, quantity, price, market value, and usually unrealized gain/loss and cost basis. This is a snapshot, dated to the period end.
  2. Activity / transactions. Every buy, sell, transfer, and reinvestment during the period: trade date, settlement date, action, symbol, quantity, price, and the total amount. This is the section your accountant cares about for realized gains.
  3. Income. Dividends, qualified vs. non-qualified, interest, and capital-gains distributions — each with a pay date, the security, and the amount. This feeds the 1099-DIV reconciliation.
  4. Fees and adjustments. Advisory fees, ADR fees, foreign tax withheld, margin interest. Small, easy to miss, and they matter for both cost-basis math and deductions.
  5. Summary block. Beginning value, ending value, net contributions, and total change. The reconciliation anchor — usually a small key-value block on page one, not a row in any table.

The labels vary by broker, too. Fidelity says “Securities Bought & Sold”; Schwab says “Transaction Detail”; Vanguard splits “Dividends and capital gains” into its own page; Robinhood collapses everything into a terse mobile-first layout. A coordinate-based table tool needs a fresh template per broker and breaks every time a broker tweaks the design. A tool that reads the statement as a statement does not.

Why Mac (not iPhone) for a year of statements

A statement notification hits your phone the moment the period closes — and for a single in-the-moment capture, the iPhone bank-statement flow shows the pattern that works on a small screen. But pulling a year of brokerage activity together is desk work, and the Mac wins for three concrete reasons:

  • Drag a folder of twelve. Monthly statements across a tax year is twelve PDFs; quarterly is four per account. Three accounts at quarterly cadence is still only twelve files — but it is twelve files you want to drop in one motion, not share-sheet one at a time.
  • The big screen makes reconciliation fast. The single most important brokerage check — does the sum of your realized sales in the activity section match the proceeds figure on the 1099-B — is a glance on a large display with the workbook on one half and the December statement on the other.
  • macOS 14.4+ on Apple Silicon keeps your account numbers on the device. A brokerage statement carries your full name, account number, sometimes the last four of your SSN, and your complete holdings. On an M1-or-newer Mac running macOS 14.4+, the entire batch extracts locally — none of it is uploaded anywhere.

If your Mac is Intel-era (T2 or earlier), the on-device model is not available and ignitai falls back to a hosted pipeline with documented zero retention. For Apple Silicon Macs on macOS 14.4+, the whole year of statements stays on the machine.

Method 1: ignitai on Mac (the on-device way)

ignitai treats statement extraction as a language task — “read this statement and list every sale with its proceeds and cost basis” — not a grid-coordinate task. That is why it survives the layout differences between Fidelity, Schwab, and Vanguard without per-broker templates. The full Mac batch flow:

  1. Drag the folder of statements into ignitai. A year’s worth in one drop. Mixed brokers are fine — if you hold accounts at Fidelity and Schwab, the same batch handles both. Up to 500 PDFs in one pass on an M-series Mac.

  2. Describe what to extract, once for the whole batch. Plain English, and because a brokerage statement has several sections, you tell it which one you want. A prompt that pulls the realized-sales detail most people need at tax time:

    “From the activity/transaction section of each statement, return one row per sale: trade_date (ISO 8601), settlement_date, symbol, description, quantity, proceeds, cost_basis, and realized_gain_loss. Ignore buys, transfers, and the holdings snapshot. If cost basis is not shown on the statement, leave it blank — do not guess.”

    Save it as a preset. Next quarter it is one click. Want the holdings snapshot or the dividend income instead? Swap in a second saved prompt and re-run the same folder.

  3. Pick XLSX as the output format. One sheet, one row per transaction, currency formatting auto-applied to the amount columns and ISO date formatting to the date columns.

  4. Hit Extract. ignitai runs each PDF through the on-device model and streams rows into the workbook with live per-file progress. Twelve monthly statements on an M2 Mac finish in well under two minutes.

  5. Review the consolidated sheet. Every row carries a source_file column with the original PDF filename so you can trace any number back to its statement. Open in Excel for Mac or Apple Numbers.

  6. Re-run failures, not the whole batch. Any statement that failed (a corrupted download, a password-protected PDF) gets listed separately. Fix it, re-run just that file, append.

The reason the plain-English prompt matters here more than on a bank statement is the section problem. A brokerage statement contains five tables you do not want mixed together. Telling the model “only the realized sales, ignore the holdings snapshot” in one sentence is the difference between a clean Schedule D worksheet and a thousand-row dump you have to untangle by hand.

Method 2: the manual route, and why it falls apart

For completeness, the no-app path on a Mac:

  1. Open the statement in Preview.
  2. Select the activity table and copy.
  3. Paste into Excel for Mac.
  4. Watch every row collapse into a single column, because PDF text has no concept of a table cell — Preview copies in reading order, not grid order.
  5. Re-split with Data → Text to Columns, guess at the delimiter, and discover the broker used spaces inside descriptions (“ISHARES CORE S&P 500 ETF”) that your space delimiter just shredded into four columns.
  6. Repeat for the next statement. And the next.

The manual route works for one page of one statement if you are patient. It does not scale to a year, and it does not handle scanned statements at all — if your statement came as a scan or a photo rather than a native PDF, there is no text layer to copy, and Text to Columns has nothing to work with. ignitai reads scanned statements the same way it reads native ones, because it is reading the rendered page, not scraping a text layer. The same on-device reading is what powers the AI PDF-to-CSV workflow on Mac.

The reconciliation that actually matters

Once the activity section is in Excel, do the one check that catches every extraction error before it reaches your return:

  • Sum the proceeds column across all sales for the year.
  • Compare it to box 1d (proceeds) on the 1099-B your broker issues.

They should match to the dollar. If they do not, the usual culprit is a wash-sale adjustment or a corporate action (a stock split, a merger) that shows up in the activity section under a label your prompt did not anticipate. Sort the sheet by date, find the gap, and you have your answer in under a minute — which is the entire reason you wanted this in a spreadsheet instead of a PDF in the first place.

For the income side, run the dividend prompt and sum the dividend rows against box 1a (ordinary dividends) on the 1099-DIV. Same logic, same one-minute check.

What about multiple accounts and multiple years?

This is where the batch approach pulls away from anything manual. Drop three years of statements from two brokers — say seventy PDFs — into a single ignitai pass with the realized-sales prompt, and you get one sheet with every sale across every account and every year, each row tagged with its source_file. Add a pivot table in Excel, group by symbol, and you have a full lot-by-lot history you can hand to an accountant or feed into your own gain/loss model. Doing that by hand across seventy PDFs is not an afternoon; it is a weekend you do not get back.

If you would rather work in an Apple-native spreadsheet, the same extraction drives the PDF-to-Numbers workflow on Mac — pick Numbers as the output format instead of XLSX and the column types and currency formatting carry straight into a .numbers file. And if your statements are part of a larger pile of mixed financial PDFs, the batch PDF-to-CSV flow covers the general case.

A note on accuracy and the “do not guess” rule

The single most important word in the example prompt is the instruction to leave a field blank rather than guess. Brokerage statements are full of fields that are present on some securities and absent on others — cost basis is missing for shares transferred in from another broker, foreign tax is missing for domestic holdings, accrued interest applies only to bonds. A model told to “fill in cost basis” will invent a plausible-looking number for the transferred shares. A model told to “leave it blank if not shown” hands you a sheet where the blanks are honest signals: this is the row where you need to go find the cost basis yourself. That honesty is worth more than completeness, because a blank you can see beats a wrong number you cannot.

This is also why the plain-English layer matters more than a fixed template. You are not just extracting a table; you are encoding a small piece of tax logic — “realized sales only, real cost basis only” — into the extraction itself. A coordinate-based tool cannot express that. A sentence can.

Bottom line

If you have one statement and need three numbers, copy them by hand. If you have a year — or several accounts, or several years — of brokerage statements and you need them as sortable, summable Excel rows that reconcile against your 1099, the Mac-native batch flow is the fastest correct path. Drag the folder, write one sentence describing the section you want, pick XLSX, and let it run on-device. Your account numbers never leave the machine, the realized-sales sum ties out to box 1d, and the afternoon you would have spent in Text to Columns is back.

Get ignitai on the App Store and convert your first folder of statements on Mac today.