Why a spreadsheet still wins
Plenty of investors keep their mutual funds in a spreadsheet: units, cost, a target allocation, notes. The column that goes stale is the one that matters most, the NAV. Copying it in by hand each week is tedious and easy to get wrong.
The WealthTicker API fixes that column. It serves each fund's latest NAV, its date and the return figures the site computes as plain JSON, and Google Sheets can read JSON with about twenty lines of Apps Script. This walkthrough builds that sheet, using data to 2 November 2026.
Step 1: get a key and store it
Sign in with a free account, open Settings → API keys and create a key. It starts with wt_live_.
Don't paste the key into a cell, where anyone you share the sheet with can read it. In the sheet, open Extensions → Apps Script, then Project Settings → Script Properties, and add a property called WT_KEY with the key as its value.
Step 2: add the custom function
Paste this into the script editor's Code.gs and save:
function WT_FUNDS(codes) {
const key = PropertiesService.getScriptProperties().getProperty("WT_KEY");
const url = "https://wealthticker.in/api/v1/funds?limit=500&sort=schemeName&dir=asc&codes="
+ encodeURIComponent(codes);
const res = UrlFetchApp.fetch(url, { headers: { "X-Api-Key": key }, muteHttpExceptions: true });
if (res.getResponseCode() !== 200) throw new Error(res.getContentText());
const rows = JSON.parse(res.getContentText()).data;
return [["Code", "Fund", "NAV", "NAV date", "1Y %", "3Y %", "5Y %", "Expense %"]].concat(
rows.map(f => [f.schemeCode, f.schemeName, f.latestNav, f.navDate,
f.returns.y1, f.returns.y3, f.returns.y5, f.expenseRatio]));
}
All your funds go in one request, as a comma-separated codes list. That is the main design choice here. One call per fund would spend the free plan's 100 daily requests quickly, while one call per refresh barely touches it.
Step 3: call it from a cell
In any empty cell, type the scheme codes of the funds you hold:
=WT_FUNDS("120716,118989,120503")
The scheme code is the number at the end of a fund's page address, for example /fund/120716. Make sure you take the code for the plan you actually own, Direct or Regular, because they are different codes with different NAVs.
On 3 November 2026, with NAVs dated 2 November, the formula filled this table:
| Fund | NAV | 1Y | 3Y | 5Y | Expense |
|---|---|---|---|---|---|
| Axis ELSS Tax Saver Fund, Direct Growth | 107.9758 | −2.79% | 10.94% | 5.30% | 1.05% |
| HDFC Mid Cap Fund, Direct Growth | 218.2260 | −1.48% | 15.53% | 16.87% | 0.74% |
| UTI Nifty 50 Index Fund, Direct Growth | 165.1046 | −8.06% | 7.99% | 6.55% | 0.25% |
These figures are the same ones the fund pages show, because the API and the pages read the same computed rows. One-year and longer returns are CAGR; the methodology page has the formulas.
Step 4: put the numbers to work
Once the NAV column updates itself, everything else in the sheet can be ordinary formulas:
- Current value: units × NAV, with a
VLOOKUPon the scheme code into the API table. - Gain: current value minus cost.
- Allocation drift: each fund's share of the total against your target weight.
- Staleness check: compare the
NAV datecolumn withTODAY(). A fund whose NAV is more than a few days old is worth a look; the API also returns null for trailing returns once a fund's latest NAV is more than 15 days old.
For the return on your own purchases, as opposed to the fund's trailing return, Sheets' built-in XIRR takes your transaction dates and amounts. The XIRR glossary entry explains why it differs from CAGR.
How often it refreshes
A custom function runs when the sheet opens or its arguments change. Sheets also caches results, so it doesn't call the API on every scroll. AMFI publishes NAVs once a day, in the evening, so there is nothing to gain from fetching more often than that.
To control timing yourself, write a small function that puts WT_FUNDS(...) output into a range with setValues, then add a daily time-driven trigger under Triggers in the script editor. Either way you stay at a handful of requests a day.
What else the API can fill in
The same /funds call can do more than refresh a fixed list. Leave out codes and add a query, for example q=sub category = Flexi Cap Fund AND expense ratio < 1, and the sheet becomes a small screener. The screening guide covers the query language. Each fund object also carries AUM, exit load, minimum SIP, star rating and risk figures such as volatility and maximum drawdown, so any of them can become a column.
The free plan covers everything in this sheet. Full NAV history and the fund-house endpoints need Starter (₹799 a month); overlap and benchmark data need Pro. All three plans, and every field, are on the developers page.
Frequently asked questions
Can Google Sheets fetch mutual fund NAV automatically?
Yes. Sheets has no built-in mutual fund function, but an Apps Script custom function can call a JSON API with UrlFetchApp and return a table. With the WealthTicker API, one call to /funds with a codes list returns the NAV, NAV date, returns and expense ratio for every fund in the list.
How many API requests does a Google Sheets fund tracker use?
One per refresh if every fund goes in a single codes list, however many funds you track. The free plan allows 100 requests a day and 2,000 a month, and AMFI publishes NAVs once a day, so a sheet that refreshes a few times a day stays well inside it.
Where do I find a mutual fund's scheme code?
The scheme code is AMFI's number for one plan and option of a fund. It is the number at the end of the fund's WealthTicker page address, for example 120716 in /fund/120716 for UTI Nifty 50 Index Fund Direct Growth.
This is commentary on published data, not investment advice. WealthTicker is not a SEBI-registered adviser or distributor. Figures are WealthTicker’s own calculations from public data — AMFI’s fund NAVs and disclosures, NSE’s index and FII/DII files, and the fund houses’ monthly portfolios (how we calculate). They are as of the dates stated and can be revised by their source.
Keep reading
Markup vs margin: a 25% markup is only a 20% margin
Markup and margin sound alike but use different bases. A conversion table, a worked ₹800 example and the pricing mistake that quietly shrinks profit.
Percent, percentage points and basis points explained
A return falling from 12% to 9% is a 3 percentage point drop but a 25% relative fall. Read rate-cut and expense-ratio headlines correctly.
Embed free financial calculators on your website
How to embed any of 87 calculators on your own site: copy the snippet, keep the credit line, and know what the frame shows. Worked example: the SIP calculator.
