Free Expense Tracker in Obsidian

that actually works on mobile

October 27, 2025
Chinmay Kulkarni
expense managerknowledge managementproductivity

For 10 years, I've tried every expense tracking method: mobile apps, Google Sheets, app scripts, Notion. They all failed for one simple reason: they weren't fast enough to use in the moment.

When you're standing at a grocery store checkout, you don't have time to:

  • Wait for Notion to load (10+ seconds)
  • Navigate through clunky Google Sheets mobile UI
  • Open a separate app that doesn't sync with your notes

After countless experiments, I finally built something that works: a mobile-first expense tracker in Obsidian using QuickAdd + DataviewJS.

Entry takes 10 seconds. Visualization gives me Excel pivot table-style breakdowns. All my data lives in a single plain text file I control.

Here's how it works and how to build it yourself in 30 minutes.

The Problem: Why Every Expense Tracker I Tried Failed

Years 1-4: Mobile Apps (Walnut, Money Manager, etc.)

Pie charts look pretty, but they're not actionable. I couldn't:

  • Drill down into spending patterns
  • See top-down and bottom-up views simultaneously
  • Export my data when I wanted to switch apps

Years 5-7: Google Sheets

  • What worked: Pivot tables gave me exactly the analysis I wanted
  • Budgeting: Easy to adjust next month's plans based on patterns
  • Mobile experience is pathetic: Had to open my laptop for every transaction
  • Conditional dropdowns barely work on mobile

I tried Google App Scripts to improve the mobile experience. Still clunky. Still not mobile-native.

The Notion Experiment

Tried Notion databases. Deal-breaker: 10+ second load time on mobile. When you need to log an expense at the store, that's an eternity.

What I Actually Needed

  • Mobile-first: Native-feeling entry that takes <10 seconds
  • Smart dropdowns: Category → relevant subcategories automatically
  • Pivot-style analysis: See totals by category with drill-down capability
  • Fast: Opens instantly, no loading screens
  • Mine: Plain text files I control, no vendor lock-in
  • Free: No subscriptions

The Solution: Obsidian + QuickAdd + DataviewJS

This setup gives me:

  1. 10-second expense entry via QuickAdd wizard with conditional dropdowns
  2. Automatic balance tracking (income is positive, expenses are negative)
  3. Excel-style pivot visualization that works on both mobile and desktop
  4. All data in one markdown file - easy to search, backup, and own

How It Works

Step 1: Mobile Entry (10 seconds)

  1. Open QuickAdd command
  2. Select: Expense or Income
  3. Pick category → Get relevant subcategories only
  4. Enter amount + payment mode + optional note
  5. Done. Entry is appended to the top of your file.

Example flow:

  • Select "Expense" → Choose "Entertainment" → See only: Sports, Party, Movies, Restaurant, Trip
  • Select "Expense" → Choose "Essential" → See only: Fuel, Groceries, Medicines

Step 2: Visualization (Anywhere)

Open your expense dashboard note. DataviewJS automatically generates a collapsible pivot view:

text
Balance: ₹45,231
Showing expenses from 2025-10-01 to 2025-10-30

▼ Expense - ₹23,456
  ▶ Education - ₹5,000
  ▼ Entertainment - ₹8,750
    ▶ Restaurant - ₹3,450
    ▼ Trip - ₹5,300
      • 2025-10-15: Goa weekend - ₹3,200
      • 2025-10-22: Local sightseeing - ₹2,100

Every level is collapsible. Every total is calculated automatically. Click to drill down to individual transactions.

What Your Data Actually Looks Like

Everything lives in a single markdown file (Expense.md):

markdown
- 2025-10-28 | Expense | Entertainment | Restaurant | UPI | Dinner with friends | 850
- 2025-10-28 | Expense | Essential | Groceries | Cash | Weekly shopping | 1200
- 2025-10-27 | Income | Freelance | Consulting | Bank | October project | 15000
- 2025-10-26 | Expense | Entertainment | Trip | Credit Card | Weekend getaway | 5300
4 lines

Format: Date | Type | Category | Subcategory | Payment Mode | Description | Amount

That's it. Plain text. No database. No proprietary format.

Why This Beats Everything Else

vs Mobile Apps (Mint, YNAB, Walnut)

Your data: Plain text you control
No subscriptions: Completely free
Offline first: No cloud dependency for entry
Integrated: Lives with your other notes

vs Google Sheets

Mobile native: Actual mobile UI, not a desktop site crammed into mobile
Instant load: No waiting for sheets to load
Conditional dropdowns that work: No script fumbling

vs Notion

Speed: Opens in <1 second vs 10+ seconds
Offline: Works without internet
Simpler: No database relations to set up

