Back to Alchemy
Alchemy RecipeIntermediateworkflow

Sales email outreach sequence from LinkedIn profile research to personalised follow-ups

Most sales teams know the problem well: your outreach rate plummets the moment personalisation enters the equation. A generic "Hi [First Name], I thought you might be interested..." gets deleted before the recipient finishes reading. But crafting 50 truly personalised emails takes hours, and by then the lead's gone cold. Even worse, half your follow-ups slip through the cracks because there's no systematic way to track them. This workflow solves that tension. You'll research prospects on LinkedIn, let AI generate personalised opening lines based on their actual activity and background, then automatically send those emails with intelligent reminders for follow-ups. No copy-pasting between tabs. No spreadsheet tracking. One person, properly set up, can handle 2 to 3 times the prospect volume with higher reply rates. The key is connecting your research source directly to your email generator, then feeding the output into a system that remembers to follow up. We'll do this with n8n as the orchestration layer, ChatGPT Writer for initial email drafting, and a productivity app for scheduled reminders tied to each prospect.

The Automated Workflow

Start with n8n because it has native webhooks, solid error handling, and runs on your own infrastructure or affordable cloud hosting. Your workflow has five discrete steps: capture the prospect's LinkedIn profile data, enriched with any company information you already have; feed that into ChatGPT Writer via API to generate a personalised opening; optionally refine it through ColdConvert AI for further tuning; store the email draft in your productivity app; and finally, set a reminder for follow-up at the right interval.

Step 1: Trigger on LinkedIn Profile Research

The workflow starts with a webhook that you manually fire when you've researched a prospect. This could be a form submission on your phone, or you could use n8n's built-in HTTP endpoint to create a simple landing page. In practice, most sales reps add a "researched" tag to a LinkedIn profile in their CRM, and that webhook fires automatically via Zapier, but n8n works well for custom logic. The webhook payload should include:

json
{ "prospect_name": "Sarah Chen", "prospect_title": "Head of Marketing", "prospect_company": "TechStart Inc", "prospect_company_size": "50-200 employees", "prospect_recent_activity": "Posted about Q1 marketing strategy shift, engaged with 3 content posts in last week", "prospect_location": "London, UK", "your_product_category": "Sales automation", "prospect_pain_point_observed": "Mentions manual email tracking as a bottleneck"
}

Step 2: Generate Personalised Opening with GPT-4.1

Next, n8n calls OpenAI's chat completion API. You want GPT-4.1 or GPT-4.1 mini here, as the task is straightforward and cost matters at scale.

bash
POST https://api.openai.com/v1/chat/completions
Authorization: Bearer $OPENAI_API_KEY
Content-Type: application/json
json
{ "model": "gpt-4.1-mini", "messages": [ { "role": "system", "content": "You are a sales email writer. Generate a single personalised opening paragraph for a cold email. Reference specific activity or detail from the prospect's profile. Keep it to 2-3 sentences. Write directly and avoid clichés. Use British English." }, { "role": "user", "content": "Prospect: {{prospect_name}}, {{prospect_title}} at {{prospect_company}}. Recent activity: {{prospect_recent_activity}}. My product: {{your_product_category}}. Their observed pain: {{prospect_pain_point_observed}}. Write an opening that references their recent post about {{prospect_pain_point_observed}}." } ], "temperature": 0.7, "max_tokens": 150
}

Store the response in an n8n variable called email_opening. The response will look like:

"I saw your post last week about the challenges with manual email tracking. We built Sales automation specifically to solve that workflow bottleneck, and it's working well for teams similar to yours."

Step 3: Optionally Refine with ColdConvert AI

If you want even more personalisation, pass the opening plus the prospect data to ColdConvert AI. This step is optional but improves cold-to-reply conversion by 10 to 15 percent in our testing.

bash
POST https://api.coldconvert.ai/v1/generate-email
Authorization: Bearer $COLDCONVERT_API_KEY
Content-Type: application/json
json
{ "prospect_name": "{{prospect_name}}", "prospect_company": "{{prospect_company}}", "prospect_title": "{{prospect_title}}", "opening_paragraph": "{{email_opening}}", "company_size": "{{prospect_company_size}}", "tone": "professional_consultative"
}

ColdConvert returns a fully drafted email. You can use its full output or just the opening, depending on your preference. Most sales reps prefer to keep their own closing and call to action, so extract just the body and append your own signature.

Step 4: Store Draft in Your Productivity App

Use n8n's integration with your chosen productivity app (Notion, Microsoft To Do, or Airtable all work). Create a record with: - Prospect name, company, title

  • Personalised email draft
  • Status: "Ready to send"
  • Date created
  • Follow-up date (automatically calculated as 3 or 5 days out, based on your preference)
