Stop Scoring Only Net-New Leads. Build an Expansion Radar for Existing Customers.
By Nida Ateeq & Gaurav Anand Rai, Founder & CEO of Anagar Media · RevOps & GTM Engineer ·
Every company has a lead scoring model for net-new logos. Almost none have one pointed at the customers they already have. That is the gap Nida Ateeq set out to close with what she calls an expansion radar: an inward lead scoring model that watches your existing accounts for buying signals and tells a CSM exactly which ones to reach out to this week, and why. In this session she and Gaurav Anand Rai gave a full build teardown, walking through the Clay table schema, the signal formulas, the scoring prompt, and the dedupe pattern, and were candid about what is working and what they have not solved yet. The whole thing runs on three tools most GTM teams already pay for: HubSpot CRM, Clay with Claude running inside it, and Slack. Here is how it works and how to build your own.
What is an expansion radar?
Net-new lead scoring is a solved pattern. You assign points to activities (a blog read is worth five, a content download is worth twenty-five), set a threshold, and route anything above it to sales as a hot lead. The expansion radar takes that exact logic and turns it inward. Instead of scoring strangers, it scores the customers already in your CRM.
The problem it solves is that cross-sell and upsell opportunities go missing. They only surface when a customer success manager happens to be looking closely at their own book of accounts, and that is slow, manual, and inconsistent, especially once a team is managing hundreds of customers. The radar automates the watching. It scans new, active, and even dormant accounts for signals, scores them, and when an account crosses a threshold it notifies the CSM or rep with the account, the signals, and a suggested play.
What signals does it track?
The system looks for signals that suggest an account is growing, changing, or otherwise primed to buy more. The generic set that has worked across clients is below, and Clay lets you add as many custom signals as you want.
| Signal | What it indicates |
|---|---|
| New hire | Growth or a new initiative inside the account |
| New executive hire | A new decision-maker who may re-evaluate tooling |
| New team being built | Expanding function that may need your product |
| Funding / fundraising | Fresh budget and expansion appetite |
| News mentions | Company-level momentum or change |
| Job postings | Where the company is investing headcount |
| Executive promotions | Internal champions gaining budget authority |
| Web intent / topic data | Active research interest in a category |
How are signals turned into inputs?
Three of these are wired as Clay formula columns that resolve enrichment data into simple booleans. They cost no credits and recalculate whenever the underlying data changes:
signal_new_funding: true if the last funding date is within the past 90 days.signal_headcount_jump: true if headcount has grown 15% or more against the 90-day-ago snapshot.signal_exec_hire: true if a new VP or C-level hire landed in the last 60 days (this boolean comes from the Claude research step below).
A fourth column, signals_fired_this_week, counts how many of the three booleans are true (0 to 3). That count drives the brief filter: only rows with at least one live signal move forward.
How does the architecture work?
The whole engine runs in Clay, set up as a scoring agent. The flow is straightforward:
- Read the customer list. Pull it from your CRM (the demo used HubSpot) or upload a CSV or Excel file if you would rather not connect the CRM directly.
- Scan for signals. The agent runs each account against the signal set, using Claude inside Clay to do the research, such as finding a recent executive hire at that account.
- Score the account. Claude scores each signal and rolls them into a total on a 1 to 100 scale.
- Route the top accounts. The top ten accounts trigger a Slack notification to the responsible CSM and get written back to the CRM.
The Slack message is built to be acted on immediately. It carries the score, a "why now" explaining the signal, who to contact, the recommended play, and a suggested opening line, so the rep gets a starting point instead of a name to go research. The sample brief in the demo ranked accounts by score, with an 82 and an 80 on top.
What does the Clay table look like?
The entire build is one Clay table, one row per customer account, structured in four column groups. It reads like a lead-scoring table, except the score is expansion readiness:
| Group | Source | Columns |
|---|---|---|
| A. Identity | From CRM | account_name, account_domain, crm_id, owner, current_plan, contract_value, renewal_date |
| B. Enrichment | In Clay, refreshed weekly | headcount_now, headcount_90d_ago, last_funding_*, recent_exec_hires, tech_stack, job_openings |
| C. Signals | Clay formulas | signal_new_funding, signal_exec_hire, signal_headcount_jump, signals_fired_this_week |
| D. Score | Claude AI columns | expansion_score, expansion_reason, recommended_play, who_to_contact, suggested_opener |
How does the scoring step run?
Claude runs as an AI column inside that same table. Two things happen there. First, a web-research Claygent browses the account by domain to find recent executive hires and feed the signal_exec_hire boolean. Then a second Claude column takes the identity, enrichment, and signal columns and produces the score, reason, play, contact, and opener. The demo ran on Claude Opus 4.8 through a Clay-managed account at roughly seven credits per row, with auto-run on so the scoring fires as new rows arrive.
Why use Claude to score instead of a fixed point system?
Handing scoring to an LLM instead of a deterministic formula is a deliberate choice, and a debatable one. The approach here was to have Claude study the team's own history, existing CRM records, how past deals were sold, and old call recordings, and propose a scoring model from that. The team reviewed the suggestion, found it matched their instincts for what a strong expansion signal looks like, and adopted it.
The honest framing is that you do not need Claude for this. If you would rather run a fixed point system, you feed those weights straight into the Clay table instead. Using Claude was a way to bring uniformity when different CSMs each had their own informal sense of what mattered, and to derive a common model from how the team already sold rather than inventing weights from scratch.
How is a single account's score explained?
Because a score can accumulate from several signals, the radar surfaces a reason field that ranks the contributing signals: the highest-scoring signal first, then the second and third. That tells the rep what is actually driving the score and what to lead with. Priority always follows the highest signal score in the account, and which signals rank highest is client-specific. Some teams treat a funding round as a top-tier trigger; others weight it lower.
How do you keep it from spamming the same accounts?
This is the piece the team flagged as the one most people get wrong. Without deduplication, a customer raises a funding round once and the radar flags it every single week forever. CSMs learn to ignore the brief, and the system dies of noise.
The fix is snapshot logic. Each run stores the prior week's values, and a signal_is_new flag fires only when this week's data differs from last week's. A signal alerts once, then goes quiet. The brief then shows a row only if signal_is_new is true and the score is at least 70, so every week reads as a fresh hot list rather than a repeat of the last one. The 70 threshold is the default in this build; it is configurable, and some clients act on scores as low as 30. The radar runs weekly, automatically on a Wednesday for most clients, so the list is ready to go out by Friday.
What data do you actually need?
A key clarification: this is not an enrichment play. The radar is not scraping the web for emails or building contact records. It runs against your existing, clean database of current customers, and the signal detection layers on top of that. The corollary is blunt. If you do not have clean customer data, that is a separate problem you have to solve first before the radar is worth running.
On scale, the team has run this from small books to thousands of accounts. Clients have started at 50 accounts, at 200, and one ran as large as 800 customer accounts. There is an honest debate to be had about cost and complexity at very large enrichment scale, but for the size of customer base most B2B teams actually manage, it holds up.
What happens after the alert fires?
Most clients keep it simple: the radar writes the account back into a list in the CRM, it is already assigned to a CSM, and the human takes it from there. But a couple of clients wired up automated plays downstream. Once an account lands in a HubSpot segment, it can trigger a Breeze agent (HubSpot's AI agent) that runs a customized sequence, for example two emails three days apart, then a call or a LinkedIn outreach, with the email copy tailored by AI.
For teams using HubSpot's prospecting agent, the practical notes were: the first setup takes roughly two hours because you are loading in messaging, positioning, brand guidelines, and tone of voice; you should human-approve the emails the first two times; and by the third round it has learned your messaging well enough to run on its own. It is priced at roughly $1 per engaged lead, meaning a lead that replies or books a meeting, and nothing if there is no engagement. Outreach sends from the individual CSM's own inbox or LinkedIn InMail, not from a company bot.
Does it actually work?
The build has only been running for two or three months, so the team was careful not to overclaim. The clearest early results are about volume and speed rather than closed revenue:
| Metric | Result |
|---|---|
| Outreach cadence | One client went from ~6 accounts a month to 4 to 5 a week |
| CSM research time | Sharply reduced, reps get a ready list with talking points instead of digging through accounts |
| LinkedIn vs email | LinkedIn InMail drove a 60% higher response rate in an A/B test, with meeting bookings comparable to email |
The LinkedIn result surprised even the presenters, who went in assuming InMail was dead. It was not. Revenue impact from closed cross-sell and upsell is still being tracked, and longer sales cycles mean it is too early to attribute closed deals with confidence.
What has not been solved yet?
The session was refreshingly honest about the open edges of the build, and these are the areas worth planning for if you build your own:
- No feedback loop yet. There is no closed loop measuring whether the flagged plays actually landed with the targeted accounts. This is on the roadmap, including a test program to compare how different AI models score.
- No score decay. The model does not yet decay scores over time, and it does not vary decay by signal type. A website visit should cool off far faster than a structural change like a funding round or a new executive. The team applies decay to their net-new lead scoring but has not brought it into the expansion model, partly because the radar leans on slower-moving news signals rather than fast-decaying web intent.
- No enrichment drift handling. As company data changes, there is not yet a scheduled audit or refresh discipline beyond the weekly run.
Key Takeaways for GTM Teams
- Point your lead scoring inward. The same scoring logic you use for net-new logos works on existing customers. Score them for expansion signals and route the top accounts weekly.
- Signals over enrichment. This works off a clean existing customer database. It detects change (hires, funding, promotions, intent), it does not build contact data. Clean your data first.
- Deduplicate ruthlessly. Do not resurface the same account week over week without a new or higher signal. A fresh top-ten list each week is what keeps reps trusting it.
- Make the alert actionable. Ship the score, the "why now," the contact, and a suggested opening, not just an account name. That is what cuts CSM research time.
- Test your channels. LinkedIn InMail beat email on response rate in a real A/B test. Do not assume a channel is dead until you have measured it on your own accounts.
- Plan for decay and feedback loops early. Different signals age at different speeds, and without a feedback loop you cannot prove the plays work. Build these in sooner than this team did.
Want to Attend the Next Session?
The GTM Clawllective is a community for go-to-market practitioners building and sharing real AI-powered workflows. Sessions are live, hands-on, and not recorded as polished content, so showing up is the way to learn from builds like this one. The next session digs into SEO, AEO, and GEO and how to actually show up in AI-generated answers. Join the community to get the invite.
About the Speaker
Nida Ateeq is the Founder & CEO of Anagar Media, a Toronto-based AI-powered RevOps agency she launched in 2023 and scaled to a team of around a dozen. She describes herself as a revenue architect, designing and building revenue systems that connect marketing and pipeline rather than leaving them siloed, and much of her work is with PE-backed portfolio companies where cross-sell and upsell across a customer base is a core growth lever. She was recently named a finalist for Technopreneur of the Year at the CanadianSME National Small Business Awards.
Gaurav Anand Rai is a RevOps and GTM engineer at Anagar Media whose background spans cloud architecture, application development, and HubSpot and Salesforce integration. He handled the technical build behind the radar and co-presented the session with Nida.
- Nida Ateeq on LinkedIn: https://www.linkedin.com/in/nidaateeq/
- Gaurav Anand Rai on LinkedIn: https://www.linkedin.com/in/gauravanandrai/