Building Instalily's signal-based outbound system
June 10, 2026 · Updated June 15, 2026
At Instalily, I helped to re-architect and build the workflows for our new signal-based pipeline.

Drawn in Excalidraw by me - with reference from our GTM meetings
The aim was to
Rank leads not only on ICP fit, but on their real-time intent, i.e. buying signal.
Route them accordingly between reps and automated campaigns.
1) Signals

a. Direct engagement –– at Contacts level
LinkedIn reactions
Website visits
LinkedIn engagement with competitors
Cadence: Run daily
b. Intent triggers –– at Accounts level
Acquistion activity
Hiring for Sales/Marketing roles
Keyword match on 'ERP migration' in hiring posts
Cadence: Run weekly
2) Scoring
Next, we had to decide how to both merge, normalize, and rank the leads from both signals above, bearing in mind that they provided information on differing levels of granularity – Accounts vs Contacts - and at differing cadences.
First, we decided to run the Direct engagement signal workflow daily, and that for Intent triggers weekly.
Next, we ranked all leads using a scoring framework:
Composite Score = Signal Weight x Recency
Direct Engagement
Weight = 5.0: First-party action is the strongest evidence of intent, and should sit alongside the highest account-level intent triggers.
Recency = 1.0: Since Direct engagement is refreshed daily on data within the last week, every direct signal remains fresh.
Intent Triggers
Weight: M&A and ERP migration imply highest intent (i.e. 5) while hiring posts rank lower at 4.
Recency: Tiered into 3 stages based on the buying window custom to that signal, i.e. acquisitions take much longer than hiring activity

It is important to note that we are not scoring leads on ICP fit, as 1) Signals already qualified each lead by Industry, Revenue Range, and Role Title (if at Contact level).
3) Deduplication & Routing by Score
The rationale here is that all high quality leads - including all leads from Direct Engagement - should be handled personally by Instalily's sales reps, while other qualified leads are routed for outreach sequences on Lemlist.
These signals are not only to surface new leads but enrich information on existing leads.

Against master Accounts – checks if that account is part of existing deal.
Account owner exists in Hubspot → assigns HubSpot task to AE
Else → calculate composite score
Against master Contacts – checks if contacts already exist for the account.
Found in Lemlist (active sequence):
≥6 → move from Lemlist sequence to the AE
<6 → skip
Found in HubSpot:
status = 'Meeting scheduled' / 'Qualified' → AE task
Idle (>45 days since Last Activity) → do people search in Clay
No contact found yet
→ do people search in Clay
≥6 → assign contact in HubSpot
<6 → add to Lemlist campaign.
4) Keeping Master lists maintained
Master Contacts: Clay table synced from Lemlist, HubSpot
Keyed by email
Master Accounts: Clay table synced from Lemlist, HubSpot
Keyed by domain
5) Example of Individual Signals
Direct engagement: LinkedIn activity
See Loom video for walkthrough.
Intent trigger: M&A tracking
See snapshot of Clay workbook