How to Build This (30-Minute Setup)

Prerequisites

  • Obsidian installed (free download)
  • Basic familiarity with Obsidian (you've opened a note)

Part 1: Set Up Your Expense Categories

Create a file at scripts/expenseconfig.md:

markdown
---
main_categories:
  Expense:
    Education:
      - Coaching
      - Exams
      - Literature
      - Software
    Entertainment:
      - Sports

Customize this: Add/remove categories based on your spending patterns.

Part 2: Install QuickAdd Plugin

  1. Settings → Community Plugins → Browse
  2. Search "QuickAdd" → Install → Enable
  3. Go to QuickAdd settings

Part 3: Configure QuickAdd Macro

  1. In QuickAdd settings, click "Manage Macros"
  2. Create new macro, name it "Add Expense"
  3. Click "Configure" → Add "User Script"
  4. Create a file at scripts/expense-entry.js with this code:
javascript
module.exports = async (params) => {
    const { quickAddApi, variables, app } = params;

    // Load your expense categories
    const configFile = await app.vault.getAbstractFileByPath("scripts/expenseconfig.md");
    const fm = app.metadataCache.getFileCache(configFile)?.frontmatter;

    // Step 1: Expense or Income?
    const mainCat = await quickAddApi.suggester(
        Object.keys(fm.main_categories),
  1. Back in QuickAdd settings, add a "Capture" choice
  2. Configure it to:
    • Capture to: pages/Expense.md (or wherever you want your data)
    • Prepend: Enabled (adds new entries at the top)
    • Capture format: {{VALUE:entry}}
    • Run macro: Select "Add Expense"

Part 4: Create Your Data File

Create pages/Expense.md:

markdown
---
# Expenses are negative, income is positive
# This file is auto-populated by QuickAdd
---
4 lines

Part 5: Set Up Visualization

Create a file called Expense Dashboard.md:

markdown
---
Start: 2025-10-01
End: 2025-10-31
---

```dataviewjs
async function hierarchicalPivot() {
    // Get date range from frontmatter
    const startDateTime = dv.current().Start;
    const endDateTime = dv.current().End;

Change the Start and End dates in the frontmatter to filter your view.

Part 6: Test It

  1. Mobile: Open Obsidian app → Command palette → Search "Add Expense"
  2. Follow the wizard prompts
  3. Open your Expense Dashboard.md to see the visualization

That's it! You now have a fully functional expense tracker.

Pro Tips

Mobile Optimization

  • Add to mobile toolbar: Long-press toolbar → Add command → "Add Expense"
  • Use sync: Obsidian Sync (paid) or Syncthing (free) to keep mobile/desktop in sync

Customization Ideas

Filter by month: Change frontmatter dates in dashboard:

yaml
Start: 2025-11-01
End: 2025-11-30
2 lines

Multiple dashboards: Create Expense-2025-Q4.md, Expense-2025-Annual.md, etc.

Add payment mode to visualization: Modify the DataviewJS to include r.mode in display

Budget tracking: Add a target amount in frontmatter and calculate variance

Data Portability

Your data is plain text. You can:

  • Grep through it: grep "Restaurant" Expense.md
  • Import to Excel: It's pipe-delimited CSV
  • Version control: Track in Git
  • Backup: Copy one file

My Results After 6 Months

This system has completely changed my spending awareness:

  • Zero friction: I actually log every transaction now (10 sec on mobile)
  • Pattern recognition: Discovered I spend 40% on entertainment (adjusted budget)
  • Peace of mind: All data is mine, in plain text, searchable forever
  • No subscriptions: Saved ₹3,000/year vs Notion + YNAB

The key insight: Speed matters more than features. A complex system you don't use is worthless. A simple system you use religiously is gold.

Common Questions

Q: Can I import existing data?
A: Yes! Just format it as pipe-delimited lines and paste into Expense.md.

Q: What about receipts/attachments?
A: Add a Receipt column and link to image files: [[receipt-2025-10-28.jpg]]

Q: Can I share this with family?
A: Yes, with Obsidian Sync or by sharing the vault folder via cloud storage.

Q: What if I want graphs/charts?
A: Use Dataview to output data, then use a charting plugin like Charts or Obsidian Charts.

Next Steps

  1. Set up the basic system (30 minutes)
  2. Log expenses for a week
  3. Customize categories based on your patterns
  4. Adjust the visualization to your preferences

Once the mobile entry workflow clicks, you'll never go back to sheets or apps.


Coming next: How I use the same Obsidian + QuickAdd approach for time tracking (with tag-based slicing and weekly reports).

If you found this useful, share it with anyone drowning in expense tracking apps!