Marketing (HubSpot)
Syncs computed segments and engagement scores into HubSpot so marketing operations can build campaigns using CXOS insight inside the tool they already run campaigns from.
High-Level Design
HubSpot receives the same governed segments used everywhere else in Real-time Activation.
💼 Business Context
- Marketing operations builds and sends campaigns from HubSpot day to day — syncing CXOS segments there means marketers use governed, first-party-informed audiences without leaving their primary tool
- Keeps HubSpot's own contact list from drifting out of sync with the platform's unified view of the customer
- Owned by Marketing Operations / Platform Engineering
🔌 Technical Overview
A scheduled .NET Core Reverse ETL job (Docker container on Azure Container Apps Jobs) resolves the same Semantic Layer-defined segments used for Ad Platforms sync into HubSpot list membership, and writes engagement-relevant profile fields (LTV band, propensity scores, preferred channel) as HubSpot contact properties via its Contacts API, so marketers building a HubSpot workflow can filter and personalize on CXOS-computed fields directly.
Synced Objects
💾 HubSpot Sync Payload
{
"hubspot_object": "contact",
"list": "high_ltv_low_churn_risk",
"properties": {
"cxos_ltv_band": "gold",
"cxos_churn_risk": 0.12,
"cxos_preferred_channel": "email"
}
}
🔗 Integration Points
- Business Systems (Data Sources) — HubSpot as an original engagement-data source, distinct from this reverse sync
- Semantic Layer — the same governed segment definitions used for Ad Platforms sync, reused here for consistency
- HubSpot Contacts API — the write mechanism for list membership and contact properties
- Consent Enforcement — contacts who have withdrawn marketing consent are excluded from segment sync
🧰 Services Consumed
- Owning microservice —
Cxos.Connectors.HubSpot (write path)(see the Full Application Service Map) - No dedicated database — stateless connector (see Platform Connectors above)
⚠️ Non-Functional Considerations
- Scale: contact sync runs against the full active-customer segment population on a schedule, not per-contact calls
- Latency: segments refresh on the same cadence as Ad Platforms sync (typically daily) to keep both channels consistent with each other
- Reliability: a failed sync run retains HubSpot's last successfully synced segment membership rather than clearing lists mid-campaign
- Security/Privacy: only marketing-consented contacts are synced, and only the specific fields approved for the marketing-operations use case are written as contact properties
🎯 Enterprise Example
Marketing Operations builds a HubSpot workflow targeting the same 'high LTV, low churn risk' segment already used for ad-platform suppression — because both pull from the same Semantic Layer definition, the audience marketing emails and the audience ads target stay consistent with each other automatically.