{"id":35228537,"url":"https://github.com/rlan/convert-csv-schwab2pp","last_synced_at":"2026-04-02T02:16:50.105Z","repository":{"id":144905015,"uuid":"557708236","full_name":"rlan/convert-csv-schwab2pp","owner":"rlan","description":"Converts a Charles Schwab transaction CSV file to a ready-to-import CSV file for Portfolio Performance.","archived":false,"fork":false,"pushed_at":"2025-10-30T16:25:24.000Z","size":8585,"stargazers_count":12,"open_issues_count":3,"forks_count":3,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-10-30T17:36:25.948Z","etag":null,"topics":["charles-schwab","command-line-tool","conversion","conversions","converter","csv","finance","portfolio-performance","python","python3","text-processing"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rlan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"patreon":"ricklan","ko_fi":"ricklan","buy_me_a_coffee":"rick.lan"}},"created_at":"2022-10-26T06:42:50.000Z","updated_at":"2025-10-30T16:26:06.000Z","dependencies_parsed_at":null,"dependency_job_id":"9c1c9185-0191-4a51-a0ca-9652d0ddda69","html_url":"https://github.com/rlan/convert-csv-schwab2pp","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/rlan/convert-csv-schwab2pp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rlan%2Fconvert-csv-schwab2pp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rlan%2Fconvert-csv-schwab2pp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rlan%2Fconvert-csv-schwab2pp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rlan%2Fconvert-csv-schwab2pp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rlan","download_url":"https://codeload.github.com/rlan/convert-csv-schwab2pp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rlan%2Fconvert-csv-schwab2pp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31294476,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-02T01:43:37.129Z","status":"online","status_checked_at":"2026-04-02T02:00:08.535Z","response_time":89,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["charles-schwab","command-line-tool","conversion","conversions","converter","csv","finance","portfolio-performance","python","python3","text-processing"],"created_at":"2025-12-30T01:57:56.773Z","updated_at":"2026-04-02T02:16:50.093Z","avatar_url":"https://github.com/rlan.png","language":"Python","readme":"# A Charles Schwab CSV Converter for Portfolio Performance\n\n[![Testing badge](https://github.com/rlan/convert-csv-schwab2pp/actions/workflows/ci.yml/badge.svg)](https://github.com/rlan/convert-csv-schwab2pp/actions)\n![Python versions](https://img.shields.io/badge/python-3.8%20%7C%203.9%20%7C%203.10%20%7C%203.11%20%7C%203.12%20%7C%203.13%20%7C%203.14-blue)\n[![uv](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/uv/main/assets/badge/v0.json)](https://github.com/astral-sh/uv)\n[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)\n![MIT license](https://img.shields.io/github/license/rlan/convert-csv-schwab2pp)\n[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.15024607.svg)](https://doi.org/10.5281/zenodo.15024607)\n\nA 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).\n\nAfter conversion, this [step-by-step guide](./guide/README.md) creates a new portfolio file in PP and imports the converted example CSV.\n\n\u003cfigure\u003e\n  \u003cimg\n  src=\"https://github.com/rlan/convert-csv-schwab2pp/raw/main/guide/img/100.png\"\n  alt=\"Guide step 100\"\u003e\n  \u003cfigcaption\u003eAfter importing the converted example CSV.\u003c/figcaption\u003e\n\u003c/figure\u003e\n\n\n## Installation\n\nFirst, install [uv](https://github.com/astral-sh/uv).\n\nThen:\n\n```sh\nuv tool install git+https://github.com/rlan/convert-csv-schwab2pp\n```\n\nVerify installation:\n\n```sh\nuv tool list\n```\n\n```txt\nschwab2pp v1.0.0\n- schwab2pp\n```\n\n### Try it out!\n\n```sh\nschwab2pp --help\n```\n\n```txt\n Usage: schwab2pp [OPTIONS] [SCHWAB_CSV] [PP_CSV]\n\n Convert transactions from Charles Schwab for Portfolio\n Performance.\n\n Convert a transactions CSV file from Charles Schwab to an\n equivalent and ready-to-import CSV file for Portfolio\n Performance.\n\n╭─ Arguments ─────────────────────────────────────────────────╮\n│   schwab_csv      [SCHWAB_CSV]  CSV file from Charles       │\n│                                 Schwab                      │\n│                                 [default: None]             │\n│   pp_csv          [PP_CSV]      Resulting CSV file for      │\n│                                 Portfolio Performance       │\n│                                 [default: pp.csv]           │\n╰─────────────────────────────────────────────────────────────╯\n╭─ Options ───────────────────────────────────────────────────╮\n│ --install-completion          Install completion for the    │\n│                               current shell.                │\n│ --show-completion             Show completion for the       │\n│                               current shell, to copy it or  │\n│                               customize the installation.   │\n│ --help                        Show this message and exit.   │\n╰─────────────────────────────────────────────────────────────╯\n```\n\nExample:\n\n- An example Schwab CSV: [example.csv](example.csv).\n- The converted ready-to-import CSV file: [example_out.csv](example_out.csv).\n\nTo replicate this conversion:\n\n```sh\nschwab2pp example.csv example_out.csv\n```\n\n\n### Update to a new version\n\n```sh\nuv tool upgrade schwab2pp\n```\n\n\n### Uninstallation\n\n```sh\nuv tool uninstall schwab2pp\n```\n\n\n## Details\n\nSupported transactions:\n\n- \"NRA Tax Adj\"\n- \"Credit Interest\"\n- \"NRA Withholding\"\n- \"Short Term Cap Gain\"\n- \"Long Term Cap Gain\"\n- \"Cash Dividend\"\n- \"Buy\"\n- \"Wire Received\"\n- \"Wire Sent\"[^1] (Thank you, [@ipaulo](https://github.com/ipaulo))\n- \"Sell\"[^2] (Thank you, [@ipaulo](https://github.com/ipaulo) and [@mgillman](https://github.com/mgillman))\n\nNot-yet-supported transactions:\n\n- ACH deposit and withdrawal\n\nI have actual transactions for the supported transactions. If you could share actual transactions for not-yet-supported ones, please let me know. Thank you.\n\nDuplicate transactions:\n\nAs far as I can test, PP will detect and skip duplicate transactions. So it is safe to import overlapping transactions in the future.\n\nDates:\n\nIf date is in \"date1 as of date2\" format, \"date1\" will be used and \"as of date2\" will be appended to the resulting \"Note\" column.\n\n\n## Development\n\nSee [development.md](development.md)\n\n\n## Citation\n\nIf 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.\n\n[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.15024607.svg)](https://doi.org/10.5281/zenodo.15024607)\n\n\n## License\n\n[MIT](LICENSE)\n\n\n[^1]: https://github.com/rlan/convert-csv-schwab2pp/issues/2\n[^2]: https://github.com/rlan/convert-csv-schwab2pp/issues/3\n","funding_links":["https://patreon.com/ricklan","https://ko-fi.com/ricklan","https://buymeacoffee.com/rick.lan"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frlan%2Fconvert-csv-schwab2pp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frlan%2Fconvert-csv-schwab2pp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frlan%2Fconvert-csv-schwab2pp/lists"}