Track your whole portfolio in Google Sheets.
Prices, day change, dividend yield and price history — for stocks, ETFs,
mutual funds and crypto from markets worldwide. As simple as
=TFETCH("AAPL").
7-day free trial. No credit card.
Limited-time offer — $4.99 $2.99/month or $49.99 $29.99/year after that.
Illustration — figures are examples, not live quotes.
What it covers
Anything you can track in a spreadsheet — including the tickers GOOGLEFINANCE
returns as #N/A:
- Cryptocurrencies
- Mutual funds
- EU-domiciled ETFs — Xetra, Euronext and similar
- Smaller and non-US exchanges
- …and of course US stocks and ETFs
If a ticker works on finance.yahoo.com,
it works in =TFETCH() — same symbols, copied exactly:
AAPL, BTC-USD, VWCE.DE. Built for portfolio
tracking rather than split-second trading.
What you can fetch
- =TFETCH(ticker_or_range, [attribute])
- One value per cell: price, name, trading currency, day change (in % or absolute), previous close, day high/low, 52-week high/low, volume, exchange, instrument type, last trade time, dividend yield, trailing 12-month dividends, or the last ex-dividend date and amount — for one ticker or a whole column at once
- =TFETCHHISTORY(ticker, [range], [type], [interval])
- A table that fills a range: daily, weekly or monthly price history, or every dividend payment — from one day back to the ticker’s whole history
See the cheat sheet for a worked example of every argument and the full list of values each one accepts.
Private by design
- The add-on asks for the narrowest permissions Google offers — it sees only the spreadsheet you use it in, never your other files.
- Only the ticker symbols, the formula’s lookup parameters and your license key ever leave the sheet.
- No advertising trackers. Analytics only if you accept them on the consent bar — decline, and this site sets no cookies at all.
Start your free trial
New here? We email you a license key — that key is your 7-day free
trial. No card, nothing is charged, and no subscription starts on its own.
Lost your key? Enter the same address and we’ll send it again.
Installed from the Marketplace? Get your key here, then paste it via
Extensions › TickerFetch › Set license key…
Pricing
One plan, every feature. Cancel whenever you like.
Limited-time offer —
subscribe now and keep this price for as long as you stay subscribed.
-
Monthly
$4.99$2.99 / monthBilled monthly. Cancel any time.
-
Yearly 2 months free
$49.99$29.99 / year$2.50/month, billed once a year.
Subscribe
Checkout was cancelled — nothing was charged and your key is unchanged. New here? Your license key was already emailed to you, and it works as a free trial even if you don’t subscribe. Come back whenever you’re ready.
- You keep the same key. Nothing changes in your spreadsheet.
- The subscription is tied to the email address your key was issued to.
- Cancel any time — access runs to the end of the period you already paid for.
Manage or cancel your subscription — opens Stripe’s secure customer portal (sign in with your subscription email).
What happens when the trial ends
On day 8 your cells show #TRIAL_ENDED instead of a value. That is the whole
of it:
- Nothing is charged. There is no card on file to charge.
- Nothing is deleted. Your formulas and sheets are untouched — your data comes back as soon as you subscribe, with the same key.
- You’ll know the date. Your key email states exactly when the trial ends — no guessing.
Cheat sheet
Every formula shape, and what lands in the cell. Arguments in
[brackets] are optional — leave them off and the default applies.
One value per cell — =TFETCH()
=TFETCH(ticker_or_range, [attribute], [refresh_cell]) — what comes back
has the same shape as what you put in: one ticker gives one cell, a column of
tickers gives a column of values.
One ticker
- =TFETCH("SPY")
- current price, in one cell — the default when you name no attribute
- =TFETCH("SPY", "changepct")
- day change in %, in one cell
- =TFETCH("SPY", "name")
- the ticker’s full name
- =TFETCH("SPY", "currency")
- the currency the ticker trades in, e.g.
USDorEUR - =TFETCH("SPY", "week52high")
- the 52-week high — likewise
previousclose,change,dayhigh,daylow,week52low,volume,exchange,typeandtradetime - =TFETCH(A2)
- the ticker typed in A2, in one cell
- =TFETCH(A2, B2)
- ticker from A2, attribute name from B2 — both arguments can be cell references
Many tickers in one formula
- =TFETCH(A2:A100)
- a column of prices, the same height as A2:A100 — empty cells in the range show
#INVALID_TICKERuntil a ticker is typed there - =TFETCH(A2:A100, "yieldpct")
- the same column, dividend yield instead of price
- =TFETCH(A2:C20)
- any rectangular block works and comes back the same shape. Up to 200 different
symbols per formula — past that, every cell returns
#ERROR.
Forcing a recalculation
- =TFETCH("SPY", "price", $Z$1)
- the last argument is ignored — it is there so the formula re-runs whenever Z1
changes. Put a checkbox or
=NOW()in Z1. - =TFETCH(A2:A100, $Z$1)
- a checkbox, number or date in the second slot also means price — this is the original form of the trigger
Attributes — the second argument
- "price"
- current price (the default)
- "changepct"
- change since the previous close, in % — the regular session only, so pre- and post-market moves aren’t included
- "yieldpct"
- trailing 12-month dividend yield: the dividends actually paid over the last
year, divided by today’s price. Works for EU/UCITS ETFs, where other tools
show nothing. Also spelled
"dividendyieldpct". - "dividend12m"
- dividends paid per share over the last 12 months
- "lastdividendexdate"
- the most recent ex-dividend date, as a real date you can sort and subtract
- "lastdividendamount"
- the amount of that last dividend, per share
Capitals and underscores are ignored, so "changepct",
"change_pct" and "CHANGE_PCT" are the same attribute.
A table that fills a range — =TFETCHHISTORY()
=TFETCHHISTORY(ticker, [range], [type], [interval]) — one ticker per
formula. The table spills down and to the right from the cell you type it in, always
starting with a header row, so those cells must be empty.
Price history
- =TFETCHHISTORY("SPY")
- the last month of daily prices — a table 7 columns wide: Date, Open, High, Low, Close, Adj Close, Volume
- =TFETCHHISTORY("SPY", "1y")
- the same table over one year
- =TFETCHHISTORY("SPY", "1y", "prices")
- identical to the line above —
"prices"is the default; spell it out only when you also want to name an interval - =TFETCHHISTORY("SPY", "5y", "prices", "1wk")
- five years of weekly bars instead of daily
- =TFETCHHISTORY(A2, "1y")
- ticker read from A2 — any argument can be a cell reference, not only this one
Dividend payments
- =TFETCHHISTORY("SPY", "5y", "dividends")
- every dividend paid over five years — a table 2 columns wide: Date, Dividend. Dividends always come back payment by payment, so there is no interval to set.
Ranges — the second argument
- "1d", "5d"
- the last day or the last five days
- "1mo", "3mo", "6mo"
- the last one, three or six months —
"1mo"is the default - "1y", "2y", "5y", "10y"
- the last one, two, five or ten years
- "ytd"
- 1 January to today
- "max"
- the ticker’s whole history — needs
"1wk"or"1mo"as the interval
Types — the third argument
- "prices"
- one row per bar: date, open, high, low, close, adjusted close, volume (the default)
- "dividends"
- one row per dividend payment: date and amount per share
Intervals — the fourth argument
- "1d"
- one row per trading day (the default)
- "1wk"
- one row per week
- "1mo"
- one row per month
There are no intraday intervals and no start/end dates — TickerFetch is built for portfolio tracking rather than split-second trading.
What doesn’t work
Combinations that fail
- =TFETCHHISTORY("SPY", "max")
#ERROR—"max"needs a weekly or monthly interval:=TFETCHHISTORY("SPY", "max", "prices", "1mo")- =TFETCHHISTORY("SPY", "max", "dividends")
#ERROR—"max"and"dividends"can’t be combined. Use"10y"instead.- =TFETCHHISTORY(A2:A100, "1y")
#ERROR—=TFETCHHISTORY()takes one ticker at a time, not a range of them.- =TFETCHHISTORY("SPY", "3y")
#ERROR—"3y"is not a range. A mistyped range or interval gives a bare#ERRORwith no hint, so check the lists above.- =TFETCH("NASDAQ:AAPL")
#INVALID_TICKER— no exchange prefixes. Use the Yahoo Finance symbol exactly as shown there:AAPL,VWCE.DE,BTC-USD,^GSPC,EURUSD=X.
A cell showing text like #INVALID_TICKER or #NO_DATA means
something specific — see Help for what each one means and how to
clear it.
Help
My cells show an error
- #SET_LICENSE_KEY
- Either no key is saved in this Google account, or the saved key wasn’t recognised. Open Extensions › TickerFetch › Set license key… and paste your key — it is checked as you save, and the sheet refreshes automatically. If the key won’t save, it may be mistyped — have it sent again and paste it fresh. If the cells still show this error after saving, save the key once more — it may have been accepted while our service was briefly unreachable.
- #TRIAL_ENDED
- The free trial for that key has ended. Nothing is charged and nothing is deleted — see subscribing to keep going with the same key.
- #SUBSCRIPTION_ENDED
- The subscription for that key has lapsed — it was cancelled and the paid period ran out, or a renewal payment didn’t go through. Subscribe again with the same email and the same key starts working again.
- #INVALID_TICKER
- The symbol isn’t recognised, or the cell the formula reads is empty — type a
ticker there and the error clears. TickerFetch uses Yahoo Finance symbols — look the
ticker up on finance.yahoo.com
and copy it exactly. Xetra listings look like
VWCE.DE, crypto likeBTC-USD. - #UNKNOWN_ATTRIBUTE
- The second argument of
=TFETCH()isn’t a known attribute — usually a typo. Valid:price,changepct,yieldpct,dividend12m,lastdividendexdate,lastdividendamount(capitals and underscores are ignored). - #UNKNOWN_TYPE
- The third argument of
=TFETCHHISTORY()isn’t a known table type — usually a typo such as"dividend". Valid:prices(the default) ordividends. - #NO_DATA
- The ticker is fine, but this attribute isn’t available for it — for
example dividend yield on a symbol we have no dividend data for. Note that
0is different: it means the symbol paid no dividends in the last 12 months. - #QUOTA
- An unusually high number of requests in a short time — far more than normal use, even for large sheets. It clears itself within the hour; this almost always means a formula is recalculating in a loop.
- #ERROR
- Something else went wrong — a network problem or an upstream outage. Try a refresh, and email support if it persists.
How do I set it up?
- Open your spreadsheet.
- Extensions › TickerFetch › Set license key…
- Paste the key and click Save key.
- Put any formula from the cheat sheet into a cell.
I lost my license key
Go to Get your key and enter the same email address you used before, or open Extensions › TickerFetch › Set license key… and use Lost your key? Have it sent again. The same key is sent again — you will not get a second trial, and nothing is charged.
I saved my key but the cells still show #SET_LICENSE_KEY
Saving a key refreshes your sheet automatically, so this should clear on its own. If it doesn’t, use Extensions › TickerFetch › Refresh data now. If nothing changes, wait a minute and click it again — menu refreshes are throttled to one a minute.
Which ticker symbols do I use?
Yahoo Finance symbols. If a ticker works on finance.yahoo.com, it works in
=TFETCH() — copy it exactly as shown there.
When do prices update?
Whenever you open the spreadsheet, and on demand via Extensions › TickerFetch › Refresh data now. Quotes move on a few-minute cycle, so two refreshes close together will usually show the same price — that’s expected, not an error.
Day change (changepct) tracks the regular trading session — pre- and
post-market moves aren’t included. Price history is cached longer: history for
ranges above five days can run up to an hour behind.
Looking for formula syntax? See the cheat sheet. Something else? Email support@tickerfetch.com.
Try it on your own portfolio
Paste one formula and see whether your tickers come back. Seven days, no card, nothing to cancel. Or skip the setup and start from a ready-made sheet.