How to Send a Branded Weekly Client Status Digest from Monday Boards
Build a Spojit workflow that runs every Friday, reads each client's Monday.com board, has an Agent-mode Connector node write a plain-language progress summary, and emails a branded status digest from your own domain through Resend.
What This Integration Does
Professional services teams spend Friday afternoons copying task status out of project boards and pasting it into client update emails. This workflow removes that chore. For every client you track in Monday.com, it pulls the current state of their board, asks an Agent-mode Connector node to turn the raw item list into a clear, jargon-free progress summary, and sends each client contact a polished digest from your own sending domain. Clients get a consistent, on-brand update without anyone hand-writing it.
It runs on a Schedule trigger: a Friday cron fires, the workflow lists each client board, loops over the boards, reads the items on each one, generates a per-client summary, and delivers one email per client through the resend connector. No external request starts it and it returns no synchronous response. Each run is independent and stateless: it always reads the live board at run time, so a re-run simply produces a fresh digest from whatever the boards currently show. If one client's email fails, you can let the run continue so the rest still go out.
Prerequisites
- A Monday.com connection in Spojit (Connections to Add connection to Monday.com) with access to the client boards you want to report on. See the Monday.com connector article for setup.
- A Resend connection with a verified sending domain so the digest comes from your own address. See the Resend connector article and how to build email notifications with Resend.
- A way to know which Monday board belongs to which client and which email address each client digest goes to. The simplest approach is a single Monday board (a "Clients" board) whose items are your clients, each row holding the client's board ID and contact email in columns.
- A workspace AI model available for Agent mode (used to write the summaries). Agent mode consumes AI credits.
Step 1: Add the Schedule trigger for Friday mornings
Open the Workflow Designer and set the Trigger node type to Schedule. Add a cron expression and a timezone so it fires once each Friday. For 8:00 AM Friday Sydney time, use:
Cron: 0 8 * * 5
Timezone: Australia/Sydney
The schedule uses standard 5-field Unix cron, where 5 is Friday. A single trigger can hold more than one schedule if you run different timezones for different regions. The trigger output is { scheduledAt }, which you can reference later as {{ trigger.scheduledAt }} to stamp the digest with the run date.
Step 2: List your client boards with the Monday connector
Add a Connector node on the monday connector in Direct mode. This step builds the list of clients to report on. If you keep a single "Clients" board where each row is a client, choose the list-items tool and set boardId to that board's ID:
Tool: list-items
boardId: 1234567890
limit: 100
Each returned item has an id, a name, and a column_values array of { id, text, value } entries. Store the result in an output variable such as clients. The columns hold the per-client data you mapped: the client's project board ID and the contact email address. Direct mode is right here because it is one predictable tool call with no judgement needed, and it costs no AI credits.
Step 3: Loop over each client
Add a Loop node in ForEach mode and point it at the list from the previous step, for example {{ clients.items }}. Everything inside the loop body runs once per client, with the current client available as the loop's current item (for example {{ client }} if you name the iteration variable client).
Inside the loop you will read that client's board, summarize it, and send one email. Looping keeps each client's data isolated so one client's summary never leaks into another's digest. Keep the client list to a sensible size per run; if you report on many dozens of boards, see the Tips section on batching.
Step 4: Read the client's project board
Inside the loop body, add a Connector node on the monday connector in Direct mode using the get-board tool to pull the board's structure (columns and groups), then a second Direct-mode call to list-items to pull the live rows for that client's project board:
get-board
boardId: {{ client.boardId }}
list-items
boardId: {{ client.boardId }}
limit: 50
Use the column value you mapped in Step 2 to fill boardId (shown here as {{ client.boardId }}; reference whichever column actually holds the board ID). The list-items result gives you each task's name, its group (your board's status lanes, for example "In progress" or "Done"), and its column_values. Save these into variables such as board and boardItems so the next step can summarize them.
Step 5: Write the per-client summary with Agent mode
Add a Connector node in Agent mode (the agent decides how to phrase the update). Feed it the board name and the item list, and ask for a short, plain-language progress summary the client can read without project-management jargon. Turn on a Response Schema so the output is reliable structured JSON you can drop into the email. A prompt and schema along these lines work well:
Prompt:
Summarize this client's project status for a weekly update email.
Board: {{ board.name }}
Items: {{ boardItems.items }}
Write 3-5 short bullet points in plain English: what shipped this
week, what is in progress, and anything the client needs to action.
Avoid internal jargon. Be warm and concise.
Response Schema (forces JSON):
{
"headline": "string",
"bullets": ["string"],
"needsAttention": "string"
}
Save the result to a variable such as summary. Agent mode is the right choice here because turning a raw task list into a readable narrative is a judgement task, not a fixed transform. If you instead want to assemble the email body from fixed fields without AI, you would use a Transform node; the next step covers that option too.
Step 6: Build the branded email body with a Transform node
Add a Transform node to assemble the final HTML digest from the summary and your branding (logo, colors, footer). Reshape the AI output and client details into a single ready-to-send htmlBody string and a subject string, for example:
subject: Weekly status for {{ client.name }} - {{ trigger.scheduledAt }}
htmlBody: {{ summary.headline }}
{{ summary.bullets }}
Needs your input: {{ summary.needsAttention }}

