AgentLabs
All work

AI Workflow Automation

Fully automated GTM outbound engine

The signal-driven cold-outbound engine we build for revenue teams: it researches, segments, and drafts, and a person spends 30 minutes on a Monday reviewing every send.

of human time per week
30 min
of sends human-reviewed
100%
  1. Signal prospecting

    Job postings, technology adoption, community, news, alert feeds.

  2. Segment-aware generation

    Written per ideal customer profile, not one template at a list.

  3. Learning loop

    Targeting and messaging improve from every campaign.

  4. Scheduled execution

    Configured per sequence for deliverability.

  5. human decides

    Human review before send

    Drafts land in the sending platform. Nothing goes out unreviewed.

What the team runs today

Everything a GTM team spends its week on, prospect research, segmentation, personalised drafting, scheduling, runs headless. The human contribution is 30 minutes on a Monday, reviewing and approving every send: human oversight by construction.

This is AI Workflow Automation in practice.

Common inPrivate equity portfolio companies

Inside the engine

Three scheduled jobs, the products each step calls, and the two points where a person decides. This is the build, drawn the way it gets handed over.

  • Agent step
  • A person decides
  • Guard, stops the run

Build the week's outbound

Monday 06:00GitHub Actionsweekly-outbound.yml

  1. 00

    Expire cold backlog

    Leads that were never loaded are dropped after two weeks, before a euro is spent on more. A hiring signal goes stale fast, and writing to a role that closed reads worse than silence.

  2. 01

    Discover signal

    Hiring intent from live job postings, plus funding and growth news from alert feeds, each item classified by a model before it is trusted.

    • TheirStack
    • Google Alerts
    • Hacker News
    • Serper
    • Claudeclassify
  3. !

    Credit budget guard

    Worst-case cost is priced before the first paid call. Over the monthly ceiling, or credits exhausted mid-run, the pipeline stops and says so instead of quietly spending.

    • Slackalert
  4. 02

    Qualify and route to a segment

    Size and role filters, domain de-duplication, a permanent exclusion list, and a check against everyone already contacted. What survives is routed to the segment whose message fits it.

    • Neondedup
  5. 03

    Enrich the contact

    The buyer, then the trigger: funding stage and headcount growth, paid for once per company rather than once per contact. Every address is verified before it is used.

    • Apollopeople
    • Apollocompany
    • NeverBounce
  6. 04

    Write the sequence

    One email per contact off the segment's template, opening on that company's own signal, plus two variants to test and a follow-up sequence where every step is a new angle. Length, subject and banned-phrase checks run on each draft.

    • Claudedraft
  7. 05

    Grade it, then rewrite it

    A stronger model reviews each draft as a cold-email and deliverability specialist: it scores the draft and rewrites it. Above threshold it can load, below it is held for attention.

    • Claudereview
  8. 06

    Stage the campaign as a draft

    One campaign per segment, created as a draft and never activated by code. Each contact's email rides along as a per-lead variable, with the sender's signature and a visible opt-out.

    • Instantly
  9. 07

    A person reads and activates

    The one human step in the build: about 30 minutes on a Monday, reading the week's campaigns and switching on the ones that should go. Until that click, the week's work has been sent to nobody.

    • Instantlyactivate

Handle every reply

Every 3 hours, weekdaysGitHub Actionsreply-watch.yml

  1. 01

    Poll the inbox

    New inbound messages are stored before any model call, so an outage delays a reply instead of losing one.

    • Instantlyinbox
    • Neon
  2. 02

    Classify and draft the answer

    Interested, not now, wrong person, opt-out. Each reply is classified and an answer is drafted in the sender's own voice. Anything that fails retries on the next run.

    • Claudeclassify
    • A

      Opt-out

      Suppressed across every mailbox and mirrored to our own records. No draft, no reply, never contacted again.

      • Instantlyblock list
    • B

      Everything else

      The draft is posted to the sales channel with the thread, the classification, and two buttons.

      • Slack
  3. 03

    Approve and send, or decline

    One tap, from a phone. Only that tap sends the mail, on the original thread, through an endpoint that exists for exactly this.

    • Slackapprove
    • Vercelendpoint
  4. 04

    Move the deal

    An engaged contact, and only an engaged contact, is written to the CRM at the right stage.

    • HubSpot

Measure, and kill what fails

FridayGitHub Actionsmonitor.yml

  1. 01

    Pull the week's numbers

    Sends, opens, replies, bounces and mailbox warmup scores, per campaign and per segment.

    • Instantlyanalytics
    • Neon
  2. 02

    Kill rules

    Every segment carries a number written down in advance: a minimum volume, and the reply rate it has to clear. Below it, the segment is called dead rather than nursed.

  3. 03

    Pick the winning variant

    The two variants are compared on replies, not opens, and the winner sets how next week is written.

  4. 04

    Deliverability alarm

    A bounce rate or a warmup score outside its threshold raises an alert the same day. Domain reputation is the one asset this system cannot rebuild quickly.

    • Slackalert
  5. 05

    Friday digest

    Outbound, CRM, search and pipeline data are read together and written up as one short brief: what moved, what to stop, what needs a decision.

    • Claudewrite-up
    • HubSpot
    • Search Console
    • Slackdigest
  6. 06

    The judgement calls

    Which segment to retire, which wedge to fund, when to change the offer. The system brings the evidence and the deadline, a person makes the call.

One shared state, not three scripts

Neon Postgres behind a Vercel API

Every job reads and writes the same records: companies, contacts, outreach, signals. A contact can only ever be at one place in the funnel, a run that dies halfway resumes from the state it stored, and nobody is discovered, paid for, or emailed twice.

  1. discovered
  2. enriched
  3. draft
  4. reviewed
  5. loaded
  6. sent
  7. exits
  8. dropped
  9. unsubscribed

What the engine is not allowed to do

These are properties of the build, not policies somebody has to remember. Each one is code that runs whether anybody is watching or not.

  • Never sends unprompted

    Campaigns are created as drafts. No code path activates one, so the only way an email leaves is a person clicking send.

  • Never spends past the ceiling

    Worst-case data cost is priced before the first paid call, and the run aborts rather than exceed the month's budget.

  • Honours an opt-out immediately

    Suppression is written to the sending platform first, so it holds across every mailbox and every future campaign.

  • Pauses, never activates

    The monitor can stop a failing campaign on its own authority. Starting one is reserved for a person.

  • Loses nothing on failure

    Inbound is stored before it is processed, and every stage retries from stored state on the next run.

  • Leaves a trail

    Every draft, rewrite, score and kill decision is recorded, so any send can be explained afterwards.

The loop closes. Friday's read, the winning variant, the dead segments, the deliverability picture, is what Monday's run targets and writes against. The engine gets better at its job every week without anyone rewriting it.

Other work

Have a workflow like these?

Bring yours. We will map where AI creates real leverage and what it takes to build it, maintainably.

You speak with the people who would build the system. No sales pressure, and an honest read either way.