Skip to main content
Open-source personal finance

Self-hosted personal finance tracking with xpenser

Track and analyze income and expenses with dashboards, categories, vendors, reports, and OpenAPI/MCP access in a self-hostable app with source you can inspect.

Accounts are for xpenser.cleverbrush.com; self-hosted deployments run from the same MIT licensed source.

Expense tracking workflows
Self-hostable finance app
Multi-currency tracking
OpenAPI and MCP access
Telegram bot integration
Cleverbrush reference code
MIT licensed
Early project
xpenser dashboard month view showing income, expenses, net total, and category detail

Product-led paths for finance tracking

Start with the angle that fits your evaluation: self-hosting, open-source expense tracking, or API and MCP access for finance workflows.

Run xpenser as a self-hosted personal finance tracker with Docker Compose, a web app, private API service, PostgreSQL, telemetry, and open source code.

Explore

xpenser is an open-source expense tracker for recording expenses, income, refunds, vendors, categories, multi-currency transactions, and finance reports.

Explore

Use xpenser with OpenAPI docs, API keys, typed client access, and MCP tools for personal finance data, including vendors, categories, transactions, and agent workflows.

Explore

Real screens, not a placeholder finance app

The public page now shows the transaction browser, API key, and MCP setup surfaces directly, so users can evaluate the product and integration workflow before creating an account.

xpenser transactions table showing categories, vendors, amounts, and transaction dates

Transactions stay inspectable

Searchable transaction history shows categories, vendors, effects, amounts, and dates in the same data model exposed by the API.

xpenser preferences screen showing API keys and MCP setup instructions

Integrations live in the product

Preferences include API keys, MCP OAuth setup, bearer-token fallback instructions, Telegram linking, and email report settings.

OpenAPI and MCP

API access is a product surface

xpenser already generates OpenAPI from the same Cleverbrush contracts used by the server and typed client. The public site should expose that reference directly and point agent users to the MCP endpoint.

Generated API reference
curl /api/openapi.json
curl /api/mcp \
  -H "Authorization: Bearer ${XPENSER_API_KEY}"
Typed client access
const client = createXpenserClient({
  baseUrl: process.env.XPENSER_API_BASE_URL,
  getToken: () => process.env.XPENSER_API_KEY
});

Personal finance workflows first

xpenser is a working app, not a static showcase. It grew from a personal Telegram bot plus Google Sheets workflow into the product surfaces a finance tracker needs while keeping the implementation open-source and small enough to inspect or self-host, including multiple currencies and Frankfurter-backed automatic conversion.

Dashboard summaries

Daily, weekly, monthly, quarterly, and yearly summaries keep income, expenses, net totals, and trends visible.

Transaction tracking

Record income, expenses, refunds, and returns with category, note, date, and currency context.

Multi-currency conversion

Use multiple transaction currencies with automatic conversion to your default currency through Frankfurter rates.

Reports and email summaries

Reports compare periods on demand, and configurable weekly and monthly email summaries surface OpenAI-generated spending and income insights.

Personal setup

Preferences cover default currency, favorite transaction currencies, time zone, API keys, and Telegram bot linking.

Mobile-friendly interface

Responsive screens keep dashboard, transaction, and setup workflows usable on phones and desktops.

Cleverbrush reference

Learn Cleverbrush from a working app

The codebase exercises Cleverbrush contracts, server handlers, generated clients, schema-backed React forms, auth, Telegram bot integration, an MCP server, logs, telemetry, and deployment-ready configuration for self-hosting.

Schema-first contracts

Shared schemas describe validation, OpenAPI output, React forms, and typed client contracts from one source.

Typed full-stack flow

The same contract powers the server handlers, generated client calls, auth metadata, and cache tags.

Auth-aware APIs

Google sign-in, API keys, and protected endpoint metadata demonstrate framework-level auth integration.

Observable runtime

OpenTelemetry, structured logs, and typed environment parsing show how production behavior is wired in.

Connected entry points

The app exposes normal product UI and integration paths for agents, services, and external clients.

API keys

Create durable keys for typed client access.

MCP server

Let approved agents read or manage vendors, categories, and transactions through tool calls.

Telegram bot

Link Telegram and use bot-driven finance workflows alongside the web UI.

Telemetry

Trace web, API, and integration paths through SigNoz.

Start hosted, then self-host when ready

Create a hosted xpenser account for the public instance, or review the MIT licensed source and run your own deployment from Docker Compose.