Open source · Self-hosted

Parse every UPI transaction
from Gmail, automatically

Your bank already sends you a notification for every payment. UPI Ingestor reads those emails, extracts the structured data, and keeps a clean searchable record — with automatic categorization and optional publishing to Monarch Money.

Get started → How it works
Next.js 16 React 19 TypeScript Tailwind v4
Supabase Gmail API Telegram Bot Vercel

Three layers, each independently useful

Use just the parser, add Telegram for categorization, or wire up Monarch for full expense tracking — each layer works on its own.

📥

Parse + track

Point it at a Gmail label and every UPI debit is automatically extracted, deduplicated, and stored with amount, merchant, timestamp, and bank reference. No manual entry. HDFC supported today — parser registry is open for contributions.

🏷

Categorize + learn

Define rules (regex / contains / equals on merchant name) or just let the app ask. A Telegram inline keyboard prompts you for unknown merchants, and every answer is saved as a permanent mapping — each merchant is only categorized once, ever.

🏦

Publish to Monarch

Connect Monarch Money and categorized transactions are automatically pushed via their GraphQL API — no CSV exports, no import steps. Transactions appear in Monarch as soon as they land in your inbox.

One pipeline, triggered daily

A single Vercel function invocation moves data from Gmail to Monarch. No queues, no workers — just a cron and a manual trigger.

⏰ Vercel Cron + 🖥 Web UI Pipeline Gmail Parser Categorizer
category hit → Monarch Publisher Supabase
category miss → Telegram Bot user picks · saves mapping Monarch Publisher Supabase

Works great with Monarch Money

Monarch is a personal finance app for tracking net worth, budgets, and transactions. UPI Ingestor feeds your Indian bank transactions in automatically — closing the gap for accounts Monarch doesn't natively support.

Try Monarch free →

Don't use Monarch? The app still works as a standalone parser and dashboard.
See the setup guide to skip the Monarch connection step.

Up and running in four steps

Self-host on Vercel. Data stays in your Supabase project. You control everything.

1

Install & configure

Clone the repo, run npm install, and copy .env.example to .env.local. Fill in your Supabase URL, anon key, secret key, and encryption key.

2

Connect Gmail

Create a Google Cloud project, enable the Gmail API, and authorize via OAuth in the app dashboard. Set a Gmail filter to label UPI emails.

3

Link Telegram (optional)

Create a bot via @BotFather, add the token, and send your link code to the bot from the dashboard. Inline keyboards activate for unknown merchants.

4

Deploy to Vercel

Push to GitHub and import in Vercel. Set your environment variables (including SUPABASE_SECRET_KEY for cron). The daily cron is pre-configured in vercel.json.

Need the full service-by-service walkthrough?

Open setup guide →