- Home
- Skills
- Agents & Orchestration
- Smartlead ↔ HubSpot Integration Framework
Smartlead ↔ HubSpot Integration Framework
Architect a production-grade, idempotent sync between Smartlead and HubSpot to eliminate duplicates and sync errors.
$19
Works with the AI tools you already use
Smartlead ↔ HubSpot Integration Framework
Example session with this skill installed
I need to architect a sync between Smartlead and HubSpot that prevents us from emailing people who become customers mid-sequence. What schema do I need and how should the suppression flow work?
- Read your context and instructions
- Compiled the smartlead hubspot integration
To prevent emailing active customers, you must establish a high-frequency suppression loop and a specific HubSpot schema to track the lead state.
Smartlead ↔ HubSpot Sync Architecture
1. Required HubSpot Schema
| Property | Type | Purpose |
|---|---|---|
smartlead_lead_id | Text (Unique) | The primary join key for all API calls. |
smartlead_sequence_status | Dropdown | Mirrors: in_sequence, replied, paused, unsubscribed. |
cold_outbound_source | Text | Hard-coded marker to distinguish from organic/inbound. |
2. The Suppression Flow (15-min Interval)
Identify: Create an Active List in HubSpot called "Global Suppression - Cold Outbound". Criteria: Lifecycle Stage = Customer OR Communication Opt-out = True OR Active Sales Deal = Open.
2. Poll: Your middleware polls this list via the HubSpot Export API every 15 minutes.
3. Execute: For every record in the list, extract the smartlead_lead_id.
4. Update: Call the Smartlead pause-lead or delete-lead-from-campaign endpoint using the ID.
5.
Verify: Write a timestamp to a HubSpot property last_smartlead_suppression_check to ensure the loop is healthy.
3. Webhook Receiver Logic (Idempotency)
When Smartlead sends a reply_received webhook:
// Pseudo-code for the receiver
const { lead_id, message_id, category } = webhookData;
// 1. Dedupe check
const existing = await hubspot.engagements.search({
filter: { property: 'smartlead_message_id', value: message_id }
});
if (existing.total > 0) return 200; // Ignore replay
// 2. Update Contact & Log Activity
await hubspot.contacts.update(lead_id, {
smartlead_sequence_status: 'replied',
smartlead_last_reply_category: category
});
Next steps
- Create the
smartlead_lead_idproperty in HubSpot as a unique-value field. - Build the HubSpot Active List to define your "Customer" suppression criteria.
- Deploy a basic Cloudflare Worker or AWS Lambda to receive the
lead_unsubscribedwebhook from Smartlead.
Connects securely to your tools. The creator never sees your data.
What you get
About this skill
The problem
Naive integrations between Smartlead and HubSpot create duplicate contacts, mis-attributed lifecycle stages, and the high-risk scenario of emailing prospects who have already unsubscribed. Relying on basic Zapier triggers leads to data drift and sales reps following up on stale or incorrect lead information.
What it does
- Defines strict system-of-record boundaries to prevent bidirectional data drift.
- Maps specific HubSpot schema requirements including unique join keys and sequence mirrors.
- Architects a four-layer sync flow covering outbound pushes, webhook-driven reply logging, and high-frequency suppression.
- Implements idempotency patterns to handle webhook replays and prevent timeline clutter.
- Establishes monitoring guardrails like heartbeat alerts and batch-safe join logic.
Why this beats prompting it yourself
General AI prompts often suggest fragile "email-to-email" matching that breaks when prospects use aliases or different company domains. This framework enforces a lead-ID join strategy and specific idempotency logic that standard prompts miss, ensuring your CRM remains a clean source of truth even at high volume.
Use cases
- Connecting high-volume Smartlead outbound operations to a HubSpot CRM.
- Replacing brittle, expensive automation chains that create duplicate records.
- Auditing existing syncs that are failing to honor unsubscribes or lead statuses.
- Building a custom serverless middleware to handle outbound lead flows and reply attribution.
Known limitations
Requires a technical environment to host webhook receivers, such as serverless functions or worker nodes. Smartlead deliverability and DNS management are out of scope for this data-layer integration.
How to install
Works the same in every agent - Claude, Cursor, Codex, Copilot and 20+ more.
- 1
Download the ZIP
Free skills download straight away. Paid skills unlock right after purchase.
- 2
Unzip into your skills folder
Every agent reads skills from one folder on your machine. Drop the unzipped folder in there.
- 3
Ask your agent to use it
Restart the agent if it was already running. It picks the skill up automatically - no config needed.
Skills folder by agent
Click the path to copy it. Create the folder if it does not exist yet.
Reviews
No reviews yet
Be one of the first to try it. Every listed skill passes our trust checks below.
Security scanned
Passed our 8-point scan before listing
Fresh listing
Recently published to Agensi
30-day refund
Not a fit? Get your money back
Trust & safety
Security scanned
Verified clean 25 days ago
- Passed all security checks, Safe to install