Loading...
Loading...
Sync retirement account data from Vanguard and Fidelity CSV exports to Google Sheets DataHub. Handles multiple accounts, aggregates holdings by ticker, and updates quantities in retirement section (rows 46-62). Triggers on sync retirement, update retirement, vanguard sync, 401k update, IRA sync, or working with notebooks/retirement-accounts/ files.
npx skill4agent add aojdevstudio/finance-guru retirement-syncingnotebooks/retirement-accounts/notebooks/retirement-accounts/notebooks/retirement-accounts/| File | Source | Contents |
|---|---|---|
| Vanguard IRAs | Account 39321600 & 35407271 holdings |
| Vanguard Brokerage | Account 53527429 & 50580939 holdings |
| Fidelity 401(k) | {employer_name} 401(k) Plan holdings |
Account Number,Investment Name,Symbol,Shares,Share Price,Total Value,
39321600,VANGUARD S&P 500 INDEX ETF,VOO,18.1817,629.3,11441.74,Account Number,Account Name,Symbol,Description,Quantity,Last Price,...
86689,{employer_name} 401(K) PLAN,FGCKX,FID GROWTH CO K,4.447,$50.04,...fin-guru/data/user-profile.yaml| Row | Ticker | Description |
|---|---|---|
| 46 | VOO | Vanguard S&P 500 ETF |
| 47 | VUG | Vanguard Growth ETF |
| 48 | VTSAX | Vanguard Total Stock Market |
| 49 | SCHG | Schwab US Large-Cap Growth |
| 50 | PLTR | Palantir |
| 51 | NVDA | NVIDIA |
| 52 | TSLA | Tesla |
| 53 | VB | Vanguard Small-Cap ETF |
| 54 | ARKK | ARK Innovation |
| 55 | VMFXX | Vanguard Money Market |
| 56 | FGCKX | Fidelity Growth Company K |
| 57 | FXAIX | Fidelity 500 Index |
| 58-62 | Reserved | Future holdings |
# Read Vanguard files
vanguard_1 = read_csv("notebooks/retirement-accounts/OfxDownload.csv")
vanguard_2 = read_csv("notebooks/retirement-accounts/OfxDownload (1).csv")
# Read latest Fidelity file (by date in filename)
fidelity = read_csv("notebooks/retirement-accounts/Portfolio_Positions_*.csv")holdings = {}
for file in [vanguard_1, vanguard_2, fidelity]:
for row in file:
ticker = row['Symbol']
shares = float(row['Shares'] or row['Quantity'])
holdings[ticker] = holdings.get(ticker, 0) + shares// Update VOO quantity (Row 46)
mcp__gdrive__sheets(operation: "updateCells", params: {
spreadsheetId: SPREADSHEET_ID,
range: "DataHub!B46:B46",
values: [["214.7947"]] // Aggregated quantity
})| Ticker | Range | Aggregation |
|---|---|---|
| VOO | B46 | 18.1817 + 196.613 = 214.7947 |
| VUG | B47 | 10.9488 + 2.1164 = 13.0652 |
| VTSAX | B48 | 126.336 + 102.126 = 228.462 |
| SCHG | B49 | 100 + 6 = 106 |
| PLTR | B50 | 25 + 42 = 67 |
| NVDA | B51 | 150 |
| TSLA | B52 | 58 |
| VB | B53 | 20 |
| ARKK | B54 | 16.13 |
| VMFXX | B55 | 2.94 + 0.57 + 179.92 + 428.42 = 611.85 |
| FGCKX | B56 | 4.447 |
| FXAIX | B57 | 3.705 |
notebooks/retirement-accounts/// Step 1: Read CSVs and aggregate
const holdings = aggregateFromCSVs();
// Step 2: Update each ticker's quantity
const updates = [
{ range: "DataHub!B46:B46", values: [[holdings.VOO.toFixed(4)]] },
{ range: "DataHub!B47:B47", values: [[holdings.VUG.toFixed(4)]] },
{ range: "DataHub!B48:B48", values: [[holdings.VTSAX.toFixed(3)]] },
// ... etc
];
for (const update of updates) {
mcp__gdrive__sheets(operation: "updateCells", params: {
spreadsheetId: SPREADSHEET_ID,
...update
});
}
// Step 3: Log summary
console.log("Updated 12 retirement positions");Updated 12 retirement positions:
- VOO: 214.7947 shares
- VUG: 13.0652 shares
- VTSAX: 228.462 shares
...
Total Retirement Value: ~$387,806