# n8n: Weekly Client Status Emails from a Google Sheet, Written by AI

> Build an n8n workflow that reads your client tracker in Google Sheets every Monday, has OpenAI write a friendly update per client and saves Gmail drafts…

Source: https://learn.ynteractive.com/content/weekly-client-status-email-google-sheets-ai-n8n · Updated 2026-10-13 · Free from Stepthrough (https://learn.ynteractive.com)

## Practice it step by step

[Start the free practice](https://learn.ynteractive.com/modules/n8n-client-status-email)

You do every step yourself in a practice copy of n8n. It checks your work as you go, and “Do it for me” finishes any step you get stuck on. Free, about 14 minutes, and nothing touches your real accounts. [Open full screen](https://learn.ynteractive.com/modules/n8n-client-status-email)

Free · Live now · [n8n Automation Toolkit](https://learn.ynteractive.com/content/course/n8n-automation-toolkit) · [n8n](https://learn.ynteractive.com/content/tool/n8n) · Google Sheets · OpenAI · Gmail · ~14 min · 49 steps · Intermediate

Updated October 13, 2026. Built against the tool’s current screens and checked step by step. [How we check this lesson](https://learn.ynteractive.com/content/about#how-we-check)

Most account managers and project coordinators spend Monday morning turning messy tracker notes into polite status emails. In this free lesson you use a practice copy of the [n8n](https://learn.ynteractive.com/content/tool/n8n) editor and build the workflow that does it: a [Schedule Trigger](https://learn.ynteractive.com/content/glossary/schedule-trigger) that fires every Monday at 8am, a Google Sheets step that reads the client tracker, an [OpenAI](https://learn.ynteractive.com/content/glossary/openai) step that writes one short update per client, and a [Gmail](https://learn.ynteractive.com/content/tool/gmail) step that saves each update as a draft addressed to that client. Nothing sends by itself, so you stay in control of every email.

## At a glance

| Question | Answer |
| --- | --- |
| What you build | Build an n8n workflow that wakes up every Monday, reads your client tracker in Google Sheets, has AI write a friendly update for each client and saves it as a Gmail draft. |
| Tools | n8n |
| Time | About 14 minutes, 49 steps in 5 parts |
| Level | Intermediate |
| Cost | Free |
| Ways to learn it | [Practice it step by step](https://learn.ynteractive.com/modules/n8n-client-status-email) |

### The 5 parts, in short

1. Start on a schedule: Add the first step, Pick On a schedule, Open Trigger Interval, Choose Weeks, and 5 more steps.
2. Read the client sheet: Add the next step, Search for Google Sheets, Pick Google Sheets, Pick Get row(s) in sheet, and 8 more steps.
3. Write each update with AI: Add the AI step, Search for OpenAI, Pick OpenAI, Pick Message a model, and 8 more steps.
4. Save the drafts: Add the Gmail step, Search for Gmail, Pick Gmail, Pick Create a draft, and 10 more steps.
5. Check the result: Open your Gmail drafts, Back to n8n.

**Start here first:** [Find and Use n8n Templates](https://learn.ynteractive.com/content/find-and-use-n8n-templates) (module 1 of n8n Automation Toolkit)

**In the course:** [Part 9 · n8n Automation Toolkit](https://learn.ynteractive.com/content/course/part-9-n8n-automation-toolkit) (Module 56 of the [full course](https://learn.ynteractive.com/content/course))

**Part of:** [n8n Jump Start](https://learn.ynteractive.com/content/paths/n8n-jump-start) (step 6 of 7). Next up: [n8n AI Agent Tutorial: Save Social Media Ideas to Google Sheets](https://learn.ynteractive.com/content/n8n-ai-agent-tutorial-google-sheets)

## The four steps

The workflow is four nodes in a line. A Schedule Trigger starts it. [Get row(s) in sheet](https://learn.ynteractive.com/content/glossary/get-rows) reads the client tracker, so each row becomes one item. Message a model sends the rough notes from each row to OpenAI and gets back a short email. Create a draft saves that email in Gmail, addressed to the client in the same row. Steps after the sheet run once per item, so five clients means five AI calls and five drafts.

## Start on a schedule

Add the first step and pick On a schedule. The Schedule Trigger starts on Days, so change Trigger Interval to Weeks, tick Monday instead of the default Sunday and set Trigger at Hour to 8am. A schedule only fires after you publish the workflow, so while you build, nothing runs by itself.

## Read the client sheet

Click the plus, search Google Sheets and pick Get row(s) in sheet. n8n may pre-fill a credential, so open the list and choose the one for the Google account that owns the sheet. Pick the Document and the Sheet tab, then click Execute step. The output shows one item per client, with your row 1 column names as the field names, for example Client, Contact, Email, Project, Status, Notes and Next Step.

## Write each update with AI

Add OpenAI and pick Message a model. Choose your OpenAI credential, then a model such as GPT-4.1-MINI. In the Prompt box, write the instruction and pull in the row values with double curly braces, for example {{ $json.Client }} and {{ $json.Notes }}. Typing braces is not enough: hover over the box and click Expression, or n8n sends the braces to OpenAI as plain text. Execute step returns five items, and the email text sits under output[0].content[0].text.

Tell the model to use only the facts in your notes. In our test run it turned notes such as homepage design approved tues; 3 of 8 pages built into a friendly paragraph that kept every fact, signed off as the studio.

## Save the drafts

Add Gmail and pick Create a draft. Set the Subject and Message to expressions, for example Your weekly update: {{ $('Get row(s) in sheet').item.json.Project }} and {{ $json.output[0].content[0].text }}. Under Options, Add option, To Email, set the address to {{ $('Get row(s) in sheet').item.json.Email }} so each draft goes to its own client. Execute step creates five drafts labelled DRAFT. Nothing is sent until you open a draft and send it yourself, or switch the step to Send a message later.

## Links

- [n8n docs: Schedule Trigger](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.scheduletrigger/): intervals, weekdays and cron schedules.
- [n8n docs: Google Sheets node](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlesheets/): Get Row(s) and the other operations.
- [n8n docs: OpenAI node](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-langchain.openai/): Message a model and its options.
- [n8n docs: Gmail node](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.gmail/): Create a draft and Send a message.
- [OpenAI API keys](https://platform.openai.com/api-keys): where you create the key the OpenAI step needs.

## Try it yourself, free

Reading the steps is a start. Doing them is how it sticks. The interactive module walks you through every click in a practice copy of n8n, checks each step, and never touches your real accounts.

[Start “n8n: Weekly Client Status Emails from a Google Sheet, Written by AI”](https://learn.ynteractive.com/modules/n8n-client-status-email)

## Step by step: n8n: Weekly Client Status Emails from a Google Sheet, Written by AI

All 49 steps of the interactive module, in order. In the module you watch each one, then do it yourself in a practice copy that checks your work.

### 1. Start on a schedule

1. **Add the first step.** You opened a new, empty workflow in n8n and named it **Weekly client status email**. Every workflow starts with a trigger. Click **Add first step...**
   You opened a new workflow in N eight N, and named it. It is empty. Every workflow starts with a trigger.
2. **Pick On a schedule.** The list shows ways to start a workflow. You want it to run by itself every week. Click **On a schedule**.
   The list shows ways to start a workflow. You want this one to run by itself, every week.
3. **Open Trigger Interval.** The Schedule Trigger opens. It starts on **Days**, which would send an update every day. Click the **Trigger Interval** box.
   The schedule trigger opens. It starts on days, so it would run every single day.
4. **Choose Weeks.** Click **Weeks**. New boxes appear for the weekday and the time.
   New boxes appear for the day and the time.
5. **Open Trigger on Weekdays.** n8n starts with **Sunday** ticked. Clients do not read email on Sunday night, so change it. Click the **Trigger on Weekdays** box.
   N eight N starts with Sunday ticked. Nobody wants a status email on Sunday night.
6. **Choose Monday.** Click **Monday**. In n8n you then click **Sunday** once to untick it, so only Monday is left. Here we show just Monday.
   In the real editor, click Sunday once to untick it, so only Monday is left.
7. **Open Trigger at Hour.** The default time is **Midnight**. Click the **Trigger at Hour** box.
   The default time is midnight.
8. **Choose 8am.** Click **8am**. The list scrolls: 8am is a little way down. Your workflow will now fire every Monday at 8am, once it is published.
   The list scrolls, so look a little way down. Now it will fire every Monday at eight.
9. **Back to the canvas.** Close the node with the **X**. Nothing runs yet. A schedule only starts after you **Publish**, and this practice never publishes.
   Close the node. Nothing runs yet. A schedule only starts after you publish. We will not publish today.

### 2. Read the client sheet

10. **Add the next step.** The trigger sits on the canvas with a small **+** on its right. Click the **+**.
    The trigger sits on the canvas, with a small plus on its right.
11. **Search for Google Sheets.** Click the search box and type: **Google Sheets**
12. **Pick Google Sheets.** Click **Google Sheets**. Its description mentions a trigger, but the next screen lists the actions.
    The next screen lists everything it can do.
13. **Pick Get row(s) in sheet.** Click **Get row(s) in sheet**. This reads the rows of your client tracker. The node opens straight away.
    That reads the rows of your client sheet.
14. **Open the Credential list.** n8n may already have picked a credential for you. Do not trust it: click the **Credential** box and check.
    N eight N may already have picked a login for you. Do not trust it.
15. **Pick your Google account.** Pick the Google Sheets credential for **your own Google account**. Here it is **My Google account**. A credential for another account will not list your sheet.
    Pick the Google login for your own account. A login for another account will not show your sheet.
16. **Open the Document list.** Click the **Document** box. n8n lists the spreadsheets that account can open.
    It lists your spreadsheets.
17. **Pick the spreadsheet.** Pick **Client Status**. Row 1 holds the column names: Client, Contact, Email, Project, Status, Notes and Next Step. The data starts in row 2.
    Pick your client status sheet. Row one holds the column names. The data starts in row two.
18. **Open the Sheet list.** Click the **Sheet** box. This is the tab inside the spreadsheet.
    That is the tab inside the spreadsheet.
19. **Pick the tab.** Pick **Sheet1**.
    Pick the tab.
20. **Check it can read the sheet.** Click **Execute step**. The **OUTPUT** panel shows **5 items**: one per client, with your column names as the field names. If your rows show here, the next steps can use them.
    The output panel shows five items. One for each client, with your column names as the field names.
21. **Back to the canvas.** Close the node with the **X**.
    Close the node.

### 3. Write each update with AI

22. **Add the AI step.** Click the **+** after **Get row(s) in sheet**.
23. **Search for OpenAI.** Type: **OpenAI**
24. **Pick OpenAI.** Click **OpenAI**, the first result, not the Chat Model one.
    The first result. Not the chat model.
25. **Pick Message a model.** Click **Message a model**. It is the first text action. It sends a prompt to ChatGPT and returns the answer.
    It sends a prompt to chat G P T, and gives back the answer.
26. **Open the Credential list.** Again n8n pre-fills one of the accounts in your list. In our test it picked one with a dead key, and the model list failed with **401 Authorization failed**. Click the **Credential** box.
    Again, N eight N fills in one of your accounts. In our test it was a dead key, and the model list failed.
27. **Pick your OpenAI account.** Pick the OpenAI credential you saved earlier. Here it is **My OpenAI account**. No credential yet? Make a key on the OpenAI API Keys page, add funds under Billing, and paste the key into a new credential.
    Pick the open A I login you saved before. If you have none, make a key on the open A I site, add some money under billing, and paste the key into a new credential.
28. **Open the Model list.** Click the **Model** box. The list loads once the credential works.
    The list loads once the login works.
29. **Pick GPT-4.1-MINI.** Click **GPT-4.1-MINI**. It is fast and cheap, and good enough for a few friendly sentences. Five emails cost a fraction of a cent.
    It is fast and cheap, and plenty for a few friendly lines. Five emails cost a fraction of a cent.
30. **Write the prompt.** Click the **Prompt** box and type the prompt. The parts in double curly braces, like **{{ $json.Client }}**, pull that client's value from the sheet row, so each email is about a different client. Use **Paste the prompt** if you do not want to type it all.
    The parts in double curly braces pull a value from the sheet row. So each email is about a different client.
    ```text
    Write a short, friendly weekly project update email body (under 90 words) for {{ $json.Contact }} at {{ $json.Client }}. Project: {{ $json.Project }}. Status: {{ $json.Status }}. Our rough notes: {{ $json.Notes }}. Next step: {{ $json['Next Step'] }}. Start with Hi and the contact's first name. Sign off as the Larkspur team. Do not invent facts.
    ```
31. **Switch the box to Expression.** The braces are still just text. Hover over the **Prompt** box and click **Expression**. The braces turn green and a **Result** line shows the first client's real values. In our test, skipping this sent the braces to OpenAI as plain text.
    The braces are still just text. Hover over the prompt box and click expression. The braces turn green, and a result line shows real values. If you skip this, the A I gets the braces as plain text.
32. **Run the AI step.** Click **Execute step**. After a few seconds the **OUTPUT** shows **5 items**, one email per client. The text sits under **output[0].content[0].text**. Read one: it should sound like a person, and only use facts from your notes.
    After a few seconds, there are five items. One email for each client. Read one. It should sound like a person, and only use facts from your notes.
33. **Back to the canvas.** Close the node with the **X**.
    Close the node.

### 4. Save the drafts

34. **Add the Gmail step.** Click the **+** after **Message a model**.
35. **Search for Gmail.** Type: **Gmail**
36. **Pick Gmail.** Click **Gmail**.
37. **Pick Create a draft.** Click **Create a draft**. A draft waits in your Gmail Drafts folder, and nothing is sent. Pick **Send a message** only after you trust the wording.
    A draft waits in your drafts folder. Nothing is sent.
38. **Type the subject.** The credential shows your Gmail account. Click the **Subject** box and type: **Your weekly update: {{ $('Get row(s) in sheet').item.json.Project }}** The braces pull the project name from the sheet.
    Your Gmail login is already filled in. The braces pull the project name from the sheet.
39. **Switch Subject to Expression.** Hover over the **Subject** box and click **Expression**. The result line shows **Your weekly update: Website refresh**.
    Hover over the subject box and click expression. The result line shows the real project name.
40. **Type the message.** Click the **Message** box and type: **{{ $json.output[0].content[0].text }}** That is the AI's email text. In n8n you can also drag **text** from the left panel into the box.
    In the real editor, you can also drag it in from the left.
41. **Switch Message to Expression.** Hover over the **Message** box and click **Expression**. The result shows the first email, "Hi Priya, ...".
    Hover over the message box and click expression. The result shows the first email.
42. **Add the To address.** A draft needs somebody to send it to. Scroll down to **Options** and click **Add option**.
    A draft needs someone to go to.
43. **Pick To Email.** Click **To Email**.
44. **Type the recipient.** Click the **To Email** box and type: **{{ $('Get row(s) in sheet').item.json.Email }}** That is each client's own address from the sheet.
    That is each client's own address from the sheet.
45. **Switch To Email to Expression.** Hover over the **To Email** box and click **Expression**. The result shows **priya@harbordental.example.com**.
    Hover over the box and click expression. The result shows the first client's address.
46. **Create the drafts.** Click **Execute step**. n8n makes **5 items**, each with the label **DRAFT**. Nothing was sent.
    N eight N makes five drafts. Nothing is sent.
47. **Back to the canvas.** Close the node with the **X**.
    Close the node.

### 5. Check the result

48. **Open your Gmail drafts.** Click the **Drafts - Gmail** tab. Five drafts, one per client, each addressed to that client with a subject that names the project. Open one and read it before you send anything.
    There are five drafts, one for each client, each with the right address. Read one before you send anything.
49. **Back to n8n.** Click the **n8n** tab. The workflow is finished but **not published**, so it will not run on Monday by itself. To turn it on, you would click **Publish**. Do that only after you have checked a week of drafts.
    Go back to the N eight N tab. The workflow is finished, but not published. So it will not run on Monday by itself. Publish only after you have checked a week of drafts.

## Frequently asked questions

**Will this email my clients by itself?**

No. The last step is Create a draft, so every email waits in your Gmail Drafts folder. You read it and click Send yourself. Even a published workflow only creates drafts.

**Why did my email contain {{ $json.Client }} instead of the client name?**

The box was still in Fixed mode, so n8n treated the braces as plain text. Hover over the box and click Expression. The braces turn green and a Result line shows the real values.

**Why does the model list fail with 401 Authorization failed?**

n8n pre-filled a different OpenAI credential, and its key is wrong or expired. Open the Credential list and pick the one you saved with a working key.

**Does it cost much to run?**

Very little. The AI step runs once per client row with a small model such as GPT-4.1-MINI, so five clients cost a fraction of a cent per week.

**Can the AI make things up?**

It can. Tell it to use only the facts in your notes, and read each draft before you send it. The prompt in this lesson ends with: Do not invent facts.

[Start this module free](https://learn.ynteractive.com/modules/n8n-client-status-email)

- Previous in n8n Automation Toolkit: [n8n: Talk to Your Google Sheets with ChatGPT, from Zero (Free Credits or API Key, Google, Sheet, Chat)](https://learn.ynteractive.com/content/n8n-talk-to-google-sheets-chatgpt-ai-agent)
- Next in n8n Automation Toolkit: [n8n: Turn Meeting Notes into Action Items in a Google Sheet](https://learn.ynteractive.com/content/meeting-notes-to-action-items-google-sheets-ai-n8n)

## More in n8n Automation Toolkit

- [Find and Use n8n Templates](https://learn.ynteractive.com/content/find-and-use-n8n-templates): Skip the blank canvas. Find a ready-made workflow in the n8n template gallery, import it into your workspace, connect Google Sheets and Gmail, test it with a real form…
- [Litescrape in n8n: Swap SerpApi for a Cheaper Search API](https://learn.ynteractive.com/content/litescrape-n8n-serpapi-alternative): Switch a weekly n8n competitor-price workflow from SerpApi to Litescrape's Google Shopping API: change the HTTP Request URL, move the key into a Bearer Auth credential…
- [n8n: Execute Step, Execute Workflow and Publish](https://learn.ynteractive.com/content/n8n-execute-step-execute-workflow-publish): Learn the buttons in today's n8n editor: run one node with Execute step, pin test data, run everything with Execute workflow, then Publish and copy the Production URL.
- [IF and Switch in n8n: Route Work by Rules](https://learn.ynteractive.com/content/n8n-if-and-switch-node-tutorial): Send each request where it belongs. Use an If node to split big jobs from small ones, then a Switch with named outputs and a fallback to route by service.

[All 7 modules in n8n Automation Toolkit](https://learn.ynteractive.com/content/course/n8n-automation-toolkit)

## More n8n tutorials

- [n8n AI Agent Tutorial: Save Social Media Ideas to Google Sheets](https://learn.ynteractive.com/content/n8n-ai-agent-tutorial-google-sheets): Build an AI agent for BrightPath Marketing that generates social media post ideas and saves them to Google Sheets — chat trigger, AI Agent, system prompt, model…
- [Lovable + n8n: Build a Web App with an AI Backend](https://learn.ynteractive.com/content/lovable-n8n-web-app-ai-backend): Build a contact form in Lovable and connect it to an n8n workflow — webhook trigger, AI Agent, Google Sheets, Gmail, and a Respond node that ties it all together.
- [AI Receipt Extractor: Receipts to Google Sheets with n8n](https://learn.ynteractive.com/content/ai-receipt-extractor-n8n-google-sheets): Drop a photo of a receipt into an n8n chat. An AI agent reads it, pulls out the date, vendor and amount, picks a category, and adds a row to Google Sheets.
- [n8n AI Email Responder: Draft Gmail Replies Automatically](https://learn.ynteractive.com/content/ai-email-responder-gmail-drafts-n8n): Build an n8n agent that watches your Gmail, reads each new customer email, and writes a reply as a draft in the same thread, ready for you to check and send.
- [Daily Job Alerts: Email Each Tech Their Jobs from Google Sheets with n8n](https://learn.ynteractive.com/content/n8n-daily-job-alerts-google-sheets-gmail): Every morning at 7, n8n reads a plumbing company's jobs sheet, skips anything not assigned yet, and emails each job to the tech it's assigned to — customer, address…
- [Gmail AI Triage: Auto-Label Every Email and Draft Replies](https://learn.ynteractive.com/content/gmail-ai-triage-labels-drafts-n8n): Build an n8n workflow that reads each new email, sorts it as a lead, a client or an invoice with a Text Classifier, adds the matching Gmail label, and drafts a reply to…

## From the blog

- [What Can You Automate With n8n? 8 Office Examples](https://learn.ynteractive.com/content/blog/what-can-you-automate-with-n8n): What can you automate with n8n? Eight office examples, from Gmail reply drafts to invoice approvals, each with a free practice lesson.

[All blog posts](https://learn.ynteractive.com/content/blog)

## Terms in this lesson

Plain-English definitions, each with an example from a free lesson.

[Schedule Trigger](https://learn.ynteractive.com/content/glossary/schedule-trigger) · [OpenAI](https://learn.ynteractive.com/content/glossary/openai) · [Workflow](https://learn.ynteractive.com/content/glossary/workflow) · [Gmail draft](https://learn.ynteractive.com/content/glossary/gmail-draft) · [Get rows (reading a sheet)](https://learn.ynteractive.com/content/glossary/get-rows) · [Publishing a workflow](https://learn.ynteractive.com/content/glossary/publish-workflow)

[The full AI glossary](https://learn.ynteractive.com/content/glossary)

## Browse related tutorials

[n8n Automation Toolkit (7)](https://learn.ynteractive.com/content/course/n8n-automation-toolkit) · [n8n tutorials (32)](https://learn.ynteractive.com/content/tool/n8n)
