ServicesSalesforce consultingArchitectureImplementationOrg health checkDevelopmentIntegrations and APIsData migrationTesting and QAManaged supportSpecialist supportMarketing Cloud auditDeliverability
SolutionsMarketing Cloud EngagementMarketing Cloud NextSalesforce + BrazeAccount EngagementData Cloud (Data 360)Identity resolutionInsights and segmentsAgentforce and AIMCP integrationsSales and Service CloudReal-time personalisationIntegration solutionsEnterprise AI integrationBy industry
ArchitectureSalesforce CRMData 360Salesforce + BrazeAgentforceCustomer 360API-led integrationEvent-drivenMCP host, client and serverIdentity and consentMCP securityData governanceCI/CD and releasesOur public MCP server
ResourcesEngineering journalDecision guidesSolution blueprintsSalesforce productsProjects and achievementsSales ROI calculatorWhere we workChecklists and templatesPlanning toolsReadiness assessmentGlossaryAbout GeekMidstOur approachContact
CompanyAbout GeekMidstOur approachDelivery methodologyTrust and evidenceProjectsAchievementsBook a consultationContactWhere we workSecurity and data
Book a Consultation

Salesforce and Braze Reference Build

An illustrative reference build, not a client project: welcome and reactivation journeys in Braze using Salesforce CRM data and app events, with a full test plan.

Type
Illustrative blueprint
Reading time
4 min
Updated
Author
GeekMidst Team
Reviewed by
Site owner
Banner for the GeekMidst illustrative blueprint “Salesforce and Braze Reference Build”, covering Status and Business problem, objectives and scope

This is an illustrative blueprint. It is a reference architecture, not a write-up of a specific client project; outcomes depend on your data and setup.

This page describes a reference build that connects Salesforce CRM and Braze for two lifecycle journeys: welcoming new customers and reactivating inactive ones. It follows the Salesforce and Braze integration pattern and shows what a build would include, how it would be tested, and what we do not claim.

Status

Reference design. It has not been built as a client engagement, and no outcome is claimed. The APIs, editions and permissions it relies on are validated at the start of any real implementation.

Business problem, objectives and scope

A business sells through Salesforce and engages customers in an app. New customers get a generic welcome that ignores their account tier, and inactive customers receive promotions while they have an open complaint.

Objectives: a welcome journey that uses CRM context and app behaviour; a reactivation journey that respects open cases and consent; lifecycle stage visible to sales and service in Salesforce.

In scope: Contact data, account tier, open case count and email consent from Salesforce; sign-up, session and key-action events from the app; two Canvases; lifecycle writeback to the Contact. Out of scope: Data 360, Marketing Cloud, SMS and paid media.

Technology stack

  • Salesforce CRM with Change Data Capture, read through the Pub/Sub API.
  • An integration service, either middleware or a small custom service, holding secrets server-side.
  • Braze with the SDKs in the app, Canvas, subscription states and Currents to a storage bucket.

Reference build: welcome and reactivation journeys

Reference architecture: a reusable pattern, not a live client integration

Salesforce sandboxIntegration service (your cloud)Braze test workspaceSYSTEM OF RECORDINTEGRATION AND CAPTUREENGAGEMENTDELIVERY AND EVIDENCESalesforce CRMsandbox firstApp and websiteBraze SDKsIntegration servicemiddleware or small serviceBraze test workspacewelcome and reactivation CanvasesChannelsemail, push, in-appCurrents to storagetest bucketcontact changesSDK eventsattributes, consentjourney messagesCurrents eventsstage webhooklifecycle fields
  • Salesforce product
  • Data and analytics
  • Engagement platform
  • Integration layer
  • Channel or touchpoint
  • Salesforce sandbox
  • Integration service (your cloud)
  • Braze test workspace
  • Dashed: asynchronous, optional or feedback
Diagram source (Mermaid)

Select a component to see what it is responsible for and how data moves to and from it.

Illustrative reference build, not a client project. Objects, fields, limits and timings are confirmed per implementation.
Components and data flows (text version)
ComponentTypeResponsibility
Salesforce CRMsandbox firstSalesforce productHolds contacts, account tier, open cases and the email consent field. Publishes contact changes as change events.
App and websiteBraze SDKsChannel or touchpointSends sign-up, session and key-action events, and identifies users with changeUser after login using the CRM contact ID.
Integration servicemiddleware or small serviceIntegration layerReads change events, maps fields, calls Braze, receives webhooks and writes lifecycle fields to CRM. Holds secrets and the dead-letter queue.
Braze test workspacewelcome and reactivation CanvasesEngagement platformRuns an action-based welcome Canvas and a scheduled reactivation Canvas, with suppression for open cases and opt-outs.
Channelsemail, push, in-appChannel or touchpointSeeded test users receive each message. Subscription state is checked before every send.
Currents to storagetest bucketData and analyticsEngagement and subscription events land in a storage bucket for test evidence and count checks; the integration service reads opt-out events from it.

