LeadFlow NL
AI Automation · B2B Outreach · Production

LeadFlow NL

An AI-powered prospecting and outreach platform designed to identify qualified businesses and generate highly personalised cold emails at scale.

Timeline May 29 – Jun 3, 2026
Category AI Automation
Type Independent Project
Stack Node.js · Python · PostgreSQL
Deployment Railway
Users Internal
Region Netherlands

What LeadFlow does.

In 5 days, I built a system that finds Dutch cleaning companies, researches each one individually, and sends their owner a cold email that reads like it was written by someone who actually looked at their business. It follows up, tracks replies, and reports daily. Research, drafting, scheduling, and follow-up are automated. Human involvement is limited to final approval before emails are sent.

The emails follow strict rules: maximum 6 lines, one genuine observation, one question, no pitch, no mention of services. The goal is to start a real conversation, not close a sale in the first message.

Why generic outreach fails.

Most cold outreach is either manual and slow or automated and generic. LeadFlow was built to automate personalisation without sacrificing quality.

From manual to automated.

I was manually researching companies, writing outreach emails, and tracking replies. The process worked but didn't scale. LeadFlow was built to automate research, drafting, and follow-up while keeping a human approval step for quality control.

Early results.

9
Emails sent in testing phase
2
Positive replies from business owners
22%
Initial reply rate — 2 replies from 9 test emails

2 replies from 9 emails sent in initial testing (22% reply rate). Sample size is intentionally small. Larger-scale testing is ongoing. These results indicate early signal, not statistically proven performance.

Real emails. Real replies.

01JP Cleaningservice
Cold email sent to JP Cleaningservice
LeadFlow researched JP Cleaningservice's specialisation in facade cleaning and certified glasswork, then drafted this email. Specific, short, no pitch.
Reply from JP Cleaningservice
They replied within hours, sharing their story and inviting a personal conversation. The system hadn't pitched anything. Just asked a genuine question.
02Lotos Clean
Cold email sent to Lotos Clean
LeadFlow spotted Lotos Clean's niche in hotel cleaning in Amsterdam — unusual for a cleaning company. That became the entire angle of the email.
Lotos Clean reply thread
They asked what the interest was. The follow-up explained the context. No hard sell, just a conversation about their growth.
Lotos Clean expresses interest
Their final reply: "I'm always looking for new clients. If you can offer something interesting that works, I'm willing to explore." Qualified lead. Fully automated.

Automation scales. Humans judge.

Automation handles scale. Humans handle judgment.

Every email goes through a Telegram approval gate before it's sent. The operator sees the draft, can approve it as-is, edit the subject line, rewrite the body, or reject it entirely. Nothing leaves without a human sign-off.

Telegram bot approval flow
The bot queues drafts for review. The operator can approve, edit subject line, edit message body, or reject. All from inside Telegram.
LeadFlow NL Telegram bot profile
@leadflownl_bot, the dedicated approval bot. Every outreach passes through here before it reaches a real inbox.

How lead discovery, research, AI generation, approval, and delivery work together.

Google Maps
GoudenGids
Bedrijvengids
Dutch Business Directories
Lead Discovery Engine
Python · Scraper
PostgreSQL Lead Database
Deduplication · City Tracking
Qualification Engine
Hot (80+) · Warm (40+) · Discard
Research Pipeline 6 parallel tasks
Website Analysis
Reviews
Social Profiles
Job Posts
News Mentions
Prospeo Enrichment
Claude
Draft Generation
GPT-4o-mini
Quality Review
Telegram Approval Bot
Human sign-off required before send
Email Delivery Layer
Gmail + Outlook Rotation · Daily Caps
Reply Tracking
Daily Reporting

Six stages, fully automated.

