https://github.com/rlan/convert-csv-schwab2pp
Converts a Charles Schwab transaction CSV file to a ready-to-import CSV file for Portfolio Performance.
https://github.com/rlan/convert-csv-schwab2pp
charles-schwab command-line-tool conversion conversions converter csv finance portfolio-performance python python3 text-processing
Last synced: 2 days ago
JSON representation
Converts a Charles Schwab transaction CSV file to a ready-to-import CSV file for Portfolio Performance.
- Host: GitHub
- URL: https://github.com/rlan/convert-csv-schwab2pp
- Owner: rlan
- License: mit
- Created: 2022-10-26T06:42:50.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2025-10-30T16:25:24.000Z (5 months ago)
- Last Synced: 2025-10-30T17:36:25.948Z (5 months ago)
- Topics: charles-schwab, command-line-tool, conversion, conversions, converter, csv, finance, portfolio-performance, python, python3, text-processing
- Language: Python
- Homepage:
- Size: 8.19 MB
- Stars: 12
- Watchers: 2
- Forks: 3
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Citation: CITATION.cff
Awesome Lists containing this project
README
# A Charles Schwab CSV Converter for Portfolio Performance
[](https://github.com/rlan/convert-csv-schwab2pp/actions)

[](https://github.com/astral-sh/uv)
[](https://github.com/astral-sh/ruff)

[](https://doi.org/10.5281/zenodo.15024607)
A command-line tool that converts a [Charles Schwab](https://www.schwab.com/) transaction CSV file to a ready-to-import CSV file for [Portfolio Performance](https://www.portfolio-performance.info/en/) (PP).
After conversion, this [step-by-step guide](./guide/README.md) creates a new portfolio file in PP and imports the converted example CSV.
After importing the converted example CSV.
## Installation
First, install [uv](https://github.com/astral-sh/uv).
Then:
```sh
uv tool install git+https://github.com/rlan/convert-csv-schwab2pp
```
Verify installation:
```sh
uv tool list
```
```txt
schwab2pp v1.0.0
- schwab2pp
```
### Try it out!
```sh
schwab2pp --help
```
```txt
Usage: schwab2pp [OPTIONS] [SCHWAB_CSV] [PP_CSV]
Convert transactions from Charles Schwab for Portfolio
Performance.
Convert a transactions CSV file from Charles Schwab to an
equivalent and ready-to-import CSV file for Portfolio
Performance.
╭─ Arguments ─────────────────────────────────────────────────╮
│ schwab_csv [SCHWAB_CSV] CSV file from Charles │
│ Schwab │
│ [default: None] │
│ pp_csv [PP_CSV] Resulting CSV file for │
│ Portfolio Performance │
│ [default: pp.csv] │
╰─────────────────────────────────────────────────────────────╯
╭─ Options ───────────────────────────────────────────────────╮
│ --install-completion Install completion for the │
│ current shell. │
│ --show-completion Show completion for the │
│ current shell, to copy it or │
│ customize the installation. │
│ --help Show this message and exit. │
╰─────────────────────────────────────────────────────────────╯
```
Example:
- An example Schwab CSV: [example.csv](example.csv).
- The converted ready-to-import CSV file: [example_out.csv](example_out.csv).
To replicate this conversion:
```sh
schwab2pp example.csv example_out.csv
```
### Update to a new version
```sh
uv tool upgrade schwab2pp
```
### Uninstallation
```sh
uv tool uninstall schwab2pp
```
## Details
Supported transactions:
- "NRA Tax Adj"
- "Credit Interest"
- "NRA Withholding"
- "Short Term Cap Gain"
- "Long Term Cap Gain"
- "Cash Dividend"
- "Buy"
- "Wire Received"
- "Wire Sent"[^1] (Thank you, [@ipaulo](https://github.com/ipaulo))
- "Sell"[^2] (Thank you, [@ipaulo](https://github.com/ipaulo) and [@mgillman](https://github.com/mgillman))
Not-yet-supported transactions:
- ACH deposit and withdrawal
I have actual transactions for the supported transactions. If you could share actual transactions for not-yet-supported ones, please let me know. Thank you.
Duplicate transactions:
As far as I can test, PP will detect and skip duplicate transactions. So it is safe to import overlapping transactions in the future.
Dates:
If date is in "date1 as of date2" format, "date1" will be used and "as of date2" will be appended to the resulting "Note" column.
## Development
See [development.md](development.md)
## Citation
If this project helps your research, don't hesitate to spread the word! Click on the badge below and find citation formats (e.g., BibTeX and etc) at the bottom of that page.
[](https://doi.org/10.5281/zenodo.15024607)
## License
[MIT](LICENSE)
[^1]: https://github.com/rlan/convert-csv-schwab2pp/issues/2
[^2]: https://github.com/rlan/convert-csv-schwab2pp/issues/3