Weekly earnings dates for your watchlist, on your calendar
Every Monday morning, we add this week's earnings dates for the companies you track to your calendar and post the full lineup to Slack.
Every Monday at 6:00am, build out the week's earnings schedule for the tickers I follow. Every step here is a fixed lookup, filter, and write with no judgement involved, so build it as a code workflow on a weekly cron trigger.
Keep three plain configurable inputs on the workflow: my list of ticker symbols (a single comma separated text field, for example "AAPL, MSFT, NVDA"), the target Google Calendar id (defaulting to my primary calendar), and the Slack channel for the weekly post. The ticker list must stay a one field edit on the workflow itself. Do not read it from a spreadsheet, a database, or any other external source.
Step one: call Finnhub's Earnings Calendar operation with from set to today and to set to today plus six days. Both are YYYY-MM-DD strings. The response returns an earningsCalendar array where each entry carries symbol, date, epsEstimate, revenueEstimate, hour, quarter, and year.
Step two: filter those results down to my configured ticker list, matching case insensitively and trimming whitespace so a sloppy list like "aapl , MSFT" still works. If nothing matches, skip the calendar writes entirely and post a short Slack message saying the week is clear, then finish.
Step three: the earnings calendar returns only the ticker symbol, not the company name, so resolve each matched symbol to a company name with Finnhub's Company Profile 2 operation. Use Company Profile 2 specifically, since it is the free tier version and the premium Company Profile operation returns a 403 without a paid plan. Look the name up once per unique symbol and reuse it across that symbol's dates. If the lookup returns nothing usable, fall back to just the ticker rather than failing the run.
Step four: before writing anything, dedupe against what is already on the calendar so re-runs never duplicate. Use Google Calendar's List Events operation scoped to the earnings date, and skip creating an event when one already exists for that same ticker and date. Match on the ticker at the start of the event title, which is the naming convention step five sets.
Step five: for each remaining earnings date, use Google Calendar's Create Event operation to create an all-day event on that date. Title it with the ticker and the company name, formatted as "AAPL: Apple Inc earnings". Put the EPS estimate, the revenue estimate, and the reported hour into the event description. Expand the hour code into readable words rather than passing it through raw: bmo becomes "Before market open", amc becomes "After market close", and dmh becomes "During market hours". That distinction is the useful part, since it tells me whether to watch the morning or the evening. When an estimate is missing or null, write "Not available" instead of leaving the line blank or printing null.
Step six: finish by posting the full week's lineup to Slack with Slack Bot's Send a Message operation. Sort by date ascending and group the lines under each day, with one line per company showing the ticker, the company name, the expanded reported hour, and the EPS estimate. Close the message with a count of how many events were added versus how many were already on the calendar.
One operational note: Finnhub's free tier allows 60 calls per minute and returns a 429 when that is exceeded. A watchlist sized ticker list stays well inside that, but back off and retry on a 429 rather than letting the run fail.
Example output
Additional information
What does this prompt do?
- Checks the week ahead for earnings announcements from the companies on your watchlist
- Adds an all-day event to your calendar for each earnings date, with the expected earnings per share, the expected revenue, and whether the company reports before the market opens or after it closes
- Posts the full week's lineup to Slack on Monday morning, sorted by day
- Skips any date already on your calendar, so running it again never creates duplicates
What do I need to use this?
- A Finnhub account. The free plan covers everything this workflow uses.
- A Google Calendar you want the earnings dates added to
- A Slack workspace and a channel for the weekly lineup
- The list of ticker symbols you want to follow, such as AAPL, MSFT, NVDA
How can I customize it?
- Change the ticker list whenever your holdings change. It is a single field on the workflow, so adding or removing a company is a one line edit.
- Move the run time or day. Monday at 6am is the default, but Sunday evening works well if you like to plan the week the night before.
- Send the events to a separate investing calendar instead of your main one, and pick which Slack channel or direct message gets the lineup.
FAQs
Does this work on Finnhub's free plan?
What happens if it runs twice in the same week?
Will it tell me if a company reports in the morning or after hours?
What if none of my companies report that week?
Can I keep the weekly lineup private?
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.
Stop hunting for earnings dates one ticker at a time.
Set your watchlist once and every earnings date lands on your calendar before the week starts.