01
Discovery
Scrapes GoudenGids, Bedrijvengids, and Google Maps across all 342 Dutch municipalities in population order. Captures name, address, phone, website, and email. Deduplicates automatically and tracks which cities are exhausted.
PythonPostgreSQLGoogle MapsGoudenGidsBedrijvengids
02
Qualification
Each company is scored on years in business, employee count, and specialisation. Hot (80+) and warm (40+) move forward. Everything below is filtered out. The pipeline only works on companies worth contacting.
Pythonscore_company.py
03
Research
Six parallel tasks run against each qualified company: full website analysis, Google review scraping, social media presence, job postings, news mentions, and contact enrichment via Prospeo to find a founder's personal email rather than a generic inbox.
PythonProspeo API
04
Drafting
Claude writes the personalised Dutch cold email from the research profile. GPT-4o-mini then acts as an independent editor, catching generic phrasing, tone drift, and anything that sounds like it was written by a machine. Two models because one model cannot honestly judge its own output.
Claude APIGPT-4o-mini
05
Approval
Draft surfaces in Telegram. Operator approves, edits, or rejects. Nothing sends without sign-off.
Node.jsTelegram Bot API
06
Sending & Follow-up
Emails rotate across Gmail and Outlook accounts with enforced daily caps (5 → 15 → 30/day per phase). Non-replies trigger automated follow-up sequences. A master cron scheduler runs everything: scraping at 7AM, reporting at 6PM. Fully unattended on Railway.
Node.jsGmail APIRailway

What was actually hard to build.

01
Multi-source scraping without duplicates
Synchronising company data from three sources (Google Maps, GoudenGids, and Bedrijvengids) required building a deduplication layer that could match companies with slightly different names, addresses, or phone numbers across sources without losing legitimate entries or creating duplicates in the database.
02
Email deliverability under rotation
Managing Gmail and Outlook account rotation while respecting per-account daily send limits, avoiding sender reputation damage, and handling OAuth token refresh across multiple accounts required careful orchestration, especially when Railway's outbound SMTP was blocked and OAuth2 had to replace it entirely.
03
AI quality control at the output level
Using separate generation and review models (Claude to write, GPT-4o-mini to edit) reduced generic outputs and helped maintain consistent Dutch tone. A single model reviewing its own output consistently missed tone drift and marketing language it had introduced. The two-model approach caught what one model alone would not.
04
Fault tolerance across an unattended pipeline
Handling API timeouts, exhausted search regions, Prospeo returning no results, and incomplete company data, all without the pipeline silently continuing or crashing. Every failure mode required a defined degradation path: skip and log, alert and pause, or retry with backoff. A system running unattended at 3AM needs explicit failure behaviour at every stage.

The choices that define the product.

01
Honesty over volume
The system was built with one hard constraint: never send a fake compliment, a made-up statistic, or a generic email dressed up as personal. One dishonest email doesn't just get ignored. It poisons every email that follows. Every research claim is verified before it becomes a sentence in an outgoing message.
02
Two models, not one
Claude writes. GPT-4o-mini edits. The reason: a model cannot honestly evaluate its own output. It has too much attachment to what it generated. A second model with no context on the original draft will catch what the first one misses: generic phrasing, marketing drift, unnatural Dutch tone. This is the core of why the emails read like a human wrote them.
03
Loud failures only
A system running unattended at 3AM with no one watching has two acceptable states: working correctly, or alerting loudly. Scraping fails, APIs time out, cities exhaust, Prospeo finds nothing. Every failure mode was designed to degrade gracefully or surface immediately. Silent failures are the most dangerous kind.

The stack behind it.

AI Models
Claude API GPT-4o-mini
Infrastructure
Node.js Python PostgreSQL Railway
Integrations
Gmail API (OAuth2) Telegram Bot API Prospeo API

What I bring to a team.

LeadFlow isn't just a technical project. It's proof that I can identify a real business problem, design a solution from scratch, build and deploy it in production, and iterate until it works. I built this in 5 days, working alone. The system automates lead discovery, research, drafting, approval workflows, and follow-up scheduling while providing monitoring and failure alerts.

If you're looking for someone who ships, thinks in systems, and doesn't stop at a working prototype. That's what I do.