🔓 Unlock all 10,000+ workflows & prompts free Join Newsletter →
✅ Full access unlocked — explore all 10,000 AI workflow and prompt templates Browse Templates →
Home n8n Workflow
January 22, 2026

Google Sheets + OpenAI: cold email drafts ready fast

Lisa Granqvist Partner Workflow Automation Expert

You know the feeling: a lead list is “ready,” but writing the actual cold emails turns into an all-day project. You copy company names, skim websites, try to sound personal, then end up rewriting the same message ten different ways because the tone keeps drifting.

This is where Sheets OpenAI emails helps. Marketing managers trying to hit outreach numbers feel it first. But agency owners building campaigns for clients and small business operators doing DIY lead gen run into the same wall. The outcome is simple: email drafts appear inside your Google Sheet, consistently written and ready for review.

This workflow pulls only the rows you want, generates a subject + body with OpenAI, then writes the results back to the exact row. Here’s what it does, what you get, and how to set it up without turning it into a “project.”

How This Automation Works

The full n8n workflow, from trigger to final output:

n8n Workflow Template: Google Sheets + OpenAI: cold email drafts ready fast

The Problem: Cold Email Drafting Eats Your Best Hours

Cold email “personalization” is usually fake personalization. You intend to reference the prospect’s business, but you’re staring at a spreadsheet with 200 rows and you can’t realistically research each clinic, write a clean opener, and still have energy left to run the rest of your marketing. So drafts come out rushed. Or inconsistent. Or they sound like everyone else’s template, which gets ignored. And when you do take the time to write thoughtfully, you end up stuck in a loop of copy-paste tweaks that never really end.

It adds up fast. The friction compounds, especially when you’re trying to do this weekly instead of once.

  • Writing even 30 decent first drafts can take about 2–3 hours, and that’s before edits.
  • Small inconsistencies in tone (too pushy, too vague) create rework across the whole batch.
  • Spreadsheet columns get messy, so you lose track of what’s drafted, approved, and ready to send.
  • Manual personalization invites errors like the wrong company name in the wrong email, which is honestly painful.

The Solution: Google Sheets to OpenAI Drafts, Written Back to the Same Row

This n8n workflow turns your Google Sheet into a draft factory. You keep a lead list with fields like verified email, company name, description, website, and a category marker. When you run the workflow, it pulls only the rows that match your criteria (for example, “Good” leads that haven’t been drafted yet). Then OpenAI (GPT-4o-mini) generates a subject line and email body that reads like you did quick research. After that, the workflow cleans up the AI response, extracts the subject and body, and updates the exact same row in Google Sheets. It also flips a status field (like “email created” to “yes”) so you can track progress without guesswork.

The workflow starts with a manual trigger, so you run it when you’re ready. n8n processes your leads in batches, generates one draft per prospect, then writes the results back into your sheet until the list is done. No tab juggling. No copy-paste marathon.

What You Get: Automation vs. Results

Example: What This Looks Like

Say you want to draft 60 cold emails for dental clinics each week. Manually, even a quick “personalized” draft often takes about 5 minutes per row once you read the description, check the website, and write a subject line, which is roughly 5 hours total. With this workflow, you trigger it once, let n8n loop through the 60 rows, and the drafts are written back into the sheet as it runs. Your “work” becomes review and light edits, often closer to 30–45 minutes instead of an afternoon.

What You’ll Need

  • n8n instance (try n8n Cloud free)
  • Self-hosting option if you prefer (Hostinger works well)
  • Google Sheets for your lead list and draft storage
  • OpenAI API to generate the subject and body
  • Google Sheets OAuth2 credentials (create in Google Cloud Console)

Skill level: Beginner. You’ll connect accounts, map sheet columns, and paste a prompt you can tweak later.

Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).

How It Works

You kick it off manually. Run the workflow when your sheet is ready, which is great if you want a human review step before anything gets sent.

Google Sheets is filtered before anything happens. The workflow retrieves rows and only keeps prospects that match your rules (like category equals “Good” and email created equals “no”), so you don’t waste tokens drafting for the wrong leads.

OpenAI writes one email per prospect. n8n loops through rows in batches and feeds the company name, description, and website into GPT-4o-mini, asking for a structured JSON response with a subject and body.

Your sheet gets updated in place. A code step parses the JSON cleanly, then Google Sheets writes the subject, body, and a “done” marker back to the same row so you can sort, assign review, or export to your sending tool.

You can easily modify the filter logic to target a different segment based on your needs. See the full implementation guide below for customization options.

Step-by-Step Implementation Guide

Step 1: Configure the Manual Trigger

Set up the workflow entry point so you can manually run the automation while testing.

  1. Add and position Manual Start Trigger as the first node in the workflow.
  2. Connect Manual Start Trigger to Retrieve Sheet Rows to start the data pull on each manual run.

Step 2: Connect Google Sheets

Configure the Google Sheets nodes to read target rows and update results back into the sheet.

  1. Open Retrieve Sheet Rows and select the spreadsheet Document as verified emails and Sheet as california.
  2. In Retrieve Sheet Rows, set filters: category = Good and email created = no.
  3. Credential Required: Connect your googleSheetsOAuth2Api credentials to Retrieve Sheet Rows.
  4. Open Update Sheet Row and confirm Operation is update with the same Document and Sheet values.
  5. Set the Columns mapping to use expressions: body = {{ $json.body }}, email subject = {{ $json.subject }}, EMAIL verified = {{ $('Retrieve Sheet Rows').item.json['EMAIL verified'] }}, and email created = yes.
  6. Credential Required: Connect your googleSheetsOAuth2Api credentials to Update Sheet Row.

