Cold email outreach agent
One true fact about a founder’s site becomes one short email, sent from its own outreach address.
Cold email to founders fails in two places before anyone reads it: the address (most founders publish none, and guessed ones bounce or land in spam) and the first line (a template opener is deleted on sight). Doing it by hand means hunting through company sites for an address, then staring at a blank email with nothing specific to say.
Running on our own company since Oct 17, 2026 · Email · Risk: Medium. Everything on this page is public; there is nothing to sign in for.
Tasks and outputs
What it takes on
Pick who to write to, find the fact
Takes the addresses the email finder recorded, drops companies already in the ledger, on the do-not-contact list, or in a conversation elsewhere, and runs the free audit on each domain for its most concrete finding.
Write and record
One email to the voice guide: the fact first, what it means, the free report as the only ask, an opt-out line, the sender’s signature. One ledger row each.
Send, or test
Sends each draft from the agent’s inbox with the audit card attached (send: auto), or every draft to the team’s own test address only (send: test). Nothing reaches a founder in test.
Who it is for: Teams doing outbound into a list of startups who want every email to open with one true, checkable fact about the recipient’s own site, and who want the sending, the one follow-up and the bookkeeping done by the same run.
How we use it: Built October 2026 and running in its validation setting: every draft goes to the team’s own test mailbox, signed by the founder, and nobody outside the team has received one yet. The run log below shows every draft. Sending to founders starts once the sending address is settled.
This is the same build-it-or-we-run-it model behind our AEO work. See your own AI visibility baseline
What an email is written to
01Body of 80 words or fewer; four paragraphs at most.
02A greeting and one sentence saying who is writing and why; then the audit finding, about their site, with the specific thing the check saw.
03One sentence on what it means, using only the measured mechanisms the guide lists; no numbers the agent did not measure.
04Who is writing and why, in one clause; no client results, no rankings, nothing guaranteed.
05The last line asks whether they want the free report. The opt-out line is in every email, verbatim.
06No link in the body; the sender’s site once, in the signature. Engines are named by name, never as “AEO” or “GEO”.
The rules the agent’s output is written to, from the file named above. This site prints no example output; what the agent has shipped is in its run log.
Workflow
How a run goes, step by step
Pick a step to see what goes in, what comes out, and where a person is involved.
Step 1 of 4
Pick today’s candidates
Joins the email finder agent’s ledger (the latest found address per company) with the leads file, applies the filters, runs the free audit on each remaining domain and writes the candidates file.
The finder’s ledger, the leads file, the ledger, the do-not-contact list
A candidates file: founder, email, website, one-liner, audit finding
Nobody. If nobody can be written to today, the run stops and says why (no public email, every lead already contacted, or the daily audit limit).
Step 2 of 4
Write one email per candidate
The session reads the candidate and the voice guide, writes the email, runs the checklist, and records a ledger row. A candidate that is not a fit, or whose audit returned nothing usable, is skipped with a reason rather than written to.
One candidate, the voice guide, the sender’s signature from the configuration
One drafted email and its ledger row
Nobody during the write. The session cannot send, cannot run git, and cannot look anything up.
Step 3 of 4
Send, or send the test copies
With send set to auto, sends every drafted row inside the send window, up to the day’s cap and a minute or more apart, from the agent’s inbox with the audit card attached, and stamps the row with the message id. With send set to test, every draft goes to the team’s own test address with the founder’s address in the subject, and the rows stay drafted.
Today’s drafted ledger rows, the do-not-contact list
Sent rows with their message ids, or test copies in the team’s mailbox
Nobody during the send. A person sets the mode and reads the test copies.
Step 4 of 4
Settle, and follow up once
Each morning a script reads every sent row’s thread in the inbox: a reply marks it replied, an unsubscribe reply marks it opted-out and puts the address on the do-not-contact list, a delivery failure marks it bounced. Rows sent two weeks ago with no reply get one two-sentence follow-up in the same thread; there is never a third email.
The threads in the agent’s inbox
A ledger that matches the inbox, and the follow-ups sent
Whoever answers the replies that came in; the agent writes no reply beyond the one follow-up.
Before you start
What you’ll need to bring
Company material
A leads file with company, founder and YC slug, the kind the YC scraping agent writes, and the email finder agent’s ledger of addresses it found on public pages. This agent looks for no address itself.
Source material
Our free audit, reachable as an API, for the opening fact. Any set of checks that returns something true and specific about a site would do the same job.
Platform account
A mailbox of the agent’s own, reachable over an API for sending and for reading the threads (ours is an AgentMail inbox); its key lives on the sending machine, outside the repository.
Run environment
Node.js for the scripts, a local Chrome for the audit card, and an agent runner that follows a written workflow for the writing step. For the scheduled run, a scheduler.
Run log
Recent runs, as they happened
The full log is public and read-only. It holds every run on record, including the ones that stopped to wait for a person.
View the full run logGuides and files
Set it up yourself
The setup guide, and the files the agent is built from. You run it in your own environment, with your own accounts.
- 01
Runtime
- Node.js for the scripts; an agent runner that follows a written workflow for the writing step (ours is Claude Code); a scheduler for the daily run, or a person running it by hand during validation.
- A mailbox of the agent’s own to send from and read replies in (ours is an AgentMail inbox, driven over its API), signed in the founder’s name. A test address the drafts go to during validation.
- 02
Browser setup
- A local Chrome, headless, only to draw the audit card (the five checks as one picture). The audit itself is an API call.
- 03
Account setup
- The mailbox’s API key, kept outside the repository on the machine that sends. Nothing else: no SES, no Gmail sign-in.
- 04
Configuration
- The daily cap (at most 5: the free audit allows five runs per IP per day), the follow-up delay, where the drafts are handed over, and the signature: name, title, site, and the postal address a commercial email carries.
- A do-not-contact list of addresses and domains, appended to by itself when a recipient opts out.
- 05
First run
- Run the pick step alone and read the candidates file: confirm each address came from the email finder’s ledger with a public source and each audit finding is one you could verify on their site in ten seconds.
- Run the writing session once and read every draft as the founder would; anything that reads as a template is a voice-guide problem, not a sending problem.
- With send set to test, send once and read the copy in the test mailbox as the founder would: the text, the attached card, the signature. Only then set send to auto.
cold-email.md
Workflow · Markdown. The steps: prerequisites, reconcile, pick, one pass per candidate (read, write, checklist, record), report, send or test, follow up, commit; the hard rules.
voice.md
Voice guide · Markdown. The greeting and one-line introduction, the 80-word rule, the fact second, the mechanisms a sentence may rest on, the opt-out line, the banned words, the checklist.
config.md
Configuration · Markdown. The daily cap and warm-up, the send window, the mode (off, test, auto), the mailbox, the test address, the founder’s signature, the audit endpoint, the slugs never to write to.
do-not-contact.md
List · Markdown. Addresses and domains never to write to; appended to by every opt-out and complaint.
pick.mjs
Script · Node. Today’s candidates: the finder’s addresses joined with the leads file, the filters, the audit per domain, the candidates file.
audit.mjs
Script · Node. The free audit on a domain and the choice of the opening fact: fails before warns, the most concrete check first.
card.mjs
Script · Node. The audit card: the five checks and the score as one picture, drawn by a local Chrome.
ledger.mjs
Script · Node. Appends a row per draft and takes marks, with the format module it shares with the website, which builds this log from the file.
send.mjs
Script · Node. Sends the drafted rows in the allowed mode and the one follow-up; the window, the cap, the spacing, the do-not-contact check.
agentmail.mjs
Script · Node. The mailbox over its API: send, reply in a thread, read a thread.
reconcile.mjs
Script · Node. Reads each sent row’s thread and marks replied, opted-out or bounced.
notify.mjs
Script · Node. The hand-off page with a compose link per draft, for the mode where a person sends.
run-cold-email.ps1
Scheduler · PowerShell. The daily run: the checkout, reconcile, the pick, the writing session, the send, one commit of the ledger and the do-not-contact list.
email-log.md
Ledger · Markdown. One row per drafted email: date, company, founder, address, finding, subject, body, status, sent, replied and followed dates, message id. The file this log is built from.
Not packaged for public download yet. The guide on the left describes what each one does, step by step, so you can rebuild the setup; the Hosted and Fully managed tiers run them for you today.
Rather have us run it?
Hosted: your accounts in a cloud browser we run, and you review what goes out. Fully managed: we set the strategy and run the agents.
Good to know
Where it stops and asks for you
- The sender’s name is not configured. The run stops before the pick: the email is signed by the founder, and the name, title and mailbox are configuration values.
- Nobody can be written to today. Every address the finder found is already in the ledger or on the do-not-contact list, or the finder has found none yet. The run says so and writes nothing.
- The free audit’s daily limit is reached. The pick stops at the limit; candidates after it wait for tomorrow. No email is written without a finding.
- The session skipped every candidate. A note goes to the person with the reasons. A run that finds nothing worth writing is a run, not an error.
- A send fails. The row stays drafted and the run stops and says so; nothing is marked sent that did not go out, and nothing is retried on its own.
- A recipient opts out, or marks the email as spam. The row is marked opted-out and the address goes on the do-not-contact list, never to be written to again; a spam complaint also pauses sending for the day until a person has read the ledger.
Risk notice
What to watch for
- The sending domain’s reputation is the whole risk of cold email: spam reports hurt every message from that domain. The agent sends from its own mailbox, a few a day with a warm-up ramp, and during validation only to the team’s own test address; a complaint pauses sending for the day.
- Email addresses are only what the email finder agent found on public pages. Coverage is uneven by design, and neither agent guesses or buys an address.
- Commercial email law (CAN-SPAM, and GDPR for European recipients) asks for an opt-out and a postal address. The opt-out line is in every email and an opt-out goes on the do-not-contact list by itself; the postal address is a configuration value the team fills before the scheduled run starts.
- Replies land in the agent’s inbox and are settled into the ledger by a script that reads the thread; a reply it misreads (a thank-you taken for an opt-out, or the reverse) is corrected by hand, so the log is as true as that reading.
FAQ
Questions about this agent
Most companies show no email at all.
Expected. Only an address the email finder agent found on a public page counts; many founders publish none, and this agent skips them rather than guess. It never looks for an address itself.
The audit says everything passes.
A clean audit is still a fact, and the email says so. The agent does not invent a problem to have something to write about.
The daily audit limit was reached.
Five audits per IP per day; results for a domain are reused for seven days. The run stops at the limit and says so; it does not write an email without a finding.
Would you rather we ran this agent for you? There is a managed service for that.
Talk to usOther agents