A score built on form fills and email opens ranks your most bored subscribers above your best-fit buyer. HubSpot can store and act on a score, but it scores mostly on the engagement data it already holds: page views, opens, downloads. That tells you who's curious, not who fits or who's in-market. The accounts a rep should call first match your ICP and just did something that signals timing. Most of those facts aren't in HubSpot until something puts them there. This is how to build a score on fit and intent, enrich the data it needs, write it back, and route the hot leads automatically.
What you need before you start:
- A Clay account connected to HubSpot: With write access to a HubSpot lead-score property: use HubSpot's score property or add a custom number field like Clay Lead Score.
- A working definition of a good lead: Separated into fit (who they are) and intent (what they just did).
- Five or six inputs that actually predict a deal: Start small; you can add more once the model earns trust.
Step 1: Split the score into fit and intent before you build anything
A single number hides the one distinction that matters.
Fit and intent are different questions, and a lead score that blends them into one figure cannot tell a rep why a lead is hot. Fit is structural: industry, company size, the technologies they run, whether they match your ICP. Intent is timing: a funding round, a relevant hire, a job change in the buying committee, a visit to your pricing page. A great-fit account with no intent is a nurture; a perfect-intent signal at a company that will never buy is noise. Score the two axes separately, then combine them into a tier, so the score carries its own explanation.
Auto-sorts leads by fit and intent into four action quadrants. Click a quadrant to see the inputs behind it.
Intent (low to high)
One blended number can't tell these four leads apart; two axes can.
Scoring fit and intent on separate axes is what lets a tier explain itself: the same total can mean call-now or never-work, and only the split tells them apart.
Step 2: Enrich the data the score actually needs
You cannot score on data HubSpot does not have.
Most HubSpot records hold a name, an email, and whatever the form captured. The fit and intent inputs your score needs (verified company size, industry, technologies, funding, hiring, job changes) usually are not there. Pull the contacts or companies you want to score into a Clay table with a HubSpot Lookup action (read-only, nothing changes in HubSpot), then enrich each record: firmographics and technographics for fit, and signal feeds (funding, hiring, leadership changes) for intent. Clay's waterfall fills each field from the best available provider so the score runs on verified values, not blanks. For fit criteria that no database sells, like whether an account runs a workflow your product replaces, a Claygent research column reads the open web and writes back a structured answer.
Auto-fills the score's inputs on a HubSpot record. Click an input to hold it and read its source and whether it feeds fit or intent.
Name + email only: cannot score on fit or intent
Inbound demo request — what HubSpot has
What the score needs
A lead score is only as good as its inputs, and HubSpot usually holds two or three of them, so the enrichment step is what makes the score mean anything.
Step 3: Build the score as a Formula column
The score itself is a Formula column, not a black box.
In Clay, scoring is a Formula column that reads the enriched fields and signal flags on each row and returns a number and a tier. Write the logic explicitly so anyone can audit why a lead landed where it did: points for ICP-fit attributes, points for active intent signals, and a tier cutoff that sorts A from B from C. Keep it transparent and tunable; the first version will be wrong in places, and a formula you can read is a formula you can fix. For the fuzzier judgment calls, like whether a funding round actually matters for you, add a Use AI column that returns a tier and a one-line reason, so the model captures nuance a point system misses.
Company: {{Company name}} Domain: {{Domain}}Fit inputs: industry={{Industry}}, employees={{Employee count}}, stack={{Tech stack}}Intent inputs: funding={{Recent funding}}, hiring={{Hiring for buying team}}, job_change={{Job change in committee}}Return ONLY JSON:{ "tier": "A" | "B" | "C", "fit": "strong" | "partial" | "weak", "intent": "active" | "none", "reason": "<one sentence naming the single strongest driver>"}Rules:- Tier A: strong fit AND at least one active intent signal.- Tier B: strong fit with no active signal, OR partial fit with two or more signals.- Tier C: everything else.- Judge fit on the business, not on engagement. Do not infer intent from form activity alone.
Auto-tallies a lead's score. Click any input to toggle it and watch the tier and reason recompute.
Lead score
0
strong fit + active hiring signal
Tier A: 70+ · Tier B: 45+ · Tier C: 0+
A transparent points-plus-tier formula means every score explains itself and stays tunable, so reps trust it and ops can fix it when it is wrong.
Step 4: Write the score back to HubSpot and route on it
A score that lives in Clay does nothing. The value is in HubSpot, on the record, driving action.
Use the HubSpot Update action keyed on the HubSpot record ID to write the score and tier to a property (HubSpot's score field or a custom Clay Lead Score number property), so the write lands on the exact contact and never creates a duplicate. Turn on Ignore blank values so a record you could not fully enrich never overwrites an existing score with a blank. Then route on the result: a Round-robin assignment (Standard or Weighted) sends A-tier leads to the right rep, and a HubSpot workflow can enroll them in the fast-track sequence while B and C nurture. The score stops being a number in a column and becomes who-gets-called-first.
Auto-plays score to write-back to routing. Click a node to inspect it.
Score in Clay
Formula and Use AI columns return a number and a tier per lead
Hands to Write to HubSpot: Each lead carries a score and an A / B / C tier
Scoring pays off only on write-back and routing: the tier becomes a HubSpot property that assigns the A-leads to a rep, and Ignore blank values keeps a failed enrichment from wiping a good score with a blank.
When the score runs on fit and intent instead of clicks, the reps work the right leads first and conversion follows.
Step 5: Re-score on every new signal, not just at form-fill
A lead score is a snapshot, and the snapshot goes stale.
A lead scored a quarter ago on the data you had then is wrong the moment the company raises a round or the champion changes jobs. Score on a schedule and on triggers, not once at capture. Clay re-runs the enrichment-and-score workflow when a watched signal fires or on a recurring refresh, writes the new tier back to HubSpot, and re-routes if a lead crosses the A threshold. A C-tier nurture that just posted five relevant roles becomes an A-tier call the same day, automatically.
Auto-plays one lead crossing C to B to A as signals fire. Click a month to see its score and what changed.
Month 0 · Captured, no active intent
Re-score trigger: a watched signal fires or a scheduled refresh runs
Scoring once at capture guarantees a stale score; re-scoring on each new signal turns a dormant lead into a routed A-tier the day its situation changes.
Common failure modes, and how to avoid them
Most HubSpot lead-scoring setups fail the same few ways. Watch for these.
- Scoring on engagement alone: Opens and clicks rank the curious, not the qualified. Score fit and intent on enriched data; treat engagement as one minor input, not the model.
- Scoring on blanks: A model that runs before the record is enriched scores noise. Enrich the fit and intent inputs first, then score.
- One blended number: A single figure cannot tell a rep why a lead is hot. Keep fit and intent visible so the tier explains itself.
- Letting a failed enrichment wipe the score: A re-run that writes a blank over a good score erodes trust. Turn on Ignore blank values on the HubSpot write.
- Scoring once and never again: A score set at form-fill is stale within a quarter. Re-score on signals and on a schedule so tiers track reality.
Outcomes teams report after scoring and prioritizing leads with Clay
Different teams, the same pattern: prioritize on enriched fit and intent, and the right leads get worked first.