TL;DR: Most cold email is terrible because it is generic, untargeted, and written by someone who did zero research on the recipient. I built an outbound pipeline that starts with a company name, discovers decision-makers automatically, enriches their profiles with AI, personalizes every email, and sends through sequenced automation. Here is the exact architecture, including the scraping modules, the AI personalization chain, and the pattern you can steal.
Why Most Outbound Fails
The average cold email response rate is under 3 percent. The reason is not the subject line, the offer, or the timing. It is that the email was written for nobody in particular. The sender bought a list, plugged names into a template, and hit send. The recipient can tell in 1.5 seconds that nobody did any research on them.
AI changes this equation. Not because AI writes better subject lines. Because AI can do the research that no human salesperson has time to do — at scale, for every single recipient, automatically. My outbound pipeline does exactly that. It starts with a company name and produces a fully researched, personalized email sequence without a single manual data entry. Here is how.
Stage 1: Company Discovery
The pipeline starts with a Google Sheet. You drop in company names — target accounts, competitors, companies in a specific industry — and the automation finds the people who work there.
The Company-to-Contact Pipeline watches the sheet for new rows, sets variables for the search parameters, fires an Apify LinkedIn actor that scrapes employee profiles from the target company, fetches the dataset, and aggregates the results into structured contact records. The module chain is: Google Sheets Watch → Set Variables → Apify Actor (LinkedIn Company Employees) → Fetch Dataset → Text Aggregator → Router (job title filter).
The router is where the intelligence lives. It filters by job title relevance — VP, Director, Head of, Chief — and discards individual contributors who are not in decision-making roles. The survivors get routed to the enrichment stage.
The job title filter is not optional. Scraping everyone at a company and emailing all of them is spam. Filtering to decision-makers and emailing only them is targeted outbound. Same tool. Different philosophy.
Stage 2: Contact Enrichment
Stage 1 gives you names, titles, and LinkedIn URLs. Stage 2 builds the complete professional profile. The LinkedIn Profile Enrichment System takes each contact URL and runs it through a second Apify actor that scrapes the full profile: headline, about section, location, current company, previous roles, open-to-work status, and profile photo.
But enrichment is not just about LinkedIn data. The pipeline also runs company-level enrichment — pulling industry, company size, recent news, and technology stack from sources like Outscraper and publicly available business data. This gives the AI personalization engine context it can actually use.
Stage 3: AI Personalization
This is where most “AI outbound” tools fall apart. They take the enrichment data and plug it into a template: “Hi {first_name}, I see you work at {company} as {title}.” That is not personalization. That is mail merge.
My pipeline feeds the full enrichment dataset into OpenAI with a system prompt designed for genuine personalization. The prompt receives the contact’s current role, company context, about section, and industry data. It is instructed to write a three-sentence opening that references something specific about the recipient’s actual work — not their title, not their company name, but something they actually do. The output then goes through a second OpenAI call that structures the full email body, adds a relevant value proposition based on the recipient’s industry, and formats the CTA.
The module chain: OpenAI Completion (personalization research) → OpenAI Completion (email body + CTA) → JSON Transform → HTTP Send.
“AI personalization is not about inserting someone’s name into a template. It is about giving the AI enough context that it can reference something specific and real about the recipient’s actual work.”
Stage 4: Sequenced Send
The final stage handles delivery. The pipeline supports two modes: email and physical mail. The email path uses HTTP modules to send through Gmail or an SMTP relay, with send windows, throttling, and bounce handling built into the scenario logic. The physical mail path uses a Snail-Mail Marketing Bot that generates printed letters from the same enrichment data — useful for high-value accounts where a physical touchpoint cuts through the noise.
The Google Sheets variant of the pipeline is even simpler: Sheets Filter (new rows) → OpenAI Completion (personalized email) → Router (send vs. draft). It reads from a spreadsheet of pre-enriched contacts, generates personalized emails in batch, and either sends directly or saves to drafts for review.
What I Actually Think
Building an outbound pipeline is not a technical challenge. It is a philosophy challenge. The technology exists. The question is whether you use it to spam more people or to actually be more relevant to the right people.
The job title filter is the ethical line. Scraping everyone at a company and blasting them all is technically possible and morally bankrupt. Filtering to decision-makers based on role relevance turns a spam cannon into a precision instrument. Build the filter before you build the send button.
Personalization requires context, not variables. The difference between mail merge and AI personalization is the amount of context you give the model. If your prompt only knows a name, title, and company, the output will sound like a template because that is all the information it had to work with. Feed it the about section, the company industry, recent news, and the person’s actual job function, and the output changes. More context equals more authentic personalization. There is no shortcut around this.
Start with the Sheets variant first. The full scrape-to-send pipeline is powerful but complex. The Google Sheets pipeline — feed in a list of contacts, get personalized drafts back — takes an afternoon to build and immediately improves your reply rates. Ship the simple version, prove the concept, then add the scraping layer.
The Outbound Pipeline Pattern
Company Name → Employee Discovery → Profile Enrichment → AI Personalization → Sequenced Send. Repeatable. Scalable. Zero manual research.
The Module Architecture
| Stage | Trigger | Core Actions | Output |
|---|---|---|---|
| Discovery | Google Sheet new row | Apify LinkedIn Company → Fetch → Filter | Decision-maker list |
| Enrichment | Contact URL | Apify Profile Scraper → Aggregate | Full professional profile |
| Personalization | Enriched dataset | OpenAI (2 calls: research + draft) | Personalized email body |
| Delivery | Approved draft | JSON Transform → HTTP Send / Gmail | Sent email sequence |
The pipeline exists. The pattern is tested. The only question is whether you will build it or keep writing “Hi {{first_name}}, I came across your profile” and wondering why nobody replies.














