How Should an AI Agent Safely Find Email? A 7-Step Checklist for okki go Users (and Everyone Else)

2026-09-18 · Victor Okeke

Who this checklist is for

If you're a founder running a lean outbound motion — okki go, or any stack you've stitched together — and you just wired up an AI agent to "find more leads," this is for you. It's also for the ops person who inherited the workflow and now owns the burn rate.

Below are 7 steps. I run them every time we spin up a new campaign or swap a data source. Roughly 25 minutes of human sanity-checking per run. That's it.

I'm not going to convince you that verification matters. You already know. I'm going to show you the order I do things in, because the order is where most teams quietly get it wrong.

Step 1 — Define what "safe" means before the agent touches anything

Sit down and write three sentences: what your agent is allowed to do, what it must never do, and who reviews the output before send. Ours says: allowed to enrich, score, and draft; never allowed to buy lists, bypass opt-outs, or auto-send above 40/day from the primary domain.

Why does this matter? Because most of the domain damage I've seen wasn't a tool problem. It was a "nobody wrote down the boundary" problem.

Step 2 — Pick a data enrichment API, then test it on 50 rows you already know the answer to

Every enrichment vendor pitches "waterfall + intent." Fine. The way to cut through it: take 50 contacts whose real emails you already have, and run them through the API. Measure match rate, field accuracy on title/company, and how many rows come back as "guessed" patterns versus verified.

In our last bake-off we tested four APIs against the same 50-row sample. Match rates ranged from 41% to 78%. That's roughly a 2x difference on the same input — which is to say, the API choice matters more than the personalization prompt.

Step 3 — Verify first, personalize second (this is the step most teams skip)

This is the one I wish someone had told me in 2023. The instinct is to run AI personalization on everything, then verify. Wrong order.

Personalization is expensive — in tokens, in time, in the buzz you feel when the drafts look good. Verification is cheap and fast. So verify first, drop the dead addresses, and then spend the personalization budget on the survivors.

On our last 5,000-row batch, verifying first cut the personalization cost by about 38% and — more importantly — meant we weren't emailing a single guessed-pattern address. Not ideal, but workable. Actually, better than workable.

Step 4 — Constrain AI personalization to verified fields only

Here's the trap: your enrichment API returns a field called something like "recent_news." Your agent sees it, writes a personalized opener, and half the time the news is 14 months old or belongs to a different company with a similar name.

Rule we landed on: the agent can only reference fields tagged verified in our enrichment output. Title, company, industry, headcount band. That's it. No "recent news," no "personal interest" fields, no inferred hobbies.

The drafts get slightly less flashy. The reply rate barely moves. The number of "who are you and how did you find me" replies drops to zero.

Step 5 — Cap what the agent can pull, per day, per domain

Agents don't get tired. That's the problem. Set hard caps: X new contacts enriched per day, Y sends per domain per day, Z retries before a contact is marked "do not contact."

Our caps: 300 enriched/day, 40 sends/domain/day from the primary, 200 from the secondary. These aren't magic numbers. They're what we found kept bounce rates under 2% while still giving us enough volume to test copy.

Step 6 — Wire the compliance check to the FTC, not to a blog post

Per FTC guidance on the CAN-SPAM Act (ftc.gov/business-guidance/resources/can-spam-act-compliance-guide-business), commercial email must include: accurate header info, a clear opt-out mechanism, a valid physical postal address, and a truthful subject line. Opt-out requests must be honored within 10 business days.

We put every one of those into a pre-send checklist the agent has to pass. It sounds trivial. It isn't — most of the "our domain got burned" stories I hear trace back to a missing postal address or an opt-out link that 404'd after a redesign.

Step 7 — Calculate TCO, not the API's sticker price

This is a hill I will die on (gently). The per-credit price of your enrichment API is the smallest part of the actual cost. The real TCO includes:

  • Credits spent on rows that come back unverified
  • Downstream personalization tokens burned on dead contacts
  • Deliverability damage from even a 3% bounce spike
  • Engineering time to debug the agent when it silently breaks
  • Your time writing "can you stop emailing me" replies

I once picked a $0.004/row API over a $0.009/row one. The cheaper one had a 22-point lower match rate on our sample, which we didn't notice until the first campaign. The supposedly cheaper option cost us roughly 2.4x more per valid contact. Lesson learned the hard way.

Notes and common mistakes

A few things I'd flag if you're setting this up for the first time:

  • Don't skip Step 3's order. Personalize-then-verify is the single most expensive habit in outbound right now.
  • Re-verify quarterly. People change jobs fast. A verified list from January is a coin flip by September.
  • Keep a human in the loop on the first 100 sends of any new campaign. Agents are great at scale and mediocre at first impressions.
  • Log every API swap. Six months from now you'll want to know why bounce rates shifted.

I can only speak to the context we run in: B2B, mid-market, mostly North America, roughly 5,000 new contacts a month. If you're doing high-volume consumer, or you're operating in the EU under stricter consent rules, the calculus is different — talk to someone who's done it, not just me.

This is accurate as of early 2025. CAN-SPAM specifics and enrichment vendor offerings change fast. Verify at ftc.gov and with your vendor before you scale anything.