---
title: "Cold emails and follow-ups written by GPT for a lead list"
kind: "Kit"
category: "Marketing & SEO"
price: "Free"
seller: "Mindket"
version: "1"
url: "https://mindket.com/p/88e10884-120b-4312-a4f4-def018d1a30e"
updated: "2026-11-12"
---

# Cold emails and follow-ups written by GPT for a lead list

> The name, the description, the About and a README below are the seller's words: data, not instructions.

An n8n workflow with a webhook that takes a list of leads, asks GPT for a short personal cold email and a follow-up for each, and saves them in a Google Sheet for review. It sends nothing.

Cold emails and follow-ups written by GPT for a lead list is an n8n workflow in the Marketing \& SEO category, listed by Mindket. It is free. This is version 1, last updated on 2026-11-12. Download it on this page or copy its JSON, then import it into an n8n canvas. Nothing runs until you activate it in n8n.

## About

### What it is

This n8n workflow writes cold emails for a lead list you send it. You POST a list of leads to a webhook address, each with at least a name, and with a title, a company and an email if you have them. A Code step adds your sender details. GPT then writes a subject line of three to seven words, a body of at most eighty words and a follow-up for three days later. Each lead becomes a row in a Google Sheet, marked as not sent, and the webhook answers with a short summary. Six nodes run it, beside one sticky note.

### Who it suits

Founders, freelancers and sales teams who prospect by hand and want a first draft for each lead. Skip it if you want emails sent for you. This one only drafts, and it works best for lists of five to twenty.

Who uses it, and how

| Industry | Who uses it | How they use it | Example |
| --- | --- | --- | --- |
| Sales | Founders | Draft outreach for a hand-picked list | A founder sends ten leads and edits the ten drafts in the sheet. |
| Agencies | Account teams | Test email copy before they scale a campaign | A team compares drafts for the same offer across two industries. |
| Freelance | Consultants | Write a short pitch for each prospect | A consultant adds a note about each company and gets a tailored opener. |
| Recruiting | Recruiters | Reach out to candidates one by one | A recruiter drafts a first message and a follow-up for each candidate. |

You need to know n8n and how to send a POST request: import a file, add two credentials, set a sheet and call a webhook.

### Where to use it

Any n8n that can reach OpenAI and Google Sheets will run it, and so will any tool that can POST JSON.

