Clay + CRM Integration Patterns: Salesforce and HubSpot Workflows

Advanced integration patterns for Clay with Salesforce and HubSpot. Learn bi-directional sync, enrichment triggers, and automation workflows.

Clay becomes much more powerful when integrated with your CRM. Instead of manual list building, you can automate enrichment workflows that keep your Salesforce or HubSpot data continuously fresh.

This guide covers the most effective integration patterns.

Integration Options

Native Integrations

Clay offers direct integrations with:

  • Salesforce — Bi-directional sync
  • HubSpot — Bi-directional sync

Webhook-Based

For custom workflows:

  • Trigger Clay from CRM events
  • Push Clay results to any system
  • Chain multiple tools together

Zapier/Make

For no-code integration:

  • Connect Clay tables to 5000+ apps
  • Schedule automated runs
  • Handle complex branching logic

Pattern 1: CRM-Triggered Enrichment

Concept

When a record is created or updated in your CRM, automatically enrich it through Clay.

CRM Record Created

   Webhook fires

   Clay enriches

   Results push back to CRM

Salesforce Implementation

Step 1: Create Clay Table

Set up a Clay table with:

  • Input columns: Email, Company Domain, Salesforce ID
  • Enrichment columns: Your waterfall setup
  • Output columns: Mapped to Salesforce fields

Step 2: Salesforce Flow

Flow: Trigger Clay Enrichment

Trigger: Lead is created
         OR Contact is created
         AND Email is not blank

Actions:
1. HTTP Callout (Clay Webhook)
   Endpoint: https://api.clay.com/v1/webhooks/[your-webhook]
   Method: POST
   Body:
   {
     "email": "{!$Record.Email}",
     "company_domain": "{!$Record.Company}",
     "salesforce_id": "{!$Record.Id}",
     "object_type": "Lead"
   }

2. Update Record
   Enrichment_Status__c = "Pending"

Step 3: Clay Webhook Setup

  1. In Clay, go to IntegrationsIncoming Webhooks
  2. Create new webhook
  3. Copy the webhook URL
  4. Configure which columns receive webhook data

Step 4: Push Back to Salesforce

In Clay, add Salesforce integration:

  1. Add Push to Salesforce action
  2. Map enriched fields to Salesforce fields
  3. Configure update vs create behavior

HubSpot Implementation

Step 1: Create Clay Table

Same structure as Salesforce, but with HubSpot ID instead.

Step 2: HubSpot Workflow

Workflow: Trigger Clay Enrichment

Trigger: Contact is created
         AND Email is known

Actions:
1. Webhook
   URL: https://api.clay.com/v1/webhooks/[your-webhook]
   Method: POST
   Body:
   {
     "email": "{{contact.email}}",
     "company_domain": "{{company.domain}}",
     "hubspot_id": "{{contact.vid}}"
   }

2. Set property
   Enrichment Status = "Pending"

Step 3: Push Back to HubSpot

In Clay:

  1. Add Push to HubSpot action
  2. Map fields
  3. Set update behavior

Pattern 2: Scheduled Bulk Enrichment

Concept

Periodically pull records from CRM, enrich them, and push back updates.

Schedule triggers (daily/weekly)

   Pull from CRM (stale records)

   Clay enriches batch

   Push updates back to CRM

Implementation

Step 1: Pull Records from Salesforce

In Clay, create a table with Salesforce source:

Source: Salesforce
Object: Contact
Query: SELECT Id, Email, Name, Title, Phone,
              Account.Name, Account.Website,
              Last_Enriched__c
       FROM Contact
       WHERE Last_Enriched__c < LAST_N_DAYS:90
       OR Last_Enriched__c = null
       LIMIT 1000

Step 2: Add Enrichment Columns

Build your waterfall enrichment:

  1. Apollo for initial pass
  2. Clearbit/Breeze for company data
  3. Cognism for phone numbers
  4. Email verification

