Resources
Get the Vibe System
โšก Pro Tip

Enable the --skip-api-on-catchall flag to bypass paid API tiers entirely on catch-all domains, preserving your credit balance.

GUIDE โ€ข LEAD GENERATION

How to Build a High-Converting
B2B Lead Engine for Free

AITechDad AITechDad Updated May 2026

๐Ÿš€ B2B lead database subscriptions are eating your margins.

๐Ÿ“จ Outbound lists are filled with dirty emails that trigger spam filters.

๐Ÿ“… Domain reputation gets permanently ruined by bounce rates above 2%.

We built a custom, automated lead enrichment and waterfall validation engine that replaces Clay and Apollo for $0/mo.

โœ… Automated 100% of our B2B lead validation pipeline.
โœ… Annualized over $2,800 in subscription savings.
โœ… Protected domain outreach reputation with 0% bounce-rate waterfall logic.

If you are a boot-strapper, solo founder, or exploring a proof-of-concept (POC) in 2026, subscribing to expensive outbound tools before validating your product is a margin killer. High-end enrichment platforms like Clay bill at a steep $185/month, and data scrapers like Apollo add another $49/month.

You don't need a heavy corporate card to build a high-performing outbound engine. With standard Python, free-tier APIs, and agentic orchestration, you can run a state-of-the-art lead enrichment and verification machine for $0/month.


The Outbound Challenge: Protect the Domain Senders

The outbound game has changed. Email service providers (ESPs) like Google and Microsoft have drastically lowered their tolerance for spam. If your cold outreach email list has a bounce rate higher than 2%, your domain reputation will plunge. Once blacklisted, your emails will bypass your prospects' inboxes and go straight to the spam folder.

To solve this, we split our free B2B lead engine into two core tasks: 1. Lead Discovery: Programmatically locating the exact marketing, growth, and creative leaders for target accounts. 2. Waterfall Validation: Running a multi-tier verification process to confirm the mailbox physically exists before sending a single email.


Annualized Cost Savings: The Bootstrapper Stack

Here is how our custom local stack stacks up financially against standard B2B SaaS platforms:

Tool Layer Enterprise Outbound Stack Our Custom B2B Stack Monthly Savings Annual Savings
Lead Enrichment Clay ($185/mo) Agentic Web Scraping $185.00 $2,220.00
Email Discovery Apollo ($49/mo) Custom SMTP + Free APIs $49.00 $588.00
Total Cost $234.00/mo $0.00/mo $234.00 $2,808.00

By configuring our own local orchestrator, we unlock $2,808.00 in annualized savings while maintaining complete control over our validation logic and databases.


The 3-Tier Waterfall Validation Architecture

To achieve high-fidelity validation without spending money, we built a waterfall validator script (tools/waterfall_email_validator.py) that executes three verification tiers in sequence:

3-Tier Verification Waterfall

Tier 1: Local SMTP

Free ยท Direct Socket Handshake

RE

Tier 2: Reoon API

20 Free Daily Credits

ZB

Tier 3: ZeroBounce API

100 Free Monthly Credits

Tier 1: Local SMTP Handshake (100% Free)

The script resolves the domain's MX records and establishes a raw TCP socket connection to the target mail server on port 25. It issues EHLO, MAIL FROM, and RCPT TO commands. * If the server responds with 250 OK, the mailbox exists. * If the server responds with a 550 User Unknown code, the mailbox is invalid. * The script immediately issues a QUIT command, verifying the email without ever sending a physical message.

Tier 2 & 3: Dynamic Credit-Saving APIs

If the local SMTP check gets blocked by an IP policy (such as a Spamhaus blocklist on residential IPs) or times out, the validator falls back to commercial API endpoints. To keep running costs at zero, the script dynamically tracks your balances and shifts priorities: * Reoon Daily Credits (20/day): Checked first because they reset every 24 hours. * ZeroBounce Monthly Credits (100/mo): Promoted to Tier 2 only if Reoon's daily credits hit 0. * Reoon Lifetime Credits (Backup): Demoted to the final fallback to ensure your permanent paid reserves are preserved.