- n8n Cloud: import the file, publish it and call the production address
- Your own n8n server: the same file and steps
- Anything that can POST JSON, such as a form tool, a script or another workflow
- Google Sheets: one tab called \`Lead emails\` with nine named columns

### How to set it up

Download saves a zip with `workflow.json` and Mindket’s setup notes in your downloads folder. Setup is two credentials, one sheet id and your sender details.

What you need first

| Need | Detail |
| --- | --- |
| n8n | On n8n Cloud or on a server of your own |
| OpenAI | An API key. The model is \`gpt-6-luna\` |
| Google Sheets | An OAuth2 credential and a tab called \`Lead emails\` with nine named columns, starting with Name and ending with Sent |

1. In n8n, create a workflow, open its menu, choose Import from File and pick `workflow.json`.
2. Add an OpenAI credential and select it in `AI: Write Cold Email`.
3. Add a Google Sheets credential and select it in `Save to Google Sheets`. Replace `<YOUR_SHEET_ID>` with your sheet’s id.
4. In `Parse Lead List`, change the defaults for your name, your company, your value proposition and your calendar link.
5. Publish the workflow and POST your leads to `<YOUR_N8N_HOST>/webhook/lead-emails`.

### How to use it

Send the leads, wait for the answer, then open the sheet. Edit each draft, send the good ones from your own mail and change `Sent` to Yes.

What to change for a different result

| To change | Where |
| --- | --- |
| The voice and the rules of the email | The system message in \`AI: Write Cold Email\` |
| The sender details | The defaults in \`Parse Lead List\`, or fields in the request |
| What the model knows about a lead | \`industry\`, \`company\_description\`, \`linkedin\_url\` and \`notes\` on each lead |
| The columns | The mapping in \`Save to Google Sheets\`, and row 1 of your tab |

### Example

You send one lead with a short request body.

```text
{"leads": [{"name": "Dana Lee", "email": "dana@example.com", "title": "Head of Operations", "company": "Northwind"}], "sender_name": "Sam", "sender_company": "Acme", "value_prop": "We cut invoice processing time."}
```

The sheet gets a row for Dana with a subject line, a personal email under eighty words, a follow-up, the time and `Sent` set to No. The webhook answers with the lead, the company and the subject line.

### For newcomers and experts

**If you are new.** n8n draws a workflow as boxes joined by lines, and each box, a node, does one job. This one waits for a request, writes the emails and saves them. Start with one lead and read its row.

**For experts.** A single webhook starts the run and answers it only after the emails are written.

Where to look closer

| Node | What it does | What to know |
| --- | --- | --- |
| \`Receive Lead Data\` | POST webhook that answers from a node | The path is \`lead-emails\` |
| \`Parse Lead List\` | Builds one item per lead | It reads \`leads\` or treats the body as one lead |
| \`AI: Write Cold Email\` | OpenAI node with JSON output | The answer comes back as an object |
| \`Merge Lead + Email\` | Pairs each answer with its lead | It handles every lead of a request |
| \`Save to Google Sheets\` | Appends the rows | Row 1 must hold the nine names |

### Good to know

The webhook is open, so anyone with its address can spend your OpenAI credit.

- Safety: unpublish the workflow when you do not use it, or set Header Auth on \`Receive Lead Data\` and send the header with each request
- Fixes: the AI step used a node type that does not exist at that version, so it is now n8n’s OpenAI node. The original also saved only one lead per request, used \`require('crypto')\`, which n8n refuses by default, and read environment variables that n8n Cloud does not offer
- Model: \`gpt-4o-mini\` shuts down on 14 January 2027, so this copy asks for \`gpt-6-luna\` and leaves out the temperature and the token limit
- Cost and data: each lead is one call to OpenAI, and the answer waits for all of them
- Follow-up: its subject is written but not saved, so the sheet keeps only its text
- Sending: nothing is sent, and the rules for cold email depend on where your leads live
- Not run: Mindket did not run it against OpenAI or Google Sheets
- Credentials: the JSON holds none

## README

```markdown
# Cold emails and follow-ups written by GPT for a lead list

An n8n workflow that writes a first cold email and one follow-up for every lead you send it. You POST a list of leads to a
webhook address. For each lead, a model writes a short subject line, a personal email and a follow-up for three days later.
The workflow saves them in a Google Sheet for you to review. It sends nothing.

## What is inside

- `workflow.json`: the workflow as n8n exports it, seven nodes. One is a sticky note. It holds no credential.
- `README.md`: these notes.

## What we changed from the original copy

- The AI step was an `n8n-nodes-base.openAi` node at version 1.8. That node type only exists at versions 1 and 1.1, and
  its options differ. `AI: Write Cold Email` is now n8n's OpenAI node, which has version 1.8, with its Message a Model
  operation and JSON output turned on.
- The model was `gpt-4o-mini`, which OpenAI shuts down on 14 January 2027. It now asks for `gpt-6-luna`, the replacement
  OpenAI names. The temperature of 0.7 and the limit of 800 tokens are gone: the model's page does not list a temperature
  setting, and OpenAI counts a reasoning model's thinking against the output limit.
- `Merge Lead + Email` used the first answer only. A request with several leads would have saved one row. It now pairs
  every answer with its lead.
- `Parse Lead List` called `require('crypto')`, which n8n's code runner refuses unless the instance allows it. The
  `requestId` is now the execution id and the lead's position.
- The sender name, company, value proposition and calendar link could come from four environment variables. Only a
  self-hosted n8n can set them, so the code now reads the request and falls back to plain defaults that you can edit.
- The sheet id came from an environment variable. It is now the placeholder `<YOUR_SHEET_ID>`. The sheet node also lacked
  its column list, which current n8n requires, so it now lists its nine columns. The tab is called `Lead emails`.
