ABM engine: Find the missing buying role before planning the next outreach.
Named accounts, five-role buying committees and dated evidence in one place, with outreach planned for the empty seat and never counted as coverage until someone replies. Shown as the workspace for Northfold, a coordination-software company selling to enterprise architecture and engineering firms.
The problem
Named-account programs often track activity without showing whether the relevant buying committee is covered. Several contacts may belong to one function while finance, technical evaluation or the executive sponsor remains absent. This system is designed to combine account evidence, five-role coverage, signals and multithreaded outreach without confusing an activity count with account readiness.
How the system is built
- SourcesNamed-account lists, HubSpot contacts and TREG/MONID signals.
- IngestionDesigned n8n callbacks and scheduled incremental CRM synchronization.
- NormalizationDomain-based account resolution, role mapping and source-ID preservation.
- StoragePostgres account graph, committee assignments, signals and engagement ledger.
- DecisionsCoverage gaps, signal freshness, ownership and outreach eligibility.
- DashboardAccount portfolio, committee map and next-action review.
- Write-backsApproved HubSpot associations, tasks and account-status updates.
The dashboard
12 views: Today, Executive summary, Account list, Buying committees, Account brief, Signals, LinkedIn touches, Meetings, Opportunities, Stalled deals, Coverage report, Win-loss review.
The committee map: five seats per account (economic buyer, champion, technical evaluator, user lead, procurement), filled seats with the person and last touch, empty seats with who to reach next.
State lives in the URL (view, filters, date range), records open in drawers with their history, and every action that changes something is written to an activity log and is safe to repeat.
Data model
accounts(id, domain, tier, owner_id, crm_id)people(id, account_id, email, title, verification_state)committee_roles(id, account_id, person_id, role, confidence)signals(id, account_id, type, observed_at, expires_at)engagements(id, account_id, person_id, channel, occurred_at)plays(id, account_id, trigger_id, state, approved_by)tasks(id, play_id, owner_id, due_at, state)integration_events(id, source, external_id, processing_state).
Rules in the backend
- Each account has five configurable required roles: economic buyer, champion, technical evaluator, operational user and procurement/legal.
- Count a role as covered only when a verified person is assigned with recorded evidence; one person may hold multiple roles, but distinct-person coverage is reported separately.
- Proposed signal expiry is 30 days unless the source supplies an earlier expiry.
- Allow at most one active play per account and trigger version.
- Do not advance account readiness solely from email opens or unverified intent signals.
Storage
Recommend Supabase Postgres with tenant and account-assignment RLS. Retain raw signal payloads for 30 days, normalized account evidence for 12 months and audit records for 24 months. Minimize personal fields and mask addresses in client views.
Reliability
Deduplicate signals by provider event ID. Use an outbox for CRM mutations, bounded retries and dead-letter review. Account pages display source-specific freshness, missing role evidence and partial synchronization rather than a single misleading green badge.
Security and access
Administrators configure role requirements; operators research and propose plays; approvers authorize outreach. Clients receive read-only account summaries. Credentials and provider tokens never enter browser bundles.
Cost
Costs depend on account research, contact enrichment, signal access, CRM licensing and orchestration executions. Track cost per researched account and verified committee member separately.
Use it
The window above runs the full workspace. Pause the tour and click through it, or open it full screen.
Technology stack
HubSpot
Apollo
Clay
TREG
MONID
LinkedIn
Slack
Source & context
Designed and built by Ahmad Bukhari in November 2026.
The working interface represents named accounts, committee coverage and plays; live signal collection, outreach execution and HubSpot acceptance are designed deployment connections.
Built: 2026-11-03
Map a workflow like this
Start with the handoffs your team already runs and where they break.