SimpleFIN is a good way to read your bank accounts. It gives an app balances and transactions for every bank you link. What it never gives you is the statement: the PDF the bank issues each month, the one your accountant, your lender and the IRS actually ask for. The protocol has no document endpoint, and the Bridge keeps none.
So every month meant signing in to eight banks and clicking through each account by hand. We built the thing that does the clicking.
How it works
coinpay finances statements login chase # once per bank, in a real window
coinpay finances statements fetch # every new statement, every signed-in bank
coinpay finances statements coverage # which account-months are still missing
login opens the bank in its own Chrome profile on your computer. You sign in (MFA and all) and go to the page that lists your statements, then close the window. That page is where every later fetch starts. No bank password is asked for or stored, and the session never leaves your machine.
fetch opens that profile headless and looks for what every statements page has in common: a dated row with a Download, PDF or View statement control. It clicks the rows it has not fetched before, presses a dialog's Download button when a click opens one, and catches the file through Chrome's download events. Each PDF is matched to an account by the last four digits on the row and to a period by the statement cycle printed beside it. Then it lands in CoinPay's statement library, ready to reconcile against a report. A copy stays on disk too.
When a bank has ended the session, the page asks for a password again. fetch notices, says which bank, moves on, and exits 3, so a weekly cron entry can tell you:
30 7 * * 1 coinpay finances statements fetch
Everywhere CoinPay is
- Web: /finances/statements has a 12-month grid per account (have, missing, this month) and each bank's last fetch.
-
API:
/api/finances/statements/coverageand/api/finances/statements/fetch-runs. -
MCP:
coinpay mcpis new.claude mcp add coinpay -- coinpay mcpgives an agent the coverage, the library and astatements_fetchtool that runs on your machine.
Without CoinPay
The same fetcher ships in moshcode and cli-tools for anyone on a SimpleFIN Bridge:
moshcode install statements
statements claim <setup-token> # or reuse CoinPay's account list
statements login citi
statements fetch # ~/Documents/statements/<bank>/<account>/<YYYY-MM>.pdf
Bank pages change without notice, so nothing here depends on one bank's markup. When it cannot find statement links it says so, and statements assist <bank> gives you a window where every PDF you download is filed for you.
CoinPay SDK 0.12.0, moshcode 0.109.0, cli-tools 0.53.0. Drafted with AI help, reviewed and shipped by me.
Top comments (0)