{"slug": "show-hn-cli-for-your-financial-data-and-costco-and-amazon", "title": "Show HN: CLI for your financial data (and Costco and Amazon)", "summary": "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.", "body_md": "# A CLI for your financial\n\n data, built for the AI era.\n\n**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**.\n\n```\nyou › Build me a monthly spending review. Compare it to the month before.\n\n  ran fin transactions --since 2026-08-01 --json\n  ✓ 412 transactions from 6 connections\n\nagent › September spending was $6,482, down 9% from August ($7,121).\n        Rent and utilities held at $2,850. Dining out rose +31% to $694,\n        mostly six weekend orders from Sushi Ota. Shopping fell $1,216\n        because August included a $1,180 standing desk.\n        You saved $3,368, 34% of what came in.\nbash\n$ fin accounts\nAccounts · 7 across 6 Items\n╭───────────┬────────────────────┬──────┬──────────────────────┬──────────┬───────────┬──────────┬─────╮\n│ Item      │ Account            │ Mask │ Type                 │  Current │ Available │    Limit │ Ccy │\n├───────────┼────────────────────┼──────┼──────────────────────┼──────────┼───────────┼──────────┼─────┤\n│ chase     │ Sapphire Preferred │ 4242 │ credit card credit   │  1834.12 │  13165.88 │ 15000.00 │ USD │\n│ chase     │ Total Checking     │ 8810 │ checking depository  │  6120.40 │   6120.40 │          │ USD │\n│ amex      │ Gold Card          │ 1005 │ credit card credit   │   912.77 │           │          │ USD │\n│ citi      │ Savings            │ 3127 │ savings depository   │ 24500.00 │  24500.00 │          │ USD │\n│ fidelity  │ Roth IRA           │ 0917 │ roth investment      │ 48210.57 │           │          │ USD │\n│ schwab    │ Brokerage          │ 3301 │ brokerage investment │ 96215.00 │  42680.00 │          │ USD │\n│ robinhood │ Individual         │ 7712 │ brokerage investment │ 18440.10 │           │          │ USD │\n╰───────────┴────────────────────┴──────┴──────────────────────┴──────────┴───────────┴──────────┴─────╯\nBalances from Plaid's daily refresh. Use --live to ask each bank now (billed per call).\nbash\n$ fin accounts --json\n{\n  \"accounts\": [\n    {\n      \"item\": \"chase\",\n      \"institution\": \"Chase\",\n      \"name\": \"Sapphire Preferred\",\n      \"mask\": \"4242\",\n      \"type\": \"credit\",\n      \"subtype\": \"credit card\",\n      \"balances\": {\n        \"available\": 13165.88,\n        \"current\": 1834.12,\n        \"limit\": 15000,\n        \"iso_currency_code\": \"USD\"\n      }\n    },\n    …\n  ],\n  \"env\": \"production\",\n  \"errors\": [],\n  \"live\": false\n}\nbash\n$ fin transactions --since 2026-10-01\nTransactions · 2026-10-01 → 2026-10-09 · 8\n╭────────────┬───────┬────────────────────┬────────────────────┬──────────┬─────┬────────────────────╮\n│ Date       │ Item  │ Account            │ Description        │   Amount │ Ccy │ Category           │\n├────────────┼───────┼────────────────────┼────────────────────┼──────────┼─────┼────────────────────┤\n│ 2026-10-09 │ chase │ Sapphire Preferred │ Sushi Ota          │   -86.40 │ USD │ food and drink     │\n│ 2026-10-08 │ amex  │ Gold Card          │ Whole Foods Market │  -142.18 │ USD │ food and drink     │\n│ 2026-10-08 │ chase │ Total Checking     │ ACME Corp Payroll  │  4925.00 │ USD │ income             │\n│ 2026-10-07 │ chase │ Sapphire Preferred │ Uber               │   -23.90 │ USD │ transportation     │\n│ 2026-10-05 │ amex  │ Gold Card          │ Netflix            │   -24.99 │ USD │ entertainment      │\n│ 2026-10-03 │ chase │ Total Checking     │ Rent · October     │ -2600.00 │ USD │ rent and utilities │\n│ 2026-10-02 │ citi  │ Savings            │ Interest payment   │    31.20 │ USD │ income             │\n│ 2026-10-01 │ chase │ Sapphire Preferred │ United Airlines    │  -540.00 │ USD │ travel             │\n╰────────────┴───────┴────────────────────┴────────────────────┴──────────┴─────┴────────────────────╯\nMoney out 3417.47 · money in 4956.20. Shown here as negative = spent, positive = received; JSON keeps Plaid's sign.\nbash\n$ fin transactions --since 2026-10-01 --json\n{\n  \"env\": \"production\",\n  \"errors\": [],\n  \"since\": \"2026-10-01\",\n  \"transactions\": [\n    {\n      \"item\": \"chase\",\n      \"institution\": \"Chase\",\n      \"account_name\": \"Sapphire Preferred\",\n      \"account_mask\": \"4242\",\n      \"date\": \"2026-10-09\",\n      \"authorized_date\": \"2026-10-08\",\n      \"name\": \"SUSHI OTA SAN DIEGO\",\n      \"merchant_name\": \"Sushi Ota\",\n      \"amount\": 86.4,\n      \"iso_currency_code\": \"USD\",\n      \"pending\": false,\n      \"category\": \"FOOD_AND_DRINK\",\n      \"category_detailed\": \"FOOD_AND_DRINK_RESTAURANT\"\n    },\n    …\n  ],\n  \"until\": \"2026-10-09\"\n}\nbash\n$ fin amazon categorize --all\nAmazon items · 5\n╭───────────────────────┬────────────┬───────────────────────┬─────┬────────┬─────────────────────╮\n│ Item                  │ Date       │ Title                 │ Qty │   Cost │ Category            │\n├───────────────────────┼────────────┼───────────────────────┼─────┼────────┼─────────────────────┤\n│ 114-2290017-6612408#1 │ 2026-10-06 │ Cordless drill kit    │   1 │ 129.84 │ HOME_IMPROVEMENT    │\n│ 114-2290017-6612408#2 │ 2026-10-06 │ Ground coffee, 2 lb   │   2 │  38.90 │ FOOD_AND_DRINK      │\n│ 114-2290017-6612408#3 │ 2026-10-06 │ Vitamin D3, 240 count │   1 │  18.62 │ MEDICAL             │\n│ 113-8805213-0147729#1 │ 2026-10-02 │ Kids' rain boots      │   1 │  34.17 │ GENERAL_MERCHANDISE │\n│ 113-8805213-0147729#2 │ 2026-10-02 │ Catan board game      │   1 │  46.03 │                     │\n╰───────────────────────┴────────────┴───────────────────────┴─────┴────────┴─────────────────────╯\nSet one with fin amazon categorize --set ITEM CATEGORY [--product].\nbash\n$ fin amazon categorize --all --json\n{\n  \"categories\": [\n    \"INCOME\",\n    …\n  ],\n  \"items\": [\n    {\n      \"item\": \"114-2290017-6612408#1\",\n      \"order_id\": \"114-2290017-6612408\",\n      \"date\": \"2026-10-06\",\n      \"product\": \"B0C7KQ3X1M\",\n      \"title\": \"Cordless drill kit\",\n      \"quantity\": 1,\n      \"cost\": 129.84,\n      \"category\": \"HOME_IMPROVEMENT\",\n      \"category_detailed\": \"HOME_IMPROVEMENT_HARDWARE\",\n      \"category_source\": \"item\",\n      \"account\": \"home\",\n      \"bank_transaction\": \"AMAZON MKTPL*BB4L09 · 2026-10-07\"\n    },\n    …\n  ]\n}\nbash\n$ fin holdings\nHoldings · 7 positions · 162865.67\n╭───────────┬────────────┬────────────┬──────────┬────────┬──────────┬────────────┬──────────┬──────╮\n│ Item      │ Account    │ Security   │ Quantity │  Price │    Value │ Cost basis │     Gain │ Lots │\n├───────────┼────────────┼────────────┼──────────┼────────┼──────────┼────────────┼──────────┼──────┤\n│ fidelity  │ Roth IRA   │ VTI        │      120 │ 288.10 │ 34572.00 │   26400.00 │  8172.00 │    4 │\n│ fidelity  │ Roth IRA   │ FXAIX      │    61.05 │ 223.40 │ 13638.57 │   11020.00 │  2618.57 │    3 │\n│ schwab    │ Brokerage  │ AAPL       │      150 │ 241.30 │ 36195.00 │   21300.00 │ 14895.00 │    5 │\n│ schwab    │ Brokerage  │ SCHD       │      600 │  28.90 │ 17340.00 │   16200.00 │  1140.00 │    2 │\n│ schwab    │ Brokerage  │ U S Dollar │    42680 │   1.00 │ 42680.00 │   42680.00 │     0.00 │    0 │\n│ robinhood │ Individual │ NVDA       │       80 │ 182.50 │ 14600.00 │    9100.00 │  5500.00 │    6 │\n│ robinhood │ Individual │ TSLA       │       10 │ 384.01 │  3840.10 │    4400.00 │  -559.90 │    2 │\n╰───────────┴────────────┴────────────┴──────────┴────────┴──────────┴────────────┴──────────┴──────╯\nTotal value 162865.67, cost basis 131100.00 where known.\nbash\n$ fin holdings --json\n{\n  \"env\": \"production\",\n  \"errors\": [],\n  \"holdings\": [\n    {\n      \"item\": \"fidelity\",\n      \"institution\": \"Fidelity\",\n      \"account_name\": \"Roth IRA\",\n      \"ticker\": \"VTI\",\n      \"security_name\": \"Vanguard Total Stock Market ETF\",\n      \"security_type\": \"etf\",\n      \"quantity\": 120,\n      \"price\": 288.1,\n      \"price_as_of\": \"2026-10-08\",\n      \"value\": 34572,\n      \"cost_basis\": 26400,\n      \"iso_currency_code\": \"USD\",\n      \"tax_lots\": [\n        {\n          \"quantity\": 30,\n          \"purchase_price\": 212.4,\n          \"original_purchase_datetime\": \"2022-03-14T00:00:00Z\",\n          \"position_type\": \"LONG\"\n        },\n        …\n      ]\n    },\n    …\n  ]\n}\nbash\n$ fin sql \"select category,\n                  sum(amount) filter (month(date) = 8) as aug,\n                  sum(amount) filter (month(date) = 9) as sep,\n                  round(100 * (sep - aug) / aug) as pct\n           from transactions\n           where amount > 0\n             and date between '2026-08-01' and '2026-09-30'\n           group by category\n           order by sep desc\"\n6 rows\n╭─────────────────────┬────────┬────────┬─────╮\n│ category            │    aug │    sep │ pct │\n├─────────────────────┼────────┼────────┼─────┤\n│ RENT_AND_UTILITIES  │   2850 │   2850 │   0 │\n│ FOOD_AND_DRINK      │ 1153.8 │   1318 │  14 │\n│ TRAVEL              │  814.6 │ 1203.6 │  48 │\n│ GENERAL_MERCHANDISE │ 1700.4 │  484.4 │ -72 │\n│ TRANSPORTATION      │  412.3 │  389.6 │  -6 │\n│ ENTERTAINMENT       │  189.9 │  236.4 │  24 │\n╰─────────────────────┴────────┴────────┴─────╯\nFrom ~/.local/share/fin/production.duckdb, synced Oct 9, 09:12. Run fin sync to refresh.\nbash\n$ fin sql --json \"select category,\n                         sum(amount) filter (month(date) = 8) as aug,\n                         sum(amount) filter (month(date) = 9) as sep,\n                         round(100 * (sep - aug) / aug) as pct\n                  from transactions\n                  where amount > 0\n                    and date between '2026-08-01' and '2026-09-30'\n                  group by category\n                  order by sep desc\"\n{\n  \"columns\": [\"category\", \"aug\", \"sep\", \"pct\"],\n  \"env\": \"production\",\n  \"rows\": [\n    {\n      \"aug\": 2850,\n      \"category\": \"RENT_AND_UTILITIES\",\n      \"pct\": 0,\n      \"sep\": 2850\n    },\n    {\n      \"aug\": 1153.8,\n      \"category\": \"FOOD_AND_DRINK\",\n      \"pct\": 14,\n      \"sep\": 1318\n    },\n    …\n  ],\n  \"synced\": [\n    {\n      \"item\": \"chase\",\n      \"item_id\": \"eVBnVMp7zdTJLkRNr33Rs6zr7KNJqBFL9DrE6\",\n      \"transactions_update_status\": \"HISTORICAL_UPDATE_COMPLETE\",\n      \"last_sync\": \"2026-10-09T16:12:00Z\"\n    },\n    …\n  ]\n}\n```\n\nMade-up numbers in fin's real output format. In a terminal fin prints tables; when an agent runs it, JSON.\n\n// fin ui · illustrative data\n\n## Or open it in your browser.\n\n`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.\n\n// works with the banks, cards and brokerages Plaid connects to\n\nLogos are trademarks of their owners. fin is independent and not affiliated with them or with Plaid.\n\n// AI-generated reports · illustrative data\n\n## Ask in plain words. Get a report.\n\nfin supplies the data. Your agent creates the layout, charts, and analysis.\n\n// fin help security\n\n## Local and yours.\n\n- reads\n- Balances, transactions, holdings with tax lots, investment activity.\n- never requests\n- Plaid Auth or Identity: no account numbers, no personal details. Cannot move money.\n- secrets\n- macOS Keychain, service `fin` . State in`~/.config/fin/state.json` , mode 0600.\n- data\n- 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.\n- amazon\n- 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.\n- costco\n- 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.\n- servers\n- 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.\n- cost\n- Free on Plaid's Trial plan, up to 10 institutions. MIT licensed.", "url": "https://wpnews.pro/news/show-hn-cli-for-your-financial-data-and-costco-and-amazon", "canonical_source": "https://kilianc.github.io/fin/", "published_at": "2026-10-18 17:11:24+00:00", "updated_at": "2026-10-18 17:18:11.505045+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "developer-tools"], "entities": ["fin", "Plaid", "Amazon", "Costco", "Chase", "American Express", "Fidelity", "Schwab"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/show-hn-cli-for-your-financial-data-and-costco-and-amazon", "markdown": "https://wpnews.pro/news/show-hn-cli-for-your-financial-data-and-costco-and-amazon.md", "text": "https://wpnews.pro/news/show-hn-cli-for-your-financial-data-and-costco-and-amazon.txt", "jsonld": "https://wpnews.pro/news/show-hn-cli-for-your-financial-data-and-costco-and-amazon.jsonld"}}