AGT-ENR — Lead enrichment
Layer 2 · ICP & lead management · Pre-score + periodic · Signal-differentiated cadence
v1.0 specced
Layer 2
Waterfall model
Role & constraints
Runs before AGT-001 for new accounts, plus signal-differentiated periodic re-enrichment. Pre-score enrichment closes the 25-point blind spot in AGT-001 (Dimensions 4 and 5). 10-second timeout gate: if enrichment API doesn't return, AGT-001 scores with available data and enrichment runs asynchronously.
Signal-differentiated cadence — not one-size-fits-all. Intent signals and news triggers decay in hours. Firmographic and technographic data are stable for months. Each signal type runs on its own schedule to minimize API cost while keeping high-decay signals fresh.
Confidence-weighted conflict resolution. Enriched data only overwrites existing data if the incoming confidence score is higher. Prevents low-quality API responses from degrading accurate manual data.
ICP score auto-recalculates immediately when a scored field updates. Firmographic, technographic, or growth signal change → triggers AGT-001 synchronously on that account. Score change may cascade to tier change → ABM nomination → routing update.
Waterfall sourcing model + API hook pattern. Primary provider first, secondary fallback if field missing. APIs are not wired in v1 — data model and confidence scoring are fully specced, provider integration is a future enhancement.
Pre-score pipeline — new accounts
New account enters
Accounts table write triggers enrichment queue. EnrichmentQueue row created with priority = icp_score_stub (firmographic estimate).
→
AGT-ENR enriches
Waterfall API calls. 10-second timeout gate. Writes EnrichmentLog. Updates Accounts fields via confidence-weighted merge.
→
AGT-001 scores
Full 6-dimension score on enriched record. If timeout fired, scores with available data and re-scores when enrichment completes.
→
AGT-002 routes
Routing proceeds with enriched ICP score. Tier assignment includes all 100 points, not just the 75 available pre-enrichment.
Signal-differentiated re-enrichment cadence
Signal type
T1 cadence
T2/T3 cadence
Trigger override
Intent signals
Daily
Weekly / Monthly
Score change ≥20pts → immediate re-score + flag to AGT-ABM
News & triggers
Daily scan
Daily scan
Funding round or C-suite hire detected → immediate flag to AGT-ABM event-trigger
Contact data
Monthly
Monthly
Rep marks contact stale → on-demand re-enrichment
Firmographic
Quarterly
Quarterly
Funding round detected (from news scan) → immediate firmographic re-enrichment
Technographic
Quarterly
Quarterly
M&A event or major product launch → event-triggered re-enrichment
Daily news/intent scan is a lightweight API call (webhook or diff check). Heavy enrichment calls (firmographic, technographic, contact) run quarterly or on trigger only — not on daily schedule for the full account base. Cost-efficient by design.
Contact enrichment — three personas, multi-thread from Day 1
Economic buyer
CFO, CEO, VP Finance, COO. Decision authority and budget ownership. Target for later-stage outreach and executive alignment plays. ABM 1:1 accounts require economic buyer contact before activation.
Champion
Director/Manager of the function that uses the product daily. Highest conversion leverage — internal advocates drive deals forward. First contact enriched for most accounts.
Technical evaluator
CTO, VP Engineering, IT Director, Head of Platform. Evaluates integration, security, and implementation risk. Critical for Enterprise deals. Enriched alongside champion on T1 accounts.
Waterfall sourcing model
PrimaryClearbit / Apollo (TBD)firmographic, contact, technographic
SecondaryZoomInfo / Lusha (TBD)contact fallback, phone, LinkedIn
IntentBombora / G2 (TBD)intent_score, intent_topics, intent_surge_pct
NewsNewsAPI / Crunchbase (TBD)funding_round, leadership_change, headcount_growth
SocialLinkedIn API (TBD)linkedin_followers, recent_posts, employee_posts
Provider names are placeholders — schema fields are provider-agnostic. Waterfall logic: if primary returns NULL for a field, secondary is called. Confidence score is assigned per field per source and stored in EnrichmentLog.
Schema — 2 new tables + Accounts extended
| Table | Status | Key fields |
| EnrichmentLog |
new |
enrichment_id, account_id, run_date, signal_type (firmographic/technographic/contact/intent/news/social), fields_updated, source_primary, source_fallback_used, confidence_score (0–1), prior_value, new_value, overwrite_applied (bool), icp_rescore_triggered (bool), notes |
| EnrichmentQueue |
new |
queue_id, account_id, priority (T1/T2/T3/new_account), signal_types_requested, requested_by (agent/rep/system), status (pending/in_progress/complete/timeout), timeout_at, completed_at, retry_count, notes |
| Accounts |
extended |
Add enrichment fields: employee_count_enriched, revenue_estimate_usd, funding_stage, funding_amount_usd, funding_date, cloud_provider, crm_vendor, martech_stack, intent_score, intent_topics, intent_surge_pct, linkedin_followers, last_enriched_date (per signal type), enrichment_confidence_avg — all nullable, confidence-weighted overwrite only |
Contact data (personas) writes to a Contacts table — if not yet in schema, this is a net new table needed: contact_id, account_id, persona_type, full_name, title, email, phone, linkedin_url, confidence_score, last_enriched_date, is_active.
ICP score recalculation cascade
Enrichment updates scored field
Any field feeding AGT-001 Dimensions 1–5 is updated with confidence overwrite.
→
AGT-001 immediate rescore
icp_rescore_triggered = TRUE in EnrichmentLog. AGT-001 recalculates synchronously.
→
Tier change check
If icp_tier changes (T2→T1 or T1→T2): notify rep + RevOps. Update routing eligibility.
→
Downstream cascade
T2→T1 promotion: flag to AGT-ABM for TAL consideration. Routing rules rechecked by AGT-002.
Dependencies
AccountsreadsExisting field values and confidence scores before overwrite decision.
EnrichmentQueuewritesQueues new and re-enrichment jobs with priority and signal type.
EnrichmentLogwritesEvery enrichment run recorded — field, source, confidence, overwrite decision.
Accounts (enriched fields)writesConfidence-weighted field updates. Never overwrites without higher confidence.
Contacts (new table)writesContact persona records per account — economic buyer, champion, technical evaluator.
AGT-001 ICP ScorertriggersTriggered immediately when a scored field is updated. icp_rescore_triggered flag set in EnrichmentLog.
AGT-ABMtriggersNews/intent signal triggers flag to AGT-ABM for expedited TAL review when funding or C-suite change detected.
AGT-002 Lead RoutertriggersICP tier change (T2→T1) triggers routing re-evaluation for any unrouted leads on that account.
System prompt skeleton
You are AGT-ENR, the Lead Enrichment agent for a B2B SaaS GTM OS.
ROLE: Enrich account and contact records before ICP scoring and on a
signal-differentiated schedule. Never overwrite data with lower confidence.
Trigger AGT-001 rescore immediately when a scored field updates.
PRE-SCORE MODE (new accounts):
On new Accounts row: create EnrichmentQueue entry, priority = new_account.
Run waterfall enrichment for all signal types.
10-SECOND TIMEOUT GATE: if enrichment not complete → set status = timeout.
Allow AGT-001 to score with available data. Re-run enrichment async.
On completion: update fields, trigger AGT-001 rescore.
RE-ENRICHMENT CADENCE (existing accounts):
Intent signals: T1 daily, T2 weekly, T3 monthly.
News & triggers: all accounts daily (lightweight scan only).
Contact data: all accounts monthly.
Firmographic + technographic: all accounts quarterly.
Trigger overrides: funding round → immediate firmographic re-enrichment.
Intent score change ≥20pts → immediate rescore + flag to AGT-ABM.
C-suite hire detected → flag to AGT-ABM event-trigger.
WATERFALL SOURCING:
For each field: call primary source. If NULL → call secondary source.
Assign confidence_score (0–1) per field per source.
Record source_primary and source_fallback_used in EnrichmentLog.
CONFIDENCE-WEIGHTED OVERWRITE:
Compare incoming confidence_score to existing field confidence.
If incoming > existing → overwrite, log prior_value + new_value.
If incoming ≤ existing → do not overwrite. Log attempt only.
If field is NULL → always write regardless of confidence.
CONTACT ENRICHMENT — three personas per account:
economic_buyer: CFO, CEO, VP Finance, COO.
champion: Director/Manager of primary use-case function.
technical_evaluator: CTO, VP Engineering, IT Director.
Write to Contacts table: one row per persona per account.
Re-enrich monthly. Flag stale contacts to rep when confidence drops below 0.5.
ICP RESCORE TRIGGER:
Any field that feeds AGT-001 Dimensions 1–5 updated with overwrite_applied=TRUE →
set icp_rescore_triggered=TRUE in EnrichmentLog.
Trigger AGT-001 synchronously on that account_id.
If icp_tier changes → notify rep + RevOps.
If T2→T1 → flag to AGT-ABM for TAL consideration.
If T1→T2 → check if account is on active TAL → flag for removal review.
OUTPUT: EnrichmentLog rows per run. EnrichmentQueue status updates.
Daily summary: accounts enriched, fields updated, rescore triggers fired,
ABM flags raised, timeout rate (monitor for API health).