Track personal expenses locally with optional sync to Zapier and/or Google Sheets. Works offline. Installable as a PWA on any device.
Live demo → mt.sanudin.dev
- Add expenses with category, date, and optional description
- Browse history by month with per-category breakdown
- Edit and delete past entries
- Local-first — data lives on-device (IndexedDB); history always available offline
- Optional sync to Zapier and/or Google Sheets (both can be active simultaneously)
- Multi-currency support
- CSV export — always available from local history
- PWA — install on Android, iOS, or desktop; works fully offline
- Offline sync queue — expenses saved to device and pushed when back online
Both integrations are optional and independent — enable neither, one, or both at the same time.
| Zapier | Sheets API | |
|---|---|---|
| Setup | ~5 min | ~2 min |
| What it does | Sends each expense to any Zapier-connected app | Writes directly to a Google Sheet |
| Cost | Free tier (100 tasks/mo) | Free |
See the Compare page for details.
Next.js 16 App Router · TypeScript · Tailwind CSS · IndexedDB (idb) · Zod · @ducanh2912/next-pwa
git clone https://github.com/sanudin-dev/money-tracker
cd money-tracker
npm install
npm run devWorks immediately without any credentials — expenses save locally to IndexedDB.
To enable Google Sheets sync, create .env.local (see .env.example):
GOOGLE_CLIENT_ID=your_client_id
GOOGLE_CLIENT_SECRET=your_client_secret
ENCRYPTION_KEY=<output of: openssl rand -base64 32>See the Developer page for the full Google Cloud setup guide (enable Sheets API, create OAuth client, add redirect URIs).
Standard Next.js app — deploy to Vercel, Netlify, Render, or any Node.js host. No database required.
For Google Sheets sync, set these environment variables on your host:
GOOGLE_CLIENT_ID
GOOGLE_CLIENT_SECRET
ENCRYPTION_KEY
Also add your production domain's callback URL to Google Cloud Console:
https://your-domain.com/api/auth/google/callback
Open mt.sanudin.dev in a browser and follow the Install guide:
- Android: Chrome → menu → Add to Home Screen
- iOS: Safari → Share → Add to Home Screen
- Desktop: Chrome or Edge → install icon in address bar