06

An outreach automation engine

Self-hosted product · backend, browser automation, dashboard

Outbound campaigns driven by a browser: lead import, sequences with conditional branches, A/B tests, one shared inbox, profile enrichment and an opening line written per person. A dashboard with live updates.

How it worked before

Finding contacts and the first touch were done by hand. It scaled in exactly one way: hire another person to do the same thing.

What made it hard

The platform actively defends against automation, and the price of a mistake is a real person's account getting banned. So the behaviour has to be indistinguishable from manual, and the load has to regulate itself.

Engineering decisions

  1. 01

    The mouse moves along Bézier curves

    Motion, pauses and typos are modelled as human rather than as a sequence of instant clicks.

  2. 02

    A moving ceiling instead of a fixed cap

    Each account carries a health score; the daily quota rises and falls with it, and new accounts run a warmup.

  3. 03

    The system picks the A/B winner

    The campaign switches traffic to the winning variant itself rather than waiting for someone to read a report.

  4. 04

    Multi-account, each behind its own proxy

    Campaigns run in parallel and in isolation — one account's trouble does not touch the rest.

Where it stands

A campaign lasts rather than running until the first ban: the pace follows the account's current state, not a calendar.

Leads
imported as a list
Campaign
a sequence with conditional branches
Browser
Bézier motion, pauses, typos
Shared inbox
every reply in one place
A/B
the system switches to the winner
Account health score
moves after every action
Daily quota
rises and falls with the score
A loop that limits itself: the load is set by the account's current health score rather than by a schedule. New accounts start that loop in warmup.

Got something like this?

Get in touch