Cold email open rates are dying. Video messages cut through — a personalized 60-second video from a real (or AI) person gets replied to at 3–5x the rate of a text email. The problem is that recording 50 individual videos a week is not a job anyone wants. This pipeline does it automatically.

I built a system in n8n that reads a prospect list from Google Sheets, writes a personalized script for each contact using Claude, generates an AI avatar video via HeyGen's API, and sends the video link by email — all without touching it after the initial setup. One run. Fifty personalized videos. Twenty minutes.

What you'll need A HeyGen account (paid — needed for API access), an n8n instance, a Claude or OpenRouter account for script generation, and Gmail for sending. Your prospect list in Google Sheets with columns for name, company, and one personalisation detail per contact.

Why HeyGen Over Synthesia

Both work. HeyGen's API is easier to call from n8n — the video generation endpoint accepts a script and avatar ID and returns a video URL when rendering is done. Synthesia has tighter enterprise controls but more friction for API-first use cases. For outreach pipelines, HeyGen is the faster path.

The Full Pipeline

Google Sheets — Read Prospects → Split Into Items → Claude — Write Script → HeyGen API — Create Video
Wait for Render (Poll) → Get Video URL → Gmail — Send Outreach → Sheets — Log Status

Step 1 — Reading and Looping Prospects

Use a Google Sheets node to read all rows where the status column is empty — that's your unsent batch. A Split In Batches node processes them one at a time to avoid hitting the HeyGen API rate limit.

Step 2 — Writing the Script with Claude

Each script is personalised using the prospect's name, company, and one specific detail you've noted (a recent product launch, a LinkedIn post, a pain point). Pass these to Claude via the HTTP Request node with a structured prompt:

The prompt asks for a 60-second script (roughly 150 words), conversational tone, one specific reference to the contact's situation, and a clear CTA. Claude returns the script text directly — no parsing needed if you prompt it cleanly.

Keep the script tight

Under 150 words. One problem mentioned. One thing you can help with. One ask. HeyGen renders faster on shorter scripts and viewers drop off after 90 seconds regardless.

Step 3 — Generating the Video via HeyGen API

HeyGen's video generation endpoint is a simple POST request. Pass your avatar ID, the script text, voice ID, and optionally a background. The API returns a video_id immediately — the actual video takes 2–5 minutes to render.

To wait for the render without blocking n8n, use a Wait node set to 3 minutes, followed by a polling loop that calls the HeyGen status endpoint until status === "completed". Then extract the video_url.

HeyGen rendering time Short videos (under 60 seconds) render in 2–4 minutes. Longer videos can take 8–12 minutes. Build your polling loop with a reasonable timeout and a fallback row status of "render_failed" in Sheets so you can retry those manually.

Step 4 — Sending the Email

Use the Gmail node to send the outreach email. The subject line includes the prospect's first name. The body is 3 sentences: context for the video, the video link (HeyGen generates a shareable page), and the ask. Keep it short — the video does the selling.

Write the email body in n8n using an expression that pulls from the same row data used for the script. Consistent personalisation across the subject, email body, and video makes the whole thing feel human.

Step 5 — Logging Back to Sheets

After each send, update the prospect row in Sheets: set status to "sent", log the video URL, and record the timestamp. This prevents duplicate sends on re-runs and gives you a record for follow-up sequencing.

Results in Practice

For a B2B SaaS company targeting HR managers in Germany, this pipeline generated 50 personalised videos in under 25 minutes of active setup time. The outreach campaign achieved a 31% reply rate in the first week — compared to a 6% baseline on their previous text email sequences. Three meetings booked from the first batch.

What This Costs

HeyGen API pricing is per video credit — roughly €0.50–1.00 per video depending on your plan. For 50 videos: €25–50. Claude API costs are negligible (a few cents for 50 scripts). Gmail is free. Total cost per campaign of 50 videos: under €60, including infrastructure.