Step 3: Push Updates

Configure Salesforce push:

Field Mapping:
  Clay Column           → Salesforce Field
  enriched_title        → Title
  enriched_phone        → Phone
  enriched_linkedin     → LinkedIn_URL__c
  confidence_score      → Data_Confidence__c
  TODAY()               → Last_Enriched__c

Step 4: Schedule

  1. In Clay, go to table settings
  2. Enable Scheduled runs
  3. Set frequency (daily at 2 AM recommended)

HubSpot Version

Source: HubSpot
Filter: Last Enrichment Date is more than 90 days ago
        OR Last Enrichment Date is unknown
Limit: 1000 contacts

Push:
  Update existing contacts by email
  Map enriched fields to HubSpot properties

Pattern 3: Lead Scoring Enrichment

Concept

Use Clay to gather data for lead scoring, not just contact info.

New Lead enters CRM

  Clay enriches with:
  - Firmographics
  - Technographics
  - Intent signals
  - Social presence

  Calculate fit score

  Push score to CRM

  CRM routes based on score

Implementation

Clay Table Setup:

Input Columns:
- email
- company_domain
- salesforce_id

Enrichment Columns:
- Company Size (from Apollo)
- Industry (from Clearbit)
- Funding (from Crunchbase)
- Technologies Used (from BuiltWith)
- LinkedIn Followers (from LinkedIn)
- Job Postings Count (from job boards)

Scoring Formula Column:
IF(company_size > 100, 20, IF(company_size > 50, 10, 0)) +
IF(industry IN ("Technology", "SaaS"), 15, 0) +
IF(funding > 10000000, 15, 0) +
IF(technologies CONTAINS "Salesforce", 10, 0) +
IF(linkedin_followers > 1000, 10, 0) +
IF(job_postings > 5, 10, 0)

Max Score: 80 points

Output:
- lead_score
- score_breakdown
- fit_tier (A/B/C/D)

CRM Integration:

Push to Salesforce:

Lead_Score__c = lead_score
Score_Breakdown__c = score_breakdown
Fit_Tier__c = fit_tier

Then in Salesforce, create routing rules based on Fit_Tier__c.

Pattern 4: Account Research Automation

Concept

Automatically research target accounts before sales outreach.

Account added to target list

    Clay researches:
    - Company overview
    - Key contacts
    - Recent news
    - Tech stack
    - Competitors

    Research brief generated

    Pushed to CRM Account record

Implementation

Trigger: Account added to Salesforce Campaign or specific list

Clay Research Workflow:

Input: Account Domain

Enrichments:
1. Company Profile (Clearbit)
   → Size, industry, funding, description

2. Key Contacts (Apollo)
   → Find 5-10 relevant titles
   → VP Sales, CRO, Director Sales Ops

3. Recent News (Clay AI Web Search)
   → Search: "{company name} news"
   → Summarize top 3 stories

4. Tech Stack (BuiltWith)
   → Current tools in our category
   → Competitor products used

5. AI Summary (Claude/GPT)
   Prompt: "Create a one-paragraph research brief
           for a sales rep calling on {company}.
           Include: company overview, recent news,
           potential pain points based on their tech stack."

Output:
- research_brief (text)
- key_contacts (JSON)
- tech_stack (list)
- news_summary (text)

Push to Salesforce:

Account.Research_Brief__c = research_brief
Account.Key_Contacts__c = key_contacts
Account.Tech_Stack__c = tech_stack
Account.Last_Researched__c = TODAY()

Pattern 5: Continuous Data Hygiene

Concept

Automatically detect and flag records needing attention.

Weekly scan of CRM

  Clay checks:
  - Email validity
  - Job changes
  - Company changes

  Flag records with issues

  Create tasks in CRM for review

Implementation

Clay Table:

Source: Salesforce Contacts (all or segment)

Validation Columns:

