Weekly earnings dates for your watchlist, on your calendar

By General Input

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.

Integrations

  • Finnhub
  • Google Calendar
  • Slack Bot

Type

Deterministic Code

Categories

  • Finance
  • Personal Productivity

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.

Related prompts

Explore more prompts
A brand asset library your marketing team actually searchesTurn Mailjet email clicks into ranked HubSpot follow-upsClean out the Looker dashboards and Looks nobody opensLiveKit live operations console for room moderationWake up dormant Keap leads with a researched reasonLiveChat coverage board for planning next week's shiftsPhone routing control panel for LiveKit voice agentsLinkedIn Ads budget pacing dashboard for every client accountFront desk appointment confirmation board for the next 3 daysGive your team Looker numbers without buying more seats