Show HN: CLI for your financial data (and Costco and Amazon) A developer released fin, a command-line tool that connects bank, card and brokerage accounts through Plaid and pulls in Amazon and Costco purchases, running locally on the user's laptop with keys stored in the Keychain and costing nothing on Plaid's free Trial plan. fin exposes accounts and transactions as JSON for AI agents, as pages in a browser, as SQL queries, or as a Google Sheet, and in the posted example returned 412 transactions from 6 connections across 7 accounts. The tool is aimed at letting an agent answer spending questions directly, such as reporting September spending of $6,482, down 9% from August's $7,121. A CLI for your financial data, built for the AI era. fin connects your banks, cards and brokerages through Plaid https://plaid.com/docs/ and brings in your Amazon and Costco purchases. It runs locally on your laptop , keeps its keys in your Keychain, and costs nothing on Plaid's free Trial plan. Ask your agent, open it all as pages in your browser , query your transactions with SQL , or keep them in a Google Sheet . you › Build me a monthly spending review. Compare it to the month before. ran fin transactions --since 2026-08-01 --json ✓ 412 transactions from 6 connections agent › September spending was $6,482, down 9% from August $7,121 . Rent and utilities held at $2,850. Dining out rose +31% to $694, mostly six weekend orders from Sushi Ota. Shopping fell $1,216 because August included a $1,180 standing desk. You saved $3,368, 34% of what came in. bash $ fin accounts Accounts · 7 across 6 Items ╭───────────┬────────────────────┬──────┬──────────────────────┬──────────┬───────────┬──────────┬─────╮ │ Item │ Account │ Mask │ Type │ Current │ Available │ Limit │ Ccy │ ├───────────┼────────────────────┼──────┼──────────────────────┼──────────┼───────────┼──────────┼─────┤ │ chase │ Sapphire Preferred │ 4242 │ credit card credit │ 1834.12 │ 13165.88 │ 15000.00 │ USD │ │ chase │ Total Checking │ 8810 │ checking depository │ 6120.40 │ 6120.40 │ │ USD │ │ amex │ Gold Card │ 1005 │ credit card credit │ 912.77 │ │ │ USD │ │ citi │ Savings │ 3127 │ savings depository │ 24500.00 │ 24500.00 │ │ USD │ │ fidelity │ Roth IRA │ 0917 │ roth investment │ 48210.57 │ │ │ USD │ │ schwab │ Brokerage │ 3301 │ brokerage investment │ 96215.00 │ 42680.00 │ │ USD │ │ robinhood │ Individual │ 7712 │ brokerage investment │ 18440.10 │ │ │ USD │ ╰───────────┴────────────────────┴──────┴──────────────────────┴──────────┴───────────┴──────────┴─────╯ Balances from Plaid's daily refresh. Use --live to ask each bank now billed per call . bash $ fin accounts --json { "accounts": { "item": "chase", "institution": "Chase", "name": "Sapphire Preferred", "mask": "4242", "type": "credit", "subtype": "credit card", "balances": { "available": 13165.88, "current": 1834.12, "limit": 15000, "iso currency code": "USD" } }, … , "env": "production", "errors": , "live": false } bash $ fin transactions --since 2026-10-01 Transactions · 2026-10-01 → 2026-10-09 · 8 ╭────────────┬───────┬────────────────────┬────────────────────┬──────────┬─────┬────────────────────╮ │ Date │ Item │ Account │ Description │ Amount │ Ccy │ Category │ ├────────────┼───────┼────────────────────┼────────────────────┼──────────┼─────┼────────────────────┤ │ 2026-10-09 │ chase │ Sapphire Preferred │ Sushi Ota │ -86.40 │ USD │ food and drink │ │ 2026-10-08 │ amex │ Gold Card │ Whole Foods Market │ -142.18 │ USD │ food and drink │ │ 2026-10-08 │ chase │ Total Checking │ ACME Corp Payroll │ 4925.00 │ USD │ income │ │ 2026-10-07 │ chase │ Sapphire Preferred │ Uber │ -23.90 │ USD │ transportation │ │ 2026-10-05 │ amex │ Gold Card │ Netflix │ -24.99 │ USD │ entertainment │ │ 2026-10-03 │ chase │ Total Checking │ Rent · October │ -2600.00 │ USD │ rent and utilities │ │ 2026-10-02 │ citi │ Savings │ Interest payment │ 31.20 │ USD │ income │ │ 2026-10-01 │ chase │ Sapphire Preferred │ United Airlines │ -540.00 │ USD │ travel │ ╰────────────┴───────┴────────────────────┴────────────────────┴──────────┴─────┴────────────────────╯ Money out 3417.47 · money in 4956.20. Shown here as negative = spent, positive = received; JSON keeps Plaid's sign. bash $ fin transactions --since 2026-10-01 --json { "env": "production", "errors": , "since": "2026-10-01", "transactions": { "item": "chase", "institution": "Chase", "account name": "Sapphire Preferred", "account mask": "4242", "date": "2026-10-09", "authorized date": "2026-10-08", "name": "SUSHI OTA SAN DIEGO", "merchant name": "Sushi Ota", "amount": 86.4, "iso currency code": "USD", "pending": false, "category": "FOOD AND DRINK", "category detailed": "FOOD AND DRINK RESTAURANT" }, … , "until": "2026-10-09" } bash $ fin amazon categorize --all Amazon items · 5 ╭───────────────────────┬────────────┬───────────────────────┬─────┬────────┬─────────────────────╮ │ Item │ Date │ Title │ Qty │ Cost │ Category │ ├───────────────────────┼────────────┼───────────────────────┼─────┼────────┼─────────────────────┤ │ 114-2290017-6612408 1 │ 2026-10-06 │ Cordless drill kit │ 1 │ 129.84 │ HOME IMPROVEMENT │ │ 114-2290017-6612408 2 │ 2026-10-06 │ Ground coffee, 2 lb │ 2 │ 38.90 │ FOOD AND DRINK │ │ 114-2290017-6612408 3 │ 2026-10-06 │ Vitamin D3, 240 count │ 1 │ 18.62 │ MEDICAL │ │ 113-8805213-0147729 1 │ 2026-10-02 │ Kids' rain boots │ 1 │ 34.17 │ GENERAL MERCHANDISE │ │ 113-8805213-0147729 2 │ 2026-10-02 │ Catan board game │ 1 │ 46.03 │ │ ╰───────────────────────┴────────────┴───────────────────────┴─────┴────────┴─────────────────────╯ Set one with fin amazon categorize --set ITEM CATEGORY --product . bash $ fin amazon categorize --all --json { "categories": "INCOME", … , "items": { "item": "114-2290017-6612408 1", "order id": "114-2290017-6612408", "date": "2026-10-06", "product": "B0C7KQ3X1M", "title": "Cordless drill kit", "quantity": 1, "cost": 129.84, "category": "HOME IMPROVEMENT", "category detailed": "HOME IMPROVEMENT HARDWARE", "category source": "item", "account": "home", "bank transaction": "AMAZON MKTPL BB4L09 · 2026-10-07" }, … } bash $ fin holdings Holdings · 7 positions · 162865.67 ╭───────────┬────────────┬────────────┬──────────┬────────┬──────────┬────────────┬──────────┬──────╮ │ Item │ Account │ Security │ Quantity │ Price │ Value │ Cost basis │ Gain │ Lots │ ├───────────┼────────────┼────────────┼──────────┼────────┼──────────┼────────────┼──────────┼──────┤ │ fidelity │ Roth IRA │ VTI │ 120 │ 288.10 │ 34572.00 │ 26400.00 │ 8172.00 │ 4 │ │ fidelity │ Roth IRA │ FXAIX │ 61.05 │ 223.40 │ 13638.57 │ 11020.00 │ 2618.57 │ 3 │ │ schwab │ Brokerage │ AAPL │ 150 │ 241.30 │ 36195.00 │ 21300.00 │ 14895.00 │ 5 │ │ schwab │ Brokerage │ SCHD │ 600 │ 28.90 │ 17340.00 │ 16200.00 │ 1140.00 │ 2 │ │ schwab │ Brokerage │ U S Dollar │ 42680 │ 1.00 │ 42680.00 │ 42680.00 │ 0.00 │ 0 │ │ robinhood │ Individual │ NVDA │ 80 │ 182.50 │ 14600.00 │ 9100.00 │ 5500.00 │ 6 │ │ robinhood │ Individual │ TSLA │ 10 │ 384.01 │ 3840.10 │ 4400.00 │ -559.90 │ 2 │ ╰───────────┴────────────┴────────────┴──────────┴────────┴──────────┴────────────┴──────────┴──────╯ Total value 162865.67, cost basis 131100.00 where known. bash $ fin holdings --json { "env": "production", "errors": , "holdings": { "item": "fidelity", "institution": "Fidelity", "account name": "Roth IRA", "ticker": "VTI", "security name": "Vanguard Total Stock Market ETF", "security type": "etf", "quantity": 120, "price": 288.1, "price as of": "2026-10-08", "value": 34572, "cost basis": 26400, "iso currency code": "USD", "tax lots": { "quantity": 30, "purchase price": 212.4, "original purchase datetime": "2022-03-14T00:00:00Z", "position type": "LONG" }, … }, … } bash $ fin sql "select category, sum amount filter month date = 8 as aug, sum amount filter month date = 9 as sep, round 100 sep - aug / aug as pct from transactions where amount 0 and date between '2026-08-01' and '2026-09-30' group by category order by sep desc" 6 rows ╭─────────────────────┬────────┬────────┬─────╮ │ category │ aug │ sep │ pct │ ├─────────────────────┼────────┼────────┼─────┤ │ RENT AND UTILITIES │ 2850 │ 2850 │ 0 │ │ FOOD AND DRINK │ 1153.8 │ 1318 │ 14 │ │ TRAVEL │ 814.6 │ 1203.6 │ 48 │ │ GENERAL MERCHANDISE │ 1700.4 │ 484.4 │ -72 │ │ TRANSPORTATION │ 412.3 │ 389.6 │ -6 │ │ ENTERTAINMENT │ 189.9 │ 236.4 │ 24 │ ╰─────────────────────┴────────┴────────┴─────╯ From ~/.local/share/fin/production.duckdb, synced Oct 9, 09:12. Run fin sync to refresh. bash $ fin sql --json "select category, sum amount filter month date = 8 as aug, sum amount filter month date = 9 as sep, round 100 sep - aug / aug as pct from transactions where amount 0 and date between '2026-08-01' and '2026-09-30' group by category order by sep desc" { "columns": "category", "aug", "sep", "pct" , "env": "production", "rows": { "aug": 2850, "category": "RENT AND UTILITIES", "pct": 0, "sep": 2850 }, { "aug": 1153.8, "category": "FOOD AND DRINK", "pct": 14, "sep": 1318 }, … , "synced": { "item": "chase", "item id": "eVBnVMp7zdTJLkRNr33Rs6zr7KNJqBFL9DrE6", "transactions update status": "HISTORICAL UPDATE COMPLETE", "last sync": "2026-10-09T16:12:00Z" }, … } Made-up numbers in fin's real output format. In a terminal fin prints tables; when an agent runs it, JSON. // fin ui · illustrative data Or open it in your browser. fin ui turns the local file into pages: net worth day by day, spending against last month, your portfolio, and a SQL editor that charts what it returns. fin serves them from 127.0.0.1 behind a random token, and they load nothing from the internet. // works with the banks, cards and brokerages Plaid connects to Logos are trademarks of their owners. fin is independent and not affiliated with them or with Plaid. // AI-generated reports · illustrative data Ask in plain words. Get a report. fin supplies the data. Your agent creates the layout, charts, and analysis. // fin help security Local and yours. - reads - Balances, transactions, holdings with tax lots, investment activity. - never requests - Plaid Auth or Identity: no account numbers, no personal details. Cannot move money. - secrets - macOS Keychain, service fin . State in ~/.config/fin/state.json , mode 0600. - data - Transactions, a balance per account for each day you sync, and holdings in a DuckDB file in ~/.local/share/fin ; query it with fin sql or browse it with fin ui . fin sheet copies them to a spreadsheet in your Google Drive, the only file there fin can see. - amazon - Experimental and off until you run fin amazon login : it reads your Amazon payments and order pages with your Chrome sign-in, so each charge opens into its items. - costco - Experimental and off until you run fin costco login : it reads your warehouse and gas receipts and costco.com orders with your Chrome sign-in, so each trip opens into its items. - servers - No hosted service. fin calls Plaid's API from your laptop and prints the answer. fin ui serves its pages on 127.0.0.1 only, behind a random token, with every font and script built into fin. - cost - Free on Plaid's Trial plan, up to 10 institutions. MIT licensed.