Clay logo, go to homepage
Clay GTM guide

How to Set Up Lead Scoring in HubSpot

Most HubSpot lead scores measure how much someone clicked, not whether they're worth a call.

May 29, 202610 min read

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.

Fit (low to high)

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.

Score readiness3/9

Name + email only: cannot score on fit or intent

Inbound demo request — what HubSpot has

NameEmailForm: requested demo

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.

Use AI column — score an inbound lead on fit and intent
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

Tier A

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.

1/4Score in Clay
1

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.

+50%

lift in SQLs ElevenLabs saw after moving to automated lead scoring in Clay

Read the full story

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.

Good-fit inbound, initially low intent

Month 0 · Captured, no active intent

Tier C
Month 0Month 6
M0 · Captured, no active intentTier C
M2 · Hiring for buying teamTier B
M4 · Raised Series B, re-routed to repTier A

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.

CompanyOutcomeStory
FigmaUnified GTM data layer across Salesforce, Snowflake, and Clay for account prioritizationRead
Hex+50% inbound win-rate; filled 88% of its data gap versus its prior vendorRead
Intercom+140% growth in outbound-sourced pipeline from prioritized accountsRead

Score leads on fit and intent, not clicks

Enrich the inputs, build a transparent score, write it to HubSpot, and route the hot leads automatically.

Frequently asked questions

How do I set up lead scoring in HubSpot with Clay?

Pull the contacts or companies you want to score into a Clay table with a HubSpot Lookup action, enrich the fit and intent inputs the score needs (firmographics, technographics, funding, hiring, job changes), build the score as a Formula column that returns a number and a tier, and write the result back to a HubSpot property with the Update action keyed on the HubSpot record ID. Then route A-tier leads with a Round-robin assignment.

Should a lead score be based on fit or intent?

Both, scored separately. Fit is structural (industry, size, tech stack, ICP match) and tells you whether an account is worth pursuing at all. Intent is timing (funding, hiring, job changes, pricing-page visits) and tells you whether now is the moment. A blended single number hides the difference; scoring the two axes separately lets the tier explain why a lead is hot.

Why are my HubSpot lead scores not predictive?

Usually because they score engagement (opens, clicks, downloads) rather than fit and intent, and because they run on the thin data a form captured. Enrich each record with verified firmographics and signal data first, score on those inputs, and treat engagement as a minor factor. A score built on complete fit and intent data predicts far better than one built on click activity.

How do I keep HubSpot lead scores from going stale?

Re-score on triggers and on a schedule instead of once at capture. Clay re-runs the enrichment-and-score workflow when a watched signal fires (a funding round, a relevant hire) or on a recurring refresh, writes the new tier back to HubSpot, and re-routes leads that cross the A threshold, so scores track the company's current situation.

How does Clay write a score back to HubSpot without creating duplicates?

Clay uses the HubSpot Update action keyed on the HubSpot record ID, so the score and tier write to the exact existing contact rather than creating a new one. Turning on Ignore blank values ensures a record that failed enrichment never overwrites an existing score with a blank.