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.
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.
Example output
Additional information
What does this prompt do?
- 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 do I need to use this?
- 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.
How can I customize it?
- 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.
FAQs
Do I need a paid Finnhub plan?
How many tickers can I track?
Why do some of my tickers not show up in the brief?
How is this different from the daily stock market morning brief?
Will it post on weekends or market holidays?
Related templates
Every weekday, find every unpaid JobNimbus invoice, email each customer one reminder that gets firmer as it ages, and post a receivables summary to Slack.
Every weekday at 7am, your active courses are checked for missing work, silent logins, and slipping grades, with a ranked list sent to your advising channel.
Every hour, find the tickets closest to breaching, leave a nudge on each one, and post a ranked at-risk list to your support channel.
Every weekday afternoon, each student who is behind gets a warm, personal message in their Canvas inbox listing exactly what they owe.
Every Monday at 8am, see exactly which assignments have work waiting, sorted worst first, posted to Slack and logged to a spreadsheet.
Every weekday morning we compare your password vault against your HR records and suspend access for anyone who has already left.
Know what moved your watchlist before the bell.
Connect Finnhub, Google Sheets, and Slack once, and your team gets a written pre-market brief every weekday morning.