HubSpot + Brevo Integration

HubSpot + Brevo

Connect HubSpot’s CRM data to Brevo’s engagement platform. Use HubSpot as your source of truth for contact and deal data, and Brevo for multi-channel campaign execution, email, SMS, WhatsApp.

MCP Servers Used

ServerURLAuthPurpose
HubSpot MCPmcp.hubspot.comOAuth/PKCECRM data: contacts, companies, deals, tickets, products, orders (read-only)
Brevo MCPmcp.brevo.com/v1/brevo/mcpTokenContacts, email, SMS, WhatsApp, campaigns, event tracking

Caution

HubSpot’s MCP server is currently read-only (BETA). You can read CRM data from HubSpot and use it to drive actions in Brevo, but cannot write back to HubSpot via MCP. For bi-directional sync, use HubSpot’s REST API alongside the MCP connection.

Setup

Step 1: Create HubSpot MCP Auth App

  1. In HubSpot, go to Development > MCP Auth Apps
  2. Click Create MCP auth app
  3. Set your redirect URL (for Claude Desktop testing: http://localhost:6274/oauth/callback/debug)
  4. Note your Client ID and Client Secret

Step 2: Connect Both MCP Servers

For tools that support OAuth (Cursor, VS Code):

{
"mcpServers": {
"hubspot": {
"url": "https://mcp.hubspot.com/",
"headers": {
"Authorization": "Bearer your-hubspot-oauth-token"
}
},
"brevo": {
"command": "npx",
"args": [
"mcp-remote",
"https://mcp.brevo.com/v1/brevo/mcp",
"--header",
"Authorization: Bearer ${BREVO_MCP_TOKEN}"
],
"env": {
"BREVO_MCP_TOKEN": "your-brevo-mcp-token"
}
}
}
}

Tip

HubSpot MCP requires OAuth with PKCE. Tools like Cursor handle this natively. For Claude Desktop/Code, you may need to obtain a token separately and pass it as a Bearer token.

Step 3: Verify

> Show me my HubSpot deals in the Negotiation stage
> How many contacts do I have in Brevo?

Use Case 1: CRM Contact Sync Agent

Sync HubSpot contacts to Brevo with deal-stage enrichment:

---
name: hubspot-contact-sync
description: Sync HubSpot CRM contacts to Brevo with deal data enrichment
version: 1.0.0
temperature: 0.1
tools:
- hubspot
- brevo_contacts
- brevo_attributes
- brevo_lists
- brevo_segments
triggers:
- schedule: "0 */4 * * *"
---
# HubSpot Contact Sync
Read contacts and associated deal data from HubSpot,
sync to Brevo with enriched attributes for segmentation.
## Strategy
1. Query HubSpot for contacts modified since last sync
2. For each contact, fetch associated deals and company
3. Create/update Brevo contact with enriched data:
- CRM lifecycle stage → Brevo attribute
- Deal amount → Brevo attribute
- Deal stage → Brevo segment
4. Auto-segment in Brevo:
- "SQL" contacts → Sales Qualified list
- "Opportunity" contacts → Active Pipeline list
- "Customer" contacts → Customer list
## Field Mapping
| HubSpot Property | Brevo Attribute |
|-----------------|-----------------|
| email | EMAIL |
| firstname | FIRSTNAME |
| lastname | LASTNAME |
| phone | SMS |
| lifecyclestage | LIFECYCLE_STAGE |
| hs_lead_status | LEAD_STATUS |
| company (associated) | COMPANY |
| deal amount (sum) | DEAL_VALUE |
| deal stage (latest) | DEAL_STAGE |
## Rules
- NEVER sync contacts without email addresses
- ALWAYS preserve existing Brevo data if HubSpot field is empty
- Track sync with events: hubspot_sync_success, hubspot_sync_error
- Log contact count per lifecycle stage for reporting

Use Case 2: Deal-Stage Campaign Agent

Trigger Brevo campaigns based on HubSpot deal stage changes:

---
name: hubspot-deal-campaigns
description: Trigger targeted Brevo campaigns when HubSpot deals change stages
version: 1.0.0
temperature: 0.3
tools:
- hubspot
- brevo_contacts
- brevo_email_campaign_management
- brevo_templates
- brevo_segments
triggers:
- schedule: "0 9 * * *"
---
# Deal-Stage Campaign Agent
Monitor HubSpot deal stages and trigger appropriate
engagement campaigns in Brevo.
## Stage-to-Campaign Mapping
| HubSpot Deal Stage | Brevo Action |
|-------------------|--------------|
| Appointment Scheduled | Send meeting prep email with company info |
| Qualified to Buy | Add to "Nurture" drip sequence |
| Presentation Scheduled | Send case study relevant to their industry |
| Decision Maker Bought-In | Send ROI calculator + pricing guide |
| Contract Sent | Send "What to expect" onboarding preview |
| Closed Won | Trigger welcome sequence + onboarding |
| Closed Lost | Add to "Win-back" sequence (30-day delay) |
## Rules
- ONLY send to contacts associated with the deal
- Check if contact has opted in to marketing before sending
- One campaign trigger per deal stage change (no duplicates)
- Log all campaign triggers for deal attribution

Example: Natural Language Query

You: "Find all HubSpot deals that closed this month and make sure
those contacts are getting our onboarding email sequence in Brevo."
Claude: Querying HubSpot for deals closed this month...
[Uses hubspot MCP to search deals with closeddate in current month]
Found 12 deals closed this month, involving 18 contacts.
Checking Brevo for these contacts...
[Uses brevo_contacts to look up each email]
Results:
- 14 contacts already in Brevo and receiving onboarding sequence
- 4 contacts not yet in Brevo
Creating 4 new Brevo contacts and adding to onboarding list...
[Uses brevo_contacts to create contacts]
[Uses brevo_lists to add to "Onboarding" list]
Done. All 18 contacts from this month's closed deals are now
in Brevo's onboarding sequence.

Next Steps

AI Assistant

Hi! Ask me anything about the docs.

Start Free with Brevo