Data flows

  1. Salesforce CRM → Integration service: contact changes. Change Data Capture via the Pub/Sub API. The consumer stores its replay position; outages under 72 hours are replayed.
  2. App and website → Braze test workspace: SDK events. Sign-up, session and key-action events from the Braze SDKs.
  3. Integration service → Braze test workspace: attributes, consent. /users/track for attributes and /email/status for opt-outs. Back off on 429; dead-letter other errors.
  4. Braze test workspace → Channels: journey messages. Welcome steps after sign-up; reactivation after an inactivity window.
  5. Braze test workspace → Currents to storage: Currents events. Sends, engagement and subscription state changes in Avro.
  6. Braze test workspace → Integration service: stage webhook. A Canvas webhook reports lifecycle stage changes. Failed calls are logged in the integration service.
  7. Integration service → Salesforce CRM: lifecycle fields. Lifecycle stage and last engagement date written to the contact by an integration user. Rejected writes are queued for review.

Implementation approach

  1. Identity first. The CRM contact ID becomes the Braze external_id, set with changeUser only after login, following Braze's advice not to identify users before they can be uniquely identified.
  2. Consent owner. Salesforce owns email consent in this design; Braze unsubscribes flow back through Currents subscription events and the integration service.
  3. Data feeds. Change events are batched into /users/track, up to 75 objects per request.
  4. Journeys. An action-based welcome Canvas starts on the sign-up event, with Audience Paths by account tier. A scheduled reactivation Canvas targets users inactive for a defined window and exits anyone with an open case.
  5. Writeback. A Canvas webhook reports stage changes; the integration service writes them to the Contact.

Technical challenges, solution and trade-offs

Challenges and trade-offs

ChallengeDesign responseTrade-off
Anonymous app users before loginTrack anonymously; identify after loginPre-login events merge into the known profile when an existing ID is used
Opt-out made in BrazeCurrents subscription events to the integration serviceAdds a dependency on Currents, which depends on your package
Rate limits during backfillBackfill through batched calls, off-peakBackfill takes longer
Writeback to CRMIntegration service rather than direct webhooks to SalesforceMore to run, but retries and audit in one place
Profile mergesReconcile in the warehouseMerges are not reflected in Currents

Deliverables

  • Ownership matrix, field mapping and event schema documents.
  • Integration service code and configuration, with a dead-letter queue and replay.
  • Two Canvases with test users and a test log.
  • Monitoring dashboard definitions and a runbook.

Test plan

TestWhat is checkedPass condition
New contactChange event creates or updates the Braze profileAttributes match within the agreed time
Sign-up after loginWelcome Canvas entry and tier branchCorrect branch for each tier
Open caseReactivation exitNo promotional message while a case is open
Opt-out in BrazeCurrents event reaches CRMCRM consent field updated
Opt-out in SalesforceConsent reaches BrazeNo further email sent
Braze 429Backoff and retryNo data loss
Consumer outageReplay from stored positionAll changes applied in order
Writeback failureDead-letter queueRecord parked and alerted

Outcomes

No outcome is claimed. This is a reference design; any results would depend on your data, audience and content.

What is not claimed

  • That this has been built for, or used by, any client.
  • Any conversion, retention or revenue figures.
  • That a native Salesforce to Braze connector exists, or that the announced acquisition changes this design.

Limitations

The design leaves out SMS, which needs subscription groups, and Data 360, covered on Data 360 and Braze. Freshness depends on change event processing and Braze rate limits in your contract.

Lessons from the documentation

Decide identity and consent ownership before any build, keep integration logic in one place you control, and test failure paths as carefully as the happy path.

Scope a build like this

Tell us your lifecycle journeys and data. We can adapt this reference design to your org and Braze workspace.

Book a consultation →

Tell us what you are trying to fix.

Share your Salesforce setup, goals and constraints. A practitioner reads every message and replies with questions, first thoughts or an honest view of whether you need outside help at all.

Talk to a Salesforce Expert
Book a Consultation