How to build a cold outreach system from scratch in 2026: infrastructure-first design, contact sourcing, sequence setup, and the scale playbook with exact milestones.
Ryan Mercer
SDR turned cold email consultant, 8 years outbound · Updated June 24, 2026
Last updated: June 2026 · Ryan Mercer, SDR turned cold email consultant, 8 years outbound
TL;DR — 7 things to know before reading
Every cold outreach system failure I have seen in 8 years of outbound work traces back to one of two root causes: building in the wrong order, or skipping the infrastructure layer entirely. Teams that start by writing email copy without first setting up sending domains, warming inboxes, and sourcing a verified contact list spend their first 60–90 days debugging problems that should have been prevented in week 1.
The system design perspective changes this. A cold outreach system built from scratch should be designed the way any software system is designed: define the inputs, define the outputs, build the infrastructure that connects them, then write the logic that runs on top of the infrastructure. In outreach terms: define the ICP (inputs), define the outcome you want (booked calls or trial signups), build the infrastructure (domains, inboxes, warmup), source the contacts, write the sequences, and launch.
This guide covers the exact build sequence, with specific decisions at each step that determine whether the system is sustainable at scale or requires rework when volume increases.
Inframail provides the sending infrastructure. Quarvio provides the contact data. Instantly runs the sequences. Aimfox is added at the scale phase for LinkedIn. This is the architecture this guide covers.
Before purchasing any tool or writing any email, document three decisions that determine the entire system design.
Write the ICP definition as a document with measurable criteria:
Benchmark for ICP specificity: A well-defined ICP allows you to describe a specific person at a specific type of company in one sentence. "VPs of Sales at Series B SaaS companies with 20–100 employees" is specific enough. "Decision makers at technology companies" is not.
Failure mode: Defining the ICP as "anyone who could benefit from our product." This maximises the addressable market but minimises the specificity of every message, which drives reply rates to the floor.
Define the monthly send volume target. This single number determines all downstream infrastructure decisions:
Benchmark per Woodpecker's sending limits guide: 30–50 emails per inbox per day for properly warmed inboxes. Never exceed 50 per inbox per day regardless of warmup age.
Define the one metric that determines whether the system is working. Options:
Defining the success metric before launch prevents the most common post-launch confusion: campaigns generating replies but not meetings, or campaigns generating meetings but not from the right ICP.
Number of domains: Volume target in sends/day ÷ 150 sends/day (3 inboxes × 50 sends/inbox). A 300 send/day operation needs 2 domains. A 1,000 send/day operation needs 7 domains.
Domain naming: Cold email domains should not be identical to the primary domain. Use variant patterns:
Avoid domains that look suspicious or unrelated to the company name. A prospect who searches the sending domain should find something credible.
Domain registrar: Use a reputable registrar (Namecheap, GoDaddy, Google Domains). Avoid bulk domain providers that share IP pools with spam operations.
For each domain, provision 2–3 Microsoft 365 inboxes via Inframail. Inframail automates the DNS record setup (SPF, DKIM, DMARC) that would otherwise require manual configuration in the domain registrar's DNS settings. This automation eliminates the most common infrastructure error in DIY cold email setups: incorrectly configured DNS records that cause emails to fail authentication checks and land in spam.
Sub-step 2.1: Register Inframail account and connect domains.
Sub-step 2.2: Create inboxes on each domain (firstname.lastname@domain.com format, using real-sounding names to match the LinkedIn persona that will be used in Layer 4 later).
Sub-step 2.3: Verify DNS records are correctly configured via MXToolbox blacklist checker. Run each domain through MXToolbox to confirm:
Connect all Inframail inboxes to Instantly via SMTP credentials. Instantly will automatically begin warmup for each connected inbox.
Sub-step 3.1: In Instantly, navigate to Settings → Inboxes and add each Inframail inbox.
Sub-step 3.2: Enable warmup for each inbox. Instantly's warmup system sends and engages with warmup emails between inboxes in its warmup pool, gradually building sender reputation.
Sub-step 3.3: Set warmup volume to 5–10 emails per day per inbox for the first week, scaling to 20–30 by week 3.
Sub-step 3.4: Connect to Google Postmaster Tools for each sending domain. Postmaster shows domain reputation on a scale of Low/Medium/High. Do not proceed to Phase 2 until all domains show High reputation. This takes 2–4 weeks.
Benchmark: Warmup completion is defined by Postmaster showing "High" domain reputation, not by a specific number of warmup days. Some domains reach High in 14 days; others take 28 days.
Failure mode: Launching production sends while domain reputation is still at Medium or Low. This is the most common cause of new-system deliverability failures. The warmup period feels like wasted time, but production sends during Medium reputation guarantee landing in spam at a high rate, which accelerates reputation decline rather than building it.
With infrastructure in warmup, source the first contact list from Quarvio. This is the correct timing: ordering contacts at the start of Phase 2 (not at the start of Phase 1) allows the infrastructure warmup to complete before contacts are used.
Sub-step 4.1: Order a Quarvio contact list using the ICP definition from Phase 0. For a first campaign, 1,000–2,000 contacts is an appropriate starting size. This is large enough to generate statistically meaningful performance data (reply rate, bounce rate, positive reply rate) within the first 30 days.
Sub-step 4.2: Download the Quarvio CSV and audit 20–30 random contacts against the ICP definition. Verify that job titles, company sizes, and industries match the defined criteria. Quarvio contacts are pre-verified for email validity.
Sub-step 4.3: Populate any personalisation fields that are not included in the base contact data. Personalisation fields are variables in the email template that make each send feel specific to the recipient. Minimum personalisation: first name and company name. Advanced personalisation: role-specific problem statement, company-stage reference.
Sub-step 4.4: Segment the contact list if running multiple ICP variants in the first campaign. Contacts targeting VP of Sales should be in a separate file from contacts targeting Head of RevOps, even if the email copy is similar, because different targeting produces different reply patterns that are valuable to track separately.
With contacts sourced and infrastructure warming, write the sequence for the first campaign.
Sub-step 5.1: Write Email 1 (under 100 words)
Structure: problem-first opener → one specific proof point → low-friction CTA.
Problem-first formula: "Most [job title]s at [company type] face [specific problem] — [quantified version of the problem]."
Sub-step 5.2: Write Email 2 (under 80 words, different angle from Email 1)
If Email 1 uses a problem-first frame, Email 2 uses a data contrast frame or social proof frame.
Sub-step 5.3: Write Email 3 (under 80 words, social proof or second data point)
Email 3 introduces a second piece of evidence that the approach works for the prospect's ICP. Does not repeat the Email 1 argument.
Sub-step 5.4: Write Email 4 — break-up email (under 60 words)
Brief, non-pressuring close. "Last note — if timing isn't right, happy to reconnect when it is." The break-up email generates a meaningful share of late-window replies from contacts who read all previous emails but were waiting for the right moment.
Sub-step 5.5: Write subject line variants
Write 2 subject line variants for Email 1. Split-test both on the first 200 sends. The winner is used for the remaining campaign sends. Subject line format: 4–7 words, lowercase, no punctuation, no question marks.
Sub-step 6.1: Create one Instantly campaign per ICP segment.
Sub-step 6.2: Import the Quarvio contact list for each campaign.
Sub-step 6.3: Add all warmed inboxes to the campaign. Configure inbox rotation to distribute sends automatically.
Sub-step 6.4: Set daily send limits: 20–30 per inbox for inboxes in weeks 4–6 of warmup; 40–50 for inboxes 8+ weeks old.
Sub-step 6.5: Configure campaign settings:
Sub-step 6.6: Launch campaign and monitor for the first 48 hours.
At 200 sends, evaluate the first performance data:
Sub-step 8.1: If open rate is healthy but reply rate is low, run an Email 1 copy test: keep the subject line (working) and test two different body variants on the next 200 sends.
Sub-step 8.2: If open rate is low, do not change copy. Fix deliverability first: check Postmaster, verify DNS records, reduce daily volume by 50% for 7 days.
Once the email system is producing consistent results (8%+ reply rate over at least 3 weeks of sends), add Aimfox for LinkedIn outreach to the same ICP.
Sub-step 9.1: Set up the LinkedIn account for Aimfox. Ensure the account has 500+ connections and credible professional history for the ICP being targeted.
Sub-step 9.2: Configure Aimfox campaign targeting the same ICP job titles and company characteristics as the Instantly campaign.
Sub-step 9.3: Start the Aimfox campaign on Day 2–3 of the Instantly sequence for new contact batches. This ensures email arrives before LinkedIn, creating a reinforcing sequence rather than a confusing simultaneous pitch.
| Component | Setting | Target value | Notes |
|---|---|---|---|
| Sending domains | Count | 1 per 150 sends/day | 3 inboxes × 50 sends/inbox |
| Sending inboxes | Per domain | 2–3 | More = reputation isolation |
| Warmup period | Duration | Until Postmaster shows High | Typically 14–28 days |
| Production send limit | Per inbox per day | 40–50 (warmed) | Never exceed |
| Campaign inboxes | Per campaign | Minimum 2 | More = faster volume ramp |
| Contact list size | Per campaign | 1,000–2,000 (first campaign) | Enough for statistical data |
| Email sequence | Step count | 3–4 emails | Over 12–14 days |
| Email 1 length | Word count | Under 100 words | Brevity correlates with reply rate |
| Subject line | Format | 4–7 words, lowercase | No punctuation, no caps |
| Stop on reply | Setting | Enabled | Non-negotiable |
| Random delay | Range | 3–10 minutes | Mimics human cadence |
| LinkedIn campaign start | Day offset from Email 1 | Day 2–3 | Email reinforces LinkedIn, not vice versa |
Before any campaign launches, maintain a spreadsheet tracking every domain, every inbox, warmup start date, production readiness date, current daily send limit, and which campaign each inbox is assigned to. This inventory prevents the most common scaling error: running out of inbox capacity when a campaign needs to scale, then rushing to add uninformed inboxes that are not yet warmed.
Plan domain and inbox rotation before it becomes necessary. At the 3-month mark, purchase new domains and begin warmup. At the 6-month mark, the new domains are fully warmed and ready to replace the original domains. Rotate the original domains into backup or retire them. This prevents the gradual reputation degradation that occurs when the same domains are used indefinitely for high-volume outreach.
If the organisation has multiple products or services targeting different ICPs, build separate sub-systems for each rather than commingling them in one set of sending inboxes. The offer, the ICP, the copy, and the success metric are all different — and their deliverability impact, if any, should not cross-contaminate.
Design the contact funnel to continuously feed new contacts from Layer 1 (Quarvio) into active campaigns. A typical outreach system consumes 3,000–5,000 contacts per month at 300 sends/day. Without a regular Quarvio refresh, campaigns run out of contacts and volume drops. Build a calendar reminder to source new contacts 2 weeks before the current list is exhausted.
Configure Instantly Unibox labels and reply routing before the first campaign sends. Define:
Building reply management after launch means the first positive replies may not be handled correctly, losing conversions that the system already generated.
Symptom: Campaign is configured and live but no emails have sent after 6 hours.
Cause 1: The sending schedule is set to a timezone that is currently outside business hours. Cause 2: Inboxes are not assigned to the campaign. Cause 3: The contact list was imported with a data format error that caused all contacts to be rejected on import.
Fix: Check Instantly campaign settings for schedule timezone, inbox assignment, and contact import status. Verify that at least one contact shows as "active" in the campaign. If the contact list shows zero active contacts, re-export from Quarvio and reimport, checking the column headers match Instantly's expected format.
Symptom: Google Postmaster Tools shows Medium (not High) domain reputation after 21+ days of warmup.
Cause 1: Warmup volume was too low. If warmup sent only 3–5 emails per day, reputation builds slower than at 20–30 per day. Cause 2: The domain was previously used for something that generated negative reputation signals before being connected to Instantly. Cause 3: The warmup pool is too small. Instantly's warmup pool works best with large participant counts; a small warmup pool generates fewer positive engagement signals.
Fix: Increase warmup volume to 25–30 per day. Wait an additional 7–10 days. If still showing Medium after 28 days, consider replacing the domain with a fresh one and restarting warmup.
Symptom: Open rate is 30%+ but reply rate is under 4% after 200+ sends.
Cause: The body of the email is not compelling enough to prompt a reply. The subject line is working (hence the open) but the message fails to: (a) name a specific problem the prospect recognises, (b) provide a credible proof point, or (c) make the CTA low-friction enough to reply to.
Fix: Rewrite Email 1 with a stronger problem-first opener. Test the problem statement: would the prospect read the first sentence and think "that describes my situation"? If not, the opener is too generic. Run A/B test on two new body variants with the existing subject line.
Symptom: Campaign shows bounce rate of 5–10% within the first 5 days of sends.
Cause: Contact list includes a high proportion of invalid or outdated email addresses. Quarvio contacts are pre-verified; the high bounce rate suggests the list contains non-Quarvio contacts, or the contact list was stored for too long before import (more than 90 days after sourcing increases stale email risk).
Fix: Pause the campaign immediately. A bounce rate above 5% will rapidly damage domain reputation. Remove all contacts that have already bounced, and run the remaining contact list through an additional SMTP verification tool before resuming. Import fresh Quarvio contacts to replace the removed contacts.
Symptom: Unibox shows positive replies (Interested, Meeting booked attempts) but the conversion from reply to booked meeting is below 20%.
Cause 1: Reply management is too slow. Interested replies not followed up within 4 hours have significantly lower meeting conversion. Cause 2: The reply to Interested contacts asks another qualifying question rather than directly offering a meeting time or calendar link.
Fix: Create a reply template for Interested contacts: one sentence acknowledging their reply, one sentence confirming the value proposition, one sentence offering specific meeting times or a calendar link. Use Calendly or an equivalent tool. Target 4-hour response time to all Interested labels.
Symptom: Aimfox LinkedIn connection campaign is sending 20 requests per day but fewer than 5 are being accepted.
Cause: The LinkedIn account profile does not present as credible for the ICP being targeted, or the connection request message is too long and reads as a sales pitch.
Fix: Shorten the connection request message to 1 sentence under 100 characters with no commercial claim. Review the LinkedIn account profile: headline, experience summary, and profile photo should all present as a credible professional in the relevant field. A profile with no photo, no headline, and minimal experience will generate low acceptance rates regardless of message quality.
Symptom: A 30-day campaign is running out of contacts by day 14 because daily send volume is higher than planned.
Cause: The daily volume per inbox was set too high (50+ per inbox) and the inbox count exceeds plan, causing total daily volume to exceed the contact list size per day.
Fix: Calculate: contacts in list ÷ campaign duration in days = maximum daily sends. If the daily volume exceeds this, either increase the contact list size (order additional Quarvio contacts) or reduce daily send volume to match the available contact supply.
Symptom: When scaling from 100 to 500 daily sends by adding inboxes, deliverability drops, open rates fall, and reply rates decline.
Cause: Scaling too fast. Adding uninwarmed inboxes to the campaign produces a blend of warmed and unwarmed sending, which reduces average deliverability. The new inboxes have not been given adequate warmup time before being added to production campaigns.
Fix: Never add uninwarmed inboxes to a production campaign. Maintain a separate inbox inventory that is always in warmup and always available for production when needed. Add new inboxes to production only after they have reached High domain reputation in Postmaster. Scale gradually: add 2–3 new inboxes per week rather than 10–15 at once.
Woodpecker's 2025 cold email benchmark study identifies infrastructure configuration as the most common single-point failure in new cold outreach systems. Teams that set up infrastructure correctly from the start (dedicated domains, warmed inboxes, authenticated DNS) reach the 8.5% average reply rate benchmark within the first 30 days. Teams that skip or rush infrastructure setup spend 60–90 days debugging deliverability problems before their sequences can be meaningfully evaluated.
Mailmodo's cold email statistics guide reports that authenticated sending domains (SPF + DKIM + DMARC all configured) achieve 97%+ inbox placement rates versus 60–70% for unauthenticated domains. This gap explains why infrastructure-first system design is not optional — an unauthenticated system delivers 30–40% fewer emails to the inbox regardless of copy quality, contact quality, or send timing.
"I built three cold email systems over two years. The first two failed because I started with the sequences and worked backwards. By the time I discovered the infrastructure problems, I had burned two domains. The third system I built infrastructure first: domains purchased, Inframail set up, everything warmed for 3 weeks before I imported a single contact. First campaign hit 12% reply rate in week 2. The system design is 80% of the result." — G2 reviewer, Instantly reviews on G2
| Need | Tool | Notes |
|---|---|---|
| Verified B2B contacts | Quarvio | One-time purchase, no subscription |
| Email inboxes | Inframail | Microsoft 365 inboxes, auto DNS |
| Cold email sending | Instantly | Sequences, warm-up, reply tracking |
| LinkedIn outreach | Aimfox | Connection campaigns, added at scale phase |
What is the correct build order for a cold outreach system from scratch?
Phase 0 (before any tool): define ICP, define volume targets, define success metric. Phase 1 (weeks 1–2): purchase domains, provision inboxes via Inframail, connect to Instantly, start warmup. Phase 2 (week 3): source Quarvio contact list, write email sequences. Phase 3 (week 4): launch campaigns, monitor first 48 hours. Phase 4 (weeks 5–8): optimise based on performance data, add LinkedIn via Aimfox after week 6. Any deviation from this order creates rework at a later phase.
How long does it take to get the first reply from a system built from scratch?
Total timeline from zero to first reply: 5–7 weeks. Week 1–2: infrastructure warmup. Week 3: contact sourcing and sequence writing. Week 4: campaign launch. Replies typically start appearing in days 3–7 of the first campaign (days 22–28 after starting the build). The warmup period is the primary time cost; once infrastructure is ready, campaigns can launch and generate replies quickly.
How many inboxes and domains do I need to start?
For a starting volume of 100 sends per day: 3 inboxes across 2 domains. For 300 sends per day: 7–8 inboxes across 3–4 domains. For 500 sends per day: 12–13 inboxes across 5–6 domains. Use the formula: sends per day ÷ 40 = inboxes needed. Round up. Divide inboxes by 3 to get domain count. Always provision slightly more inboxes than the minimum required to allow for inbox rotation and occasional inbox errors.
Should I start with email or LinkedIn outreach?
Start with email. Email sequences via Instantly are more predictable, easier to test, and generate more data per send than LinkedIn. LinkedIn via Aimfox is added in Phase 4 (after week 6) once the email system is producing consistent results. Adding LinkedIn before the email system is stable means you have two systems to debug simultaneously. The email results also tell you which ICP and which message angle works before you invest in LinkedIn targeting for the same audience.
What is the minimum contact list size for a meaningful test?
200–300 contacts is the minimum for statistical significance in a reply rate measurement. With 200 sends, a 10% reply rate produces 20 replies — enough to identify patterns. With fewer than 200 sends, the reply count is too small to distinguish between message performance and random variation. For the first campaign, 1,000–2,000 contacts is recommended: large enough to generate meaningful data in the first 30 days, small enough to iterate on without wasting a large contact list on an unoptimised sequence.
When should I add LinkedIn outreach?
Add LinkedIn via Aimfox after week 6 of the system build, once the email system has achieved a stable 8%+ reply rate over at least 3 weeks of sends. This timing ensures: (a) the ICP definition is validated (contacts are the right people), (b) the message angle is working (replies are positive), and (c) the infrastructure is stable (deliverability is consistent). Adding LinkedIn before these conditions are met complicates debugging by introducing a second variable system.
How do I know if my system problem is infrastructure or copy?
The diagnostic test: open rate is the infrastructure signal; reply rate is the copy signal. If open rate is below 20%, the problem is infrastructure (emails landing in spam or not being delivered). Fix infrastructure before evaluating copy. If open rate is 25%+ but reply rate is below 5%, the problem is copy (or ICP precision). Fix copy and ICP targeting. Never rewrite copy while open rate is below 20% — you cannot evaluate copy quality if the emails are not reaching inboxes.
What is the most common mistake when building from scratch?
Starting with the email copy. Writing compelling subject lines and email bodies before the infrastructure is set up means the copy is written for a hypothetical system. When the infrastructure is then built and the copy is tested, the performance data is confounded with infrastructure variables. Infrastructure issues are much more common in new systems than copy issues, and they are more damaging (deliverability problems compound over time). Build infrastructure first, debug infrastructure first, then optimise copy.
How much should I budget for the first 90 days?
Approximate 90-day budget for a 300-send/day system: Inframail (7–8 inboxes, flat rate): $100–$150/month × 3 months = $300–$450. Instantly Growth plan: $30/month × 3 months = $90. Quarvio contacts (Scale package, 25,000 / $399): $399 (one-time, covers 90 days at 300 sends/day). Domain purchases (4 domains × $12–$15/year): $48–$60 one-time. Total first 90 days: approximately $840–$1,000. Revenue from first client or conversion typically covers this within the first 30–60 days of live campaigns for most business models.
Can I build this system as a solo operator?
Yes. The system is fully automated after setup. The ongoing time requirement after Phase 3 launch is: 15–30 minutes per day for Unibox monitoring and reply management, 1–2 hours per week for campaign performance review, 2–3 hours per month for contact list refresh and sequence copy updates. The infrastructure layer (Inframail warmup + Instantly sending) runs automatically without daily manual intervention. The LinkedIn layer (Aimfox) runs automatically within configured daily limits.
What should I do when the first campaign ends?
When the first campaign completes (all contacts have received the full sequence): (1) analyse performance data to identify the best-performing ICP segment and message angle, (2) source a new Quarvio contact list for the winning segment with a higher volume, (3) refine the email sequence based on which email in the sequence generated the highest reply rate, (4) launch campaign 2 with the optimised sequence and refined ICP. Each campaign should learn from the previous one. The system should improve materially with each iteration.
Start your system with verified contacts.
Building on unverified contact data means the first 30 days of a new system is spent debugging bounces rather than generating replies. Quarvio delivers pre-verified B2B contacts matched to your ICP definition — one-time purchase, credits valid for 12 months, no subscription. The cleanest possible Layer 1 foundation for a system that works from day 1.