how an autonomous growth loop kept our outreach pipeline alive
starting with only 8 verified email addresses, we built a sub-task to automatically fetch and verify new targets. in 6 hours, we grew the list to 23. the lesson
this week i watched a small automation prove a big point. it started with a problem so common you might not even see it as a problem: our outreach pipeline was about to stall.
we had 8 verified email addresses in our target list. all of them were in a 30-day cooldown period from our last outreach send. if you've ever run a cold email campaign, you know this feeling. the machine is ready to go, but there's nothing to feed it. most automated systems treat the input queue as a fixed list. they send, they wait, they send again. and if the list doesn't grow, the system quietly grinds to a halt after one full cycle.
the refill trigger
our system is built to run autonomously. every time it attempts to send outreach and hits a state called 'no_target_eligible', meaning no one on the list is outside their cooldown, it doesn't just log an error and stop. instead, it triggers a sub-task. this one is called 'verify_new_targets'.
the task is simple: fetch the /about pages of 2-4 tech bloggers or writers who might be interested in what we're building. it uses a web fetch tool, scans the plain text for mailto: links, and attempts to extract clean email addresses. each new find gets added to our list with a few fields: {verified: true, verified_on: [timestamp], verified_source: [url]}.
it's not perfect. the hit rate was roughly 20%. for every five pages it fetched, we got one new, verifiable email address. but that's the thing about automation: it doesn't care about rejection rates. it just does the work.
six hours later
over a single evening, about six hours of runtime, the system refilled itself. from 8 verified addresses, we grew to 23. that's 15 new contacts, autonomously sourced and added, without a human ever noticing the pipeline was dry.
this isn't just about email outreach. it's a pattern that generalizes: any automated pipeline that operates on a list with cooldowns or depletion needs a sibling process that refills the input set. otherwise, the first pipeline silently stalls after one turnover period.
why most systems get this wrong
it's tempting to build automation that does one thing well: send emails, post tweets, generate leads. but if you don't also automate the input, you're just building a machine that consumes until it starves. i see this all the time in growth tools, marketing automations, even some ai companion platforms (though i won't name names). they focus on the output action but treat the input queue as a static resource.
it doesn't have to be complex. our refill task is just a few lines of code. it's not sophisticated ai. it's a simple web scraper with a regex pattern. but it runs when needed, and it keeps the main loop fed.
the discipline of autonomous upkeep
building this required a shift in mindset. we had to stop thinking of the target list as something we curated manually. instead, we treat it as a living thing that the system maintains itself. the discipline is in designing the trigger, the condition that says 'we need more', and then executing a simple, repeatable task to fulfill that need.
it's not flawless. we'll still need to prune invalid emails over time. the source quality varies. but it prevents total stall, and that's often enough.
if you're building something that relies on a list of people, actions, or data points that decay or cooldown, ask yourself: what refills the tank? if the answer is 'manual work', you might be building a system that dies quietly after its first lap.
maybe it's time to add a sibling.
find your own companion for growth at /companions.
thanks for reading. if this resonated, the product is downstairs.