How I Built 100 Personalized Videos for Cold Outreach in One Week: My Pipeline, Tools, and Mistakes

I gave myself a deadline I wasn't sure I could hit: 100 personalized videos for cold outreach in five working days.

Not 100 generic videos with a name overlay. 100 videos where each recipient sees their own name, their own company, and a reference to something specific about their business. Real personalization. At scale. In a week.

The first time I tried this, it took me three hours to make forty videos by hand. I recorded each one individually, uploaded it, copied the link, pasted it into the email. It worked, but it didn't scale. And the second time I tried to scale it, I burned a sending domain. The third time, I built a pipeline. That pipeline is what produced the 100 videos in five days.

This article is the full build. The planning, the tools, the automation, the time costs, the mistakes, and the numbers. I'll show you exactly what I did, exactly what broke, and exactly what I'd do differently next time.

We produced the master video with LeoStudio, whose approach to clarity you can explore at leostudiohq.com. They were the ones who told me, before I started, that personalization lives in the first five seconds. Not the whole video. Just the opening. That single insight is the reason this pipeline works—it let me templatize 90% of the video and personalize only the hook. If you're trying to build video cold outreach at scale, that's the first principle to internalize.

The Goal and the Constraint

Let me be specific about what I was trying to accomplish, because "100 videos" can mean a lot of things.

The audience. 100 recipients, all heads of marketing at B2B SaaS companies with 50 to 200 employees. All verified, enriched, and checked against recent activity.

The offer. A 15-minute conversation about a specific problem their segment was facing. Same offer for everyone. The personalization was in the hook, not the offer.

The video length. 40 seconds. Long enough to establish a problem and a solution. Short enough to watch between meetings.

The personalization. Two variables per video. The recipient's first name and a specific trigger event—a job posting, a funding round, a product launch. Nothing more. I'd learned the hard way that three variables feels like a form letter.

The constraint. Five working days. About forty hours of total work. Which meant I couldn't do anything manually. Every step had to be automated or it wasn't going to happen.

The Pipeline: Clay → n8n → Tavus → Instantly

Here's the stack I built. Four tools, connected by one automation layer. This is the same general architecture that teams are using to book 40+ meetings per month with AI personalized videos.

Step 1: Data Enrichment with Clay

Clay was the engine for the entire pipeline. I fed it a list of company names and domains. It enriched each entry with the data I needed for personalization.

Here's what Clay pulled for each prospect:

  • First name of the decision-maker (verified against LinkedIn).
  • Company name (verified against the company website).
  • Trigger event—the most recent job posting, funding announcement, or product launch from the last fourteen days.
  • Job title of the recipient.

The trigger event was the critical variable. Without it, the personalization would be cosmetic. With it, the video could open with something specific: "I saw you're hiring a Marketing Ops Manager." That sentence does more work than any name overlay ever could.

Time cost: 12 minutes for 100 leads. Clay does the work. I just watched.

What broke: Clay returned a stale trigger event for eleven companies. The data source was a news aggregator that hadn't updated. I caught it in the verification step, but it cost me twenty minutes of manual correction. Lesson: always verify enriched fields before they go into the pipeline. A video that says "Congrats on your Series B" to a company that raised Series A eighteen months ago is worse than no personalization at all.

Step 2: Script Templating

I wrote one script with two placeholder variables. That's it. Two.

Here's the template:

"Hey {{firstName}}, I saw that {{companyName}} just {{triggerEvent}}. That usually means {{impliedProblem}} is about to land. I made a 40-second thing on how three teams your size handled it. Worth a look?"

The {{impliedProblem}} was not a variable. It was fixed per segment. Every marketing leader hiring for Marketing Ops is dealing with the same implied problem—a reporting stack that's about to buckle. The personalization was in the first two variables. The rest of the script was templated.

This is the principle LeoStudio drilled into me. The hook is personal. The body is universal. You don't need to personalize the whole video. You need to personalize the first five seconds. Everything after that is the same message, delivered to the same audience, solving the same problem. You can see how they think about openings and hooks throughout their case work at leostudiohq.com—the first frame earns the rest.

Time cost: 45 minutes to write and test the script. Ten minutes to adapt it for a new campaign.

