Braze
Use GrowthLoop audiences and warehouse data for Braze messaging.
Connect this destination to export audience membership, send API-triggered email campaigns from journeys, or write warehouse rows onto Braze profiles, events, purchases, or subscription groups, for use in Braze campaigns and Canvas.
This destination writes to your Braze account and is a good fit when you want to:
- Target customers in Braze with GrowthLoop audiences
- Send a launched API-triggered email campaign from a GrowthLoop journey
- Sync a small set of personalization attributes, events, purchases, or subscription group states in Braze
This maps to GrowthLoop Audiences, Journeys, and Syncs:
| Use it for | Audiences | Journeys | Syncs |
|---|---|---|---|
| Sending GrowthLoop audiences as a Braze custom attribute | ✓ | ✓ | |
| Sending an API-triggered email campaign | ✓ | ||
| Creating or updating Braze profiles, events, purchases, or subscription groups from a warehouse table | ✓ |
For campaign and Canvas targeting patterns after an export, see Integrate with Braze.
Prerequisites
Make sure you have:
- A Braze account with permission to create a REST API key.
- A Braze REST API key. In Braze, go to Settings → APIs and Identifiers, click Create API Key, and name it something your team will recognize, such as GrowthLoop. Grant User Data, Purchases, and Events. If you will trigger email from journeys, also grant
campaigns.list,campaigns.details, andcampaigns.trigger.send. Copy the Identifier. - Your Braze REST endpoint (API URL). In Braze, open Settings and find your SDK Endpoint. Then use the matching REST endpoint from Braze endpoint documentation. For example, if your dashboard is
https://dashboard-03.braze.com, your API URL ishttps://rest.iad-03.braze.com.


NoteYou do not need to whitelist GrowthLoop IPs when you create the API key.
Set up Braze as a destination
- In GrowthLoop, click the Destinations tab on the left sidebar.
- Click New Destination in the top right corner.
- Search for Braze and click Add Braze.

- Enter the required information, then click Create.

