Earnings season war room for your analyst coverage list

By General Input

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.

Integrations

  • Finnhub
  • Notion

Type

App

Categories

  • Finance
  • Operations

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.

Related prompts

Explore more prompts
Screen chartered vessels for AIS gaps and sanctions red flagsCompare candidate store locations with drive time trade areasBrowse every competitor ad and build a Notion swipe fileAudience persona studio for brand and product marketersArtwork desk for the Notion posts still missing an imageShare of voice dashboard for your brand and competitorsInfluencer campaign roster board with AI creator briefsSmart home entity health cockpit for Home AssistantOpen model approval desk for your production AI stackBid board that watches every procurement portal for you