100% Free Forever
AI-Powered Learning
Industry Expert Content
Certificates & Badges
Learn At Your Own Pace
HomeBlogBuild an Expense Tracker With Python
Projects & Case Studies

Build an Expense Tracker With Python

SV

SkillVeris Team

Engineering Team

Apr 5, 2025 7 min read
Share:
Build an Expense Tracker With Python
Key Takeaway

A Python expense tracker records each expense (amount, category, date, note) and stores it so you can total and analyze spending over time.

In this guide, you'll learn:

  • Start with the csv module for simplicity, then graduate to SQLite when you need queries and reliability.
  • Model each expense as a dictionary or dataclass with amount, category, date, and description fields.
  • Use collections and simple loops to summarize totals per category and per month.
  • A command-line menu loop lets users add, list, and report expenses interactively.

1What You Are Building

An expense tracker is a program that records what you spend — an amount, a category, a date, and an optional note — and reports totals so you can see where your money goes. In Python you can build one as a command-line app that stores data in a CSV file or a SQLite database.

It is a rewarding beginner-to-intermediate project because it is genuinely useful and exercises core skills: reading and writing files, structuring data, working with dates, aggregating numbers, and building an interactive loop. You can start with a dozen lines and grow it into something you actually use.

2Modeling an Expense

Every feature depends on how you represent a single expense. A dictionary works for a quick start, but a dataclass gives you named fields, type hints, and cleaner code as the project grows.

Capture at least four fields: the amount as a float, a category string, a date, and a free-text description. Store the date as an ISO string (YYYY-MM-DD) so it sorts correctly and parses easily later.

  • from dataclasses import dataclass
  • @dataclass
  • class Expense:
  • amount: float
  • category: str
  • date: str # ISO format, e.g. '2026-07-19'
  • description: str = ''

3Storing Data With CSV

The csv module in the standard library is the simplest way to persist expenses. Each expense becomes a row, and the file opens in any spreadsheet program — a nice bonus for a personal tool.

Open the file in append mode when adding a record so you never overwrite existing data, and use csv.DictWriter so column order is explicit and headers are handled for you.

💡Pro Tip

Always pass newline='' when opening a CSV file for writing. Without it, Windows inserts blank lines between rows.

Appending a Row

DictWriter maps dictionary keys to columns, making writes readable and safe.

code
import csv
with open('expenses.csv', 'a', newline='') as f:
    writer = csv.DictWriter(f, fieldnames=['amount','category','date','description'])
    if f.tell() == 0: writer.writeheader()
    writer.writerow(expense.__dict__)

4Upgrading to SQLite

Once you want to filter and total data efficiently, move from CSV to SQLite. The sqlite3 module ships with Python, needs no server, and stores the whole database in a single file — ideal for a personal app.

SQL lets the database do the aggregation for you. Instead of looping through every row in Python, a single GROUP BY query returns category totals directly, which stays fast even with thousands of records.

  • import sqlite3
  • conn = sqlite3.connect('expenses.db')
  • conn.execute('CREATE TABLE IF NOT EXISTS expenses (amount REAL, category TEXT, date TEXT, description TEXT)')
  • conn.execute('INSERT INTO expenses VALUES (?,?,?,?)', (amt, cat, date, desc))
  • conn.commit()

5Reporting Totals by Category

The payoff of a tracker is insight. Summarize spending per category so users see their biggest costs at a glance. With CSV you loop and accumulate into a dictionary; with SQLite you run a GROUP BY query.

You can extend the same idea to monthly reports by grouping on the year-month prefix of the date string, or filter to a date range to see this month versus last.

Category Totals in SQL

One query does the aggregation the database is built for.

code
rows = conn.execute('SELECT category, SUM(amount) FROM expenses GROUP BY category ORDER BY 2 DESC')
for category, total in rows:
    print(f'{category:<15} {total:>10.2f}')

6Building the Command-Line Menu

Tie the features together with a loop that prints options and reads a choice. A while loop that runs until the user picks Quit is the standard pattern for a text-based tool.

Validate input as you go: wrap float(input(...)) in a try/except so a typo does not crash the program, and re-prompt on bad input. Small guards like this make the tool pleasant to use.

  • while True:
  • choice = input('1 Add 2 List 3 Report 4 Quit: ')
  • if choice == '1': add_expense()
  • elif choice == '2': list_expenses()
  • elif choice == '3': report()
  • elif choice == '4': break

7Best Practices

