# Pre-market watchlist brief from a Google Sheet to Slack

> Every weekday at 8am ET, your watchlist becomes a short Slack brief: biggest movers first, the news behind each one, and any analyst rating shifts.

- Workflow type: agent
- Services: Finnhub, Google Sheets, Slack Bot
- Categories: Finance, Operations
- Published: 2026-08-04

## What it does

- Reads your watchlist straight from a Google Sheet, so you update tickers in a spreadsheet instead of editing the automation.
- Checks the latest price move, fresh headlines from the last 24 hours, and the current analyst consensus for every symbol on the list.
- Writes one short brief that leads with the biggest movers and explains what news is actually driving each one.
- Posts it to your Slack channel before the US market opens, with quiet tickers filtered out so it stays readable.

## What you'll need

- A Finnhub account for market data. The free plan covers everything this workflow uses.
- A Google Sheet with your ticker symbols in a column, for example AAPL, MSFT, NVDA.
- A Slack workspace and a channel where the morning brief should land.

## Prompt

Every weekday at 8:00am Eastern, before the US market opens, post a pre-market brief on my watchlist to a Slack channel I configure. The goal is one short, readable message that tells me what moved overnight and why, not a table of prices.

Trigger: cron schedule, Monday through Friday at 8:00am America/New_York.

Step 1. Read the watchlist. Use Google Sheets Get Values to read the ticker symbols from the watchlist tab of a spreadsheet I specify. I will give you the spreadsheet id and the range, for example Watchlist!A2:A41. Treat one symbol per row, skip empty cells and any header row, and normalize symbols to uppercase.

Step 2. For each ticker, gather three things from Finnhub. Use Quote for the latest price and the percent change on the day. Use Company News for headlines published in the last 24 hours, passing yesterday and today as the from and to dates. Use Recommendation Trends for the current analyst consensus, comparing the most recent period against the one before it so you can detect a shift rather than just reporting a snapshot.

Pace the Finnhub calls. The free plan allows 60 calls per minute and each ticker needs three calls, so keep the watchlist to roughly 40 symbols and spread the requests so a single run never trips the limit. If Finnhub returns a 429, back off briefly and retry rather than dropping the ticker silently. If a symbol returns no data at all, note it once at the end of the brief instead of failing the whole run.

Step 3. Filter before writing. Drop any ticker that moved less than 1 percent on the day and also has no fresh news in the last 24 hours. Those are the quiet names, and including them is what makes this kind of brief unreadable. Keep a ticker if it has either a meaningful move or real news, not necessarily both. This filter matters most during earnings season, when news volume is much heavier and an unfiltered brief turns into a wall of text.

Step 4. Synthesize one brief, written as short prose and bullets rather than a data dump. Lead with the biggest movers, largest absolute percent change first. For each one, explain what news appears to be driving the move by pairing the price change with a specific same-day headline. That pairing is the entire point of this brief: a price move with the reason sitting next to it is useful, a price list is not. If a mover has no headline that plausibly explains it, say so plainly rather than inventing a cause. Then call out any ticker where analyst consensus shifted, for example upgrades outnumbering downgrades versus the prior period, or a visible change in the strong buy or sell counts. Close with a single line: one thing to watch today.

Step 5. Format for Slack using mrkdwn, which means single asterisks for bold rather than double. Bold the tickers and show moves as +2.3% or -1.8%. Keep the whole thing to roughly one screen. Post it with Slack Bot Send a Message to the channel I configure.

Keep the brief scoped to my watchlist. Do not add market-wide indexes, top gainer lists, or most-active lists. The value here is depth on the names I actually hold or follow, not broad market coverage.

Configurable inputs the workflow should expose: the Google Sheets spreadsheet id and watchlist range, the Slack channel id, the percent move threshold (default 1 percent), the news lookback window (default 24 hours), and the time zone.

## How to customize

- Change the schedule or time zone, for example 7:30am for an earlier pre-market read or 4:30pm for a closing wrap.
- Raise or lower the move threshold that decides which tickers are quiet enough to skip.
- Point it at a different Slack channel or a DM, and swap the watchlist tab whenever your coverage changes.

## Example output

*Pre-market brief, Tue Aug 4*

*NVDA* +4.2% on a report that next-gen accelerator shipments were pulled forward a quarter. Consensus firmed: 42 buy vs 38 last month, no sells.

*TSLA* -3.1% after an overnight filing showed China deliveries down 9% month over month. No rating changes.

*AAPL* +1.4%, no clear catalyst. Headlines are supplier chatter, nothing company-confirmed.

*Consensus shifts:* AMD picked up two upgrades this month, now 31 buy / 4 hold / 0 sell.

*Watch today:* CPI print at 8:30am ET. The rate-sensitive names on the list tend to move on the surprise, not the level.

_Skipped 34 quiet tickers (moved under 1%, no fresh news)._

## FAQ

### Do I need a paid Finnhub plan?

No. Prices, company news, and analyst consensus are all available on the Finnhub free plan. That plan allows 60 calls a minute, which is why we suggest keeping the watchlist to around 40 symbols.

### How many tickers can I track?

Around 40 works comfortably on the free plan, since each symbol needs three lookups. If you want a much longer list, either upgrade your Finnhub plan or split the watchlist across two runs at different times.

### Why do some of my tickers not show up in the brief?

That is intentional. Any symbol that moved less than one percent and has no fresh news gets left out, so the brief stays short and the names that actually matter stand out. You can change that threshold.

### How is this different from the daily stock market morning brief?

That one scans the whole US market for top gainers, losers, and index moves. This one covers only the symbols on your own watchlist, adds analyst rating changes, and lets you manage the list in a Google Sheet.

### Will it post on weekends or market holidays?

It runs Monday through Friday by default. You can ask Geni to also skip US market holidays if you want a strict trading-day schedule.

Use this prompt in General Input: https://www.generalinput.com/prompts/pre-market-watchlist-brief-from-a-google-sheet-to-slack