Email Personalization Agent
🟡 GrowthDrafts persona-aware outbound emails from prospect context, account signals, and approved proof points — never auto-sends
Adam's take
AI email tools promise magic and deliver spam. This one drafts, a human sends. Keep it that way until your quality scores earn something more.
Required tools
Optional tools
Expected value
Cuts drafting time per personalized email from ~15 min to ~2 min review
Deployable workflow pack
The full pack includes the agent spec, deployment guide, architecture diagrams, n8n workflow skeleton, Clay template, HubSpot properties, JSON schemas, OpenAPI spec, cost and ROI calculators, demo data, QA checklist, and governance notes.
View pack on GitHubHow to deploy this agent
"Personalized" outbound usually means a first-name merge tag. Real personalization — buying role, account signal, the right proof point for that persona — takes a rep ten-plus minutes per email, which is why it only happens for the first twenty accounts on any list. This agent drafts that level of personalization at scale. It does not send anything.
Core signals
Input schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://deploytheagent.com/schemas/agent-006-input.schema.json",
"title": "Agent #006 Email Personalization Agent Input",
"type": "object",
"required": [
"record_id"
],
"properties": {
"record_id": {
"type": "string",
"description": "CRM record ID (company/contact/deal depending on agent)."
},
"domain": {
"type": "string"
},
"config_version": {
"type": "string",
"description": "Versioned config used for this run."
}
},
"additionalProperties": true
}Output schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://deploytheagent.com/schemas/agent-006-output.schema.json",
"title": "Agent #006 Email Personalization Agent Output",
"type": "object",
"required": [
"record_id",
"personalization_quality_score",
"email_compliance_status",
"email_draft_status"
],
"properties": {
"record_id": {
"type": "string"
},
"personalization_quality_score": {
"type": "string",
"description": "Agent #006 output field."
},
"email_compliance_status": {
"type": "string",
"description": "Agent #006 output field."
},
"email_draft_status": {
"type": "string",
"description": "Agent #006 output field."
}
},
"additionalProperties": false
}Scoring / classification logic
A draft has to pass both the quality threshold and the compliance check before it enters the human review queue at all. Drafts that fail either check route back for regeneration or manual flagging — they never reach a rep’s inbox as a ready-to-send option.
HubSpot CRM properties
n8n workflow skeleton
The Email Personalization Agent drafts persona-aware outbound emails using prospect context, buying role, account signals, and approved proof points, then scores each draft for quality and compliance before a human ever sees it. It does not send anything. Configure every node marked CONFIGURE before enabling the trigger.
- TriggerCONFIGURE: set cadence per agent-spec.md's What It Does section. Leave disabled until Step 6 of deployment-guide.md.
- Load versioned configCONFIGURE: replace with your versioned config built from real data (see deployment-guide.md Step 1).
- Fetch source dataCONFIGURE: {{HUBSPOT_CREDENTIAL}}. Pull the fields listed in agent-spec.md's Inputs table.
- Validate + gate recordsDrops records missing required inputs or failing suppression/gate checks defined in agent-spec.md. Logs every drop.
- Apply workflow logicImplements the Workflow Logic table from agent-spec.md. Writes model/config version alongside every derived value for auditability.
- Write agent-owned CRM fieldsCONFIGURE: {{HUBSPOT_CREDENTIAL}}. Writes only: personalization_quality_score, email_compliance_status, email_draft_status. Never writes sales-owned fields.
- Route to human review / alertCONFIGURE: {{SLACK_CHANNEL}}. Fires for records requiring human review per agent-spec.md's Governance section.
Cost calculator
Cost Calculator — Agent #006: Email Personalization Agent
Fill in your own volumes and rates — do not use these as benchmark numbers.
| Cost driver | Your volume | Unit cost | Monthly cost |
|---|---|---|---|
| n8n execution (workflow runs) | ___ runs/month | $___ / run | $___ |
| Enrichment/sourcing credits (if applicable) | ___ records/month | $___ / record | $___ |
| LLM API calls (if applicable) | ___ calls/month | $___ / call | $___ |
| Human review time | ___ hrs/month | $___ / hr (loaded) | $___ |
| Total | $___ |
Build cost (one-time)
Estimated build time: 0.5–1 day. Multiply by your builder's loaded hourly rate for a one-time build-cost estimate.
Notes
Costs scale with the volume of records this agent processes, not with the size of your whole CRM — scope your volume estimate to the specific object/list this agent actually touches (see `agent-spec.md`'s Inputs table).
ROI calculator
ROI Calculator — Agent #006: Email Personalization Agent
| Metric | Before | After | Basis |
|---|---|---|---|
| Time to draft one personalized email | ~10–15 min manual | ~1–2 min review/edit | Drafting automated, human keeps final say |
| Personalization consistency across reps | Uneven by rep skill | Same angle/proof-point logic for every draft | Config-driven, not rep-dependent |
| Unapproved claims reaching prospects | Depends on rep discipline | Compliance check runs before every draft is surfaced | Automated check, not manual memory |
Reply-rate lift from better personalization should be measured against your own historical baseline by persona/angle; don't assume a universal lift number.
Your numbers
| Input | Value |
|---|---|
| Records processed per month | ___ |
| Manual time saved per record (before) | ___ min |
| Loaded hourly rate | $___ |
| Monthly time-savings value | $___ (records × minutes saved ÷ 60 × rate) |
Compare this to the cost calculator's monthly total for a net ROI. Do not add a revenue-impact number unless you've measured it against your own baseline — see `agent-spec.md`'s ROI note.
Governance notes
- This agent never sends email — no send permission, no send-trigger access, in any configuration. Every draft requires human review and approval before it enters a live sequence.
- Only approved, versioned proof points from the sanctioned library are usable — the agent cannot invent or reword a proof point on its own.
- The compliance check runs on every single draft, with no exceptions and no bypass path.
- Send-capable credentials are never attached to this workflow — verified explicitly in QA, not assumed.
Failure modes
- Draft gets auto-sent: prevented structurally — the n8n workflow uses read/draft-only sequencing-tool API scopes, and QA confirms no send-capable credential is ever attached.
- A fabricated stat slips through: every miss expands the versioned banned-claims list and is logged as a governance incident, not quietly patched and forgotten.
- Same generic draft regardless of persona: a QA test generates one draft per persona and asserts they meaningfully differ — if they don’t, the angle-selection config isn’t actually branching.
- Proof point used out of context: proof-point library entries require industry and persona tags before they’re eligible for selection at all.
QA checklist
QA Checklist — Agent #006: Email Personalization Agent
To be completed by a non-builder reviewer before go-live.
Deployment checklist
- ☐ Approved proof-point library built and versioned
- ☐ Messaging-angle config mapped per persona
- ☐ Banned-claims compliance list written
- ☐ n8n workflow imported, marked nodes configured, send-capable credentials confirmed absent
- ☐ Demo-data run matches `demo-data/sample-output.json`
- ☐ One draft generated per persona and manually reviewed for differentiation
- ☐ QA checklist completed by a non-builder
- ☐ Rollback tested
Failure-mode verification
- ☐ Verified: Draft gets auto-sent does not occur (mitigation: n8n workflow uses read/draft-only sequencing-tool API scopes; QA test confirms no send-capable credential is attached)
- ☐ Verified: Fabricated stat in a draft does not occur (mitigation: Banned-claims list is versioned and expanded every time a miss is caught; every miss is logged as a governance incident)
- ☐ Verified: Same generic draft for every persona does not occur (mitigation: QA test generates one draft per persona and asserts they differ meaningfully)
- ☐ Verified: Proof point used out of context does not occur (mitigation: Proof-point metadata requires industry + persona tags before it's eligible for selection)
Governance verification
- ☐ Agent writes only to its agent-owned fields: `personalization_quality_score`, `email_compliance_status`, `email_draft_status` (sequencing-tool metadata, not CRM fields — see Implementation Notes)
- ☐ No auto-send, auto-close, auto-route, or auto-create action occurs without the human step described in `agent-spec.md`
- ☐ Confidence/model-version is present on every written record where applicable
- ☐ Demo-data run output matches `demo-data/sample-output.json` in structure
Sign-off
Reviewer name: _______________ Date: _______________ Result: Pass / Fail (attach notes)