Outreach Personalization Agent

The offer with the prospect's logo on it.

Our client had a real prospect database and a real offer, and both were dying in a generic email template. Every message looked the same because writing a genuinely personalized offer takes twenty minutes per prospect, and nobody has twenty minutes times four hundred. We built an agent that does the homework: it studies each company, writes the offer around what that company actually does, and generates a PDF proposal carrying the prospect's own logo. Not a mail merge with a first name field. An offer that looks prepared, because it was.

Hermes runtime Enrichment pipeline PDF generation Supabase Suppression rules

The client's sales team sat on a database of prospects collected over years of trade fairs, inquiries, and past contacts. The offer was solid. The conversion was not, and the reason was visible in the first line of every email: it could have been addressed to anyone.

Real personalization was not a knowledge problem, it was a time problem. To write one properly tailored offer, a salesperson had to open the prospect's website, understand what they do, figure out which part of the offer is relevant to them, write the email, and adapt the proposal document. Twenty minutes of honest work per prospect. Multiplied across the database, that is weeks of labor nobody would ever invest, so nobody did, and the template won by default.

The template always wins by default. That was the thing to break.

> load

The agent works exclusively from the client's own prospect database. No scraping, no purchased lists, no harvesting. Suppression rules are loaded first: opt-outs, existing customers, and blocked domains never enter the queue.

> research

For each prospect, the agent visits their public website and builds a short profile: what the company does, what they sell, who they sell to, and where the client's offer plausibly fits.

> compose

The email is written around that profile. It names what the prospect does, connects the offer to it, and skips everything irrelevant. One offer, told differently four hundred times.

> brand

The agent locates the prospect's logo, and generates the PDF proposal with that logo placed on the cover next to the client's own. A small gesture with a disproportionate effect: the document reads as prepared for you, not printed for everyone.

> gate

Before any sending, offers pass a quality gate. Early in production every message was human-reviewed; as precision stabilized, review moved to sampling. The agent earns autonomy, it does not start with it.

> send

Delivery is throttled to human pace, replies land in the sales team's inbox, and every opt-out is written back to the suppression list permanently.

Does

  • Researches every prospect individually before writing a single word
  • Composes offer emails around the prospect's actual business
  • Generates a PDF proposal with the prospect's logo on the cover
  • Enforces suppression rules and permanent opt-outs
  • Logs every profile, email, and PDF to an auditable history

Does not

  • Scrape or harvest contacts, it works only from the client's own database
  • Fabricate claims about the prospect, if the research is thin, the email says less rather than inventing more
  • Blast, sending is throttled and gated, volume was never the goal
  • Ignore an opt-out, one request is enough and it is final

Layer I · Visual Architecture

One diagram: database in, suppression filter, research, compose, brand, gate, send, replies out. The suppression filter is drawn first, before anything creative, because the fastest way to ruin outreach is to send it to someone who asked you not to.

Layer II · Contracts

The offer logic is a written contract: which parts of the client's offer map to which type of prospect, what the email may claim, and what it must never promise. Tone, length, and structure were fixed with the client before the first message existed.

Layer III · Technical Diagrams

The enrichment pipeline, logo retrieval and validation, PDF assembly, throttling, and the quality gate, all specified before implementation. Logo handling got its own diagram: a wrong or distorted logo is worse than no logo, so the pipeline validates format and quality and falls back to a clean logoless cover when in doubt.

Layer IV · Implementation

Hermes runtime on a dedicated isolated instance. Enrichment from public prospect websites, PDF generation via a templated ReportLab pipeline, Supabase for prospect profiles, send history, and the suppression index.

runtime        Hermes
enrichment     public website research per prospect
documents      ReportLab PDF pipeline, dual-logo cover
state          Supabase (profiles, send history, suppression index)
delivery       throttled SMTP, human-pace sending
oversight      quality gate, review by sampling

Wrong company, right name

Two companies with similar names is a classic enrichment trap. The profile is validated against the domain from the client's own database, not against a search result. When identity is uncertain, the prospect is skipped, not guessed.

Broken or wrong logo

Every retrieved logo is validated for format and resolution. Anything questionable triggers the fallback cover. A distorted logo signals carelessness, which is the exact opposite of the message.

Hallucinated personalization

The compose step may only use facts present in the research profile. Thin profile, shorter email. An invented detail about the prospect's business would burn more trust than a template ever could.

Reputation damage

Throttled sending, clean list hygiene, permanent suppression, and instant opt-out handling. The client's domain reputation is an asset the agent is not allowed to spend.

Duplicate contact

Send history in Supabase guarantees no prospect is contacted twice with the same campaign, even across restarts.

~40

Personalized offers per day, throttled by design

< 90 sec

From prospect record to finished branded PDF

20 min

What the same offer used to cost a salesperson

3.4x

Reply rate against the client's previous template campaign

0

Spam complaints since launch

Figures from the first two months in production, measured against the client's previous campaign in the same database segment.

The logo did the heavy lifting. Of everything in the pipeline, the simplest idea produced the most replies that started with some variation of "we can see you actually looked into us." People do not measure effort in words, they measure it in signals, and a document carrying their own logo is a signal no template can fake.

Restraint reads as quality. The agent is instructed to say less when it knows less. Counterintuitively, the shorter, thinner emails still outperformed the old template, because a modest true sentence beats a confident generic paragraph.

Outreach is a reputation game, not a volume game. Every guardrail that slowed the system down, throttling, gating, suppression, is the reason it still works months later. An agent that can send four thousand emails a day and does not is worth more than one that does.

Your offer is good. Your emails don't show it.

> ../book_a_call.sh