โšก Atomic Fact: Outbound emails sent to catch-all domains bypass standard SMTP handshake verification. Our script detects catch-all domains in Tier 1 and bypasses paid API queries entirely if the `--skip-api-on-catchall` flag is passed, saving credit balances.

Solving the "Catch-All" Shadowing Trap

A major breakthrough in our validation pipeline was handling domain variations (like .com vs. .co.uk regional extensions).

Enterprise domains are often configured as "Catch-All" servers, meaning they accept mail for any address to filter it later. Simple lead checkers hit a catch-all domain like @tui.com and immediately stop, saving a guess format. Our custom engine bypasses this trap using Cross-Domain Fallback:

[Lead: K*** B*** (UK)]
1. Try k***.b***@tui.com โ”€โ”€> SMTP checks catch-all โ”€โ”€> Flag catch-all (Keep as backup)
2. Do not stop โ”€โ”€> Try k***.b***@tui.co.uk โ”€โ”€> Not a catch-all!
3. Reoon returns VALID โ”€โ”€> Return verified k***.b***@tui.co.uk (100% inbox match)

By prioritizing non-catch-all domains and checking variations in loops, we achieve high-fidelity validation that standard databases miss:

Name (Redacted) Title Source URL (Redacted) Validated Email Validation Method
K B Design Direction Lead https://www.linkedin.com/in/kb*** k.b@tui.co.uk ZeroBounce API
P M Senior Brand Manager https://theorg.com/.../p-m p.m@tui.co.uk ZeroBounce API
K M Marketing Manager https://theorg.com/.../k-m k.m@tui.co.uk ZeroBounce API

Technical Insight: LLM Completion vs. Agentic Orchestration

A key learning from our build is the fundamental difference in how different environments execute prompts.

When you run a lead generation task inside a Gemini Consumer App or a raw Google Sheets (Apps Script) LLM formula, you are making a one-shot completion call. The model simply guesses what the output should look like based on its training data. Because it has no access to the live web or execution environments: * It routinely hallucinates LinkedIn profile URLs and handles (e.g., guessing /in/ellie-eyles instead of /in/ellie-eyles-403a727a). * It cannot check if a link returns a 404 error. * It cannot run network socket calls or handle Smpt/API timeouts.

The Power of Agentic Orchestration

In contrast, a stateful Agent (like Antigravity) or a cloud-deployed agentic API does not just "predict text." It orchestrates tools:

โšก Agentic Insight

A cloud-deployed Agent has a stateful execution loop. It can search Google, read the actual text snippets to extract real vanity URLs (preventing hallucinations), programmatically test links via HTTP requests, handle connections dynamically, and fall back to API backups if an SMTP connection is blocked by Spamhaus. The agent self-corrects on-the-fly.

Google Sheets as the Central Command Center

Because simple LLM API calls are static and prone to hallucinations, using them directly inside Google Sheets cells yields low-quality results. However, by deploying an Agent API as the backend connection for your sheets, you turn your spreadsheet into a dynamic command center:

  1. You write a company domain into a cell.
  2. A Google Sheet script sends an API call to the cloud-deployed Agent.
  3. The agent launches web search loops, identifies leads, validates their LinkedIn profiles, runs the SMTP/API waterfall validator, and writes back 100% verified, clean data into your sheet.
  4. The agent acts as the brain, coordinating multiple sub-tools while you manage the inputs and outputs from your spreadsheet.

Key Takeaways for Builders

  • Handle Policy Blocks: Strict mail servers return a 550 code for IP blocks (like Spamhaus). Your script must parse the raw response message to differentiate between a blocked IP and a non-existent email address, preventing false-negatives.
  • Stable Caching: By saving the successful name-pattern format (like first.last) for a domain, you can prioritize it on subsequent runs for the same company, drastically reducing credit consumption on paid APIs.
  • Orchestration Wins: Do not trust simple LLM models to write email addresses or links. Use Python scripts and agents to verify every output programmatically.