1. Email Verification (NeverBounce/ZeroBounce)
   → Returns: valid, invalid, catch-all, unknown

2. Job Title Check (Apollo/LinkedIn)
   → Compare current vs CRM title
   → Flag if different

3. Company Check (Clearbit)
   → Is person still at this company?
   → Flag if company changed

4. Phone Verification (if available)
   → Is number still connected?

Output Columns:
- needs_review (boolean)
- review_reason (text)
- suggested_updates (JSON)

Push Back to Salesforce:

If needs_review = true:
  1. Set Contact.Data_Status__c = "Needs Review"
  2. Create Task:
     Subject: "Data review needed: {review_reason}"
     Due Date: +7 days
     Assigned: Contact Owner

If email = invalid:
  1. Set Contact.Email_Status__c = "Invalid"
  2. Add to "Invalid Emails" list

Pattern 6: Intent-Based Enrichment

Concept

When intent signals are detected, immediately enrich the account.

Intent signal detected (Bombora, G2, etc.)

    Account identified

    Clay enriches contacts at account

    Contacts pushed to CRM

    Sales alerted

Implementation

Step 1: Intent Source

Connect intent provider to Clay:

  • Bombora intent feed
  • G2 buyer intent
  • LinkedIn engagement
  • Website visitor identification

Step 2: Clay Workflow

Trigger: New intent signal received

Input:
- company_domain
- intent_topics
- intent_score

Enrichments:
1. Find buying committee (Apollo)
   Titles: VP Sales, CRO, Sales Ops Director, CFO

2. Enrich each contact
   → Email, phone, LinkedIn

3. Score relevance
   → Based on title match to your ICP

Output:
- Contacts with full profiles
- Account summary
- Intent context

Step 3: Push to CRM

For each contact:
1. Create or update in Salesforce
2. Associate to Account
3. Set Intent_Source__c = "Bombora"
4. Set Intent_Topics__c = topics
5. Set Intent_Score__c = score

For Account:
1. Update Intent_Status__c = "Active"
2. Create Task: "High intent detected"

Error Handling

Webhook Failures

Clay Webhook Error Handling:

1. Implement retry logic
   - 3 retries with exponential backoff
   - Log all failures

2. Dead letter queue
   - Store failed records
   - Manual review process

3. Alerts
   - Notify ops team on X failures
   - Daily failure summary

Sync Conflicts

When CRM and Clay have different data:

Option 1: CRM wins (conservative)
- Never overwrite manually-entered data
- Only fill empty fields

Option 2: Clay wins (aggressive)
- Assume enriched data is more current
- Overwrite stale fields

Option 3: Timestamp-based
- Compare last modified dates
- Keep most recent value

Recommendation: Use a "confidence" field
- High confidence Clay data overwrites
- Low confidence only fills blanks

Rate Limits

Salesforce: 100,000 API calls/24 hours (varies by edition)
HubSpot: 100 requests/10 seconds (varies by tier)

Mitigation:
- Batch updates (up to 200 records per call)
- Schedule during off-hours
- Monitor usage dashboards
- Implement request throttling

Monitoring and Optimization

Key Metrics

Integration Health Dashboard:

Sync Success Rate:
  - Records sent to CRM: X
  - Successfully updated: Y
  - Failed: Z
  - Success rate: Y/X %

Enrichment Coverage:
  - Records processed: A
  - Records enriched: B
  - Coverage rate: B/A %

Data Quality Impact:
  - Completeness before: C%
  - Completeness after: D%
  - Improvement: D-C %

Cost Efficiency:
  - Clay credits used: E
  - Records enriched: F
  - Cost per enrichment: $/F

Optimization Tips

  1. Filter aggressively — Don’t enrich records you don’t need
  2. Use conditional enrichment — Skip if data already exists
  3. Batch appropriately — Balance latency vs efficiency
  4. Monitor coverage — Track which providers return data
  5. A/B test workflows — Compare different enrichment orders