My attempt at creating my own budgeting software in python
This is my attempt at expanding my knowledge of python and other components in order to create a tool for budget and expense
reporting for myself. And because I found available tools to be frustrating and using google sheets is boring
I expect the end state to be able to:
- Import transactions from common file formats (CSV for now)
- Compile this data into a single file/database for simplicity
- Allow custom labelling or tagging for budget and expense categories
- User friendly interface for validating and correcting import issues
- Provide a nice UI for viewing transactions, reports, summaries and charts
- Application can be run on a local system for privacy and security with a small footprint
- Allow for manual goal and target setting for budgets and savings
- Long term data tracking and analytics for spending trends and other data points
Future roadmap:
- Secure login capabilities for data protection
- Extend support for other file formats such as PDF and exports from other financial institutions (Basic PDF support added)
A possible desktop client alternative with GUI (WIP)Desktop client built using PyQt6 is well underway 6-19-2025Use a database like SQLite to store all transaction data for more robust optionsImplemented
For a summary of planned features you can find the current roadmap on this page.
- Moving future commits to dev branch for better sanity checks and logic control - 5/15/2025
- Branch mismatch caused most recent commits to master, more clenaup is needed of original code before separating the branches again (06/19/2025)
- Split development of Django to new repository: Budget Book Web Repository - 05/16/2025
Tracking for what I need to change, fix or implement
Major next step is I need to finish converting the imported PDF into usable CSV and switch the 'import expenses' to use multiple file formats and parse which ones should be used. aka selecting back type along with file to call correct importers/parserscompleted 06/26/2025Update the SQL functions to support the TKinter versionTKinter no longer in use. However all existing SQL calls updated for PyQt6 and Pandas functionality- ~~In addition to updating SQL functions I need to rework the database again after splitting the systems. ~ I plan to use the same
format but need to decouple it from Django components~ Database has been reworked again, full decouple from Django as well.~~ Database needs another redo but the split from Django is complet
- I do not feel its a good idea to use the same DB but plan to add a feature later to import/export data between the two app versions
- Create library for parsing pdf import files for transactions
Create Capital One functionsCompleted 5/16/2025Create template and tools for adding Pdf parse functionsCompleted 05/16/2025
Create library for parsing imported dataframes into database entriesCompleted 07/15/2025Import test dataCorrect formatting of import data The date format is causing issuesResolved 05/07/2025Create budget summary page template- Update links, filters and buttons for summary browsing Django development moved to Budget Book Web Repository
- Create a page to edit the budget data to add tags and make corrections Django development moved to Budget Book Web Repository
- Add ability to upload CSV/TSV files for easier import CSV file import added 5-7-2025
- CSV import needs to be updated for better parsing of pandas dataframes from pdf imports
Setup tagging in a more friendly way, inline editing of a table perhapsCompleted for now via tkinter display solved in PyQt6 as well- Add a reliable storage method for tags to be used to to correlate common names with a tag to 'learn' how things get tagged
Despite the table having a date field the SQL query object doesnt have it so no date is displayedResolved 4-17-2025- As a follow-up, the database will be reworked again to handle proper date types and column headers for compatability and because I solved the issue with date parsing. (07/18/2025)
App crashes if you cancel the import file dialogue box without selecting a fileResolved 5-8-2025The dynamic entry boxes do not always properly reset when importing different data or changing sourcesNot an issue in PyQt6 6-19-2025- There is a weird crash caused by running the program with -h for the logging config. temp fix applied in main.py
- There is a known limitation with the data table view relating to the _generate_report_chart function in main.py where the size of the table cannot be modified manually. This would involve changes in the gui_handles module.