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
| Server | URL | Auth | Purpose |
|---|---|---|---|
| HubSpot MCP | mcp.hubspot.com | OAuth/PKCE | CRM data: contacts, companies, deals, tickets, products, orders (read-only) |
| Brevo MCP | mcp.brevo.com/v1/brevo/mcp | Token | Contacts, 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
- In HubSpot, go to Development > MCP Auth Apps
- Click Create MCP auth app
- Set your redirect URL (for Claude Desktop testing:
http://localhost:6274/oauth/callback/debug) - 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-syncdescription: Sync HubSpot CRM contacts to Brevo with deal data enrichmentversion: 1.0.0temperature: 0.1tools: - hubspot - brevo_contacts - brevo_attributes - brevo_lists - brevo_segmentstriggers: - 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 sync2. For each contact, fetch associated deals and company3. Create/update Brevo contact with enriched data: - CRM lifecycle stage → Brevo attribute - Deal amount → Brevo attribute - Deal stage → Brevo segment4. 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 reportingUse Case 2: Deal-Stage Campaign Agent
Trigger Brevo campaigns based on HubSpot deal stage changes:
---name: hubspot-deal-campaignsdescription: Trigger targeted Brevo campaigns when HubSpot deals change stagesversion: 1.0.0temperature: 0.3tools: - hubspot - brevo_contacts - brevo_email_campaign_management - brevo_templates - brevo_segmentstriggers: - schedule: "0 9 * * *"---
# Deal-Stage Campaign Agent
Monitor HubSpot deal stages and trigger appropriateengagement 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 attributionExample: 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 nowin Brevo's onboarding sequence.Next Steps
- Shopify + Brevo, E-commerce integration
- Stripe + Brevo, Payment event integration
- Agent Specification, Customize agent behavior