DemandLab
Built to Scale
GTM Operations

HubSpot CRM Enrichment with Clay: Turn Stale Contacts into Pipeline

Chris Arden
Chris Arden
GTM Engineer and CAIO, DemandLab14 min read
Automated CRM reactivation pipeline showing contact data flowing through enrichment and scoring stages into outbound sequencing

Quick answer

Clay connects to HubSpot natively, pulling contacts from Active Lists into enrichment tables where providers like Apollo, Prospeo, and Claygent add current emails, titles, phone numbers, and company signals. The enriched data syncs back to HubSpot properties automatically, so the CRM stays current without manual export or data entry. This post is the full setup DemandLab uses.

Most B2B teams treat a stale CRM as a data problem. They run a cleanup sprint, delete the bounced emails, and call it done. That's the wrong frame entirely.

Every contact in your HubSpot represents acquisition cost that's already been spent — ad budget, inbound content, event attendance, or sales time. When those contacts go cold and sales moves on to chasing net-new leads, that acquisition cost sits on the balance sheet without producing a return.

The right frame: your stale HubSpot database is pipeline that hasn't been worked yet. This post walks through the exact RevOps workflow for HubSpot CRM enrichment with Clay — how to segment contacts by recency and lifecycle stage, pull them into Clay, run waterfall re-enrichment, score for ICP fit using Clay AI columns, and enroll qualified contacts directly into an Instantly reactivation sequence. No manual exports. No spreadsheets. Zero human intervention between enrichment and sequence enrollment.

DemandLab client data shows cost-per-meeting from reactivated CRM contacts runs 60–70% lower than net-new outbound. The contacts are already paid for. This is how you work them.