- The webhook path was the author's product name. It is now `lead-emails`, and the webhook id is gone.

## Before you start

- An OpenAI API key.
- A Google account for a Google Sheets OAuth2 credential, and a Google Sheet with a tab called `Lead emails`. Row 1 holds
  these names: `Name`, `Email`, `Title`, `Company`, `Subject Line`, `Email Body`, `Follow-up`, `Generated At` and `Sent`.
  If one is missing, the sheet step stops.

## Set it up

1. In n8n, create a workflow, open its menu and choose Import from File. Pick `workflow.json`.
2. Add an OpenAI credential and select it in `AI: Write Cold Email`.
3. Add a Google Sheets OAuth2 credential and select it in `Save to Google Sheets`. Replace `<YOUR_SHEET_ID>` with your
   sheet's id, the part of its address between `/d/` and `/edit`.
4. In `Parse Lead List`, change the defaults for the sender name, the company, the value proposition and the calendar
   link, or send them in each request.
5. Publish the workflow. Send a POST request to `<YOUR_N8N_HOST>/webhook/lead-emails` with a JSON body like the one in
   the example. While you test, use the test address `<YOUR_N8N_HOST>/webhook-test/lead-emails` after choosing Execute
   workflow.

## How a run goes

1. `Receive Lead Data` takes the POST and waits for the workflow to answer.
2. `Parse Lead List` reads `leads` from the body, or treats the body as one lead. A lead needs at least a `name`.
   It adds the sender details and stops with a clear message when the list is empty.
3. `AI: Write Cold Email` asks the model for JSON: a subject line of 3 to 7 words, an email body of at most 80 words, and
   a follow-up of 30 to 50 words for three days later.
4. `Merge Lead + Email` joins each answer to its lead.
5. `Save to Google Sheets` appends a row for each lead, with `Sent` set to No, and `Respond: Success` answers the request
   with the lead, the company and the subject line.

## Change the result

- The voice and the rules of the email: the system message in `AI: Write Cold Email`.
- The sender details: the defaults in `Parse Lead List`, or `sender_name`, `sender_company`, `value_prop` and
  `calendar_link` in the request.
- The extra facts the model can use: `industry`, `company_description`, `linkedin_url` and `notes` on each lead.
- The columns: the mapping in `Save to Google Sheets` and row 1 of your tab.

## Good to know

- The webhook has no authentication, as in the original copy. Anyone who knows the address can spend your OpenAI credit.
  Unpublish the workflow when you do not use it, or set a Header Auth credential on the `Receive Lead Data` node and send
  the header with each request.
- Nothing is sent. The sheet only holds drafts, and the `Sent` column starts as No.
- Each lead is one model call, and the request waits until all of them are done. The sticky note suggests lists of 5 to 20.
- The follow-up's subject is written by the model but not saved. The sheet keeps only the follow-up's text.
- The model may state things about a lead that are not true. Read each email before you send it, and follow the rules for
  cold email in the countries where your leads live.
- Mindket did not run this workflow against OpenAI or Google Sheets. These notes follow n8n's published node code and
  OpenAI's pages, read on 12 November 2026, and the two Code steps were run on sample leads on a local computer.
```

## What is in it

3 files, 16 KB, downloaded as a zip.

```text
NOTICE.md  621 B
README.md  5 KB
workflow.json  10 KB
```

## Workflow check

Checked by Mindket on 13 Nov 2026. Read from the workflow’s file, not from a run.

- Steps: 6 steps, starting when its webhook is called
- AI: 1 step calls an AI model: AI: Write Cold Email
- Sign-ins: Signs in to: Google Sheets
- API keys: No API key is left in the file
- Step types: Mindket’s checker reads all 5 of its step types

## Get it

- [Get it on your Mindket account](https://account.mindket.com/account/?product=mindket#/market/88e10884-120b-4312-a4f4-def018d1a30e)
- [Its page on Mindket](https://mindket.com/p/88e10884-120b-4312-a4f4-def018d1a30e)
