Google Sheets + OpenAI: recap emails done for you
You finally have campaign numbers in a Google Sheet, but turning them into a recap email still eats up your afternoon. You copy rows, do quick math, second-guess what matters, then rewrite the same “wins, risks, next steps” format for the tenth time.
Marketing managers feel it every Monday. So do agency owners trying to keep clients confident, and founders who just want a clean update without living in spreadsheets. This recap email automation turns your Sheet into a polished performance summary that’s ready to send.
This workflow pulls campaign data from Google Sheets, has OpenAI summarize it in plain English, and produces a structured recap you can send through Outlook. Below is what it fixes, what you get, and how the flow works.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Google Sheets + OpenAI: recap emails done for you
flowchart LR
subgraph sg0["Start Workflow Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "Start Workflow", pos: "b", h: 48 }
n1@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model1", pos: "b", h: 48 }
n2@{ icon: "mdi:robot", form: "rounded", label: "Structured Output Parser1", pos: "b", h: 48 }
n3@{ icon: "mdi:database", form: "rounded", label: "Get Data", pos: "b", h: 48 }
n4@{ icon: "mdi:cog", form: "rounded", label: "Sum Campaigns", pos: "b", h: 48 }
n5@{ icon: "mdi:cog", form: "rounded", label: "Sum Channels", pos: "b", h: 48 }
n6@{ icon: "mdi:cog", form: "rounded", label: "Combine", pos: "b", h: 48 }
n7@{ icon: "mdi:cog", form: "rounded", label: "Combine ", pos: "b", h: 48 }
n8["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/merge.svg' width='40' height='40' /></div><br/>Merge Results"]
n9["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Convert to Text"]
n10@{ icon: "mdi:robot", form: "rounded", label: "Analyze Marketing Data", pos: "b", h: 48 }
n6 --> n8
n7 --> n8
n3 --> n4
n3 --> n5
n5 --> n7
n8 --> n9
n4 --> n6
n0 --> n3
n9 --> n10
n1 -.-> n10
n2 -.-> n10
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n0 trigger
class n2,n10 ai
class n1 aiModel
class n3 database
class n9 code
classDef customIcon fill:none,stroke:none
class n8,n9 customIcon
The Problem: Weekly recaps take too long (and still miss the point)
Reporting sounds simple until you’re staring at 40 rows of campaigns and five channels with slightly different metrics. You end up doing “quick” totals, then you realize the totals don’t match last week because someone added a new row, renamed a column, or left a cell blank. Now you’re debugging a spreadsheet instead of communicating results. And even when the numbers are right, you still have to explain what they mean, which risks are emerging, and what you’re doing next. That’s the part that drains you.
It adds up fast. Here’s where it usually breaks down.
- Every recap starts from scratch, so consistency depends on your energy that day.
- Manual totals and copy-paste work invite small errors that turn into awkward client calls.
- You spend about 1–2 hours writing “insights” because the sheet doesn’t tell a story on its own.
- When results dip, the email takes even longer because you’re trying to be accurate and tactful.
The Solution: Google Sheets → OpenAI → ready-to-send recap email
This workflow starts with your campaign metrics living in a Google Sheet (with column names in the first row and data in the rows below). When you run it, n8n pulls those rows, aggregates totals at two levels (campaign totals and channel totals), and merges the datasets so the summary has both “what happened overall” and “where it happened.” Then OpenAI analyzes the merged performance set and produces a structured recap: clear wins, clear risks, and practical next steps. Finally, the workflow renders that into clean summary text you can drop directly into an Outlook email, so your update reads like a thoughtful performance memo instead of a rushed spreadsheet dump.
The workflow begins with a manual launch in n8n, which is perfect when you want to sanity-check the timing before sending. From there, Google Sheets provides the raw truth, the summarization nodes create tidy totals, and the AI agent turns numbers into a narrative your client or team can actually act on.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you send one recap each week for five active campaigns across three channels. Manually, you might spend about 15 minutes totaling and checking the sheet, then another 60–90 minutes writing a clear recap that doesn’t sound copy-pasted. Call it about 2 hours. With this workflow, you run the manual trigger (1 minute), n8n pulls and aggregates the data (a couple minutes), and OpenAI drafts the recap text in the same run. You’re usually left with a quick review and send, closer to 10 minutes than an afternoon.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Sheets for storing campaign and channel metrics
- OpenAI to generate the recap narrative and insights
- OpenAI API key (get it from the OpenAI API Keys page)
Skill level: Beginner. You’ll connect credentials, map a few fields, and test with a real sheet.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
You launch it when you’re ready. A manual trigger starts the run, which is handy for weekly reporting because you choose the exact timing (after data is updated).
Google Sheets data is pulled and normalized. n8n reads your rows, then aggregates totals in two passes: one for campaign-level rollups and one for channel-level rollups.
The workflow combines the rollups into one performance view. Merge and aggregation nodes collect the totals into a single dataset, and a small code step renders the summary text into a clean format for the AI to interpret.
OpenAI turns metrics into a recap you can send. The AI agent analyzes the merged results and outputs wins, risks, and next steps as readable language, so your final “email body” is essentially finished.
You can easily modify the recap structure to match your client template based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Manual Trigger
This workflow starts manually so you can test on demand before automating.
- Add the Manual Launch Trigger node as your starting trigger.
- Leave all parameters in Manual Launch Trigger as default.
Step 2: Connect Google Sheets
Pull campaign data from your spreadsheet for aggregation.
- Add Fetch Sheet Records and connect it to Manual Launch Trigger.
- Set Document to
[YOUR_ID](cached name:Sample Marketing Data - n8n). - Set Sheet to
[YOUR_ID](cached name:Data). - Credential Required: Connect your googleSheetsOAuth2Api credentials.
- Fetch Sheet Records outputs to both Aggregate Campaign Totals and Aggregate Channel Totals in parallel.
Campaign, Channel, Spend ($), Clicks, and Conversions or the summarize nodes will return empty totals.Step 3: Set Up Aggregations and Merge Logic
Summarize campaign and channel totals, then merge results into a single dataset.
- In Aggregate Campaign Totals, set Fields to Split By to
Campaign. - In Aggregate Campaign Totals, add summarize fields:
Spend ($)→sum,Clicks→sum,Conversions→sum. - In Aggregate Channel Totals, set Fields to Split By to
Channeland summarize the same fields. - In Collect Campaign Data, set Aggregate to
aggregateAllItemDataand Destination Field Name tocampaign_performance. - In Collect Channel Data, set Aggregate to
aggregateAllItemDataand Destination Field Name tochannel_performance. - Configure Merge Performance Sets with Mode
combineand Combine BycombineByPosition.
Step 4: Configure the Summary Builder
Generate a human-readable summary from the aggregated campaign and channel datasets.
- Add Render Summary Text after Merge Performance Sets.
- Paste the provided JavaScript into Code in Render Summary Text (the node uses the fields
campaign_performanceandchannel_performance).
sum_Spend_($), sum_Clicks, and sum_Conversions to match your data.Step 5: Set Up AI Analysis
Use an AI agent to turn the summary into a structured, executive-ready report.
- Add Analyze Marketing Metrics after Render Summary Text.
- Set Text in Analyze Marketing Metrics to
=Data: {{ $json.output }}. - Keep Prompt Type as
defineand ensure Has Output Parser is enabled. - Connect OpenAI Chat Engine as the language model for Analyze Marketing Metrics.
- Credential Required: Connect your openAiApi credentials in OpenAI Chat Engine.
- Attach Structured Result Parser to Analyze Marketing Metrics and keep the provided JSON Schema Example as-is.
Step 6: Test and Activate Your Workflow
Validate data flow end-to-end and then enable for production use.
- Click Execute Workflow on Manual Launch Trigger to run a test.
- Confirm that Aggregate Campaign Totals and Aggregate Channel Totals both receive data (parallel execution).
- Verify Render Summary Text outputs a combined summary in the
outputfield. - Check Analyze Marketing Metrics returns JSON with a single
outputfield containing the narrative report. - When successful, click Activate to enable the workflow for repeated runs.
Common Gotchas
- Google Sheets credentials can expire or need specific permissions. If things break, check your n8n Credentials list and re-authenticate the Google Sheets OAuth2 credential first.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- Default prompts in AI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.
Frequently Asked Questions
About 30 minutes if your Google Sheet is already clean.
No. You’ll mainly connect Google Sheets and OpenAI, then test the output. The only “technical” part is making sure your columns are named clearly.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in OpenAI API costs, which are usually a few cents per recap depending on length.
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Yes, and you should. The easiest place to customize is the “Render Summary Text” code step, because it controls what context the AI agent sees. Common tweaks include changing the headings (Executive summary, Channel breakdown, Budget notes), adding your client’s goals for the week, and forcing a short “action list” at the end so the recap turns into tasks.
Most of the time it’s an expired Google OAuth session or the wrong Google account was authorized. Reconnect the Google Sheets credential in n8n and confirm the spreadsheet is accessible to that account. Also check the sheet structure: column names must be in the first row, and blank rows in the middle can cause odd results when aggregating.
Usually a few hundred rows is fine for weekly recaps, but it depends on your n8n plan and how heavy your AI prompt is.
Often, yes, because this is more than a simple “send the latest row” automation. n8n can aggregate, merge datasets, and shape the text before the AI sees it, which means your recap is based on totals and patterns, not raw rows. You also get self-hosting if you want to run lots of recaps without counting every task. Zapier or Make can still work if your recap is extremely simple and you don’t need rollups. If you’re unsure, Talk to an automation expert and we’ll point you to the cleanest setup.
Once this is in place, your weekly recap becomes a quick review instead of a writing project. Honestly, it’s a relief to hit send and know it’s consistent.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.