Self-hosted · open source

Your spending, delivered.

A private finance journal from the transaction emails you already receive. Forward them, and Tidings turns them into a calm daily record.

Try the demoView on GitHubFree · MIT licensed · runs on your hardware
Works with banks that email transaction alertsNo bank credentials, no aggregatorFive banks parsed natively, AI rescues the rest
The Tidings journal — a month of transactions grouped by day, with category pills and a budget summary
How it works

Your bank already sends the data.

Three steps, then the journal writes itself. No account linking. No aggregator. The emails go where you say.

01

Forward your alerts

Your bank already emails you when you spend. Point those alerts at an inbox you keep, and you're done with this step forever.

02

Tidings reads them

The merchant, the amount, the date — lifted from each alert and filed. Nothing about the email body crosses a boundary you didn't draw.

03

A journal emerges

Days, budgets, notices. The same data your bank has, finally in a form you'd want to read.

Runs on your hardware. Nothing goes to a model unless you add a key.

The daily journal

A ledger that reads like a diary.

Transactions grouped by day. Amounts right-aligned in tabular numerals. Quiet annotations when a category nears its monthly budget, when a merchant repeats, or when a day runs past its usual pace. No alarms. No red panels. Just clarity.

  • Daily grouping with on-pace, under, over states
  • Category pills that stay soft and quiet
  • Repeat-merchant counts and budget-pace annotations
Explore the demo →
The Tidings journal — a month of transactions grouped by day, with category pills and a budget summary
Category budgets

Soft targets, never hard limits.

Set an annual target per category and watch the pace, not the panic. Under pace, a category stays quiet. Past it, the row warms to rust. It will never shout.

  • Annual targets, broken into a monthly pace
  • Suggested targets, drawn from your last twelve months
  • A month-end projection from your typical spending
See budgets in the demo →
Category budgets — a ledger of per-category pace, YTD spent, monthly and annual budget, and variance, with over-pace rows warmed to rust
Monthly insights

Patterns, not prescriptions.

A briefing reads your spending in prose: month-over-month context, the categories that moved, the anomalies. It never tells you what to do.

  • A monthly narrative briefing, generated on demand
  • Month-over-month context across categories
  • Plain prose, not toasts or red dots
Read a sample briefing →
Insights — a monthly briefing in prose, with the categories that moved and notable changes
Private by construction

Nothing to send. Nothing to leak.

No promise to protect your data. A design where nobody else holds it.

No aggregators
Tidings never sees a credential. It only reads the transaction emails you forward.
Your infrastructure
Docker on your laptop, an IMAP poller on a Pi, or a Lambda chain in your own AWS account. The data path is yours either way.
Optional AI
Categorization and briefings can use OpenAI or Claude — with no keys configured, nothing ever leaves for a model. Whatever a model extracts is checked word-for-word against the original email.
Open & auditable
Every line of code is in the open repo. Fork it, audit it, trust it.
Read the architecture

Your data. Your path.

Your bank
Transaction alert emails
1
Email forwarder
you@yourdomain.com
2
Ingestion
IMAP poller, default · or Lambda in your own AWS
3
Parser
Merchant, amount, date
4
Tidings journal
Days, budgets, notices

Every hop runs on hardware you control.

Open source

Free, on your hardware.

The repo is the only distribution. No subscription, no commercial tier. The most useful contribution is a parser for a new bank's alerts or statements; the add-a-parser guide and its Claude Code skill build one from your own emails in a single session.

Local-first by default Five bank parsers MIT license

Three commands to a running journal

git clone https://github.com/tvhahn/tidings.git
cd tidings
docker compose up -d

Opens at localhost:8000. Demo mode by default, seeded with sample data.

The default path is an IMAP poller in Docker. An optional S3 + Lambda chain runs in your own AWS account.

Read the self-hosting guide →
github.com/tvhahn/tidingsPython · TypeScript
For agents

Agents can try it before you install.

Every Tidings surface is a versioned JSON API. The demo journal is served read-only at a public endpoint, so an agent can explore eleven months of a fictional household before you commit to anything.

Same routes as self-hosted OpenAPI schema included No signup, no token
Read the agent access guide →

Two requests, no key

$ curl 'https://gettidings.com/demo/api/v1/summary?month=2026-03'
{
  "current": {
    "year_month": "2026-03",
    "total_spending": 4923.98,
    "spending_count": 54,
    "deposit_total": 5221.44,
    "by_category": {
      "rent": { "amount": 2150, "count": 1 },
      "internet": { "amount": 80, "count": 1 },
      … 18 more categories
$ curl 'https://gettidings.com/demo/api/openapi.json'

Real output, fictional household. Self-hosted installs get the same routes with bearer-token auth.

Frequently asked

The short version.

Long version: read the README in the repo. Tidings is built in the open.

Eleven months, already delivered.

The demo is the full product running in your browser, seeded with a fictional household. Yours is three commands away.

Try the demo