One canonical list. Signals do two different jobs, so we keep two layers: a lean Score layer that moves the number and a greedy Context layer the AI reads to write the brief. This page is the source of truth for both - what the signal is, where it comes from, what job it does, and which channel it serves.
ICP qualifies and sets the floor. Product is the loudest mover. Signals are bounded boosts on top.
The old model blended Product, ICP and Signals as three co-equal legs - so an empty signals leg craved 30% of the score and buried good accounts. The new model is layered: fit gets you a base, product does the heavy lifting, and every buying signal is a capped add-on that can only help.
Final = min(100, ICP base + Product engine + Σ signal boosts) × email gate · Octave hard-disqualify still caps at 40.
Lean and defensible. These are the only inputs that change the score, so each one has a job, a magnitude, and a source. score = scoring input · both = also feeds context.
| Signal | Source | Role | Magnitude | Channel | |
|---|---|---|---|---|---|
| ICP fit | Octave (0-10) | Gate + base | 40-70 base | All | both |
| Sequence activation - the loudest | Amplitude | Product engine | up to +30 | Product | both |
| AI-generated sequences · breadth · 12-wk trend | Amplitude | Product engine | in engine | Product | both |
| New active users (14/30d) · seat growth | Amplitude | Boost (timing) | + boost | Product | both |
| Pricing / cart views | Amplitude | Boost (intent) | + boost | Product | score |
| Inbound hand-raise (demo / form fill) | SFDC / Marketing | Boost (loud for inbound) | + boost | Inbound | both |
| New VP Sales / CRO hire | PredictLeads | Trigger boost | ~+6 | All | both |
| Funding round | PredictLeads / Crustdata | Trigger boost | ~+6 | All | both |
| Competitor tool in stack (displacement) | TheirStack | Boost | ~+5 | All | both |
| Hiring sales roles + velocity | TheirStack / Crustdata | Boost | ~+4 | All | both |
| CRM in stack (1.64× win-lift) | BuiltWith + Amplitude integrations | Boost | ~+3 | All | both |
| Decision-maker found + title | FullEnrich | Boost (actionability) | ~+2 | All | both |
Magnitudes are the design intent; final boost values get tuned against won/lost in the re-run. The cap (~+20 total) keeps any one account from stacking boosts into a false Tier 1.
Greedy on purpose. Context never has to earn its weight in the score - more is always better for a richer narrative. We pull it once, store it, and the AI reads it instead of re-querying six providers every time. context = narrative enrichment.
| Signal | Source | What it adds to the narrative |
|---|---|---|
| Capability breadth · power users · WAU | Amplitude | How deep and sticky the deployment is; who the champions are |
| Confirmed integrations (SFDC / HubSpot / Zoom) | Amplitude | First-party technographic - stronger than an inferred guess; integration talking points |
| Recent news / press | DataForSEO · Serper · Exa | A timely hook for the opener |
| Funding history · headcount by department | Crustdata | Sizing, budget signal, and which teams are whitespace |
| Leadership bios · new executives | PredictLeads | Who to reference and who the new buyer is |
| Competitor mentions · G2 review activity | G2 · Slack | The displacement angle - what they're comparing us against |
| Full tech-stack detail | BuiltWith · TheirStack | Integration fit and tooling maturity |
The additive base is what makes this work across channels. A lead that isn't in the product yet simply scores +0 on the product engine - no penalty - and rides ICP fit plus whatever signal its channel can produce. The same scale ranks all three head-to-head on one list.
| Product lead | Inbound lead | Outbound lead | |
|---|---|---|---|
| ICP base | ✓ | ✓ | ✓ |
| Loudest available signal | Sequence activation | Hand-raise (demo / cart) | Trigger event (funding, new VP, hiring) |
| Product engine | Big lift | usually +0 | +0 |
| Worst-case floor | ICP base | ICP base | ICP base |
A sequence-activating product lead and a freshly-funded outbound account compete on the same composite - each scored on what it can actually show.
The split maps cleanly to two field types. The score goes in small structured fields you can filter, route, and report on. The context goes in a few long-text blobs the AI reads - pulled once, not re-queried every time. We theme the context into three so a product change rewrites only the product blob (fewer needless writes) and a brief reads only the field it needs (fewer tokens).
Composite_Score__cScore_Tier__cScore_Product__c · Score_ICP__c · Score_Signals__cScore_Context__cAI_Context_Company__cAI_Context_Product__cAI_Context_Signals__cAI_Context_* fields are a one-time create for RevOps; everything populates the moment they exist.
| Decision | Why |
|---|---|
| Common Room - removed from the stack | It fed one intent input and nothing else we used. Deepline now covers triggers, hiring and technographics; Amplitude covers product. Not worth the spend. |
| Free signups - not a buying signal | We engage once they're activated, not when they sign up. Sequence activation is the loudest product signal - strongest payment predictor in the funnel. |
| Signals can never be 0 | ICP base + product engine floor every account. A missing signal stops being a penalty and becomes simply "no boost." |
| Microsoft / Outlook intentionally demoted | The email gate keeps its ×0.55 on Outlook on purpose - we're not investing in that surface as a company. |