Why Your HubSpot CRM Decays (and What It's Actually Costing You)

Contact data decays at a predictable rate. People change jobs every 2.7 years on average, and their email addresses change with them. Company email formats vary; people who move to new companies get new domains. By the time a contact who came in through a webinar 18 months ago gets re-sequenced, there's a meaningful chance their email is invalid and their role has changed.

HubSpot's own research estimates B2B contact databases decay at 22.5% per year. For a CRM with 10,000 contacts, that's 2,250 contacts going stale every 12 months.

HubSpot tracks last-touched date and email activity, but it doesn't automatically re-enrich or re-qualify contacts as data ages. That's the gap Clay fills.

The real cost of CRM decay isn't sequence bounce rates — it's the qualified contacts that sales never reaches because they're buried under a backlog of bad data. Sales teams default to the path of least resistance: work the new leads that marketing is pushing today. The contacts who came in 12 months ago and never converted sit in a "Lead" stage indefinitely.

The Hidden Pipeline in Your CRM

Three contact segments deserve immediate reactivation attention:

  • Engaged leads from 12–24 months ago. They knew your brand, evaluated the space, and may have moved to a company that's now a better fit. The awareness is already there.
  • MQLs that sales never worked. Qualified enough to be captured as a Marketing Qualified Lead, but never followed up on — either because the timing was wrong or the volume overwhelmed the BDR team.
  • Former contacts from churned accounts. Warm relationship, different company. These convert at higher rates than cold prospects because the trust foundation exists.
Contact Segment Typical Data Decay Pipeline Risk Reactivation Potential
Engaged leads 12–24 mo High (30–40% stale) High — email bounces damage deliverability High — brand awareness is intact
MQLs never worked Medium (22–30% stale) Medium Very high — already qualified
Former contacts at churned accounts High (40%+) Low High — trust established

A CRM data hygiene automation program built around Clay turns all three segments into active pipeline.


Reframe the Goal: Pipeline, Not Cleanliness

The problem with most CRM cleanup initiatives is the goal they're optimizing for. "Cleaner data" is an IT objective. "More pipeline from contacts we already own" is a revenue objective.

Net-new outbound costs money at every step: data purchase ($0.50–2.00 per contact), enrichment ($0.05–0.15 per contact), sequence tooling, and BDR time for personalization. Stale CRM contacts skip the data purchase cost entirely — you already own them. Re-enrichment via Clay runs $0.03–0.08 per contact at scale. The sequence cost is identical to net-new.

The stale CRM contacts reactivation workflow this post describes doesn't clean the database for its own sake. It extracts meetings from contacts that are already sitting in your system, at a fraction of what it costs to find and qualify a net-new prospect.

This reframe matters because it changes who owns the project and what success looks like. If the goal is "clean data," this is a RevOps maintenance task. If the goal is "60–70% lower cost-per-meeting," this is a pipeline program with a clear ROI case.


Step 1 — Segment Your HubSpot for Reactivation

The first step is building the right HubSpot Active List. This list will feed Clay automatically as contacts age into the reactivation window, so you're not doing a one-time export — the workflow stays live.

Target segment definition:

  • Last Activity Date: 90+ days ago (use a rolling date filter so the list updates automatically)
  • Lifecycle Stage: Lead or MQL (exclude Customers, Opportunities, and Subscribers)
  • Email Opt-Out: Not opted out (exclude contacts with Email Unsubscribed = True)
  • Email Hard Bounced: Not bounced (exclude contacts with Email Hard Bounced = True)

This gives you a list of contacts who engaged enough to be captured as a Lead or MQL, haven't been touched in 90 days, and are still reachable by email.

Setting the Right Filters

Two filter properties that teams commonly confuse:

HubSpot Property What It Tracks Which to Use
Last Activity Date Any activity: email open, click, form fill, page visit Use this — captures more intent signals
Last Contacted Only direct sales outreach (tasks, calls, emails logged) Use as a secondary filter if needed
Lifecycle Stage Where the contact sits in your funnel Required filter — limit to Lead and MQL
Email Hard Bounced Whether the email address has hard-bounced Exclude these — they'll kill deliverability

Save this as a HubSpot Active List. Active Lists update in real time — as new contacts age past 90 days of inactivity, they'll appear in the list and flow into Clay automatically.

Connecting the List to Clay

Clay connects to HubSpot natively. In Clay, add a new source, select HubSpot, authenticate, and choose your Active List. Map these fields from HubSpot into Clay columns:

  • First Name, Last Name, Email
  • Company, Job Title
  • Last Activity Date, Lifecycle Stage
  • HubSpot Contact ID (required for syncing enrichment data back)

Set Clay to sync daily. New contacts added to the HubSpot list appear in Clay within 24 hours, and any updates Clay makes to the record (enriched job title, verified email) can be pushed back to HubSpot as mapped properties.

The HubSpot data enrichment workflow is now live and self-sustaining — contacts flow in as they age, get enriched, scored, and enrolled in the sequence without any manual intervention.


Step 2 — Run Waterfall Enrichment in Clay

No single enrichment provider gets 100% email coverage. Running a waterfall — a sequence of providers that each work the contacts the previous provider couldn't find — gets you to 85–92% coverage for most B2B contact lists.

For HubSpot contact enrichment, the recommended provider sequence is:

  1. Apollo — broadest B2B database, handles the majority of contacts. Set up as a "Find Email" column using Apollo's Clay integration. Inputs: First Name + Last Name + Company Domain.
  2. Prospeo — strong fallback for contacts Apollo misses, especially mid-market SaaS and tech-adjacent companies. Conditional on Apollo returning null.
  3. Claygent — Clay's Claude-powered research agent. Most expensive per contact ($0.10–0.20), but finds emails the database providers can't. Place last; only runs on contacts Apollo and Prospeo both missed.

Clay enrichment column setup for HubSpot contact re-enrichment — provider waterfall with fallback logic.

Column Type Logic
Apollo Email Find Email (Apollo) Always runs
Prospeo Email Find Email (Prospeo) Conditional: run only if Apollo Email is empty
Claygent Email Claygent action Conditional: run only if Apollo and Prospeo both empty
Best Email Formula =IF(Apollo_Email, Apollo_Email, IF(Prospeo_Email, Prospeo_Email, Claygent_Email))
Email Verified Formula Boolean: Best Email is not empty

For a deeper breakdown of the provider sequence and credit cost math, see the Clay waterfall enrichment guide.

Refreshing Additional Contact Data

Email verification is the minimum. While each contact row is processing, also pull:

  • Current job title via Claygent or Apollo — confirm the contact still works at the company on record before enrolling
  • Company headcount — update from Clay's company data columns; this feeds ICP scoring
  • Recent company signals — funding rounds, hiring spikes — pull these as Clay AI columns or from Apollo's company profile

These signals are used in the ICP scoring step. The Clay HubSpot integration RevOps workflow works because enrichment and scoring happen in the same table — you're not managing three separate exports between tools.

Automated CRM reactivation pipeline showing contact data flowing through enrichment and scoring stages into outbound sequencing The four-stage reactivation workflow: Segment in HubSpot, Enrich in Clay, Score for ICP, Enroll in Instantly.


Step 3 — Score for ICP Fit with Clay AI Columns

After enrichment, you have fresh data on each contact. Not all of them should go into the reactivation sequence — running everyone through Instantly is a fast way to burn your sending domain on unqualified contacts.

Clay AI columns run a Claude-powered prompt against each row's enriched data and return a structured output you can use in subsequent formula columns. Here's a working ICP scoring prompt for a B2B SaaS GTM agency targeting Series A/B companies:

Company: {{Company}}
Employees: {{Employee_Count}}
Industry: {{Industry}}
Job Title: {{Job_Title}}
Recent Signal: {{Recent_Funding_Or_Headcount_Change}}

Is this contact a strong ICP fit for a fractional CMO / GTM agency serving B2B SaaS companies at Series A or B (50–500 employees)?

Return JSON:
{
  "score": [1-5, where 5 is strongest fit],
  "rationale": "[one sentence]",
  "enroll": ["Yes" or "No"]
}

Adjust the company size range and industry criteria to match your actual ICP — the structure stays the same.

Set a score threshold: enroll contacts with score >= 3 and enroll = "Yes". Use a formula column to set enrollment status:

=IF(AND(ICP_Score >= 3, Enroll = "Yes"), "Enroll", "Skip")

What Good ICP Scoring Looks Like

The ICP scoring criteria for your table will differ from the example above, but the structure is the same. Map your strongest fit signals to a score range:

Signal Strong Fit (Score 4-5) Moderate Fit (Score 3) Weak Fit (Score 1-2)
Company size 50–500 employees 20–50 or 500–1,000 Under 20 or over 1,000
Growth stage Series A/B, funded Bootstrapped, growing Pre-revenue or enterprise
Industry B2B SaaS, tech-adjacent Professional services Consumer, non-tech
Job title VP/Head of Marketing, RevOps Lead Marketing Manager, SDR Manager Individual contributor or non-GTM

The goal of this step is a binary output: enroll or skip. Clay handles the scoring at row level — every contact gets scored as it enters the table, so there's no manual review step before Instantly enrollment.

For a deeper look at signal-based lead scoring in HubSpot and Clay, including how to weight multiple signals and sync scores back to HubSpot properties, see that post.


Step 4 — Enroll Qualified Contacts in an Instantly Reactivation Sequence

Once the Enrollment_Status column flips to "Enroll," Clay pushes the contact to Instantly automatically. No export. No copy-paste. No re-upload.

Clay-to-Instantly setup:

  • In Clay, add an action column: select Instantly, then "Add Contact to Campaign"
  • Select your reactivation campaign in Instantly
  • Map fields: Email (from Best Email column), First Name, Company, and any personalization variables your sequence uses
  • Set the trigger: fire the action when Enrollment_Status = "Enroll"

Clay processes the action at the row level as each contact's scoring completes. New contacts flowing in from HubSpot get enriched, scored, and enrolled without any human step in between.

What a Reactivation Sequence Should Look Like

Reactivated contacts are not cold. They know the brand — they came through your marketing at some point and showed enough intent to be captured as a Lead or MQL. Your sequence should reflect that.

Avoid generic cold outreach templates. This is a 4-touch, 12-day warm re-engagement cadence:

  • Email 1 (Day 1): Re-engagement opener. Reference something specific to their current company or role — a recent hire, a product launch, a signal from the enrichment data. One short paragraph. No pitch.
  • LinkedIn touch (Day 3): Connection request or InMail. Keep it brief: one sentence referencing the email.
  • Email 2 (Day 6): One-question email. Direct, conversational. Something like: "Is [specific problem] still a priority for your team this quarter?" High reply rates because it's easy to answer.
  • Email 3 (Day 12): Final value-add. Share a relevant case study or resource. Soft exit: "Happy to share more if the timing ever works."

Keep the full sequence under 14 days. Reactivated contacts who are going to respond usually do so within the first two touches.

Syncing Engagement Back to HubSpot

Configure Instantly to push email open, click, and reply data back to HubSpot. Use Instantly's native Zapier connector or direct HubSpot integration. Set up these automations:

  • Contact replies: update Lifecycle Stage to SQL in HubSpot
  • Contact books a meeting: update Lifecycle Stage to Opportunity
  • Contact hard-bounces: mark Email Hard Bounced in HubSpot, remove from Clay sync

This keeps the CRM timeline complete. When a contact that started as a stale Lead becomes an SQL from the reactivation sequence, sales can see the full history — what the original engagement was, when they went cold, what the re-enrichment found, and what touchpoints drove the re-engagement.

For outbound sequence structure that applies to both net-new and reactivation motions, the signal-based outbound guide covers sequencing logic in detail.


The Cost Math: Why Reactivated CRM Contacts Outperform Net-New Outbound

The ROI case for CRM reactivation is straightforward once you break down the cost components.

Net-new outbound cost per contact:

  • Data purchase (contact list or intent data subscription): $0.50–2.00 per contact
  • Enrichment (email finding, job title verification): $0.05–0.15 per contact
  • Sequence tooling and send cost: ~$0.02–0.05 per contact
  • BDR personalization time: 2–5 minutes per contact at scale

Reactivated CRM contact cost per contact:

  • Data purchase: $0 (contact already owned)
  • Re-enrichment via Clay waterfall: $0.03–0.08 per contact
  • Sequence tooling and send cost: same as net-new
  • Personalization: mostly automated via Clay AI columns (first-line generation, signal referencing)

The data purchase line is the biggest cost difference. At $1.00 average per contact for net-new data and $0 for reactivated CRM contacts, a list of 1,000 contacts saves $1,000 in acquisition cost before the first email is sent.

Key stat: DemandLab client campaigns show reactivated CRM contacts convert to meetings at a cost 60–70% lower than equivalent net-new outbound. The contacts are already paid for — enrichment and sequencing are the only marginal costs.

The reply rate advantage compounds the cost benefit. Reactivated contacts know the brand and have previously signaled intent. In DemandLab client campaigns, reactivated contacts reply at 2–4x the rate of cold prospects from purchased lists. A higher reply rate means fewer contacts needed to hit the same meeting volume — which reduces sequence costs proportionally.

Bar chart showing cost-per-meeting comparison between net-new outbound and reactivated CRM contacts using HubSpot CRM enrichment with Clay Reactivated CRM contacts require no data purchase cost and reply at significantly higher rates, cutting cost-per-meeting by 60–70% vs. net-new outbound.

The revenue operations framework for thinking about pipeline efficiency covers the broader cost-per-opportunity math that this reactivation motion fits into.


Frequently Asked Questions

What is HubSpot CRM enrichment with Clay?

Clay connects to HubSpot via a native integration that pulls contacts from HubSpot Active Lists into Clay enrichment tables. From there, providers like Apollo, Prospeo, and Claygent layer on updated emails, job titles, phone numbers, and company signals. The enriched data syncs back to HubSpot contact properties automatically. The result is a continuously updated CRM without manual export or data entry.

How do I segment stale HubSpot contacts for reactivation?

Build a HubSpot Active List filtering by Last Activity Date (before 90 days ago), Lifecycle Stage (Lead or MQL), Email Unsubscribed = False, and Email Hard Bounced = False. This list auto-updates as contacts age into the reactivation window. Connect the list to Clay via the native HubSpot connector — new contacts flow into Clay daily for enrichment and scoring.

What does a Clay-HubSpot RevOps enrichment workflow look like?

The workflow runs in four stages: (1) Segment in HubSpot — build an Active List of stale Leads and MQLs; (2) Enrich in Clay — run waterfall enrichment via Apollo, Prospeo, and Claygent to verify emails and refresh contact data; (3) Score for ICP fit — use Clay AI columns to run a Claude-powered scoring prompt against each enriched contact; (4) Enroll in Instantly — Clay automatically pushes scored contacts above threshold into a reactivation sequence. No manual exports at any stage.

How much does it cost to reactivate stale CRM contacts vs. net-new outbound?

Reactivated CRM contacts cost 60–70% less per meeting than net-new outbound in DemandLab client campaigns. The primary savings is the data purchase cost — reactivated contacts are already owned, so the $0.50–2.00 per contact acquisition cost drops to zero. Re-enrichment via Clay waterfall runs $0.03–0.08 per contact. Sequence costs are identical to net-new. Reply rates for reactivated contacts are 2–4x higher than cold prospects, compounding the cost advantage.

What enrichment providers should I use in Clay for HubSpot contacts?

Run a waterfall sequence: Apollo (primary email find), Prospeo (fallback for contacts Apollo misses), and Claygent (deep fallback using Claude-powered research for hard-to-find contacts). This sequence achieves 85–92% email coverage for most B2B contact lists. For a detailed breakdown of the HubSpot data enrichment workflow and credit cost math by provider, see the Clay waterfall enrichment and provider stack guide.

Can Clay enroll HubSpot contacts into Instantly without manual exports?

Yes. Clay's Instantly integration pushes enriched, ICP-qualified contacts directly into an Instantly campaign. Set up an action column in Clay that fires when your Enrollment_Status formula column returns "Enroll." Clay processes the action at row level as each contact completes enrichment and scoring — contacts flow from HubSpot into your reactivation sequence without any manual step.


Sources

  1. U.S. Bureau of Labor Statistics, Employee Tenure Summary (2024) — median job tenure data used for contact data decay context
  2. HubSpot, Database Decay and What It Means for Your Marketing (2023) — 22.5% annual B2B database decay rate
  3. Clay.com, HubSpot Integration Documentation — native HubSpot connector setup reference
  4. Apollo.io, Data Coverage and Accuracy — Apollo enrichment coverage benchmarks
  5. Instantly.ai, CRM Integration Guide — Instantly HubSpot and Zapier integration reference

If your HubSpot has contacts sitting untouched for 90+ days, you have a reactivation pipeline waiting to be worked. The Clay-HubSpot enrichment workflow described here takes less than a day to set up — the Clay table and HubSpot connector configuration runs 2–3 hours for a RevOps practitioner comfortable with Clay — and runs continuously without manual intervention. The contacts are already paid for. The enrichment costs pennies. The meetings come at 60–70% of what net-new outbound costs.

Take the GTM Maturity Assessment to see how your current pipeline infrastructure compares to what a fully built reactivation system looks like — and where the highest-ROI gaps are in your GTM stack.

Assess Your GTM System →

Chris Arden, GTM Engineer and Chief AI Officer at DemandLab
Chris ArdenLinkedIn

GTM Engineer and Chief AI Officer (CAIO), DemandLab

Chris Arden is a GTM Engineer and Chief AI Officer who builds agentic GTM systems for B2B SaaS companies at Series A and beyond. He specializes in signal-based outbound, AI-powered pipeline infrastructure, and turning founder-led sales into scalable, repeatable revenue engines. Through DemandLab, he delivers the full GTM stack from strategy to execution in under 90 days.

Ready to put this into practice?

See where your GTM system stands.

Take the free GTM Maturity Assessment and get a role-specific breakdown of gaps, recommendations, and next steps.

Back to Built to Scale