How I got control of my spending with a couple no-code services and only 100 lines of Python code

Josh Peters
The Startup
Published in
5 min readMay 5, 2019


The source code for the spending tracking application can be found on my Github along with end-to-end instructions on how to set it up for yourself.

After starting my first real job out of college as a Software Engineer, I had no control or insights into my personal finances. $4 coffees, $12 lunches at work, $30 Amazon purchases here and there, $75 on a night out at out bars — it all seemed normal. It couldn’t add up to that much, right? That’s where I was wrong.

Despite the first few months of paychecks rolling in, I was barely moving the needle on increasing my savings. I then did what every rational, data-driven engineer would do — copy and paste all my transactions across two credit cards, a debit card, and Venmo account into Excel and look at numbers. I was spending much more than I realized. I had fallen victim to the trap of lifestyle inflation and needed to quickly get a handle on my expenses.

Not only was it tedious to copy data into excel from almost a half-dozen different sources, but it also did not give me a real-time picture of my spending — I would have to repeat this process every time I wanted to evaluate my spending. I looked into existing budgeting software such as Mint or YNAB; they were feature packed but cumbersome to setup and complex to use. All I wanted was a simple, unified view of my transaction history across all payment mechanisms with a few spending categories from which I could do my own analysis. I set out to build the tool I needed.

The Secret API of Banks

Early into my research I reached a major impediment; neither my banks nor Venmo offered a way to programmatically access my transactions in real time. However, after digging through the preferences in my Chase credit card account, I found the ability to turn on email purchase notifications for every transaction.

Purchase notifications via email are the secret API of financial products.

The API for my financial accounts was hiding in plain sight. All of my credit cards, debit cards, and even Venmo account had the option to turn on email purchase notifications. I suspect every single major card company or payment application has the same option.

In my head, I laid out the architecture diagram of how my spending tracking application would work. Incoming emails with purchase notifications would be forwarded to a backend service. The transaction description and dollar amount would be parsed and assigned a category. The record would then be uploaded to a database. A simple CRUD web app would then hit a REST API that interacts with transactions in the database.

No-Code services can help you quickly turn ideas into reality

When thinking about the choice of database, a realization dawned on me — why not just use Google Sheets. It was the perfect choice as a backend for my project because it could also serve as the frontend for my application. Sheets can be viewed on any device. I could build totals right into the workbook. I even had the ability to edit/delete transactions with versioning right out of the box. To handle the email notifications, I made a similar choice of not rolling my own service. I used Zapier to receive auto-forwarded emails from Gmail and then send the subject and body as a JSON payload in a HTTP POST to a REST endpoint on my application.

It wasn’t until I started coding the application that I realized I’d learned a valuable lesson — you don’t need to overbuild a solution when trying to get a product off the ground and validate an idea. Through the use of a couple no-code services, I was able to reduce the scope and complexity of my project from weeks worth of effort into only 100 lines of Python code. In the age of moving fast and shipping even faster, it is important to realize that no-code tools can increase your productivity and time to market exponentially. As an engineer, it is in my DNA to build things. However, it’s too easy to get stuck in the mindset that you have to build everything. This mentality often leads one stuck with a plethora of incomplete products that grew too complex to finish before losing interest. There is no shame in using no-code or low-code apps to help accomplish your goals and actually ship a project.

Transactions are automatically captured in the Sheets workbook and added to a month-by-month summary.

The end state for my expense tracking application was a simple Python Flask REST API with one endpoint that takes a POST request from Zapier. The app parses the transaction description & amount, automatically assigns a spending category, and then posts the data to a Google Sheets workbook. The Sheets workbook has two tabs: one tracking all expenses across my two credit cards, debit card, and Venmo account, and another where spending categories are totaled by month. A small set of rules and filters within the Python app takes care of double counting transactions and ignores transactions that should not be tracked.

No-code apps might not fit every use case, but they jumpstarted my development and allowed me to go from idea to proof-of-concept in only a few hours. I hope to incorporate more of them in my development in the future, especially in exploratory situations.

The source code for the spending tracking application can be found on my Github along with end-to-end instructions on how to set it up for yourself.