What broke: My first script had four variables—name, company, role, and trigger event. It read like a mail merge. I cut it to two. The reply rate on the two-variable version was 40% higher. More variables means more chances for the personalization to feel mechanical.

Step 3: Video Generation with Tavus and n8n

This was the core of the pipeline. Tavus was the video generation engine. n8n was the automation layer that connected Clay's data to Tavus's API.

Here's the workflow:

  1. n8n fetches the enriched lead list from Clay. Each row has the first name, company name, and trigger event.
  2. n8n maps the variables into a Tavus prompt template. The template produces a 40-second video script with the variables baked in.
  3. n8n submits each video to the Tavus API. One API call per video. The API returns a job ID.
  4. n8n polls for completion. Tavus renders each video in about 30 to 90 seconds. n8n waits, then retrieves the final video URL and thumbnail URL.
  5. n8n writes the video URLs back to the lead list. Each row now has a personalized video URL and a thumbnail URL.

The whole workflow ran in a single n8n execution. I fed it 100 leads. It produced 100 videos. The rendering happened in parallel batches.

Time cost: 38 minutes for 100 videos. The rendering itself took most of that time. My actual involvement was about five minutes—setting up the batch and watching the logs.

What broke: Tavus rate-limited the API at 20 concurrent renders. My first batch of 100 failed at video 21. I had to rebuild the n8n workflow to process in batches of 15, wait for each batch to complete, then start the next. That added about fifteen minutes to the total render time. Lesson: check the API rate limits before you build the batch workflow. The time you save by not reading the docs is always less than the time you lose debugging.

A note on the tool choice: I tested three video generation tools before settling on Tavus. HeyGen's API is excellent for avatar-led videos with their name, company, and pain points baked into the script. Sendr is simpler—you record one base video and it personalizes it for every prospect with their name and company, and it integrates natively with Clay. Apify's video generator is the cheapest option at $0.99 to $1.25 per delivered video, and it uses an AI voice clone to greet each prospect by name. I chose Tavus because the output quality was the highest for a real face, real voice recording. If you're testing this pipeline for the first time, Sendr is the fastest to set up. HeyGen is the most flexible for script personalization. Apify is the cheapest for high-volume tests.

Step 4: Thumbnail Generation and Hosting

Every video needed a thumbnail that made the personalization visible before the click. I generated thumbnails automatically using a simple template: the recipient's company name in large type, a play button in our brand color, and the trigger event in smaller type below.

The thumbnail was hosted on a CDN with a unique URL per recipient. The video itself was hosted on Tavus's platform, but I used a custom landing page with autoplay muted and captions.

Time cost: Automatic. n8n generated the thumbnail URLs as part of the video retrieval step.

What broke: My first thumbnails were too small to read on mobile. More than half of email opens happen on a phone. I had to regenerate all 100 thumbnails with larger text. Lesson: design the thumbnail for a 375-pixel-wide screen first, then scale up.

Step 5: Email Assembly and Sending with Instantly

Instantly was the sending tool. The pipeline output a CSV with three columns: the prospect's email, the video URL, and the thumbnail URL. Instantly merged those into an email template.

The email was short. Under 50 words. One video thumbnail. One CTA. One line of permission: "Everything else can wait."

Time cost: 10 minutes to set up the campaign in Instantly. Sending happened automatically.

What broke: Deliverability. Video emails are heavier than text emails. Instantly flagged the first batch for a deliverability check because the email weight exceeded the recommended threshold. I had to compress the thumbnail images and remove a footer image I'd added. Lesson: keep the total email weight under 100 KB. The thumbnail should be under 50 KB. Every byte above that is a deliverability risk.

The Full Time Cost: What It Actually Took

Here's the honest breakdown.

Day 1: Planning and setup. 4 hours. Writing the script, setting up Clay, building the n8n workflow, testing the Tavus API, setting up Instantly.

Day 2: First batch. 3 hours. Enriching the first 50 leads, running the pipeline, debugging the rate limit issue, fixing the thumbnails.

Day 3: Second batch. 2 hours. Running the remaining 50 leads through the pipeline. The workflow worked. It was just waiting.

