DEV Community

T.M. Gunderson
T.M. Gunderson

Posted on

I Built an AI Agent That Writes Weekly Client Updates (And Saved 3 Hours Every Week)

I Built an AI Agent That Writes Weekly Client Updates (And Saved 3 Hours Every Week)

Every Friday at 2 PM, I used to sit down and write status updates to 15 clients. Each one took 10–15 minutes. That's 2.5–3.75 hours gone every single week — time I could have spent on billable work.

The worst part? Most of those emails said the same thing in slightly different words. "Project is on track. Milestone X completed. Next step: Y." Copy-paste with just enough personalization to not feel robotic.

So I built an n8n workflow that does it automatically. It pulls project status from my tracker, generates a personalized update for each client, queues it for review, and sends it when I approve. Total time per week: 15 minutes of quick approvals.

Here's the full build.

Why Client Updates Matter More Than You Think

Most small businesses treat client communication as an afterthought. You finish the work, you send the deliverable, and you move on. But client updates are actually a retention tool in disguise.

Research from Bain & Company shows that increasing retention by 5% increases profits by 25–95%. And the simplest way to retain clients? Make them feel informed.

A Totango study found that 74% of consumers feel frustrated when content isn't personalized, and the same principle applies to B2B communication. Generic "your project is progressing" emails signal that you don't care enough to give specifics.

The problem isn't willingness — it's time. When you're running a business with 10–50 active clients, writing individualized updates is the first thing that falls off the priority list.

The 3 Signals That Make Updates Valuable

Not all updates are equal. A status update is worth sending when one of these things is true:

Signal What It Looks Like Why It Matters
Milestone completed A task moved to "Done" or a phase finished Clients love progress proof — it reinforces their buying decision
Timeline risk A task is 2+ days overdue or blocked Early warning prevents "why didn't you tell me?" conversations
Periodic touchpoint 5+ days since last client communication Silence breeds doubt; proactive updates build trust

Send updates on these triggers instead of a rigid weekly schedule, and your clients will feel like you're always on top of things — because you actually are.

The n8n Workflow: Status Update Agent

This workflow has 5 stages: Collect → Analyze → Draft → Queue → Send.

Stage 1: Collect Project Data

Use the Schedule Trigger node set to run every Friday at 9 AM (or daily if you prefer). This kicks off the data collection phase.

Schedule Trigger (Every Friday 9 AM)
    → Google Sheets: Get all active client rows
    → Split into individual client items
Enter fullscreen mode Exit fullscreen mode

Your Google Sheet (or Airtable, or Notion database) should have these columns:

Column Example Purpose
Client Name Rivera Landscaping Personalization
Project Name Website Redesign Context
Status In Progress Filter: only active projects
Last Update Sent 2026-06-19 Skip if sent within 5 days
Completed Tasks Homepage, About page Progress proof
Upcoming Tasks Contact form, SEO setup Forward-looking info
Blockers Awaiting logo files Risk signals
Next Deadline 2026-07-01 Timeline reference
Email client@rivera.com Where to send

Stage 2: Filter and Prioritize

Not every client needs an update every week. Use an IF node to skip clients who got an update recently.

IF node: "Days Since Last Update" > 4
    → True: continue to draft
    → False: skip this client this week
Enter fullscreen mode Exit fullscreen mode

Add a second filter for priority:

IF node: "Has Blockers" OR "Has Deadline Within 3 Days"
    → True: flag as URGENT in the draft
    → False: standard update
Enter fullscreen mode Exit fullscreen mode

Stage 3: Draft with AI

This is the core. Use an OpenAI node with a system prompt that turns raw project data into a personalized, professional update email.

System prompt:

You are a professional project manager writing a weekly status update email to a client. Be specific, warm, and concise. Never use generic filler phrases like "everything is going great" — always reference concrete milestones, numbers, or deliverables.

Structure:
1. Greeting using the client's name
2. What was completed this week (specific deliverables)
3. What's coming next week (with dates if available)
4. Any blockers or items you need from the client (be direct but polite)
5. A one-line closing that's warm but professional

Tone: Confident, specific, slightly conversational. Like a trusted advisor, not a robot.
Length: 150-250 words max.
Enter fullscreen mode Exit fullscreen mode

User prompt (constructed from the row data):

Client: {{ $json.Client Name }}
Project: {{ $json.Project Name }}
Completed this week: {{ $json.Completed Tasks }}
Upcoming next week: {{ $json.Upcoming Tasks }}
Blockers: {{ $json.Blockers }}
Next deadline: {{ $json.Next Deadline }}
Urgent flag: {{ $json.Urgent }}

