Case study · Viggle · Jul to Oct 2026

Agentic outbound that won’t send anything untrue

Four scheduled agents research, rank and draft. Two gates check every draft against the facts and the CRM. A person sends every email.

400+
companies cold emailed, Jul to Oct 2026
15%
of companies on the newest API line replied, from a person
10%
across all lines, same definition
~3x
API resellers replied about 3x as often as game studios (20 of 69 vs 3 of 34), so I moved outbound effort to resellers

The problem

I was the first commercial hire at Viggle, selling an AI video API to studios, apps and resellers. Researched cold email is slow to write by hand. A language model writes a plausible email in seconds. The risk is that plausible is not the same as true.

What I built

Four scheduled agents on Claude, HubSpot, Apollo and Clay. They source accounts, rank each one with a brief that cites its sources, draft first touches and follow ups for my approval, and log every step to HubSpot before the next one starts.

  1. Source
  2. Qualifybrief with URLs
  3. Drafta source per claim
  4. Draft gatemechanical rules
  5. Account gateCRM history
  6. I send
  1. Source

    Agents look wide for companies that fit, and skip any that are already in the CRM under another name.

  2. Qualify

    Each account gets a verdict card with the URLs behind it. If they would have to add a new feature to use the product, the account is parked, not emailed.

  3. Draft

    First touches and follow ups, written with a source beside every factual sentence. A sentence with no source becomes a question instead.

    Example: “Switching is just a new base URL and a key.” has no source, so it can’t go in as a claim.

  4. Draft gate

    Code, not judgment, blocks a draft on length, banned phrases, unsourced numbers and cost claims.

    Example: “Renders finish in 30 seconds.” blocked: a number with no source behind it.

  5. Account gate

    Code checks the CRM history: disqualified, already contacted, a draft already waiting, a promise made, a reply received.

  6. I send

    Nothing sends itself. I read each draft and send it, and the CRM logs it before anything else happens.

What broke

In September, a line in my outreach said switching to us was just a new base URL and a key. It wasn’t true: our API has its own request format and a create then poll flow. Around the same time, a customer quote carried forward inside a CRM note turned out to exist in no primary source.

The rule I made: every factual sentence in a draft needs a source beside it, or it becomes a question. A quote inherited from another note does not count as sourced.

Then I turned the rule into code. The draft gate blocks on length, banned phrases, unsourced numbers and cost assertions. The account gate blocks on CRM history: disqualified, already contacted, a draft already waiting, a promise made, a reply received. I published a version as outbound-gates, with a fictional product and 50 tests. Nothing in it sends email.

The outbound-gates demo report: 7 accounts worked, 2 drafted, 3 blocked, 2 parked or queued, 0 emails sent, with one account opened to show its verdict card, its draft, and the pre-send check that blocked it
The demo’s own report: every account’s verdict and the rule behind it. Company names are fictional. Note the last number: 0 emails sent.

Checking my own checks

I wrote three quality checks for AI drafted first touches, then scored each draft before comparing it with what I actually sent. Only one check, whether the close matches the email’s angle, predicted the edits I make. The other two tested whether a fact was unique to the account. I was judging whether it was relevant.

Under the old drafting rules, 0 of 14 first touches went out unedited and 12 needed heavy edits. Under the current rules, 15 of 35 went out unedited, 17 with light edits and 3 with heavy ones.

How replies are counted. Companies with at least one reply written by a person, divided by companies emailed minus hard bounces. Counted from Gmail threads logged to HubSpot, Jul 14 to Oct 29, 2026. Excludes auto replies, helpdesk acknowledgements, bounces, inbound leads and existing customers. Includes replies that said no.