The Scenario
You're writing a fund comparison report for an allocator client who wants to know which of 12 tech-sector ETFs are most concentrated. They specifically asked about top holdings overlap, sector weight distribution, and expense ratios. The ETF tickers are in column A of your Google Sheet. Everything else is blank.
The previous version of this report was built by an intern who left in January. The methodology is in a three-year-old slide deck. The actual data is nowhere.
The bad version:
- Navigate to each ETF's fund page on a data provider's site, locate the top 10 holdings table, copy the names and weights, and paste them into the sheet — 10 rows per ETF, 120 rows total, with slight formatting differences between providers depending on which site has the ETF.
- Look up sector weights for each fund separately because the holdings page rarely shows sector breakdown, and the sector breakdown page rarely shows individual holdings.
- Cross-reference expense ratios from a third source, which lists them in a different number format than the other two sources, requiring another round of normalization.
By the time the data is clean, you're already out of time to do the analysis.
The Easy Way: One Prompt in SheetXAI
SheetXAI is an AI agent inside your Google Sheet. It reads the 12 ETF tickers in column A and, through its built-in Twelve Data integration, fetches composition data for each fund and writes holdings and weights into a structured layout.
Fetch ETF composition data from Twelve Data for each fund ticker in column A. Write the top 5 holdings with their names and weights into columns B through K (ticker in one column, weight percentage in the next, repeated for each of the 5 holdings).
What You Get
- Five holding name/weight pairs across columns B through K for each ETF row.
- Weights expressed as percentages (e.g., 12.4 for 12.4%).
- ETFs with fewer than 5 reported holdings get actual holdings populated, with the remaining columns left blank.
- Any fund ticker that Twelve Data cannot resolve as an ETF (e.g., it's a mutual fund with a different identifier format) flagged in column L.
What If the Data Is Not Quite Ready
If you want global ETF analytics metrics alongside the holdings
Fetch global ETF analytics from Twelve Data for each fund ticker in column A. Write total assets (in millions) into column B, expense ratio into column C, YTD return into column D, 1-year return into column E, and Sharpe ratio into column F.
If you want to identify which holdings appear in multiple ETFs to measure concentration overlap
Fetch the top 10 holdings for each ETF in column A from Twelve Data and write them into a holdings tab with ETF ticker in column A and holding name in column B. Then in the main tab, count how many ETFs hold each unique security and write the overlap count next to each holding.
If you want to compare expense ratios and performance to build a cost-adjusted return metric
Fetch expense ratio and 1-year return from Twelve Data for each ETF ticker in column A. Write expense ratio into column B and 1-year return into column C. Calculate a cost-adjusted return (1-year return minus expense ratio) and write into column D. Sort rows from highest to lowest cost-adjusted return.
Kill-chain: fetch holdings, calculate overlap score, add expense ratios, and flag concentrated funds
Fetch the top 10 holdings from Twelve Data for each ETF in column A and write them into a list. Identify any holding that appears in 4 or more of the 12 ETFs and mark it as HIGH OVERLAP. Fetch expense ratio and 1-year return for each fund from Twelve Data and write into columns B and C. In column D, calculate cost-adjusted return. In column E, write HIGH CONCENTRATION if the top 5 holdings represent more than 40% of the fund, otherwise write DIVERSIFIED.
Try It
Get the 7-day free trial of SheetXAI and open your fund comparison sheet with ETF tickers in column A, then ask it to populate holdings, metrics, and overlap flags in one pass. Also see adding a risk-metrics panel and the full Twelve Data overview.