| Field | Description |
|---|---|
| Destination Name | Name this destination in GrowthLoop. Use a name so your team recognizes its purpose, like "Braze Email". |
| Sync Frequency | Set the default export frequency (for example, daily or weekly). You can override this setting for individual exports and syncs. |
| API Key | The Identifier of the REST API key you've created in Braze. |
| API URL | The full REST endpoint for your Braze instance, for example https://rest.iad-03.braze.com. |
| Prefix for Personalization Fields (optional) | Prefix GrowthLoop adds to personalization fields it sends to Braze. Leave this blank for no prefix. If you set one, it must start with a letter and use up to 5 letters or numbers. The default value is fw. |
GrowthLoop validates the credentials. Braze then appears in your list of connected destinations.
Export to Braze
From within GrowthLoop, export from an audience or from a journey Destination Node. See Export an audience or Build a journey if you need more information on these steps.
After building or selecting an audience, click Export, then search for Braze. In a journey, add a Destination Node under Email and select Braze.
To send audience membership only, keep the export action on Add to List Only if that option is shown. To send an API-triggered email campaign instead, see Send email from a journey.
Map contact identifiers
Map at least one identifier.
| Match field | Description |
|---|---|
| External ID | The user ID Braze already uses for this contact. |
| User Alias | A Braze user alias. |
| Braze ID | The Braze-generated profile ID. |
You can also map custom attributes from the audience or from the journey as additional fields.
Configure the export
This is where you set the campaign type and schedule for audience exports. On a journey Destination Node, you set timing on the journey canvas.
| Setting | Audience export | Journey Destination Node |
|---|---|---|
| Export Name | Defaults to the audience name. Braze uses this as the custom attribute you filter on. | Required. This becomes the custom attribute name in Braze. |
| Campaign type | Choose a one-time or ongoing export. | The journey schedule controls when the journey runs and contacts are sent to Braze. |
| Schedule | Set frequency, start date, end date, and days of the week. | Users reach this node when the journey runs. Add a Delay Node or set Criteria Evaluation to control timing. |
| Personalization fields | Optional. Map warehouse fields you want on the Braze profile. | Optional. Use these when you are updating profile data, not when you only need membership. |
Export behavior
This is what GrowthLoop writes when you export an audience.
| Behavior | What happens |
|---|---|
| What GrowthLoop writes | A Braze custom attribute for membership, optional profile fields, or an API-triggered campaign send. Direction is GrowthLoop → Braze. |
| When it runs | GrowthLoop sends the export as a batch on the next successful run. An export that starts Now runs within about 15 minutes. Journeys send exports on demand when users reach the Destination Node. |
| Audience membership | GrowthLoop sends membership as a Braze custom attribute named after your export. |
| Personalization fields | Supported. GrowthLoop can prefix those field names with Prefix for Personalization Fields. |
| Add to List Only | Adds or updates audience membership. It does not send a Braze campaign. |
| Send Email | Sends the selected API-triggered campaign for each user who reaches the journey node. See Send email from a journey. |
| Export counts | Each audience export run reports Added, Removed, and Rejected in GrowthLoop. |
| One-time exports | GrowthLoop writes current membership once and does not remove anyone later. |
| Ongoing adds and removals | Ongoing exports send contacts who enter the audience and remove contacts who leave. GrowthLoop clears the custom attribute. It does not delete the Braze profile. |
Send email from a journey
You can send a Braze API-triggered email campaign from a journey Destination Node when campaign triggers are enabled for your organization. See Build a journey if you need more information on these steps.
- Add a Destination Node and select your Braze destination.
- Select Send Email as the export action.
- Map Recipient's Email.
- Choose the Braze campaign in Email Template. GrowthLoop lists API-triggered email campaigns, not content-library templates.
- Map Template Variables that GrowthLoop loads from the campaign message.
- Send a test email before you publish.
For GrowthLoop to expose template variables, the campaign must use Braze Liquid in this form:
{{api_trigger_properties.${first_name}}}Send behavior
| Behavior | What happens |
|---|---|
| Trigger | GrowthLoop triggers the selected campaign for each user who reaches the Destination Node. |
| Campaigns listed | GrowthLoop lists API-triggered email campaigns only. Scheduled campaigns, action-based campaigns, and content-library templates do not appear. |
| Launch state | The campaign must be launched in Braze. Draft campaigns do not send. |
| Template variables | GrowthLoop loads api_trigger_properties from the subject, preheader, and body. Profile attributes such as {{${first_name}}} are not exposed as GrowthLoop template variables. |
| API | GrowthLoop sends through Braze's /campaigns/trigger/send endpoint with the campaign ID and mapped trigger_properties. |
| Audience membership | Send Email does not create a Braze custom attribute. Use Add to List Only to export membership. |
| API key | This workflow needs campaigns.list, campaigns.details, and campaigns.trigger.send. |
Create a sync in GrowthLoop
Create a sync from a warehouse table to write rows onto Braze profiles, events, purchases, or subscription groups. See Syncs for information on how to complete those steps.
Select an Object Type:
| Object | Use it for | Sync modes |
|---|---|---|
| Event | Custom events such as clicks or page views | Insert |
| Purchase | Transaction records | Insert |
| Profile Attribute (sometimes labeled User Attribute) | Personalization fields on the Braze profile | Insert, Update, or Upsert |
| Subscription Group Status | Subscription group state for a user | Update |
When you configure the sync:
- Connection: Select your Braze destination.
- Object Type: Select an object from the table above.
- Update Rule: For Event and Purchase, choose Insert. For Profile Attribute, choose Insert, Update, or Upsert. For Subscription Group Status, choose Update. See Sync behavior.
- Match Field: Map a stable identity such as
external_id,email, orphone.
Only sync attributes you use often in message personalization. We recommend starting with at most 20 attributes.
Event fields
| Destination field | Description |
|---|---|
| Event Name | Follow Braze event naming conventions |
| Time | When the event occurred, in ISO 8601 or yyyy-MM-dd'T'HH:mm:ss:SSSZ |
Purchase fields
| Destination field | Description |
|---|---|
| Product ID | Product identifier, for example the product name |
| Price | Amount paid |
| Time | When the purchase occurred |
| Currency | Currency code, for example USD |
Profile Attribute fields
Map at least one profile field, such as Country Code.
| Destination field | Description |
|---|---|
| Country Code | Country |
| Email address | |
| Email Subscribe | Email subscription status |
| DOB | Date of birth |
| Gender | Gender |
| Language | Language |
| First Name | First name |
| Last Name | Last name |
| Phone | Phone number |
You can sync JSON objects and object arrays to Braze profile attributes. Store the warehouse value as a string. GrowthLoop converts that string to JSON during export.
In Braze, create the custom attribute first. Choose Object for a single JSON object, or Object Array for an array of JSON objects.
Example warehouse values:
- Single JSON object:
'{"city":"Abilene","state":"Texas","zip_code":79605}' - Array of JSON objects:
'[{"city":"Abilene","state":"Texas"}, {"city":"Austin","state":"Texas"}]'
Object or object-array attributes created in Braze do not appear as selectable destination values. Enter the attribute name exactly as it appears in Braze, then map the source column. The name may appear as undefined in the dropdown. That does not block the sync.
Subscription Group Status fields
| Destination field | Description |
|---|---|
| Subscription Group ID | The Braze subscription group to update |
| Subscription State | The subscription state for that user |
| Identifier | At least one of External ID, Email, or Phone |
After you map fields, click Update Sync. Choose Updates Only the first time. Use Back-fill only when you add fields to an existing sync and need those fields on events already sent. Back-fill can be expensive in your data warehouse.
Enable the sync with the toggle at the top of the page.
Sync behavior
This is what GrowthLoop writes when you sync to Braze.
| Behavior | What happens |
|---|---|
| When it runs | GrowthLoop sends the sync as a batch on the next successful run. |
| Event | Insert only. GrowthLoop adds new events. |
| Purchase | Insert only. GrowthLoop adds new purchase records. |
| Profile Attribute | Insert, Update, or Upsert. |
| Subscription Group Status | Updates subscription state for the mapped group. |
| JSON attributes | GrowthLoop converts a string column to a JSON object or object array. |
| Deletes | GrowthLoop does not delete Braze profiles, events, or purchases. |
| Missing identifier | Rows without the required identifier fail. |
Confirm the export was successful
When the run finishes, confirm you can use the data in Braze.
- Audience export: In Segments, add a Custom Attributes filter and select the export name with
is True.

