Account Engagement Monitor
🟡 GrowthDetects warming accounts from web visits, email clicks, event engagement, replies, and intent topics; alerts sales and ABM
Adam's take
Most 'we missed the buying window' stories mean the signal sat in a dashboard nobody opened. Push the signal to where the team already lives.
Required tools
Optional tools
Expected value
Faster follow-up on warm accounts; fewer missed buying windows
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
The buying signal is almost always already there — scattered across five tabs nobody has all open at once: web analytics, marketing automation, a webinar platform, CRM activity, intent data. This agent is the one place that actually watches all five, for every target account, in real time.
Core signals
Input schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://deploytheagent.com/schemas/agent-007-input.schema.json",
"title": "Agent #007 Account Engagement Monitor 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-007-output.schema.json",
"title": "Agent #007 Account Engagement Monitor Output",
"type": "object",
"required": [
"record_id",
"account_engagement_signal_score",
"account_temperature",
"account_top_signal",
"account_last_signal_date"
],
"properties": {
"record_id": {
"type": "string"
},
"account_engagement_signal_score": {
"type": "string",
"description": "Agent #007 output field."
},
"account_temperature": {
"type": "string",
"description": "Agent #007 output field."
},
"account_top_signal": {
"type": "string",
"description": "Agent #007 output field."
},
"account_last_signal_date": {
"type": "string",
"description": "Agent #007 output field."
}
},
"additionalProperties": false
}Scoring / classification logic
Score decays over a rolling 14-day window, so a one-time spike doesn’t keep an account flagged Hot indefinitely. Accounts crossing the Hot threshold trigger a real-time Slack alert to the account owner — or a shared queue if the account is unowned — but a human always decides what happens next.
HubSpot CRM properties
n8n workflow skeleton
The Account Engagement Monitor watches website visits, pricing/demo page views, email clicks, webinar attendance, and sales replies across target accounts, and alerts sales/ABM the moment an account crosses a warm-or-hot threshold — instead of everyone finding out at the next QBR. 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: account_engagement_signal_score, account_temperature, account_top_signal, account_last_signal_date. 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 #007: Account Engagement Monitor
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 #007: Account Engagement Monitor
| Metric | Before | After | Basis |
|---|---|---|---|
| Time to notice a buying signal | Days, if noticed at all | Real-time (hourly poll) | Automated aggregation across sources |
| Signal sources actually watched per account | 1 (whichever a rep checks) | All connected sources | Aggregation covers every configured channel |
| False person-level identity claims | Risk with some reverse-IP tools | Zero — account-level only | Governance rule enforced in scoring logic |
Faster follow-up should correlate with higher engagement-to-meeting conversion; validate that lift against your own pre-agent baseline.
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
- Never claims an anonymous website visitor is a specific known individual — reverse-IP signals stay account-level only, unless a click is authenticated or an activity is CRM-logged.
- No auto-triggered outreach of any kind — every Hot alert routes to a human for a follow-up decision, never an automated sequence enrollment.
- Only accounts on the active target list are monitored; this agent doesn’t scan the whole web traffic firehose looking for signal.
- A weekly check on Hot-flag volume catches an over-sensitive threshold before it trains reps to start ignoring the alert channel.
Failure modes
- Alert fatigue: if the Hot threshold is set too low, reps learn to ignore the channel fast — caught by a weekly volume check against a sane ceiling.
- Anonymous visitor treated as a named contact: a QA test specifically asserts no person-level field is ever populated from reverse-IP-only data.
- A stale spike keeping an account Hot for weeks: the 14-day rolling decay window is a required config field, not an optional nice-to-have.
- Alert goes to nobody: unowned accounts route to a shared Slack queue rather than silently failing to alert anyone.
QA checklist
QA Checklist — Agent #007: Account Engagement Monitor
To be completed by a non-builder reviewer before go-live.
Deployment checklist
- ☐ At least one signal source connected and verified
- ☐ Four HubSpot company properties created
- ☐ Signal weighting and decay config written and versioned
- ☐ n8n workflow imported, marked nodes configured
- ☐ Demo-data run matches `demo-data/sample-output.json`
- ☐ Anonymous-identity governance test passes
- ☐ Slack alert routing verified for owned and unowned accounts
- ☐ QA checklist completed by a non-builder
- ☐ Rollback tested
Failure-mode verification
- ☐ Verified: Alert fatigue from too many Hot flags does not occur (mitigation: QA checks weekly Hot-flag volume against a sane ceiling; threshold tuned if exceeded)
- ☐ Verified: Anonymous visitor treated as a named contact does not occur (mitigation: Schema enforces account-level-only signal records; QA test asserts no person field is populated from reverse-IP data)
- ☐ Verified: Stale spike keeps account Hot for weeks does not occur (mitigation: Rolling 14-day decay window is a required config field, not optional)
- ☐ Verified: Alert goes to no one does not occur (mitigation: Alerts route to a shared queue Slack channel when `hubspot_owner_id` is empty)
Governance verification
- ☐ Agent writes only to its agent-owned fields: `account_engagement_signal_score`, `account_temperature`, `account_top_signal`, `account_last_signal_date` (company)
- ☐ 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)