All work
2026Solo buildBackendAutomation

Automated cold outreach

One company domain in; decision-makers found, emails verified and personalised outreach sent, with no manual step after the input.

stages
APIs
contacts in the demo run

The pipeline

  1. Seed domain
  2. Lookalike companiesNinjaPear
  3. Decision-makersProspeo
  4. Verified emailsNinjaPear
  5. Human checktype yes
  6. SendBrevo

The problem

B2B prospecting is usually four manual steps: find similar companies, find the right people, find their emails, then write to each of them.

What I built

A four-stage Python pipeline: lookalike companies (NinjaPear), C-suite and VP contacts (Prospeo), verified work emails (NinjaPear), then personalised emails through Brevo. Each stage is its own function, so a provider can be swapped by changing one endpoint.

What broke, and how I fixed it

  1. The brief named Ocean.io and Eazyreach, but both blocked sign-up because of new-domain checks. I swapped in NinjaPear as a working equivalent and kept every stage modular, so switching back is a one-function change.
  2. Empty API responses and rate limits: each stage logs and skips what it can't resolve, waits between calls, and catches its own failures so one bad record never stops the run.

Result

In the recorded demo run, a single domain produced 25+ verified decision-maker contacts across 5 lookalike companies.

Trade-offs

Outreach can't be undone, so before anything is sent the pipeline lists every recipient and waits for an explicit "yes". Anything else cancels the send.

Stack
PythonREST APIsNinjaPearProspeoBrevopython-dotenv