2. Four CRM Hygiene & Suppression Guardrails (HubSpot CRM (v3 Companies Batch Upsert by Domain))
Active Trigger Filter: Fresh Seed & Series A Funding Announcements ($2M–$25M)
- 1. Canonical Root-Domain Deduplication (idProperty: domain (velocloudops.example)): Every SignalDrop row is keyed by normalized root domain (stripping www., UTM params, and protocol) so repeated funding or hiring signals enrich the existing account record rather than creating duplicate companies.
- 2. Minimum Intent-Score Gate (intent_score >= 85): Webhook router drops low-confidence noise and only pushes accounts scoring 85/100 or higher into your active AE/SDR queue (Founding AE / Enterprise Pod).
- 3. Active Customer & Open-Deal Suppression: Before enrolling a contact into an outbound sequence, the CRM lookup checks lifecycle_stage NOT IN ('customer', 'opportunity', 'dnc') to prevent pitching active clients or in-flight deals.
- 4. Pre-Written Icebreaker Injection: The verified pitch_hook field maps directly to a custom CRM merge token ({{contact.signaldrop_pitch_hook}}) so Touch 1 emails reference the exact trigger event without manual SDR research.
Webhook Router Filter & SLA Assignment Spec
# SignalDrop -> HubSpot CRM (v3 Companies Batch Upsert by Domain) Routing & Scoring Filter (n8n / Webhook Worker)
IF signal.category == "funding"
AND signal.intent_score >= 85
AND crm.lookupByDomain(signal.domain).lifecycle_stage NOT IN ["customer", "open_deal", "unsubscribed"]
THEN:
1. Upsert Account via POST https://api.hubapi.com/crm/v3/objects/companies/batch/upsert
Key: idProperty: domain (velocloudops.example)
2. Assign Owner Queue: "Founding AE / Enterprise Pod"
3. Set Touch-1 Merge Variable {{signaldrop_pitch_hook}} = "Congrats on the $4.2M seed round! We built an n8n + Go onboarding pipeline that cuts enterprise customer provisioning time by 70%."
4. Trigger SDR Slack Alert & Sequence Enrollment within 15 minutes