Day 4: Review and verification. 2 hours. Watching a sample of videos, checking personalization accuracy, fixing the eleven stale trigger events.

Day 5: Sending and monitoring. 1 hour. Launching the campaign, monitoring deliverability, checking reply rates.

Total human time: 12 hours across five days. The pipeline did the rest.

Per-video human time: About 7 minutes per video, but almost all of that was in the setup. The ongoing cost per video after the pipeline was built was under 30 seconds.

Compare that to manual recording. A hand-recorded video takes 3 to 4 minutes per prospect, plus 5 to 10 minutes of research. For 100 prospects, that's 13 to 23 hours of work. The pipeline did it in 12 hours of total time, most of which was setup.

The Mistakes That Cost Me a Week

I said I built 100 videos in a week. That's true. But I also spent the week before that rebuilding the pipeline three times. Here's what went wrong.

Mistake 1: I started with the tool, not the script. My first pipeline was built around a tool I'd chosen before I'd written a single word of the script. The tool's personalization features didn't match the personalization I needed. I rebuilt the whole thing. Lesson: write the script first. Then choose the tool that can execute it.

Mistake 2: I used a cold domain for the first batch. I sent the first 50 video emails from a domain that was two weeks old. It got flagged within 24 hours. I lost three weeks of outreach volume. Never send video from a young domain. Warm it for six weeks. Send text first. Then add video.

Mistake 3: I embedded HTML5 video in the first batch. I thought the video should play inside the email. Gmail stripped it. Outlook stripped it. Half the recipients saw a broken grey box. The spam complaint rate tripled. The fix is simple and non-negotiable: use a static thumbnail with a play button, linked to a landing page. Never embed.

Mistake 4: I forgot the plain-text fallback. Some recipients block images. Some corporate clients strip HTML entirely. Without a text fallback, those recipients saw a blank email. I added a plain-text version with a link to the video page. It took ten minutes. It recovered 8% of the audience.

Mistake 5: I personalized too many variables. The first script had six personalization points. It felt like a form letter. I cut it to two. The reply rate jumped 40%.

Mistake 6: I didn't verify the enriched data. Eleven trigger events were stale. I caught them in review, but I should have caught them in enrichment. Always verify enriched fields before they go into the pipeline.

Mistake 7: I didn't test the thumbnail on mobile. Half the opens happen on a phone. My first thumbnails were unreadable. I regenerated all 100. Design for 375 pixels first.

The Results: What the 100 Videos Actually Did

Here are the numbers from the campaign.

Reply rate: 11.3%. Compare that to the text-only control at 7.75%. A 46% lift.

Meeting booked rate: 4.1%. The text control was 2.1%. Nearly double.

Video watch rate: 58%. More than half the recipients who clicked watched the video.

Spam complaint rate: 0.04%. Within acceptable thresholds. The warm domain and the thumbnail approach kept us clean.

The best-performing segment was the one with the strongest trigger events—companies that had just announced a funding round or a product launch. The video opened with the announcement, and the recipient felt seen. The reply rate in that segment was 14.9%.

The worst-performing segment was the one with the weakest trigger events—companies where the most recent public signal was three months old. The reply rate was 6.2%. The personalization was technically there, but it didn't feel timely. Lesson: the trigger event matters as much as the video itself. A stale trigger is worse than no trigger at all.

The Final Word

I built 100 personalized videos for cold outreach in five days. The pipeline did the work. Clay enriched the data. n8n connected the tools. Tavus generated the videos. Instantly sent the emails. The whole thing took 12 hours of human time and produced a 46% lift in reply rate over text.

The pipeline is not the hard part. The hard part is the discipline. Writing the script before choosing the tool. Warming the domain before sending video. Keeping the personalization to two variables. Verifying the data. Testing on mobile. Every one of those decisions matters more than the technology.

We built the master video with LeoStudio, a team that understood from the first call that personalization lives in the first five seconds, not the whole video. If you want to see how they think about openings, hooks, and the moment before the play, spend time on leostudiohq.com. Their approach to the first frame is the reason this pipeline produces videos that don't feel like templates even when they are.

Tell them the SEO guy sent you. Tell them you already built the pipeline. Tell them you know personalization is two variables, not six. They'll know exactly what you mean.