Free Expense Tracker in Obsidian
that actually works on mobile
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:
- 10-second expense entry via QuickAdd wizard with conditional dropdowns
- Automatic balance tracking (income is positive, expenses are negative)
- Excel-style pivot visualization that works on both mobile and desktop
- All data in one markdown file - easy to search, backup, and own
How It Works
Step 1: Mobile Entry (10 seconds)
- Open QuickAdd command
- Select: Expense or Income
- Pick category → Get relevant subcategories only
- Enter amount + payment mode + optional note
- 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:
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,100Every 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):
- 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 | 5300Format: 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:
---
main_categories:
Expense:
Education:
- Coaching
- Exams
- Literature
- Software
Entertainment:
- SportsCustomize this: Add/remove categories based on your spending patterns.
Part 2: Install QuickAdd Plugin
- Settings → Community Plugins → Browse
- Search "QuickAdd" → Install → Enable
- Go to QuickAdd settings
Part 3: Configure QuickAdd Macro
- In QuickAdd settings, click "Manage Macros"
- Create new macro, name it "Add Expense"
- Click "Configure" → Add "User Script"
- Create a file at
scripts/expense-entry.jswith this code:
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),- Back in QuickAdd settings, add a "Capture" choice
- 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"
- Capture to:
Part 4: Create Your Data File
Create pages/Expense.md:
---
# Expenses are negative, income is positive
# This file is auto-populated by QuickAdd
---Part 5: Set Up Visualization
Create a file called Expense Dashboard.md:
---
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
- Mobile: Open Obsidian app → Command palette → Search "Add Expense"
- Follow the wizard prompts
- Open your
Expense Dashboard.mdto 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:
Start: 2025-11-01
End: 2025-11-30Multiple 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
- Set up the basic system (30 minutes)
- Log expenses for a week
- Customize categories based on your patterns
- 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!