Charles Schwab CSV to Beancount
Convert a Schwab brokerage Transactions export into balanced double-entry Beancount transactions — dollar signs, thousands separators and settlement-adjusted dates all read correctly.
Column mapping verified against a real Charles Schwab export
How to export your Charles Schwab transactions
- 1
Sign in at schwab.com and go to Accounts, then History.
- 2
Pick the account, then the Transactions view rather than a statement.
- 3
Set the date range, then use the Export control above the transaction table and choose CSV.
- 4
The download is named after the account and the moment you asked for it, along the lines of Individual_XXX980_Transactions_20260724-173507.csv.
- 5
If your file opens with a “Transactions for account …” banner or ends with a “Transactions Total” row, delete those two lines; then copy the rest and paste it below.
Four rows in ten can be skipped, and nothing is wrong
In a real 1,491-row Schwab export, 610 rows have an empty Amount: vested shares, share transfers and other stock-plan activity moved securities rather than money, so there is no cash side to write down. Every one of them is reported and skipped, which means a long list of skipped lines is the expected outcome on a brokerage file, not a sign that the converter choked. What comes back is the cash side of the account — transfers in, buys, sells, dividends and interest. A trade converts to its cash leg only, so a $995.00 purchase of VTI becomes $995 leaving the account with no share posting attached; record the commodity side by hand.
Beancount output
Charles Schwab export questions
What are the “Transactions for account…” and “Transactions Total” lines?
A banner Schwab puts above the column headings and a summing row it puts underneath. Neither is a transaction, and neither appears in every export — some download paths include them and some do not. Delete them if yours has them and the run comes out clean; leaving them in costs you two reported lines and changes none of the converted amounts.
My file has Withdrawal and Deposit columns instead of Amount — is it the wrong file?
It is the right file for a Schwab Bank Investor Checking account, which exports Date, Status, Type, CheckNumber, Description, Withdrawal, Deposit and RunningBalance instead of the brokerage layout. Set the selects by column name rather than by counting positions: the Debit and Credit pair takes Withdrawal and Deposit. Older Schwab Bank exports have no Status column, so everything after it shifts by one — which is exactly why this page maps the brokerage file and leaves the bank one to the selects.
One of my dates reads “04/17/2023 as of 04/15/2023”. Which one is used?
The first one. Schwab writes that double form on settlement-adjusted rows, and the leading date is the posted date its own history screen sorts by — so the converted transaction lines up with what you see on the site when you check it. The trailing part of the cell is dropped and the row converts as normal rather than being skipped.
Keep the ledger you just converted
Beancount.io hosts your plain-text ledger, imports future statements for you, and keeps every number auditable.
Start Free→