Blog

Totals 1.6: your data, on your own server

Totals 1.6: your data, on your own server

Totals has one rule: your financial data lives on your phone, not on our servers. Totals 1.6 keeps the rule and adds a twist: now your data can also live anywhere you choose. Plus weekly budgets, loan reminders, and a stack of fixes.

Data Sync: bring your own backend

The headline: Totals can now push your transactions, accounts, and budgets to a server you control. Your VPS, your homelab, your own API. If it speaks HTTPS and JSON, Totals can feed it.

Your phone → your server. Nothing in between.
Your phone → your server. Nothing in between.

A few things to be clear about, because this is us:

  • One-way. Totals pushes; it never reads anything back.
  • No middleman. Your phone talks straight to your server. There is no Totals cloud relaying your data (we couldn't peek if we wanted to).
  • Off by default. You turn it on behind an explicit consent screen (Settings → Advanced → Data Sync). Secrets live in your phone's keystore. HTTPS only.

What you get to play with:

  • Destinations & rules. Point at a server, then decide exactly what goes where: transactions, accounts, or budgets, filtered by bank, account, amount, or type.
  • Fits your API, not the other way around. Pick POST, PUT, or PATCH, use paths like /transactions/{reference}, rename fields to match your schema, send records one at a time or in bulk arrays.
  • Real-time or scheduled. Push the moment a new transaction lands, when you're back online, on an interval, or at fixed times daily. Old data? One tap backfills everything that matches.
  • Durable. A proper outbox with automatic retries and backoff, plus a filterable sync log in the app that shows exactly what your server said.
Destinations, rules, and a log of every send.
Destinations, rules, and a log of every send.

Build a personal dashboard. Chart your spending in Grafana. Keep a live backup in Postgres. Feed your own scripts. It's your data. Do something weird with it.

Docs your AI can build from

For the technical folks (or anyone with a technical AI): the full backend contract lives at /sync: payload schemas, retry semantics, delete handling, and a zero-dependency reference server you can copy, run, and point a rule at.

We made the docs AI-native too. Hit Copy for AI on that page and your clipboard holds the entire contract plus a ready-made prompt. Paste it into ChatGPT or Claude and ask for a receiver in your stack. There's also /sync.md and an llms.txt for the robots. If you can paste, you can have a backend.

The contract docs, with one-click Copy for AI.
The contract docs, with one-click Copy for AI.

Due dates for loans & debts

Lent money and forgot to follow up? Set a due date on a loan or debt and Totals will remind you when it arrives. Repayments got smoother too, overpayments included. Awkwardness, outsourced.

Also fixed/new

  • Weekly budget labels, both the Budget page and the home-screen widget show how much money you have left for the week.
  • Bank pages reworked, and tapping an account card jumps straight to that bank's transactions.
  • Pick your tools: choose which quick-access tools appear in the fab menu (Settings → Advanced).
  • Faster, smarter reparse: adding an account and reparsing are quicker, duplicate detection is tighter (especially for Dashen Bank), duplicates get cleaned up during reparse, and a details page shows exactly what changed.
  • Shared-expense debts now prioritize 1-to-1 debts.
  • Banks, accounts, and people now sort alphabetically; budget numbers are formatted properly.
  • Fixed an issue where Hibret Bank SMSs weren't being parsed.
  • Bottom sheets behave better.
  • Adding an account syncs SMS more reliably.

Get it: update on the Play Store. On iPhone, the setup guide is at /ios-guide.

Totals is open source. The whole app, sync engine included: github.com/detached-space/totals

Questions, bugs, love letters: t.me/totals_chat