Export and import a household

A household can be written out as a single JSON file and loaded back in as a new household. Both live behind the ⋮ menu in the header, next to Sign out.

It is one file: the people, every account with all of its trades and balance snapshots, the ticker aliases, the retirement plan, and every saved scenario. Nothing is paginated, filtered, or left out to keep it small.

Export

⋮ → Export household (JSON) downloads the household you are currently in, named after it and the date — henderson-household-2026-09-19.json.

Any member can export, including a viewer: it is a read, and it contains nothing a member can't already see on screen.

Nothing on the page changes the file. There is no filter to forget and no date range to get wrong — the export is always the whole household, which is what makes it usable as a backup.

Import

⋮ → Import household (JSON)… takes a file and makes a new household from it, owned by you.

It never writes to a household you already have. There is no "import into this one", no merge, and no overwrite — which is why it is offered to someone who belongs to no household at all, on the same screen as Create a household, as readily as from inside the app.

The file is checked in your browser before anything is uploaded, so picking the wrong one is answered straight away. Once it reads, you see what is in it — people, accounts, trades, balance snapshots, aliases, whether it carries a plan and how many scenarios — and a name field, prefilled with the name the file carries. Change it to whatever you want to call this copy, and press Import.

If you already have a household by that name

Importing your own export back gives you two households with one name, which helps nobody. So a name you already use — ignoring case and surrounding spaces — is refused, and a free one is suggested in its place: Henderson household (imported). Press Import again to accept it, or type your own.

The check is against your households only. Two unrelated families can both call theirs "Henderson household"; neither can see the other.

What comes back, and what doesn't

Everything about the household's money comes back exactly as it was, under the same identities: an account owned by Jenn is still owned by Jenn, and the plan still describes the same people.

Three things deliberately do not travel:

  • Logins, members, and invitations. The people come in, and they come in without logins attached — importing access would hand it to whoever holds the file. You are the new household's owner; invite the rest of the household again from Household settings…, exactly as you did the first time. See Households and the plan for who may do what.

    Your own login is in the household but attached to nobody in it, so the app doesn't yet know which of those people is you. Say so once, in Household settings…: Attach a login on your row — see Attach a login. The plan and the account form know who you are from then on.

    Nobody's Google account is named anywhere in the file, not even in passing: no member ids, no email addresses, and none of the "who made this" stamps the app keeps internally. A household file describes money and the people it belongs to, and nothing about who can sign in to see it.

  • Price history. Prices are not yours — one instrument's history is shared by everyone using the app, so there is nothing household-shaped to put in the file. The import starts a price backfill for the holdings it brought in, the same one a CSV import starts, and the dashboard fills in as it lands. See Portfolio and cash.

  • Unsaved plan drafts. A half-typed plan in the workbench belongs to one person and one session. Save the plan (or the scenario) before exporting if you want it in the file.

The valuation cache and the log of past price fetches are left out too: both are worked out from the data, and both rebuild themselves the first time the new household is opened.

Saved scenarios are scored again

A scenario comes back as you saved it — its name, its colour and its plan — but not with the success percentage it showed. That figure is the plan's answer for one household's money, so the file doesn't carry it; a file that does is refused. The import works each scenario's score out again for the new household, from its own accounts.

It does that twice. The first score is taken as the household is written, when any holding whose price history hasn't been fetched yet still counts at what was paid for it. The second is taken when the price backfill finishes, and that is the one the scenario keeps. A household with nothing to price is scored once, and that score is already final. If the plan is open while the backfill finishes, its scenario chips move to the second score on their own.

How big a household can be imported

One import is one request, so it has to finish inside the time the server is given for a single call. Two ceilings keep it there: a file may be at most 20 MiB, and may carry at most 20,000 trades. Anything larger is refused with a message saying which limit it passed, before anything is created.

Neither is a limit you are likely to meet. The demo household this app ships with — twenty-one accounts, a hundred and fifteen trades, six years of balance history — writes a 42 KB file.

Files from an older version

The file records the format it was written in. A file this version of the app doesn't read is refused, with a message saying so, rather than being guessed at and half-imported. Export again from wherever the household currently lives.

What the file is good for

  • A backup you hold. Nothing about it depends on us.
  • A copy to experiment on. Import it, then rewrite the plan, delete accounts, or try a completely different set of assumptions in it — the original is untouched, and you can delete the copy when you are done.
  • Handing a household on. Send the file; whoever imports it owns their copy outright.