One screen for every dollar you make. Self-hosted, privacy-first revenue tracker that aggregates all your income streams — Stripe, affiliates, marketplaces, ads, and manual entries — into a single real-time dashboard, in USD, by day / month / year.
A free, self-hostable Baremetrics alternative for indie hackers who run a portfolio of small income streams, not just one SaaS.
Screenshots use demo data.
Your revenue data lives in your own Supabase project. No third party ever sees your numbers. Connect your own keys, deploy free on Vercel in ~5 minutes.
There's a hosted version at app.incomeos.dev — same dashboard, same MCP, nothing to deploy. Sign in with an email link, connect Stripe read-only in one click, done in about a minute.
Free to start (unlimited manual sources, all charts, sync on demand). Pro is $9/mo with a 14-day trial and adds automatic daily sync, so the numbers are already fresh when you open it.
Self-hosting stays free and fully featured — the hosted version exists for people who'd rather not maintain infrastructure, not to cripple this repo.
Tools like Baremetrics or ProfitWell are great — if you have one Stripe account and $129+/mo to spare. But modern indie hackers earn from a dozen tiny places: a SaaS on Stripe, an Amazon affiliate link, a marketplace actor, some AdSense, a Gumroad template, a sponsorship. Nobody aggregates the long tail.
IncomeOS does:
- 🔢 Numbered income sources —
#1 SaaS,#2 Amazon,#3 Sponsorship… - 📅 Day / month / year views, with averages (pro-rated) so even monthly-only sources show an "avg per day".
- ⚡ Stripe on autopilot — net (after-fee) revenue, auto-grouped per product.
- ✍️ Everything else by hand in 10 seconds — type a monthly total per source.
- 📈 Month-over-month trend so you watch each stream grow.
- 🎯 Goals with live "you need $X more" progress.
- 🔗 Click a source → open its dashboard (where you read the affiliate numbers).
- 🔒 Single-password access, your data in your own database.
- Create a Supabase project (free) and run
supabase/migrations/0001_init.sqlin the SQL editor. - Deploy to Vercel (or
npm run devlocally). Set the env vars from.env.example:SUPABASE_URL,SUPABASE_SERVICE_ROLE_KEYDASHBOARD_TOKEN(your login password),CRON_SECRETSTRIPE_SECRET_KEY(optional — a read-only restricted key is recommended)
- Open the app, type your
DASHBOARD_TOKEN, hit Sync. Stripe products appear as sources automatically; add the rest with ➕ Add source.
A daily Vercel Cron (vercel.json) keeps Stripe fresh; the Sync button
pulls on demand.
| Source | Status | How |
|---|---|---|
| Stripe | ✅ automatic | Net revenue, grouped per product, zero config |
| Amazon / affiliates | ✍️ manual | Enter the monthly total (one click) |
| Marketplaces, ads, sponsorships | ✍️ manual | Same — numbered sources |
| Gumroad, LemonSqueezy, AdSense, Plaid (bank) | 🛠️ roadmap | PRs welcome |
Each source can hold a link to its own dashboard — clicking the card opens it.
IncomeOS ships an MCP server so any AI agent (Claude, Cursor…) can read your income on demand — "how much did I make this month across everything?"
{
"mcpServers": {
"incomeos": {
"command": "npx",
"args": ["-y", "incomeos-mcp"],
"env": { "INCOMEOS_URL": "https://your-incomeos.vercel.app", "INCOMEOS_TOKEN": "your-token" }
}
}
}Tools: get_income_summary, get_sources, get_month, log_monthly_income.
See mcp/. Your data stays in your own instance — the MCP just calls
its API with your token.
Next.js 16 (App Router) · Supabase (Postgres) · Recharts · Tailwind v4 · Vercel. No multi-tenant server, no SaaS lock-in — it's just your data and your keys.
- Income MCP — ask your AI agent "how much did I make this month?" ✅
- More connectors (Gumroad, LemonSqueezy, AdSense, PayPal, Plaid)
- Weekly email digest
- CSV import/export
MIT — see LICENSE. Built for indie hackers, by indie hackers.

