Updated . Built against the tool’s current screens and checked step by step. How we check this lesson
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 editor and build the workflow that does it: a Schedule Trigger that fires every Monday at 8am, a Google Sheets step that reads the client tracker, an OpenAI step that writes one short update per client, and a 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 | Beginner, no coding needed |
| Cost | Free |
| Ways to learn it | Practice it step by step |
The 5 parts, in short
- Start on a schedule: Add the first step, Pick On a schedule, Open Trigger Interval, Choose Weeks, and 5 more steps.
- 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.
- Write each update with AI: Add the AI step, Search for OpenAI, Pick OpenAI, Pick Message a model, and 8 more steps.
- Save the drafts: Add the Gmail step, Search for Gmail, Pick Gmail, Pick Create a draft, and 10 more steps.
- Check the result: Open your Gmail drafts, Back to n8n.
Start here first: Find and Use n8n Templates (module 1 of n8n Automation Toolkit)
In the course: Part 9 · n8n Automation Toolkit (Module 56 of the full course)
Part of: n8n Jump Start (step 6 of 7). Next up: n8n AI Agent Tutorial: Save Social Media Ideas to Google Sheets
The four steps
The workflow is four nodes in a line. A Schedule Trigger starts it. Get row(s) in sheet 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: intervals, weekdays and cron schedules.
- n8n docs: Google Sheets node: Get Row(s) and the other operations.
- n8n docs: OpenAI node: Message a model and its options.
- n8n docs: Gmail node: Create a draft and Send a message.
- OpenAI 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”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
- 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.
- 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.
- 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.
- Choose Weeks. Click Weeks. New boxes appear for the weekday and the time.
New boxes appear for the day and the time.
- 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.
- 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.
- Open Trigger at Hour. The default time is Midnight. Click the Trigger at Hour box.
The default time is midnight.
- 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.
- 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
- 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.
- Search for Google Sheets. Click the search box and type: Google Sheets
- 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.
- 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.
- 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.
- 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.
- Open the Document list. Click the Document box. n8n lists the spreadsheets that account can open.
It lists your spreadsheets.
- 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.
- Open the Sheet list. Click the Sheet box. This is the tab inside the spreadsheet.
That is the tab inside the spreadsheet.
- Pick the tab. Pick Sheet1.
Pick the tab.
- 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.
- Back to the canvas. Close the node with the X.
Close the node.
3. Write each update with AI
- Add the AI step. Click the + after Get row(s) in sheet.
- Search for OpenAI. Type: OpenAI
- Pick OpenAI. Click OpenAI, the first result, not the Chat Model one.
The first result. Not the chat model.
- 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.
- 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.
- 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.
- Open the Model list. Click the Model box. The list loads once the credential works.
The list loads once the login works.
- 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.
- 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.
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. - 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.
- 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.
- Back to the canvas. Close the node with the X.
Close the node.
4. Save the drafts
- Add the Gmail step. Click the + after Message a model.
- Search for Gmail. Type: Gmail
- Pick Gmail. Click Gmail.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- Pick To Email. Click To Email.
- 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.
- Switch To Email to Expression. Hover over the To Email box and click Expression. The result shows [email protected].
Hover over the box and click expression. The result shows the first client's address.
- 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.
- Back to the canvas. Close the node with the X.
Close the node.
5. Check the result
- 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.
- 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.
More in n8n Automation Toolkit
Find and Use n8n TemplatesSkip 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…
Free · Live ~9 min
Litescrape in n8n: Swap SerpApi for a Cheaper Search APISwitch 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…
Free · Live ~7 min
◷n8n: Execute Step, Execute Workflow and PublishLearn 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.
Free · Live ~6 min
IF and Switch in n8n: Route Work by RulesSend 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.
Free · Live ~10 min
All 7 modules in n8n Automation Toolkit
More n8n tutorials
n8n AI Agent Tutorial: Save Social Media Ideas to Google SheetsBuild 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…
Free · Live ~12 min
Lovable + n8n: Build a Web App with an AI BackendBuild 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.
Free · Live ~15 min
AI Receipt Extractor: Receipts to Google Sheets with n8nDrop 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.
Free · Live ~12 min
n8n AI Email Responder: Draft Gmail Replies AutomaticallyBuild 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.
Free · Live ~12 min
Daily Job Alerts: Email Each Tech Their Jobs from Google Sheets with n8nEvery 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…
Free · Live ~10 min
Gmail AI Triage: Auto-Label Every Email and Draft RepliesBuild 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…
Free · Live ~14 min
From the blog
Terms in this lesson
Plain-English definitions, each with an example from a free lesson.
