- Home
- Case studies
- Moving a B2B agency’s cold email outreach to n8n so the team can manage it themselves
Moving a B2B agency’s cold email outreach to n8n so the team can manage it themselves
Contacts flow out of HubSpot automatically, a three-message sequence runs without a person, and anyone who replies leaves the queue that same day.
3 min read
- Client
- B2B agency
- Industry
- Sales / Automation / Outreach
- Scope
- AI sales agents & lead generation
- Delivery time
- 7 days
Who the client was and what was getting in the way
The client runs a B2B agency and acquires customers through cold email. Contacts were stored in HubSpot, but sending happened outside it, so every campaign began with copying data into a spreadsheet. Someone on the team then manually replaced the name, company, and industry in the message and sent it from an ordinary inbox. With one hundred contacts, that took hours.
The results were poor for several reasons. In practice, everyone received the same message regardless of industry, company size, or stage of the conversation, so few people replied. There was also no way to detect replies, meaning people who had already answered kept receiving follow-ups. That is the worst possible outcome in cold email because it damages the relationship the team has already managed to start. On top of that, no one knew how many emails had been opened or which subject lines worked, so there was nothing to improve.
The client set one firm requirement: the solution had to be no-code. They wanted to change the copy, sequence, and conditions themselves without asking anyone for help.
What we built
We built the entire workflow in n8n to meet that requirement. It starts in HubSpot: the automation retrieves contacts from selected lists using criteria such as industry, company size, and status, and immediately filters out anyone who has already received a message or replied.
Messages are assembled from templates with variables for the person’s name, company, and industry. They are sent through AWS SES from the client’s own domain, with sender-address rotation because that directly affects whether a message reaches its recipient. The sequence has three steps: an initial value proposition, a follow-up after three days based on an implementation example, and a closing message after seven days. Each step has its own template so the third message does not sound like a repeat of the first.
Reply detection turned out to be the most important part. The automation checks whether a contact has replied, either through an incoming event or a scheduled check. If they have, their HubSpot status changes automatically and they leave the remaining sequence. If not, it continues.
How it works today
The sales team sets up a list in HubSpot, and that is practically all it has to do to launch a campaign. Everything else happens automatically: retrieving contacts, building the messages, sending them, waiting three and seven days, checking for replies, and updating statuses. Replies arrive in the salesperson’s inbox; that is the only point where a person is needed.
The build took seven days. Two went into analyzing the process, mapping segments, and configuring sender domains. Three were spent building the workflow and testing all conditional paths. The final two covered sending to a small group of real contacts, monitoring deliverability, comparing subject lines, and training the team.
The outcome
A three-step follow-up sequence now runs automatically, without anyone watching the calendar. Reply detection prevents the previous process’s most costly mistake: no one who has replied receives another message. Sending through AWS SES from the company’s own domain improved deliverability compared with an ordinary inbox. And because the workflow is no-code, the team can edit messages and conditions without involving developers — the project’s non-negotiable requirement has been met.
What we would do differently
Checking for replies on a schedule is convenient to build, but at higher volumes it becomes imprecise and costly. Next time, we will use incoming events from the start and keep scheduled checks only as a fallback.
The second lesson is domain warming. We handled it alongside the build, but it should begin several weeks before the first campaign because a new sending domain starts at a disadvantage regardless of how well it is configured. The third concerns analytics. Missing data was one of the original problems, yet we added open and reply tracking at the end. For the next implementation like this, data collection will be the first part we switch on; without it, comparing subject lines is guesswork.
Related projects
How a consulting firm got a weekly list of companies showing fresh buying signals
Instead of manually checking the press and public registers, the sales team starts Monday with a ready-made list of companies, each lead scored and assigned an owner.
A database of German HVAC installers built from scratch for export sales
More than 580 verified German B2B companies, delivered in batches within a few days, with email addresses, registry details, and a fit score.