# How we follow up with every inbound lead

The sales agent we run on Kortix — connected to HubSpot, email, and Google Calendar. It researches each new lead, drafts a personalized follow-up, and offers a call slot, with a human approving the send.

Canonical page: https://kortix.com/use-cases/lead-follow-up

Inbound leads have a short half-life. A form filled out on Tuesday is worth far
more if the follow-up goes out Tuesday than if it goes out Friday, but a good
follow-up takes research — who the company is, what they do, why they might have
signed up — and that research is exactly what gets skipped when the pipeline is
full.

We handle this by putting an agent on every new lead. It researches the company,
drafts a personalized follow-up, and offers a time to talk. This writes up how we
run that on Kortix — the connections, the steps, and the guardrails.

- **Team:** Kortix
- **Connected systems:** HubSpot · Email · Google Calendar
- **Trigger:** Scheduled HubSpot sweep (every 15 min)
- **Mode:** Trigger-driven · human-gated

## The problem

The follow-up that converts is the one that shows we read the form and understood
the company. That takes a few minutes of research per lead, and a few minutes
times every inbound is more time than a growing team has. So follow-ups either go
out generic or go out late, and both lose deals.

Templates make the sending fast but not the personalization, which is the part
that matters. Booking the call adds another round of back-and-forth on top. The
work that moves a lead forward is the work that keeps slipping.

## What we built

Our lead pipeline in **HubSpot** is connected to an agent running on Kortix.
A scheduled sweep spawns a fresh, isolated session — a cloud sandbox — with
scoped access to what a follow-up needs: the lead record, the web for
research, our email, and the team calendar. It researches each new lead,
drafts a personalized message, and proposes a call slot. A human approves
before it sends.

## How it works

### Connect HubSpot as the trigger

A scheduled **trigger** sweeps HubSpot every 15 minutes for new leads, and each
firing spawns a fresh **session** in its own sandbox. A sweep that turns up
several new leads at once still runs as a single session, but each lead is
handled as an independent unit — a research or drafting failure on one lead
never blocks or corrupts the others. Sessions don't share state between
sweeps: the marker written back onto each HubSpot record is what carries
forward.

### Give the agent our playbook

How we follow up lives as **skills** and **memory** loaded into every session:
our positioning, the tone we write in, what a good qualifying question looks
like, and follow-ups that landed before. The agent writes to that standard rather
than inventing one, and the memory updates as deals move.

### Connect what a follow-up can touch

Through scoped **connectors**, brokered server-side so no raw token reaches the
model, the agent can:

- **Research the company** — it reads the lead's site and public information to
understand what they do and why they signed up.
- **Read and update HubSpot** — full lead context in, research notes back on the
record.
- **Draft the email** — a personalized follow-up written to our playbook, ready
to send.
- **Offer a slot on Google Calendar** — it checks real availability and proposes
a specific time to talk.

### Set the guardrails

The agent researches and drafts freely, but nothing goes out on its own: every
follow-up stops at a **human approval gate** as a draft for a person to review
and send. Credentials are encrypted in the secrets manager and injected at
runtime, scoped to the agents you grant them to.

### Let each lead run

With that in place, a new lead arrives already worked: the company researched,
the record updated, a personalized email drafted, and a call slot proposed
against real availability. The person on sales reviews the draft, adjusts if they
want, and sends — instead of starting each follow-up from a blank page.

> **The pattern**
> Connect the CRM via a **trigger** on new leads, give the agent scoped
> **connectors** into HubSpot, email, and the calendar, encode the sales playbook
> as **skills** and **memory**, and gate every send behind a human.

## Guardrails

Giving an agent the ability to reach out to leads is a brand question as much as
a sales one. The relevant controls on Kortix:

- **Isolation.** Each sweep runs in its own isolated sandbox — a fresh session
  that can cover several new leads at once, each handled as an independent
  unit so a failure on one never blocks the rest. Only the drafts it produces
  are written back out.
- **Scoped secrets.** The HubSpot, email, and Calendar credentials are encrypted
  in the secrets manager and injected into the sandbox at runtime, scoped to the agents you grant them to.
- **Human approval gate.** No message reaches a lead without a person reviewing
  the draft and sending it.
- **Everything is code.** The agent's persona, skills, and permissions are files
  in the repo — versioned and changed through a reviewed **change request**, not a
  dashboard setting.

## The outcome

- **Every lead:** Researched and followed up, not just the easy ones
- **Same-day:** Personalized follow-up ready while the lead is still warm
- **3 systems:** HubSpot, email, and the calendar in one agent

Every inbound lead now arrives with the research done, a personalized draft
written, and a call slot offered — waiting for a person to approve rather than
sitting untouched. The team spends its time deciding which leads to push instead
of doing the same research over and over.

The setup relies on four pieces: sandbox isolation per lead, a secrets manager to
broker the HubSpot, email, and Calendar tokens, a human approval gate before
anything reaches a lead, and memory that improves as deals move.
