Send a monthly status digest
Send a recurring email on the 1st of every month — not on weekdays, not on a cron, just "the first of the month, every month". For admins or facilities leads who want a fixed monthly cadence without juggling cron expressions.
What this workflow does
- A Schedule trigger fires every day at 09:00 local time.
- A Time Of Day condition narrows that down to the 1st of every month — same window, but only if today is the 1st.
- A Send Email action goes out with a templated subject.
The combination lets you run any daily schedule and only act on specific calendar days, without writing a cron expression.

Prerequisites
- Workflows enabled for your organization. See Enable workflows for your org.
- SMTP connected (or any other email-capable integration).
- A list of recipient email addresses ready.
Build it
1. Create the workflow
From the Workflows list click New workflow, name it Monthly status digest, and open the editor.
2. Add the schedule trigger
- Click Add node → Triggers → Schedule.
- Set schedule type to Every N days.
- Fill in:
- Timezone — your office's IANA zone, e.g.
Europe/Oslo. - Days —
1(every day). - Trigger at hour —
9. - Trigger at minute —
0.
- Timezone — your office's IANA zone, e.g.
The trigger now fires daily; the next step gates it to the 1st of each month.
3. Add a Time Of Day condition
- Click Add node → Conditions → Time Of Day.
- In the inspector:
- Timezone — same as the trigger, e.g.
Europe/Oslo. - Begin —
08:55:00. Slightly before 09:00 to absorb scheduler jitter. - End —
09:05:00. - Days of week — leave empty. Empty means "any day".
- Days of month —
[1]. The list is what does the gating. - Months of year — leave empty.
- Timezone — same as the trigger, e.g.
Wire an edge from the Schedule trigger to the Time Of Day's input.
![The Time Of Day inspector with Timezone Europe/Oslo, Begin 08:55:00, End 09:05:00, Days of week empty, Days of month [1], Months of year empty.](https://kb.neowit.io/hs-fs/hubfs/image-png-Jun-15-2026-10-17-08-8772-AM.png?width=594&height=363&name=image-png-Jun-15-2026-10-17-08-8772-AM.png)
4. Add the email action
- Click Add node → Actions → Send Email.
- Settings:
- To — your recipient list, one per row.
- Subject — paste:
Monthly status — {{ dateInZone "January 2006" now "Europe/Oslo" }} - Body — pick Plain text or HTML and write whatever you want sent.
- Wire an edge from the true port of the Time Of Day condition to the email action's input.
Leave the false port unconnected — on every other day of the month, the workflow ends silently after the condition.
5. Test it
- Click Run workflow.
- The Schedule trigger opens with an empty payload — leave it as
{}and click Run. - If today is the 1st, you'll see the email go out. If it isn't, the Time Of Day condition routes to the unconnected false port and the run ends as a no-op.
To exercise the email path on a non-1st, temporarily change Days of month to today's date, run, then change it back to [1] before saving.
6. Enable it
Click Save, turn on Enabled, and save with a short message ("First-of-month digest at 09:00 Oslo"). From the next 1st of the month at 09:00, the email goes out automatically.
Variations
- Bi-monthly (the 1st and the 15th). Set Days of month to
[1, 15]. - Quarterly. Set Days of month to
[1]and Months of year to[January, April, July, October]. - Last weekday of the month. Time Of Day can't express "last" — use a daily Schedule + an If condition templating today's date and the month length, or split into two workflows. This is a real gap; tell us if you hit it.
- Different timezones per recipient. Time Of Day's timezone is single-valued. If your recipients span zones, build one workflow per zone.
When it doesn't fire
If a 1st rolls around and the email doesn't go out:
- Open the Executions tab. The Schedule trigger should show a green run regardless — if it's missing entirely, the workflow isn't Enabled or the trigger's timezone is wrong.
- If the trigger fired but the condition routed to false, expand the condition's step in the trace. Make sure Days of month contains
1(not01or1.0) and the timezone matches the trigger's. - The window
08:55–09:05is intentionally narrow. If your scheduler is delayed by more than five minutes, widen the window. The condition itself is light, so a broader window is harmless.