Data Sources → Business Systems

Marketing (HubSpot)

Marketing engagement and lifecycle-stage data synced from HubSpot — lead scoring and campaign history alongside behavioral events.

High-Level Design

HubSpot → .NET Core Connector on Azure → downstream activation.

Business System
Marketing (HubSpot)
Lifecycle stage, lead score, campaign membership
→
Ingestion
.NET Core HubSpot Connector
API + webhook → Cxos.Ingestion.Client
→
Processing
.NET Core Stream Worker
Lifecycle-stage change normalization
→
Foundation
Data Lakehouse
Marketing engagement history
→
Intelligence
.NET Core Analytics API
Unified lead score, campaign attribution
→
Activation
.NET Core Activation API
Reverse ETL — behavioral score back to HubSpot

💼 Business Context

  • HubSpot often holds the lead-to-customer lifecycle stage that other systems don't track natively
  • Combining HubSpot's marketing-qualified signals with CXOS's real-time behavioral data improves lead scoring accuracy
  • Owned by Marketing Ops

🔌 Technical Overview

The HubSpot connector uses HubSpot's Webhooks API (contact.propertyChange) for real-time lifecycle-stage updates and the CRM API for scheduled full syncs. Both paths pass through Cxos.Ingestion.Client into the Ingestion API, keeping HubSpot's contact properties in the same shared schema as every other data source.

Synced Events

lifecycle_stage_changed lead_score_updated campaign_enrolled form_submitted

💾 Sample Lifecycle Event

{
  "event": "lifecycle_stage_changed",
  "event_id": "f3a8c1d0-6b9e-4c2a-8d1f-3a7c9e0b5f68",
  "timestamp": "2026-08-01T07:30:00Z",
  "user_id": "cust_004821",
  "context": { "channel": "marketing", "platform": "hubspot" },
  "properties": { "from_stage": "Lead", "to_stage": "Marketing Qualified Lead", "lead_score": 78 }
}

🔗 Integration Points

  • HubSpot Webhooks API — real-time property-change events
  • HubSpot CRM API — scheduled full sync (.NET Core, Azure Functions Timer)
  • Cxos.Ingestion.Client NuGet package
  • Reverse ETL — writes CXOS behavioral/propensity score into a HubSpot custom contact property

🧰 Services Consumed

  • Owning microservice — Cxos.Connectors.HubSpot (see the Full Application Service Map)
  • No dedicated database — stateless connector (see Platform Connectors above)

⚠️ Non-Functional Considerations

  • Scale: contact volume is bounded by the marketing database size, not event volume — straightforward for the standard ingestion path
  • Latency: property-change webhooks land within seconds; full syncs run nightly
  • Reliability: HubSpot webhook retries are idempotent via event_id dedup
  • Security/Privacy: only marketing-consented contacts are synced — consent flag is checked before each Reverse ETL write

🎯 Enterprise Example

A B2B company blends its HubSpot lead score with CXOS's real-time product-usage signals in the Analytics API to produce a unified "sales-ready" score, written back into HubSpot — letting SDRs prioritize outreach using a signal neither system could produce alone.

← Back to Business Systems