# 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.

- Workflow type: app
- Services: Finnhub, Notion
- Categories: Finance, Operations
- Published: 2026-08-21

## What it does

- 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 you'll need

- 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.

## Prompt

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.

## How to customize

- 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.

## FAQ

### Do I need a paid Finnhub plan?

No. The app is built entirely on data Finnhub offers on its free tier: the earnings calendar, past earnings surprises, key financials, analyst rating trends, peer lists and company news. The consensus number comes from the calendar entry itself rather than the paid estimates data, so a free key is enough.

### Where does my coverage list come from?

A Notion database you already keep. The app reads it every time it loads and filters the earnings calendar down to those companies, so adding or removing a name in Notion is all it takes to change what shows up in the app.

### Can the whole team use it during reporting week?

Yes, and that is the point. The status each analyst sets is saved in the app and visible to everyone, so the team can see at a glance which names are prepped and which nobody has touched yet.

### What is actually in the prep brief?

A short pre earnings note covering what to watch at this release, the recent pattern of beats and misses and what it suggests, and the peer read throughs from companies in the same set that have already reported. It gets saved into Notion under the company and linked back into the app.

### What happens to the statuses when a new quarter starts?

Statuses are tracked per reporting period, so as soon as the next quarter's dates appear every company starts fresh at Not started instead of carrying over last quarter's progress.

Use this prompt in General Input: https://www.generalinput.com/prompts/earnings-season-war-room-for-your-analyst-coverage-list