CRM (Salesforce)
Customer relationship data — accounts, contacts, opportunities, and case history — synced from Salesforce into the unified profile.
High-Level Design
Salesforce → .NET Core Connector on Azure → downstream activation.
💼 Business Context
- CRM is the system of record for sales relationships — B2B/B2C account and opportunity data anchors the customer's commercial history
- Connects sales pipeline stage to product usage and support history for a full account view
- Owned by Sales Ops / RevOps; data quality here directly affects sales forecasting accuracy
🔌 Technical Overview
A .NET Core connector service (Cxos.Connectors.Salesforce) authenticates to Salesforce via OAuth 2.0 (JWT bearer flow using a Connected App) and pulls incremental changes using the Salesforce Bulk API and Change Data Capture (CDC) events. Each change is normalized into the shared ingestion contract via Cxos.Ingestion.Client and published to the Ingestion API on AKS, same as every other source.
Synced Entities
💾 Sample Synced Record
{
"entity": "salesforce_contact",
"record_id": "003xx000004TmiQAAS",
"user_id": "cust_004821",
"synced_at": "2026-08-01T06:00:00Z",
"properties": {
"email": "priya.sharma@example.com",
"account_name": "Acme Retail Pvt Ltd",
"lifecycle_stage": "Customer",
"owner": "agt_302"
}
}
🔗 Integration Points
- .NET Core Salesforce Connector (
Cxos.Connectors.Salesforce) — OAuth 2.0 JWT bearer, Bulk API + CDC - Cxos.Ingestion.Client NuGet package — shared contract into the Ingestion API
- Azure Key Vault — Salesforce connected-app credentials
- Reverse ETL (.NET Core Activation API) — writes CXOS-computed fields (propensity, LTV) back to Salesforce custom fields
🧰 Services Consumed
- Owning microservice —
Cxos.Connectors.Salesforce(see the Full Application Service Map) - No dedicated database — stateless connector (see Platform Connectors above)
⚠️ Non-Functional Considerations
- Scale: CDC keeps sync incremental — full re-syncs are scheduled off-peak via an Azure Functions Timer trigger
- Latency: CDC-based sync is typically under 5 minutes; nightly Bulk API jobs handle historical backfill
- Reliability: connector checkpoints the last synced CDC replay ID to resume safely after a failure
- Security/Privacy: field-level mapping respects Salesforce field-level security; PII fields are tagged in the shared contract
🎯 Enterprise Example
A B2B software company syncs Salesforce Opportunity data into CXOS. When a deal moves to "Closed Won", the Activation API's Reverse ETL writes the customer's computed onboarding-risk score back into a Salesforce custom field — letting the Customer Success team prioritize onboarding for at-risk accounts within the same CRM view sales already uses.