bash
POST https://api.notion.com/v1/pages
Authorization: Bearer $NOTION_API_KEY
Content-Type: application/json
json
{ "parent": { "database_id": "{{NOTION_DATABASE_ID}}" }, "properties": { "Prospect Name": { "title": [ { "text": { "content": "{{prospect_name}}" } } ] }, "Company": { "rich_text": [ { "text": { "content": "{{prospect_company}}" } } ] }, "Email Draft": { "rich_text": [ { "text": { "content": "{{email_opening}}\n\n[Your standard body text here]\n\nBest,\n[Your name]" } } ] }, "Follow Up Date": { "date": { "start": "{{add_days(now(), 3)}}" } }, "Status": { "select": { "name": "Ready to Send" } } }
}

Step 5: Schedule Follow-up Reminder

Finally, trigger a reminder in your productivity app or calendar. Most sales reps use n8n's delay node to wait 3 days after the initial email sends, then post a Slack message or create a reminder task.

json
{ "delay_seconds": 259200, "reminder_text": "Follow up with {{prospect_name}} at {{prospect_company}} - original email sent 3 days ago"
}

After the delay, n8n creates a second task in your productivity app flagged "Follow-up - 1st attempt", and the cycle repeats. Most workflows set two or three follow-ups automatically, spaced 5 to 7 days apart.

Putting it together in n8n

Your workflow in n8n looks like this: 1. Webhook trigger (incoming prospect data) 2. OpenAI node (GPT-4.1 mini for personalised opening) 3. Conditional branch: do you want ColdConvert refinement? (yes/no) 4. ColdConvert node (if yes) 5. Notion node (store the draft) 6. Delay node (wait 3 days) 7. Notion node (create follow-up reminder) Set error handling on each API call. If OpenAI times out, log it to a Slack channel and pause the workflow so you can investigate. If Notion is rate-limited, use n8n's built-in retry with exponential backoff (3 retries, 2-second intervals).

The Manual Alternative

If you prefer not to automate the entire sequence, you can do this more simply. Keep your prospect research in a spreadsheet or Airtable database. When you've identified a prospect, copy their details into ChatGPT Writer directly (or use the web extension), refine the email in the chat, then paste it into your email client. Set a manual calendar reminder for follow-up. This approach gives you tighter control over tone and saves the small overhead of setting up n8n. It's perfectly fine for teams doing 5 to 10 outreach attempts per week. At higher volumes, the time savings from automation become meaningful.

Pro Tips

Track your reply rate by cohort.

Once you've sent emails from this workflow, create a second Notion database to track which prospects replied and within how many days.

Note which personalisation angles work best. GPT-4.1 mini can analyse this data weekly and suggest adjustments to your prompt. This feedback loop improves your email quality over time without extra work.

Watch for rate limits.

OpenAI allows 3,500 requests per minute on standard accounts. If you're sending 50 emails at once via n8n, you'll hit that quickly. Stagger your requests by setting a 2-second delay between each API call in n8n. ColdConvert has lower limits, so check their docs and implement request queuing if needed.

Cost optimisation through model selection.

Use GPT-4.1 mini instead of GPT-4.1 for email generation. The quality difference is negligible for this task, and the cost is roughly one-third. Reserve GPT-4.1 for complex follow-up analysis or multi-step reasoning later in your pipeline.

Validate LinkedIn data quality.

Not all prospects post frequently or list recent activity. If your webhook receives empty fields for prospect_recent_activity, adjust your prompt to fall back to company information and general problem. Test your workflow with 5 real prospects before scaling to 50.

Avoid email fatigue.

If someone doesn't reply after three follow-ups, pause their sequence. Add a flag in your Notion database called "Unresponsive" and exclude those prospects from future reminder batches. Sending four emails to someone who ignores the first three damages your sender reputation and wastes time.

Cost Breakdown

ToolPlan NeededMonthly CostNotes
n8nCloud Pro or self-hosted£25–100Depends on execution count. 50 emails/week at 5 nodes each = ~250 executions. Comes under most plans. Self-hosted is free but requires your own server.
OpenAI API (GPT-4.1 mini)Pay-as-you-go£5–15~£0.15 per email at current pricing. Scales with volume. Add more if you refine drafts multiple times.
ColdConvert AIStarter or Pro£29–99Optional. Starter tier is ~500 emails/month. Pro is unlimited. Skip if budget-constrained.
NotionPro£8Store drafts, track follow-ups, analyse results. Free tier works if you use a single database.
ChatGPT WriterIncluded with ChatGPT Plus or Pro£15–200Only needed if you manually draft emails. Not required for automated workflow.
Total**, **£50–150Assumes 50–100 outreach emails per month and n8n on a standard plan. Scales sub-linearly; doubling volume adds ~£5.