Privacy policy — Financert
Status: draft. This describes what the software actually does today, verified against the code. It has not been reviewed by a lawyer. Before publishing it at a public URL for a directory submission or an app store listing, get it reviewed — and re-check it against the code, because the claims below are only true while the code stays as described.
Last updated: 2026-09-15
The short version
Financert compares a portfolio against public Federal Reserve statistics. The benchmark data is public. Your holdings are yours.
- The MCP server stores nothing at all. Holdings you pass to it are used to compute an answer and discarded when the response is returned.
- The REST API stores holdings only on the server you run it on, in a local SQLite file. There is no hosted service and nothing is sent anywhere.
- No analytics, no tracking, no third-party scripts, no advertising.
- No accounts, so no email address, name, or password is ever collected.
What each component handles
MCP server (backend/mcp_server.py)
Exposes six read-only tools. Every one is a pure function of its arguments and a data file committed to the repository.
| Collected | Nothing persistent. Tool arguments exist in memory for the duration of one call. |
| Stored | Nothing. No database, no files written, no logs of arguments. |
| Shared | Nothing. The server makes no outbound requests while serving. |
| Retention | None. |
Holdings passed to compare_allocation are financial information about you.
They are used to compute the comparison and then discarded. They are not
written to disk, not logged, and not transmitted onward.
Note that if you use this server through an AI assistant, that assistant's own privacy policy governs the conversation, including anything you typed to it. Financert has no visibility into or control over that.
REST API (backend/app/)
| Collected | Portfolio holdings you explicitly save: an asset-class label and a dollar amount, plus a name and slug you choose. |
| Stored | In a SQLite file on the machine running the server. |
| Shared | Nothing. The API makes no outbound requests. |
| Retention | Until you delete the portfolio (DELETE /api/portfolio) or delete the database file. |
There are no user accounts. Access is controlled by a single shared bearer token, if one is configured. Anyone holding that token can read every portfolio on that install — it is not per-user isolation, and it should not be relied on as such.
The API writes one line per request to its own standard output: the method, the
matched route (/api/portfolio, never the slug that was asked for), the status,
how long it took, and a request id. Holdings are not logged — the logger never
reads the request body — and neither is the query string or the client's
address. Where that output goes is the decision of whoever runs the server.
Dashboard (frontend/)
Uses browser localStorage for your holdings, your theme choice, the cohort you
pick for yourself (generation, age, education), and the API token if you enter
one. That data stays in your browser: a benchmark request carries which cut of
the population is being shown, never who asked for it. No cookies are set, no
analytics or third-party scripts are loaded, and no requests go anywhere except
the Financert API you point it at.
Clearing site data removes all of it.
The shareable link ("Copy a link to this comparison") is the one feature
that takes holdings out of the browser, and only when you ask for it. The
numbers ride in the URL fragment — the part after #, which a browser never
sends in an HTTP request and which is stripped from the Referer header — so
the link does not put them in any web server's log, including this app's own.
That is a statement about servers, not about people: a link is a link, and
whoever you send it to can read the numbers in it. The app says so beside the
button, and a link arriving with a portfolio in it asks before replacing
anything already saved in the browser it lands on.
The CSV and PNG exports are built in the page, not on a server. Nothing about the portfolio is sent anywhere to produce either file.
Data we fetch
fetch_dfa.py downloads the Federal Reserve's public Distributional Financial
Accounts archive. That is an outbound request to federalreserve.gov,
containing no information about you — it is a plain file download, run by
whoever maintains the deployment, not triggered by users.
Children
Not directed at children and collects nothing that would identify anyone, including children.
Changes
Material changes will update the date above. The repository's git history is the authoritative record of what changed and when.
Contact
Via https://usemeritai.com/contact?reason=support.
(A directory or app-store submission will require a monitored contact address here. Add one before submitting.)