Extract data from investment statements
An investment statement is the periodic record a custodian sends showing what a portfolio holds, what it is worth, and what moved during the period. A wealth advisor reconciling client accounts, a tax preparer assembling a return, and a family-office analyst rolling up positions all read two grids inside it: a holdings table listing each security with its quantity, cost basis, market value, and unrealized gain or loss, and a transactions table listing every buy, sell, dividend, interest payment, and fee. A statement from a custodian such as Charles Schwab or Fidelity Investments for the quarter ended 2026-03-31 might show a net asset value of $1,284,500 in USD against a cost basis of $1,020,000, an unrealized gain of $264,500, and a cash balance held for the next purchase. The detail that resists a flat read is the holdings grid and the cost-basis math. Each position carries a quantity, a price per unit, and a market value that ties to quantity times price, plus a cost basis and a gain or loss that only make sense when the two travel together, and a percentage-of-portfolio column that sums to 100 across the table. Securities are identified by a ticker, a CUSIP, or an ISIN, and the same holding can appear under different identifiers across custodians. Dividends, interest, and management fees each post as their own transaction type, and a tax preparer separates them because they are taxed differently. Opening and closing balances bracket the period. Talonic reads the investment statement and returns the account header, the holdings table with each security's quantity, cost basis, market value, and gain or loss, and the transactions table typed by activity, with the totals reconciled. A 2026-03-31 statement carrying 24 holdings and a $1,284,500 net asset value loads into the portfolio system, so an advisor reconciles positions from structured data instead of a hand-keyed grid.
What gets extracted from investment statements
How extraction works for investment statements
Investment statements arrive as a custodian PDF from firms such as Charles Schwab, Fidelity Investments, and Vanguard, as brokerage-platform exports, and as scanned quarterly mailings read with OCR, so the holdings and transaction grids look different on every source. Talonic reads the statement and maps it to the portfolio schema in the Field Registry, which separates the account header from the holdings table and the transactions table. Each holding keeps its security name, ticker or CUSIP, quantity, price per unit, market value, cost basis, and unrealized gain or loss, so a position is never split from the basis that values it, and the market values are reconciled to the net asset value. Transactions are typed as buy, sell, dividend, interest, or fee so a tax preparer can separate income from principal. Opening and closing balances bracket the period. Every figure returns with a confidence score and pixel-region provenance under DIN SPEC 91491 conformity, so an advisor can verify a holding's market value against the source statement.
Sample extraction
A quarterly brokerage statement with a holdings table
{
"document_date": "2026-03-31",
"account_holder": {
"name": "Helen Park",
"account_number": "****4471"
},
"custodian": {
"name": "Charles Schwab"
},
"currency": "USD",
"period_start_date": "2026-01-01",
"period_end_date": "2026-03-31",
"net_asset_value": 1284500,
"total_cost_basis": 1020000,
"total_gain_loss": 264500,
"cash_balance": 38200,
"holdings": [
{
"security_name": "Apple Inc.",
"ticker_symbol": "AAPL",
"quantity": 500,
"price_per_unit": 192.8,
"market_value": 96400,
"total_cost": 74000,
"gain_loss_amount": 22400,
"security_type": "stock"
},
{
"security_name": "Vanguard Total Bond ETF",
"ticker_symbol": "BND",
"quantity": 1200,
"price_per_unit": 72.5,
"market_value": 87000,
"total_cost": 90000,
"gain_loss_amount": -3000,
"security_type": "fund"
}
]
}Frequently asked
Does it keep the cost basis and market value together per holding?
Yes. Each position keeps its quantity, price per unit, market value, and cost basis together, and the unrealized gain or loss is returned per holding, so a wealth advisor sees where a position stands rather than a single portfolio total.
How are dividends, interest, and fees handled?
Every transaction is typed as a buy, sell, dividend, interest, or fee, so a $240 quarterly advisory fee posts as a fee rather than a trade, and a tax preparer can separate taxable income from a return of principal.
Does it read tickers, CUSIPs, and ISINs?
Yes. A security is captured with whichever identifier the statement carries, whether a ticker, a CUSIP, or an ISIN, so the same holding can be matched across custodians that identify it differently.
Ready to extract from your own investment statements?
Author note
Reviewed by Talonic engineering, schema review · last reviewed 2026-07-06