---
title: "Lead list builder with scheduled cold email drafts"
kind: "Kit"
category: "Marketing & SEO"
price: "Free"
seller: "Mindket"
version: "1"
url: "https://mindket.com/p/983e2359-1eb6-4adf-9284-4134763c944a"
updated: "2026-11-09"
---

# Lead list builder with scheduled cold email drafts

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

An n8n workflow in two halves. A form search on Apify adds people with verified emails to a Google Sheet. Once a day, gpt-4.1-mini drafts a short cold email for each row you mark REVIEW. Nothing is sent.

Lead list builder with scheduled cold email drafts is an n8n workflow in the Marketing \& SEO category, listed by Mindket. It is free. This is version 1, last updated on 2026-11-09. 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 builds a list of people to email and drafts the emails later, when you say so. A form takes the level, company size, industry and countries you want and a few lines about you, then an Apify Actor returns matching people with verified emails. Google Sheets keeps each one as a row. The second half runs once a day. It drafts a short cold email for every row you have marked `REVIEW` and writes it back. Fourteen working nodes and two sticky notes make it up. Nothing is sent.

### Who it suits

Freelancers, agencies and small B2B teams who sell a service to companies and want owners, founders or managers with an email for each. The `REVIEW` mark suits someone who picks the leads before any copy is written. Skip it if you want the emails sent.

Who uses it, and how

| Industry | Who uses it | How they use it | Example |
| --- | --- | --- | --- |
| Marketing agencies | Agency owners | Search founders of small companies in one industry and country | An agency owner lists founders of UK software firms with up to 50 staff and marks the best twenty. |
| IT and software services | Business development reps | Send one form for each industry and keep each list in its own sheet | A rep builds a list of directors at logistics firms in Germany. |
| Freelance consulting | Solo consultants | Describe the offer in \`About You \& Your Service\` so every draft carries it | A bookkeeper gets drafts that open on each lead’s company and name the service once. |
| Recruiting | Agency recruiters | Search heads of departments at growing firms | A recruiter lists heads of engineering at Canadian firms of 51 to 200 people. |

You need some n8n and three accounts: Apify, OpenAI and Google. Its author puts setup at about 12 minutes with the accounts ready, and one node also needs a new model, because the file names one that OpenAI has retired.

### Where to use it

Any n8n that can reach Apify, OpenAI and Google will run it. It has to stay published for the daily half to run.

- n8n Cloud: import the file into a new workflow there, then publish it
- Your own n8n server: the same file, with the schedule following its time zone
- Google Sheets: the leads and their drafts sit in one tab, ready to filter
- A mail tool: copy a draft from \`Email Prepared\`, or add a sending node after \`Update Google Sheets\`

### How to set it up

Get it saves a zip with `workflow.json` and Mindket’s setup notes in your downloads folder. Make the sheet first, since three nodes point at it.

What you need first

| Need | Detail |
| --- | --- |
| n8n | On n8n Cloud or on a server of your own |
| Apify | An account and its API token, with credit for the Leads Finder Actor |
| OpenAI | An API key for \`gpt-4.1-mini\` or another current model |
| Google | An account that can edit the sheet, for a Google Sheets OAuth2 credential |
| A sheet | A tab named \`Leads\` with ten headers in row 1: FirstName, LastName, Title, Email, LinkedIn, Organization, OrganizationLinkedIn, OrganizationSite, Email Prepared and About You \& Your Service |

1. In n8n, create a workflow, open its menu, choose Import from File and pick `workflow.json`.
2. Make the sheet, then copy its ID: the long part of its address between `/d/` and `/edit`.
3. Add a Google Sheets OAuth2 credential. In `Google Sheets`, `Get Pending Leads` and `Update Google Sheets`, select it and replace `YOUR_SHEET_ID` with the ID.
4. Add an OpenAI credential and select it in `Message a model` and `OpenAI Chat Model`.
5. In `Message a model`, swap `chatgpt-4o-latest` for a current model such as `gpt-4.1-mini`.
6. In `HTTP Request`, replace `<YOUR_APIFY_TOKEN>` in the Authorization header with your token. The brackets go too, so the header reads Bearer, a space and the token.
7. In `Edit Fields`, lower `totalResults` from 1000 to about 20 for the first runs.
8. Save, send the form once from its test address, mark a row or two `REVIEW` and run `Schedule Trigger` by hand. Press Publish when the drafts read well.

OpenAI’s deprecations page, read on 2 November 2026, lists `chatgpt-4o-latest` as shut down on 17 February 2026. That is why step 5 is there.

### How to use it

Send the form whenever you want a new list. It confirms at once, and the people arrive in `Leads` when Apify finishes. Read the rows and type `REVIEW` in `Email Prepared` for each lead you want, and at midnight the scheduled half swaps each mark for a draft you send yourself. Nothing goes out on its own.

What to change for a different result

| To change | Where |
| --- | --- |
| Who is searched | The form, and the lists in the prompt of \`Message a model\` that its answers are matched to |
| How many people | \`totalResults\` in \`Edit Fields\`, 1000 in the file |
| The email’s content and length | The prompt of \`Basic LLM Chain\`, which caps the body at 130 words |
| The greeting and sign-off | The \`Email Prepared\` value in \`Update Google Sheets\` |
| When drafts are written | The rule in \`Schedule Trigger\`, daily at midnight in the file |

### Example

You send the form with these answers.

```text
Job Management Level: Founder, Owner
Employees Size: up to 50 people
Industry: dental clinics
Location: United Kingdom
About You & Your Service: I’m Sam. I build online booking pages for clinics.
```

The model maps the industry and the size to its lists, for example `Medical Practice` and the bands for 2 to 10 and 11 to 50 people. Each person found becomes a row with a name, title, email, LinkedIn address and company. You mark three rows `REVIEW`. That night each of them gets a draft in this shape, with the middle written by the model:

```text
Hey Priya!

