Build a Portfolio Tracker in Google Sheets
Google Sheets pulls live ETF prices for free with one function: GOOGLEFINANCE(). Here are the exact columns and formulas to build a tracker that updates itself.
Don't have time? Here's what you need to know:
- 1GOOGLEFINANCE() pulls delayed live ETF prices into a cell for free, e.g. =GOOGLEFINANCE(A2).
- 2Six columns — ticker, shares, cost basis, live price, value, and weight — cover what most investors need.
- 3Lock the total reference with dollar signs (=E2/$E$10) so weight formulas copy cleanly down every row.
- 4Treat the sheet as a monitoring dashboard, not a tax record — verify cost basis against brokerage statements.
Why Google Sheets Is the Easiest Free Tracker
Most brokerages already show your holdings, but they rarely show what you actually want to monitor in one place: your real cost basis, each position's weight in the portfolio, and your gain across accounts held at different brokers. A Google Sheet solves that for free, syncs across your phone and laptop, and never expires the way a trial of paid software does.
The feature that makes it work is a built-in function called GOOGLEFINANCE(), which pulls quotes for most U.S.-listed ETFs and stocks directly into a cell. You type a ticker, and the sheet fetches the price. That turns a static spreadsheet into something close to a live dashboard with no add-ons, no macros, and no subscription.
The Columns Every Tracker Needs
Resist the urge to track 30 columns. A tracker you actually update beats an elaborate one you abandon. Six core columns cover almost everything a long-term ETF investor needs to see at a glance.
Lay them out left to right so each row is one holding. Total your portfolio at the bottom, and your weight column will show whether any single position has drifted far from your target — the signal that it might be time to rebalance.
| Column | What it holds | Example |
|---|---|---|
| Ticker | The ETF symbol | VOO |
| Shares | Number of shares you own | 12 |
| Cost basis | Total you paid (price x shares + fees) | $4,800 |
| Live price | Pulled automatically | =GOOGLEFINANCE(A2) |
| Market value | Shares x live price | =B2*D2 |
| Weight | This holding / total portfolio | =E2/$E$10 |
| Gain/loss | Market value - cost basis | =E2-C2 |
Tip: Add a 'Target weight' column next to the live weight. The gap between target and actual is your rebalancing to-do list.
Pulling Live Prices with GOOGLEFINANCE()
If your ticker sits in cell A2, put =GOOGLEFINANCE(A2) in the price column and the current quote appears. You can also write the ticker directly as text, for example =GOOGLEFINANCE("VTI"). To be explicit about which data point you want, add a second argument: =GOOGLEFINANCE(A2,"price") returns the latest price, while =GOOGLEFINANCE(A2,"priceopen") returns that day's opening price.
Two things to know about how it behaves. First, GOOGLEFINANCE quotes are typically delayed by up to about 20 minutes, which is fine for tracking a buy-and-hold portfolio but not for live trading. Second, the function covers most U.S.-listed ETFs and stocks but not every fund, money-market product, or foreign listing; if a ticker returns an error, you may need to type that one price in by hand and update it occasionally.
For your market value, multiply shares by the live price: =B2*GOOGLEFINANCE(A2) in a single cell, or reference the price column with =B2*D2 if you keep price separate. Keeping price in its own column makes the sheet easier to read and debug.
Important: GOOGLEFINANCE data is delayed and is not guaranteed to be accurate or complete. Use it for monitoring, not for tax reporting or trade decisions — confirm cost basis against your brokerage's official statements.
Calculating Weight, Gain, and Totals
Sum your market-value column to get the total portfolio value, for example =SUM(E2:E9) in a totals row. Then each holding's weight is its market value divided by that total. If your total lives in cell E10, the weight formula is =E2/$E$10 — the dollar signs lock the reference to E10 so you can copy the formula down every row without it drifting.
Format the weight cells as a percentage and you can instantly see concentration. If one ETF has grown to 40% of a portfolio you intended to keep near 25%, that's a prompt to add elsewhere or trim. Gain is simply market value minus cost basis; gain percentage is gain divided by cost basis. Conditional formatting (green for positive, red for negative) makes the column readable in a glance.
Once the math works, the tracker maintains itself: prices refresh on their own, and your value, weight, and gain recalculate every time you open the file. Your only manual job is updating shares and cost basis when you buy or sell.
Useful Extensions Once the Basics Work
A few additions earn their keep. A dividends tab where you log payments builds a running income total over the year. A second 'Targets' table listing your intended allocation lets you compare planned versus actual weights side by side. And a simple line chart of total portfolio value, snapshotted monthly, turns abstract numbers into a motivating trend you can watch grow.
You can also pull an expense ratio reference column by hand from each fund's page so the sheet reminds you what you're paying. If you want to sanity-check a fund's long-run growth against your contributions, our ETF return calculator does the compounding for you, and the Portfolio X-Ray breaks down what your combined holdings actually own.
Want the full framework? This 2-hour ETF course teaches you exactly how to pick, buy, and hold profitable ETFs — from zero to confident investor. Under $15.
Frequently Asked Questions
How do I get live stock prices in Google Sheets?
Use the GOOGLEFINANCE() function. If your ticker is in cell A2, type =GOOGLEFINANCE(A2) and the current quote appears, or write the ticker directly as =GOOGLEFINANCE("VOO"). The data is delayed by up to roughly 20 minutes, which is fine for tracking a long-term portfolio.
Does GOOGLEFINANCE work for all ETFs?
It covers most U.S.-listed ETFs and stocks, but not every fund — some money-market products, newer launches, and many foreign listings return an error. For any ticker GOOGLEFINANCE can't fetch, type the price in manually and update it occasionally.
Is a Google Sheets tracker accurate enough for taxes?
No. GOOGLEFINANCE prices are delayed and not guaranteed to be complete, so treat the sheet as a monitoring tool only. For cost basis, realized gains, and anything you file, rely on the official statements and 1099 forms from your brokerage.
How do I show each holding's percentage of my portfolio?
Divide each holding's market value by the portfolio total and format the cell as a percentage. If your total is in cell E10, use =E2/$E$10 and copy it down — the dollar signs keep the formula pointing at the total as it fills each row.
Further Reading
Free Tools
Alex Harrington
CFA Level II Candidate, Finance & Economics
Alex Harrington is an independent ETF researcher and personal finance writer with over 8 years of experience analyzing exchange-traded funds. A CFA Level II candidate with a background in economics, Alex has reviewed 800+ ETFs and helped thousands of beginners build their first investment portfolios through clear, jargon-free education.
This content is for educational purposes only and does not constitute financial advice. Past performance does not guarantee future results. Consult a licensed financial advisor before making investment decisions.