Keeping branding in the Transform node means every client gets an identical, on-brand template and only the content changes. If you prefer the AI to also write the closing line or greeting, fold that into the Agent prompt in Step 5 instead and keep this node for the wrapper markup only.
Step 7: Send the digest from your domain with Resend
Add a Connector node on the resend connector in Direct mode using the send-email tool. Because Resend sends from your verified domain, clients see the email as coming from your firm, not from Spojit. Map the fields:
Tool: send-email
from: Your Firm <updates@yourdomain.com>
to: {{ client.contactEmail }}
subject: {{ subject }}
html: {{ htmlBody }}
reply_to: pm@yourdomain.com
The from address must be on your verified Resend domain, and reply_to lets the client reply straight to the responsible project manager. Set the node to continue on failure (rather than fail the whole run) so that if one client's address bounces, the remaining clients in the loop still get their digest. This is the last step inside the loop body, so it repeats once per client.
If you would rather send from Spojit's built-in mail service instead of your own domain, you could use a Send Email node here; the trade-off is that it sends from Spojit's address and counts toward your monthly email allowance, whereas Resend sends from your branded domain.
Tips
- Use the
get-boardresult to read your status group names so the summary distinguishes done work from in-progress work; this gives the agent cleaner context than the item list alone. - Stamp the subject with
{{ trigger.scheduledAt }}so clients can tell digests apart week to week. - If you report on many boards, split clients into batches across two schedules (for example one cron at 8:00 and another at 8:15) to keep each run light and stay within Monday.com API rate limits.
- Ask Miraxa in the designer to "add a Loop node over
{{ clients.items }}and connect a Resend send-email node inside it" to scaffold the structure quickly, then fine-tune fields in the properties panel.
Common Pitfalls
- Sending from an unverified domain: Resend rejects a
fromaddress that is not on a verified domain. Verify your domain before the first real run. - Wrong board ID column: if
boardIdpulls the wrong Monday column,list-itemsreturns the wrong client's tasks. Confirm which column holds the project board ID before going live. - Timezone drift: a bare cron with no IANA timezone runs in UTC, so "Friday 8 AM" can land on Thursday evening locally. Always set the timezone field (for example
Australia/Sydney). - Large boards:
list-itemspaginates with acursor. If a client has more tasks than yourlimit, increase the limit or follow the cursor so the summary is not based on a partial list. - Letting one bad address halt everything: set the Resend node to continue on failure so a single bounce does not stop the rest of the loop.
Testing
Before turning the schedule on, validate against a single client. Temporarily point the Step 2 list at just one test client (or hard-code one board ID), set the Resend to field to your own inbox, and run the workflow with the Run button. Confirm the Monday data is correct, the AI summary reads cleanly, the branded HTML renders in your mail client, and the email arrives from your domain. Once one client looks right end to end, restore the full client list, send a couple of real digests to internal addresses, then enable the Friday schedule.