A few habits make the tracker reliable and easy to extend.

  • Store dates in ISO format (YYYY-MM-DD) so they sort and parse correctly.
  • Validate numeric input with try/except so bad entries never crash the app.
  • Use parameterized SQL queries with ? placeholders to avoid injection and quoting bugs.
  • Keep a fixed list of categories to prevent typos like 'Food' and 'food' splitting totals.
  • Commit after writes and close the connection when the program exits.

8Key Takeaways

The project turns everyday fundamentals into a tool you can keep using.

  • Model each expense with a dataclass: amount, category, date, description.
  • Start with the csv module, then move to sqlite3 for querying and scale.
  • Let SQL aggregate with GROUP BY instead of looping in Python.
  • A while-loop menu with input validation makes a friendly CLI.
  • ISO dates and fixed categories keep your reports clean and accurate.

9Frequently Asked Questions

Q: Should I use CSV or SQLite for an expense tracker? A: Start with CSV for its simplicity and spreadsheet compatibility. Move to SQLite once you need to filter, sort, and total large amounts of data efficiently — its GROUP BY queries do aggregation far faster than Python loops.

Q: How do I total spending by category? A: In SQLite, run SELECT category, SUM(amount) FROM expenses GROUP BY category. With CSV, loop through rows and accumulate amounts into a dictionary keyed by category.

Q: How should I store dates? A: Use ISO format strings like 2026-07-19. They sort correctly as text, parse easily with datetime, and let you group by month using the year-month prefix.

Q: How do I stop bad input from crashing the program? A: Wrap conversions like float(input(...)) in a try/except block, print a helpful message on failure, and re-prompt so a single typo never ends the session.

📄

Get The Print Version

Download a PDF of this article for offline reading.

About the Publisher

SV

SkillVeris Team

Engineering Team

Our engineering team documents real build journeys so you can learn by doing, not just reading.

View all posts

Never miss an update

Get the latest tutorials and guides delivered to your inbox.

No spam. Unsubscribe anytime.

Frequently Asked Questions

21 categories · pick one to explore

