Earnings season war room for your analyst coverage list
Replace the shared doc you rebuild every quarter with one screen: who reports when, how they have done lately, and prep notes your team can actually use.
Build me an earnings season war room app that our equity analysts live in during reporting weeks. It replaces the shared document we rebuild from scratch every quarter. The landing view is a week by week earnings schedule for the companies we cover, and selecting any company opens a prep page for that name.
Our coverage list lives in a Notion database. Read it with the Notion Query a Data Source operation and treat each row as one covered company, using its ticker symbol property to match against market data and its company name for display. Let me set the data source id in app configuration. Everything in the app is scoped to this list: if a company is not in the Notion database it should never appear in the schedule.
Build the schedule from the Finnhub Earnings Calendar operation, requesting a date range that covers the weeks currently on screen and then filtering the results down to the tickers on our coverage list. Group the surviving entries by calendar week and show each as a row with the company name and ticker, the report date and weekday, whether it is before market open or after market close (the calendar entry carries this as bmo, amc or dmh, so render it as readable text like Before open and After close), and the consensus EPS figure carried on the calendar entry itself. Companies on the coverage list with no scheduled date in the visible range go in a separate Unscheduled section, so an analyst can see that a name has not been dated yet rather than having it silently disappear.
Each row also shows how the company did on its last four reports. Pull that from Finnhub Earnings Surprises for the ticker and display the last four periods compactly, each showing the quarter, actual EPS against estimate, and whether it was a beat or a miss with the surprise percentage. A small inline strip of four beat or miss markers works well, so an analyst can read the pattern down the whole schedule at a glance without opening anything.
Give me a status on every row that analysts set by hand, with the values Not started, Prepped and Reported. Store this in the app rather than writing back to Notion, and key it to the company and the reporting period together so that when a new quarter's dates arrive every name starts again at Not started instead of inheriting last quarter's status. Statuses are shared across the whole team rather than per viewer, and each week header should show a count of how many names in that week are still Not started so coverage gaps stand out.
Default the view to the current week. Add a toggle that widens it to the next four weeks, which should render as four labelled week groups in order rather than one long undifferentiated list, with the current week expanded by default.
Selecting a company opens its prep page, which combines four Finnhub sources for that ticker: Basic Financials for the key metrics and ratios, Recommendation Trends for how the analyst rating mix has shifted over recent months, Company Peers for the comparable set, and Company News for recent headlines. Show the recommendation trend as a small stacked view across the last several periods so the direction of travel is obvious, list the peers as chips that jump to that peer's own prep page when the peer is also on our coverage list, and cap the news at the last thirty days with the most recent first. Repeat the upcoming report date, the before or after market flag, the consensus figure and the last four surprises at the top of the page so the analyst has that context without going back.
On the prep page put a Draft prep brief button that starts a background agent. The agent reads the same Finnhub data for this company (Basic Financials, Recommendation Trends, Earnings Surprises and Company News), then does the same across the companies returned by Company Peers, paying particular attention to any peer that has already reported this quarter. From that it writes a pre earnings prep note covering three things: what to watch at this release, the recent beat and miss pattern and what it suggests, and the peer read throughs, meaning what already reported peer results and recent peer news imply for this company's quarter. Keep the note tight and analyst readable, structured under those three headings, and have it name specific figures rather than talking in generalities.
When the agent finishes it saves the note into Notion with the Create a Page operation, created under the coverage list row for that company so the note lives with the name it belongs to, and titled with the company and the reporting period. Store the returned page id and url in the app, show the brief inline on the prep page once it exists, and put a link through to the Notion page on both the prep page and the schedule row. If a brief already exists for the current period, show when it was generated and let the analyst regenerate it, which creates a new page rather than overwriting the old one. While the agent is running, show that state on the button and on the schedule row so a second analyst does not kick off a duplicate, and surface a clear message if it fails.
Important constraint on the data: build everything on Finnhub's free tier. The dedicated analyst estimate operations (EPS Estimates, Revenue Estimates and the rest of the estimate family) are premium and return HTTP 403 without a paid plan, so do not call them anywhere in the app or the agent. Take the consensus EPS from the Earnings Calendar entry instead. The free tier also allows 60 calls per minute, and a coverage list of forty names with per company surprises is enough to hit that, so fetch the calendar once per range, fetch per company data lazily and cache it for the session, and pace the agent's peer lookups rather than firing them all at once.
What does this prompt do?
- Builds a week by week reporting schedule for just the companies on your coverage list, read from your Notion database, so nobody rebuilds the quarterly tracker again.
- Shows every upcoming release with its date, whether it lands before or after the bell, the consensus earnings figure, and how the company did against expectations on its last four reports.
- Opens a prep page per company with key financial metrics, analyst rating trends, the peer set, and recent news in one place.
- One button hands the work to a background assistant that reads the company and its peers, writes a pre earnings note covering what to watch and the peer read throughs, and files it in Notion.
What do I need to use this?
- A Finnhub account. The free key covers every piece of market data this app uses.
- A Notion workspace with a database listing the companies you cover, each row carrying its ticker symbol.
- A spot in Notion where prep notes should be filed, shared with your Notion connection.
How can I customize it?
- Change the default view from the current week to a two week or full month look ahead.
- Rename the status options to match how your team already talks about coverage.
- Adjust what the prep note covers, for example adding a standing list of questions for the call or a guidance history section.
FAQs
Do I need a paid Finnhub plan?
Where does my coverage list come from?
Can the whole team use it during reporting week?
What is actually in the prep brief?
What happens to the statuses when a new quarter starts?
Related templates
See how your brand's news coverage and sentiment stack up against four competitors, then let an assistant write the weekly report for you.
Drag creators through Sourced to Wrapped on a board grouped by campaign, with audience stats on every card and a one-click brief for each creator.
Open one screen to find every unavailable, stale, or low-battery device in your smart home, see which hub is really at fault, and clear out the dead entries in bulk.
See every open model your teams run in production, who approved it, and whether a quiet license change means it needs another look.
Stop checking a dozen agency sites by hand. Open one board of live solicitations, each scored against what your team can actually bid on.
Describe a market in plain English, get a live landscape of matching companies, expand it from any name you like, and keep every map in Notion.
Stop rebuilding the earnings tracker every quarter.
Give your analysts one screen for reporting season, with prep notes that write themselves.