When someone dies, their money doesn't tell the family where it is.
Ghost Ledger reads a loved one's mailbox on your own computer and writes down every deposit, policy, folio and pension it finds, with the email that proves each one. Then it helps you claim them, one approved letter at a time.
Raghavendra Rao, 1958–2026 · found in his mailbox
Fixed deposit, Malnad Co-op Bank ···7703₹4,29,812matured 2024, never collected. Two emails in seven years.
Life policy, Nilgiri Life ···3958matured, unpaid
Physical shares, Hampi Textiles ···2117IEPF risk
StreamBox Premium, card ···9012₹499 / monthstill charging, three months after he died.
Savings, Coastal Bank ···2210closed 2021
₹2.2 lakh crore is waiting to be claimed in India.
That is the total sitting unclaimed in bank deposits, shares, insurance, provident fund and mutual funds, according to a 1 Finance analysis reported in December 2025. Some of it belonged to people who died before anyone in the family knew it existed.
Nobody keeps a list. Statements go to one person's inbox for years: an FD renewal notice here, a policy premium receipt there, a dividend email from a company he bought shares in before the internet. When that person dies, the inbox is the only map.
“Our records show that the maturity amount for policy no. XXXXX3958 is still unpaid as the discharge requirements have not been received.”Nilgiri Life Insurance, May 2023. One of two emails about this policy in four years.
Raghavendra Rao is fictional. His mailbox is 75 synthetic emails written to look like a real Indian retiree's, including six scam emails pretending to be his bank, four promotions that name funds he never held, and one account he closed years before he died. Every number on this site comes from running Ghost Ledger on it.
How it works
Load the mailbox
A Google Takeout export or a folder of emails. A quick filter keeps only mail that mentions accounts or money, and code-level checks set aside scams.
Runs offlineGemma reads each email
Gemma 4 on your laptop lists what each email shows he held, owed or paid for, and copies the sentence that says so.
Gemma 4 E4B via Ollama, no cloudEvery line is checked
The quote must really be in the email, the institution must be named, the account number must appear. Anything that fails gets one retry, then it is dropped. It never guesses.
Plain code, after the modelClaims are followed up for months
Each claim letter waits for your approval on your phone, goes out from your Gmail, and is chased after 15 days of silence. After two reminders, it drafts the complaint to the regulator.
Temporal + Auth0
Measured on the synthetic estate
Same mailbox, same filters and the same checks, so the only difference is who reads the email: Gemma, or a regex baseline written the usual way.
| On 75 emails | regex baseline |
|---|---|
| Holdings found (of 15) | 11 |
| Subscriptions and bills found (of 5) | 3 |
| Holdings invented | 0 |
| Filed under the wrong institution | 3 |
| Filed as the wrong kind | 3 |
| Matured / at-risk / inoperative caught (of 5) | 4 |
| Closed account put on the claim list | 0 |
| Scam emails used as evidence | 0 |
| Full account numbers leaked in the report | 0 |
Gemma 4's run on the synthetic estate is in progress on a laptop CPU; its column is added here when it finishes. The baseline column is real. Reproduce both with: python -m ghostledger eval.
Built for a family on its worst week
The mailbox never leaves the laptop
A dead parent's email holds their whole life. Gemma is an open model that runs on an ordinary laptop CPU, so no email is uploaded anywhere. That is why this has to be open: you can read every line of what touches it.
Nothing is sent without you
Every letter triggers an Auth0 Guardian push naming the bank and the account. Gmail access lives in Auth0 Token Vault, not on disk, and is used for minutes at a time.
It keeps going when you can't
Claims take months. Each one is a Temporal workflow that survives reboots and closed lids, waits out 15-day silences on a durable timer, and remembers exactly where it stopped.