Tip: Ensure your sheet includes columns named EMAIL verified, email subject, body, and email created so the update mapping can match correctly.

Step 3: Set Up Batch Processing

Use batching to process rows one at a time, which prevents rate limits and ensures each draft is parsed and saved before continuing.

  1. Connect Retrieve Sheet Rows to Batch Iterator.
  2. Connect the second output of Batch Iterator to Compose Email Draft so each row is processed sequentially.
  3. Connect Update Sheet Row back into Batch Iterator to move to the next item after each update.

⚠️ Common Pitfall: If you connect the first output of Batch Iterator instead of the second, the loop will not execute as expected.

Step 4: Configure AI Drafting and Parsing

Compose personalized email openers using OpenAI, then parse the JSON response into structured fields for storage.

  1. Open Compose Email Draft and set Model to gpt-4o-mini.
  2. In Compose Email Draft, confirm the system and user prompt include the JSON output format and data references like {{ $json['EMAIL verified'] }}, {{ $json.companyName }}, {{ $json[' description'] }}, and {{ $json.website }}.
  3. Credential Required: Connect your openAiApi credentials to Compose Email Draft.
  4. Open Parse Draft JSON and paste the provided JavaScript in Code to safely parse the OpenAI response into subject and body.
  5. Connect Compose Email Draft to Parse Draft JSON, and connect Parse Draft JSON to Update Sheet Row.

⚠️ Common Pitfall: If the AI returns malformed JSON, Parse Draft JSON will throw an error. Ensure the prompt enforces the JSON schema strictly.

Step 5: Test & Activate Your Workflow

Validate the full run and confirm updates are written back to Google Sheets before going live.

  1. Click Execute Workflow to run Manual Start Trigger and process a sample set of rows.
  2. Verify that Compose Email Draft returns a JSON message and that Parse Draft JSON outputs subject and body.
  3. Check the Google Sheet to confirm Update Sheet Row writes the email subject and body, and sets email created to yes.
  4. Once verified, switch the workflow to Active for production use.
🔒

Unlock Full Step-by-Step Guide

Get the complete implementation guide + downloadable template

Common Gotchas

  • Google Sheets credentials can expire or need specific permissions. If things break, check the n8n Credentials area and confirm the Google account still has access to that sheet 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.
  • OpenAI prompts that “kind of work” still create slow edits. Add your brand voice, offer, and forbidden phrases early or you will be rewriting every draft.

Frequently Asked Questions

How long does it take to set up this Sheets OpenAI emails automation?

About 30 minutes if your sheet columns are already in place.

Do I need coding skills to automate Google Sheets cold email drafts?

No. You’ll mostly map fields from your sheet and paste a prompt. The included code step is already done for you, unless you want to customize parsing.

Is n8n free to use for this Sheets OpenAI emails workflow?

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 (often just a few dollars for hundreds of drafts).

Where can I host n8n to run this automation?

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.

Can I customize this Sheets OpenAI emails workflow for a different industry than dental clinics?

Yes, and it’s mostly prompt work. Swap the service offer and examples inside the “Compose Email Draft” OpenAI node, then adjust your sheet columns if you want different inputs (like “jobTitle” or “techStack”). Common tweaks include changing the tone to more formal, adding a hard constraint on length (like “under 90 words”), and inserting a specific CTA that matches your funnel.

Why is my Google Sheets connection failing in this workflow?

Most of the time it’s expired OAuth access or the wrong Google account. Reconnect Google Sheets in n8n Credentials and confirm the sheet is shared with that account. Also double-check the spreadsheet ID and tab name, because a renamed tab can silently break lookups. If it fails only on updates, the service account/user may have view-only access.

How many rows can this Sheets OpenAI emails automation handle?

Hundreds per run is normal, and you can batch through more as long as you stay within your n8n and OpenAI limits. On n8n Cloud Starter, you are capped by monthly executions, so very large sheets may push you toward a higher plan. If you self-host, there’s no execution limit, but your server resources and OpenAI rate limits become the bottleneck. Practically, most teams run this in batches of 25–100 rows to keep review manageable.

Is this Sheets OpenAI emails automation better than using Zapier or Make?

Often, yes, because this flow benefits from looping, structured parsing, and control over how rows are filtered and marked complete. n8n handles batch iteration cleanly, and you’re not forced into paying more just to add branches, retries, or extra processing. If you only need “new row → send to OpenAI → write back,” Zapier or Make can work fine. The moment you care about filtering logic, status fields, and scaling drafts without surprises, n8n is usually the calmer choice. Talk to an automation expert if you want a quick recommendation for your stack.

Once this is running, your spreadsheet stops being a list and starts being a production line. You review, approve, and move on.

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.

Lisa Granqvist

Workflow Automation Expert

Expert in workflow automation and no-code tools.

×

Use template

Get instant access to this n8n workflow Json file

💬
Get a free quote today!
Get a free quote today!

Tell us what you need and we'll get back to you within one working day.

Get a free quote today!
Get a free quote today!

Tell us what you need and we'll get back to you within one working day.

Launch login modal Launch register modal