Does SkillVeris have a tech blog, and what does it cover?
Yes, the SkillVeris blog has over 500 articles covering AI and machine learning, programming, web development, DevOps, cloud, security, databases and career guidance. Articles are practical and answer-first, and many use the Learn Through Hobbies approach, teaching technical concepts through cricket, music, gaming or cooking analogies. Everything is free to read.
What is the SkillVeris tech glossary and how big is it?
The SkillVeris glossary is a free reference of roughly 2,000-plus technology terms, each with a clear plain-language definition. It spans AI, programming, web, DevOps, cloud, security and database vocabulary, so whenever a lesson, article or job description uses jargon you do not recognise, the glossary gives you a fast, reliable answer.
Are the developer cheat sheets on SkillVeris free to download?
The cheat sheets are completely free to use, like everything else on SkillVeris. Each sheet condenses a language or tool into its essential syntax, commands and patterns for quick reference while coding. They are designed for rapid lookup during real work, complementing the deeper explanations found in study notes and courses.
Which programming references and cheat sheets are available?
Cheat sheets cover the platform's main domains, including programming languages, AI and ML tooling, web development, DevOps, cloud, security and databases, matching the topics of the 37 live courses. Each sheet lists related reading links and hashtags, so you can jump from a quick reference into fuller study notes or blog articles.
How do I find the meaning of a technical term quickly?
Search the SkillVeris glossary, which holds around 2,000-plus terms with concise, plain-language definitions. Each entry gets to the point in its first sentence, then links to related reading like blog posts or study notes for deeper context. It is faster and more consistent than sifting through scattered search results.
Is the SkillVeris blog good for beginners learning to code?
Yes, many blog articles are written specifically for beginners, and the Learn Through Hobbies style makes them unusually approachable: you might learn Python concepts through cricket or understand APIs through cooking. With 500-plus articles across skill levels, beginners can start with fundamentals and keep reading as they advance, entirely free.
Can cheat sheets replace full courses for learning a language?
No, cheat sheets are references, not teaching tools; they assume you already understand the concepts and just need syntax or commands fast. To actually learn a language, take a structured SkillVeris course with its 24–40 lessons and assessments, then keep the cheat sheet beside you while practising in Code Lab.
How often are new blog articles published on SkillVeris?
The blog grows regularly and already exceeds 500 articles, with new posts added as courses launch and technologies evolve. Topics track the platform's catalogue across AI, programming, web development, DevOps, cloud and security, so checking the Blog section periodically surfaces fresh tutorials, explainers and career-focused pieces, all free to read.
Does the glossary cover AI and machine learning terms?
Yes, AI and machine learning vocabulary is a major part of the roughly 2,000-plus term glossary, covering everything from foundational terms to modern concepts around LLMs, RAG and MLOps. Definitions are plain-language and answer-first, which helps when dense AI papers or course lessons throw unfamiliar jargon at you.
Are there cheat sheets for interview preparation?
Cheat sheets work well as interview-day refreshers because they compress syntax, commands and key concepts into scannable references. For dedicated preparation, combine them with the SkillVeris interview questions feature, which includes readiness scoring, plus study notes for depth. Reviewing a relevant cheat sheet just before an interview steadies recall under pressure.
Can I read the tech blog without signing up?
Yes, the blog is freely readable, and SkillVeris never charges for content. All 500-plus articles are open, covering tutorials, concept explainers and career advice. Creating a free account adds value elsewhere on the platform, like course progress tracking and certificates, but reading the blog requires no commitment at all.
How is the SkillVeris glossary different from Wikipedia?
The glossary is purpose-built for learners: definitions are short, plain-language and answer-first, sized for a quick lookup mid-lesson rather than a deep encyclopedic read. Entries also cross-link to related SkillVeris study notes, blog posts and courses, so a definition becomes a doorway into structured learning instead of a dead end.
Do blog articles use the Learn Through Hobbies method?
Many blog articles teach technical topics through hobby analogies, a hallmark of the SkillVeris blog, so you will find articles explaining programming through cricket, machine learning through music, or system design through cooking. The analogy is the teaching device; the article still delivers the real technical concept underneath.
Where can I find quick programming references while coding?
Open the SkillVeris cheat sheets, which are built exactly for that moment: compact, scannable references for syntax, commands and common patterns across languages and tools. Keep the relevant sheet in a browser tab while you work in Code Lab or your own editor, and dip into the glossary for terminology.
Is there a glossary entry for terms I meet in job descriptions?
Very likely yes, with roughly 2,000-plus terms across AI, programming, web, DevOps, cloud, security and databases, the glossary covers most jargon that appears in tech job descriptions. Decoding a listing this way helps you judge role fit honestly and prepares you to discuss those terms in interviews.
Are the blog articles written for the Indian tech audience?
The blog serves Indian learners plus a worldwide audience. Content stays globally relevant while acknowledging realities that matter in India, such as free access being essential for students and freshers, and career guidance that connects naturally to the SkillVeris jobs portal, which aggregates roles across India, UK, USA, Germany and Remote.
Can I suggest a topic for the blog or glossary?
SkillVeris content grows in response to what learners need, so feedback is welcome through the platform's support channels. If a term is missing from the glossary or a topic deserves an article, telling the team helps prioritise it. Meanwhile, the AI Mentor can answer the question immediately, 24/7, at any depth.
Do cheat sheets and glossary entries link to deeper learning?
Yes, every cheat sheet and glossary entry carries related reading links into study notes, blog articles and courses, plus concept hashtags for discovering similar content. This cross-linking means a thirty-second lookup can smoothly become a structured learning session whenever you decide you want more than a quick answer.
What makes SkillVeris programming references trustworthy?
The references are written to strict internal quality standards, kept consistent with the platform's 37 live courses, and never padded with invented statistics or hype. Definitions and cheat sheets are reviewed against the same content contracts that govern courses, and the answer-first style makes any inaccuracy easy to spot and correct.
How do the blog, glossary and cheat sheets fit into my learning routine?
Use them as satellites around your main course: read blog articles for context and motivation, hit the glossary the instant jargon appears, and keep cheat sheets open while coding. Together with study notes, Code Lab and the 24/7 AI Mentor, they turn passive reading into a complete, free learning system.

What Learners Say

Real journeys from the SkillVeris community — swipe for more.

SkillVeris taught me Python through Cricket. Now I’m building real projects and feeling confident!
Arjun S. · B.Tech Student
The best platform for hobby-based learning. Concepts finally stick.
Priya R. · Data Analyst
I went from zero coding to a portfolio of projects — all by learning through my love for gaming. Landed my first internship!
Kabir M. · CS Undergraduate
Trending Topics50 popular tags — tap to explore
Trending CoursesAll 37 free courses — tap to browse