- Journey Destination Node: In Segments, add a Custom Attributes filter and select the export name with
is True. Look up a contact who reached the node. - Send Email: Confirm Braze sent the selected API-triggered campaign.
- Event sync: Search for the contact in Braze Audience → Search Users and review Custom Events.

- Purchase sync: Search for the contact and review the purchase.
- Profile Attribute sync: Search for the contact and check the mapped attributes.
- Subscription Group Status sync: Confirm the subscription state on the mapped group.
In GrowthLoop, review counts on the audience Exports tab, open the Activity tab on the journey Destination Node, or confirm the sync appears in the Syncs table. See Export an audience, Monitor a journey, or Syncs for more information.
Congrats on successfully exporting to Braze!
Troubleshooting
These are the issues we see most often. You can always email us at [email protected] for help.
| Problem | Cause | Resolution |
|---|---|---|
| Connection fails to validate | The API key Identifier or REST endpoint is wrong | Paste the API key Identifier and the REST endpoint, not the SDK endpoint. |
| An audience is missing in Braze | The segment filter is not looking at the custom attribute | Filter Custom Attributes for the GrowthLoop export name with is True. |
| A campaign does not appear under Send Email | The campaign is not API-triggered, or it is still a draft | Confirm it is a launched API-Triggered email campaign. |
| Template variables are missing | The campaign does not use api_trigger_properties | Use {{api_trigger_properties.${variable_name}}} in the Braze message. |
| A JSON attribute will not map | Object attributes do not appear in the dropdown | Type the Braze attribute name instead of choosing it from the dropdown. |
| Subscription group rows fail | A required field is missing | Map Subscription Group ID, Subscription State, and at least one identifier. |
Updated about 12 hours ago
