Local-first · Open source · no cloud
All your accounts.
One place.
Every account you have — cloud bills, subscriptions, your phone and utilities, even your health record — lives behind its own login. Butin gathers them all into one dashboard on your own machine, readable without logging in. Your session, fetched headless, kept on your disk.

The problem
Your accounts live in separate dashboards.
Spend, usage, invoices, and records are scattered across dozens of services. Many offer no public API and no export option, leaving you signing in one by one or copying numbers into spreadsheets. Butin connects directly to your accounts to pull your real data into one unified local view.
How it works
You sign in once. Butin keeps every account in one place.
Capture the session
A normal login window opens. You sign in by hand — password, MFA, SSO, magic link. Butin captures the session and stores it, encrypted, on your machine. It stays valid as long as the service keeps it — minutes for a bank, days for some.
Fetch headless
While the session holds, Butin reads the same endpoints your browser would — quietly from Node, with no browser window left open. Refresh anytime on demand. When it expires, you simply sign back in.
Keep your data
Every fetch becomes a clean dashboard — spend, usage, members, documents — normalized and saved on your disk, with history. The data is yours even after the session's gone.
See it
One dashboard for everything you pay for.
The Overview rolls every service into one place — total spend, a combined monthly chart, what moved this month. Open any service for the full detail: billing, usage, members, invoices — each drawn by one generic renderer, so a phone bill and a cloud invoice read the same way.

Every service, the same shape. Tabs for billing, usage, and members — normalized from whatever the service actually renders under the hood.

Not just dev tools. A phone bill, a water-heater rental, a bank statement — the same billing view, in the account's own currency, with the history the service doesn't keep.
Beyond simple billing
Full structured records, exported locally.
Butin isn't limited to billing summaries. For services with no public API — like the carnet-sante health portal — plugins extract complete records: profiles, medications, appointments, lab results, and document PDFs directly to your disk. No third-party servers, no intermediaries.
No API required
If a browser can view it, a plugin can extract it. Butin supports services that lack a public API or restrict access behind enterprise tiers.
Complete records
Beyond high-level totals: usage breakdowns, member rosters, invoices, and exported documents are saved as clean local files.
41+ services, one model
Cloud infrastructure, developer platforms, telecom, subscriptions, and AI providers — unified under one plugin contract.
Your data. Your machine.
The account it reads is always your own.
Butin only ever reads data that is already yours — in your own authenticated session, on your own hardware. Nothing leaves your machine, and no server takes custody of your credentials.
Your data, brought home.
Your session
It replays the requests your own browser makes. No middleman, no shared credentials.
Your machine
Captured data lives under ~/butin, encrypted with your OS keychain. There is no server.
No custody
No account, no sync, nowhere to send your numbers. We run nothing that can read them.
Open source
The codebase is open source (Apache-2.0 & MIT). Read it, fork it, write your own plugins. Trust the architecture.
OS Keychain Encryption
Credentials and sessions are encrypted using Electron's safeStorage: Apple Keychain on macOS, Windows DPAPI, and Secret Service on Linux.
Zero Background Daemons
Pull-only architecture. Nothing runs in the background when the app is closed; all fetches are initiated by you when you open or refresh.
Zero Telemetry
No tracking scripts, external analytics, or phone-home pings. All retrieved data stays strictly within ~/butin/ on your computer.
For developers
A service is a small plugin.
41 services already ship, each a small, mostly-declarative plugin: describe how to log in and what to fetch, return normalized data, and one generic renderer draws the dashboard. Most plugins ship no UI at all.
export const stripe = definePlugin(({
meta: { id: 'stripe', name: 'Stripe' },
session: { loginUrl: 'https://dashboard.stripe.com' },
auth: { kind: 'cookie' },
capabilities: [
{ id: 'billing',
collect: async ({ client }) =>
billing.result({ /* … */ }) }
]
})Their session expires. Your data doesn't.
Free · Open source · macOS · Windows · Linux