<a line about her clinic, Sam’s intro, how a booking page fits, and a short question>

Best,
Sam
```

### 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 has two starting points, the form on the top line and the clock on the bottom one, and they share only the sheet. Send the form first and check the rows. Then press the clock node’s own run button to see a draft without waiting for midnight.

**For experts.** The two halves meet only in the sheet, and the `REVIEW` mark is the handover between them.

The model or service behind each step

| Step | Model or service | What to know |
| --- | --- | --- |
| \`Message a model\` | \`chatgpt-4o-latest\` in the file, now retired | Answers in JSON. Its first message holds your answers, and its system message holds the rules and 148 industry names |
| \`Basic LLM Chain\` | \`gpt-4.1-mini\`, through \`OpenAI Chat Model\` | A parser holds the answer to \`text\` and \`name\`, so a reply in another shape stops the run |
| \`HTTP Request\` | Leads Finder on Apify | A synchronous call, which Apify ends after 300 seconds according to its API reference |

The Actor’s input page, read the same day, writes seniority as values like `director_level` and size as bands like `10-19`. The prompt produces `Director`, and its size bands are written differently. Try a small search first.

### Good to know

It spends money at two vendors, sends nothing and fills one column wrongly.

- Billing: Apify’s listing charges $0.03 for each start and $0.0017 for each lead on the free plan, less on paid plans. OpenAI bills one call for each form and one for each draft
- Nothing is sent: drafts stay in \`Email Prepared\` until you copy them
- Duplicates: \`Remove Duplicates\` compares the people of one run only, so a later search can add someone you already have
- A wrong column: the file puts the company’s website in \`OrganizationLinkedIn\`. Map \`{{ $json.organizationLinkedIn }}\` there instead
- Open form: once the workflow is published, anyone with the form’s address can start a search on your Apify account
- Personal data: names, emails and LinkedIn addresses are stored in your sheet, and each lead’s title, company and links go to OpenAI. Check the rules for cold email where you and your leads are
- Your token: the Apify token sits in a header, so take it out before you share the workflow
- Credentials: the JSON holds none, and nothing from its author’s sheet

## README

```markdown
# Lead list builder with scheduled cold email drafts

An n8n workflow in two halves. A form takes the people you want to reach, by level, company size, industry and country,
and a few lines about you. An Apify Actor finds matching people with verified emails, and each one becomes a row in a
Google Sheet. Once a day, the workflow drafts a short cold email for every lead you have marked `REVIEW` and writes it
into that row. Nothing is sent.

## What is inside

- `workflow.json`: the workflow as n8n exports it, sixteen nodes. Two of them are sticky notes that name the halves. It
  holds no credential.
- `README.md`: these notes.

## What we changed from the original copy

- The Apify header held a placeholder, `Bearer <token>`. It now says `Bearer <YOUR_APIFY_TOKEN>`.
- The author's sheet and its tab id are gone. The three Google Sheets nodes ask for `YOUR_SHEET_ID` and find the tab by
  the name `Leads`.

## Before you start

- An n8n instance, on n8n Cloud or your own server.
- An Apify account and its API token, with credit for the lead search.
- An OpenAI API key. The file names two models, `chatgpt-4o-latest` and `gpt-4.1-mini`, and the first one is gone (step 5).
- A Google account, and a Google Sheet for the leads.

## Set it up

1. In n8n, create a workflow, open its menu and choose Import from File. Pick `workflow.json`.
2. Make a Google Sheet with a tab named `Leads` and these headers in row 1: `FirstName`, `LastName`, `Title`, `Email`,
   `LinkedIn`, `Organization`, `OrganizationLinkedIn`, `OrganizationSite`, `Email Prepared` and
   `About You & Your Service`. Copy the sheet's ID: the long part of its address between `/d/` and `/edit`.
3. Add a Google Sheets OAuth2 credential. In `Google Sheets`, `Get Pending Leads` and `Update Google Sheets`, select it
   and replace `YOUR_SHEET_ID` with the ID.
4. Add an OpenAI credential and select it in `Message a model` and `OpenAI Chat Model`.
5. In `Message a model`, pick another model. OpenAI's deprecations page, read on 2 November 2026, lists
   `chatgpt-4o-latest` as shut down on 17 February 2026. `gpt-4.1-mini`, which the other half already uses, can answer
   in JSON as this node asks.