Write the status update email.
Enter fullscreen mode Exit fullscreen mode

Stage 4: Queue for Review

Don't auto-send AI-generated emails to clients without review. That's a trust-killer if something reads wrong.

Instead, queue drafts in a Google Sheet called "Status Update Queue":

Column Value
Client Rivera Landscaping
Subject Weekly Update: Website Redesign — June 27
Body [AI-generated email text]
Priority URGENT / Standard
Status PENDING
Created 2026-06-27 09:15

You can also route urgent ones to Slack:

Slack node: Send to #client-updates channel
    Message: "🚨 URGENT update for {{ $json.Client Name }}: {{ $json.Body }}"
Enter fullscreen mode Exit fullscreen mode

Stage 5: Send (After Review)

Once you've reviewed the drafts, change the Status column from "PENDING" to "APPROVED". A second workflow (or a webhook trigger) picks up approved rows and sends them:

Webhook Trigger (or manual trigger after review)
    → Google Sheets: Get rows where Status = "APPROVED"
    → Gmail: Send email
        To: {{ $json.Email }}
        Subject: {{ $json.Subject }}
        Body: {{ $json.Body }}
    → Google Sheets: Update Status to "SENT"
    → Google Sheets: Update "Last Update Sent" to today's date
Enter fullscreen mode Exit fullscreen mode

The Full Workflow Diagram

Schedule Trigger (Fri 9 AM)
    ↓
Google Sheets: Get Active Clients
    ↓
Split In Batches (batch size: 1)
    ↓
IF: Days Since Last Update > 4
    ↓ True                    ↓ False
    ↓                        (skip)
IF: Blockers OR Deadline < 3 days
    ↓ True          ↓ False
    ↓ Urgent        ↓ Standard
    ↓                ↓
    OpenAI: Draft Email
    ↓
    Google Sheets: Add to Update Queue
    ↓
    (Optional) Slack: Alert for Urgent
    ↓
    WAIT for manual review
    ↓
    Webhook: Approved Updates
    ↓
    Gmail: Send Email
    ↓
    Google Sheets: Mark SENT + Update Date
Enter fullscreen mode Exit fullscreen mode

Results After 6 Weeks

I ran this for 6 weeks across 18 active clients. Here's what changed:

Metric Before After
Time spent on client updates 2.5–3.75 hrs/week 15 min/week (review only)
Clients receiving weekly updates 8 out of 18 (44%) 17 out of 18 (94%)
"Where are we at?" emails from clients 5–8 per week 0–1 per week
Client satisfaction (NPS) 38 61

The NPS jump alone was worth it. Clients who feel informed don't second-guess the relationship.

Variations You Can Build

Once the core workflow is running, extend it with these branches:

1. Slack-Only Updates for Internal Clients
If you manage internal stakeholders, skip email and post to a Slack channel instead. Use a Slack node instead of Gmail.

2. Multi-Project Aggregation
Clients with 3+ active projects get a single consolidated update instead of separate emails. Filter by client name and merge project rows before the AI drafting step.

3. Escalation for Overdue Projects
Add a branch: IF "days since last client response" > 7, flag for personal outreach instead of an automated update. Sometimes silence means you need a call, not an email.

4. Monthly Summary Reports
Duplicate the workflow with a monthly trigger. Change the AI prompt to summarize 4 weeks of progress instead of one. Add a chart node (or link to a dashboard) for visual progress tracking.

Why This Beats Manual Updates

  • Consistency: Every client gets an update, not just the ones you remember.
  • Specificity: The AI pulls actual deliverables and dates, so updates are concrete, not generic.
  • Speed: 15 minutes of review beats 3 hours of writing.
  • Retention: Clients who feel informed stay longer. Period.

The Setup Checklist

If you want to build this yourself:

  1. ✅ Create a project tracker in Google Sheets (or Airtable/Notion) with the columns listed above
  2. ✅ Set up an OpenAI API key in n8n
  3. ✅ Build the Schedule Trigger → Collect → Filter → Draft → Queue flow
  4. ✅ Connect your email (Gmail, Outlook, or SMTP)
  5. ✅ Run it in test mode for 1 week — review every draft before approving
  6. ✅ Once you trust the output quality, add auto-approve rules for standard (non-urgent) updates
  7. ✅ Add the Slack alert for urgent items

Total setup time: 45–60 minutes for someone comfortable with n8n.


If you want the importable n8n workflow JSON + the Google Sheets template + the exact AI prompts I use, grab the AI Agent Starter Kit at smbscaleup.gumroad.com. It includes this workflow and 9 others, all ready to import and customize.

What client communication are you automating this week? Drop a comment — I read every one.

Top comments (0)