The Scenario
You're building a DCF model for a client who wants a valuation on 15 S&P 500 stocks by end of the week. The model is already wired — it just needs the fundamental data table below it to be populated: three years of annual revenue, net income, and EPS for each ticker. Without that table, every cell in the valuation model shows a REF error.
You've been sitting on this step for two days because "pull the fundamentals" is never a quick task. It's a sequence of API calls, JSON parsing, and careful column alignment that takes longer than you expect every time you do it.
The bad version:
- Hit Twelve Data's income statement endpoint for the first ticker, extract revenue, net income, and EPS for each of the last three fiscal years, and paste them into the correct rows and columns of the Excel table.
- Repeat for 14 more tickers, and somewhere around ticker 8, notice that your fiscal-year columns don't align for two companies that have different fiscal year ends — one's December, one's September.
- Decide to normalize to calendar year and spend 30 minutes figuring out how to handle the partial-year pro-ration before abandoning it and adding a footnote.
The DCF model is ready to run. The table underneath it is not.
The Easy Way: One Prompt in SheetXAI
SheetXAI is an AI agent inside your Excel workbook. It reads the 15 tickers in column A and, through its built-in Twelve Data integration, fetches annual income statement data for each and writes it into a structured table — fiscal year as column headers, tickers and field labels in column A.
Fetch the last 3 years of annual income statement data from Twelve Data for each ticker in column A. Write fiscal year end dates as column headers starting at column B. For each ticker, write revenue, net income, and EPS in separate sub-rows with field labels in column A adjacent to the ticker name.
What You Get
- Fiscal year headers across columns B, C, D (most recent year first).
- Three sub-rows per ticker: revenue, net income, and EPS.
- Currency normalized to USD; any exceptions noted in the field label.
- Tickers with fewer than 3 years of data (recent IPOs, newly listed companies) populated with available years, with earlier columns left blank.
What If the Data Is Not Quite Ready
If you want balance sheet data instead of the income statement
Fetch the most recent annual balance sheet from Twelve Data for each ticker in column A. Write total assets into column B, total liabilities into column C, shareholders equity into column D, and debt-to-equity ratio into column E.
If your ticker list includes ADRs that report in non-USD currencies
Fetch 3 years of annual income statement data from Twelve Data for each ticker in column A. For tickers tagged as ADR in column B, note the reporting currency next to each revenue figure. Add a converted-to-USD column using the current exchange rate fetched from Twelve Data.
If you need quarterly data instead of annual for a trailing-twelve-month analysis
Fetch the last 4 quarters of income statement data from Twelve Data for each ticker in column A. Write period end date as column headers starting at column B. For each ticker, write revenue, net income, and EPS in sub-rows. In the rightmost column, calculate the trailing twelve month total for revenue and net income, and the trailing twelve month diluted EPS.
Kill-chain: validate tickers, fetch three years of income data, and calculate 3-year revenue CAGR
Check column A for any symbols that don't resolve in Twelve Data and flag them as INVALID in column B. For all valid tickers, fetch 3 years of annual revenue and write into columns C, D, and E by year. Calculate the 3-year revenue CAGR as (year3/year1)^(1/2) - 1 and write into column F. Sort the workbook from highest to lowest CAGR.
Try It
Get the 7-day free trial of SheetXAI and open your DCF model workbook with tickers in column A, then ask it to populate the fundamental data table so the model can run. Also see pulling cash flow statements and the full Twelve Data overview.