6. In `HTTP Request`, replace `<YOUR_APIFY_TOKEN>` in the Authorization header with your token. The brackets go too, so
   the header reads Bearer, a space and the token.
7. In `Edit Fields`, lower `totalResults` from 1000 to 20 or so for your first runs.
8. Save. Send the form once from its test address, then open the sheet and type `REVIEW` in `Email Prepared` on a row or
   two.
9. Run `Schedule Trigger` by hand to draft those rows. When the drafts read well, press Publish, and the schedule takes
   over.

## How a run goes

The form half:

1. `On form submission` shows a form titled Lead Scraper. `Job Management Level` lets you pick any of Owner, Founder,
   Head, Director and Manager, and `Location` has a checkbox for each of ten countries. `Employees Size` and `Industry`
   are free text. `About You & Your Service` is the one required field.
2. `Message a model` tidies the answers into JSON. It matches your industry to the nearest of 148 names held in its
   prompt and fits the size to nine bands, from a company of one up to more than 10,000 people.
3. `Edit Fields` turns that JSON into the Actor's input: verified emails only, emails included, the four filters and a
   `totalResults` of 1000.
4. `HTTP Request` posts it to Apify's `run-sync-get-dataset-items` address for the Actor `cdTI90GLKIsTHSjgE` and waits for
   the people. Apify's listing for that ID names it Leads Finder, from the account boneswill.
5. `Edit Fields1` keeps eight fields for each person. Then `Filter` drops anyone without an email, and
   `Remove Duplicates` drops a second copy of the same email within this run.
6. `Google Sheets` appends each person as a row, with your `About You & Your Service` text beside them. `Email Prepared`
   stays empty.

The scheduled half:

1. `Schedule Trigger` fires once a day at midnight, in the workflow's time zone. Its rule is empty in the file, and that
   is what n8n does with an empty rule.
2. `Get Pending Leads` reads every row whose `Email Prepared` says `REVIEW`.
3. `Basic LLM Chain` has `gpt-4.1-mini` write the body of a cold email of 130 words at most, with no subject, greeting or
   sign-off. It also picks your first name out of `About You & Your Service`. A parser holds the answer to `text` and
   `name`.
4. `Update Google Sheets` finds the row by its number and replaces `REVIEW` with the draft. The draft opens with `Hey`
   and the lead's first name, and closes with `Best,` and yours.

## Change the look

- The email: the prompt and the message in `Basic LLM Chain`. The prompt sets the 130-word cap and the order: a line
  about the lead's company, your intro, how the two fit and a short ask.
- The frame around it: the `Email Prepared` value in `Update Google Sheets`.
- The search: the lists in the prompt of `Message a model`, and `totalResults` in `Edit Fields`.
- The time of the drafts: the rule in `Schedule Trigger`.

## Good to know

- Nothing is sent. Drafts land in `Email Prepared`, and only for rows you mark `REVIEW`. That mark is your approval step,
  since the workflow never sets it.
- On 2 November 2026, the Actor's input page wrote seniority as values like `director_level` and company size as
  bands like `10-19`. The prompt here produces `Director`, writes its size bands differently, and sends
  `contactEmailStatus` and `includeEmails`, which the page does not list. Run one small search and check that the people
  match. If they don't, put the Actor's own values into the lists in `Message a model`.
- Apify bills the run. Its listing, read the same day, charges $0.03 for each start and $0.0017 for each lead on the free
  plan, less on paid plans. OpenAI bills one call for each form and one for each draft.
- Apify ends a synchronous call after 300 seconds, according to its API reference. A large search can time out before
  the people come back.
- `Remove Duplicates` only compares the people of one run, so a second search can add someone already in the sheet.
- In the file, `OrganizationLinkedIn` receives the company's website, not its LinkedIn page. To fix it, map
  `{{ $json.organizationLinkedIn }}` into that column in `Google Sheets`.
- `Title` is filled from the Actor's `functional` field, which may hold a department more than a job title.
- Each lead's name, title, email and LinkedIn address are kept in your sheet. The form's answers and each lead's title,
  company and links go to OpenAI. Check the rules for cold email where you and your leads are.
- Once the workflow is published, anyone with the form's address can start a search on your Apify account.
- The Apify token sits in a header, so take it out before you share the workflow.
```

## What is in it

2 files, 36 KB, downloaded as a zip.

```text
README.md  7 KB
workflow.json  29 KB
```

## Workflow check

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

- Steps: 12 steps, starting on a form or on a schedule
- AI: 2 steps call an AI model: Message a model and Basic LLM Chain
- Sign-ins: Signs in to: Google Sheets, OpenAI and Apify
- API keys: No API key is left in the file; 1 blank in it for your own key
- Step types: Mindket’s checker reads all 9 of its step types

## Get it

- [Get it on your Mindket account](https://account.mindket.com/account/?product=mindket#/market/983e2359-1eb6-4adf-9284-4134763c944a)
- [Its page on Mindket](https://mindket.com/p/983e2359-1eb6-4adf-9284-4134763c944a)
