Content Optimizer agent step
The Content Optimizer agent step lets you configure and test multiple versions of content components within a single step. It helps you experiment with content variations and automatically optimizes toward the best-performing combinations over time. For an introduction, see Content Optimizer.

Content Optimizer is currently in beta. For help getting started, contact your customer success manager.
Creating a Content Optimizer step
For best results, use the Content Optimizer agent in Canvases where users enter the step gradually over time. If all users enter the step at once, the agent won’t have time to learn from early results.
Step 1: Add a step
Drag and drop the Content Optimizer component from the sidebar, or select the plus button at the bottom of a step and select Content Optimizer.
Step 2: Create your base message
The base message is the starting point for your step. Variants for each content component are dynamically inserted based on the combinations defined in the Content Optimizer Settings tab.

During the beta period, the supported channels are email, push notifications, and SMS/MMS/RCS.
From the Messaging Channels tab, select Email and create your base email message. Refer to our dedicated Email section for help.
The Content Optimizer agent uses the send settings (such as the email domain and reply-to address) specified in this variant to send all messages. You can either start with a new design or select an existing template for this message. At this step, consider which components of the message you want to optimize for. You define these in step 4.
Supported components to optimize include:
- Subject
- Body Header
- Body Content
- Primary CTA
From the Messaging Channels tab, select Push notifications and create your base push notification. Refer to our dedicated Push section for help.
The Content Optimizer agent uses the selected push platforms specified in this variant to send all messages. You can either start with a new design or select an existing template for this message. At this step, consider which components of the message you want to optimize for. You define these in step 4.
Supported components to optimize include:
- Title
- Message
From the Messaging Channels tab, select SMS/MMS/RCS and create your base message. Refer to our dedicated SMS/MMS/RCS section for help.
The Content Optimizer agent uses the Content and Message details specified in this variant to send all messages. You can either start with a new design or select an existing template for this message. At this step, consider which components of the message you want to optimize for. You define these in step 4.
Supported components to optimize include:
- Hook
- Body
- CTA
Step 3: Specify delivery settings
In the Delivery Settings tab, you can specify if the step should use Intelligent Timing or delivery validations. For more details, refer to Edit delivery settings in Message step.
Step 4: Add content components and variants
Content components are the individual elements of your message that you want to test, such as different subject lines or titles. These components allow you to generate multiple versions of a message and automatically optimize based on performance over time.
- Email: You can add up to three content components per step and up to five variants per component, for a total of 125 unique content combinations.
- Push notifications: You can add up to two components per step and up to five variants per component, for a total of 25 unique content combinations.
- SMS/MMS/RCS: You can add up to two content components per step, and up to five variants per component, for a total of 25 unique content combinations.

Step 4.1: Configure content components
To configure components, go to the Content Optimizer Settings tab.
Choose which components you want to optimize for email messages. Supported options are:
- Subject
- Body Header
- Body Content
- Primary CTA
For each selected component, define a set of alternative versions of that content (variants). Use clear, distinct variants that differ in tone, structure, or content. This helps Content Optimizer identify top performers more effectively. You can:
- Write your own variants manually.
- Use AI-generated suggestions to explore new options quickly.

Choose which components you want to optimize for push notifications. Supported options are:
- Title
- Message
For each selected component, define a set of alternative versions of that content (variants). Use clear, distinct variants that differ in tone, structure, or content. This helps Content Optimizer identify top performers more effectively. You can:
- Write your own variants manually.
- Use AI-generated suggestions to explore new options quickly.

After selecting your subscription group and message type (if applicable), choose which components you want to optimize for SMS/MMS/RCS. Supported options are:
- Hook
- Body
- CTA

After an SMS/MMS/RCS Content Optimizer step is launched, you cannot update the subscription group or message type.
For each selected component, define a set of alternative versions of that content (variants). Use clear, distinct variants that differ in tone, structure, or content. This helps Content Optimizer identify top performers more effectively. You can:
- Write your own variants manually.
- Use AI-generated suggestions to explore new options quickly.

Step 4.2: Add Liquid to your message
After defining at least two variants for each component, copy the associated Liquid tag for each one and paste it into the corresponding location in your base message.
- For example, if you’re optimizing the subject line, paste the
{% message_component "Subject" %}tag in the subject field of the email composer. - You can also include component tags inside longer text to test just a portion of the component. For example:
Hey there, {% message_component "Subject" %}.

If you don’t add a Liquid tag for a selected content component, you’ll see a warning on the Content Optimizer Settings tab and an error on the Messaging Channels tab. The Canvas can’t be launched until all selected components are properly added to your base message.
As the Canvas runs, the agent mixes and matches variants across components to generate different content combinations. Over time, higher-performing combinations are prioritized for delivery, helping you improve performance without manual intervention.
Liquid references
| Channel | Component | Liquid snippet |
|---|---|---|
| Subject | {% message_component "Subject" %} |
|
| Body Header | {% message_component "Body Header" %} |
|
| Body Content | {% message_component "Body Content" %} |
|
| Primary CTA | {% message_component "Primary CTA" %} |
|
| Push | Title | {% message_component "Title" %} |
| Push | Message | {% message_component "Message" %} |
| SMS/MMS/RCS | Hook | {% message_component "Hook" %} |
| SMS/MMS/RCS | Body | {% message_component "Body" %} |
| SMS/MMS/RCS | CTA | {% message_component "CTA" %} |
Step 5: Select optimization event
The optimization event determines how the Content Optimizer agent evaluates performance and allocates traffic to content combinations over time.
Your selected optimization event applies to all content components in this step.
For email, you can optimize for one of the following events. The agent uses opens and clicks that are registered within 7 days of sending a message to shift delivery toward higher-performing content combinations.
| Event | Description | Use cases |
|---|---|---|
| Opens | Optimizes for combinations that get recipients to open the email. | Testing subject lines or aiming to increase visibility |
| Clicks | Optimizes for combinations that drive engagement with links. Does not include bot clicks or Braze-recognized unsubscribe clicks. | Driving traffic, engagement, or conversion from links |
For push notifications, you can optimize Opens. This optimizes combinations that get recipients to open the push notification. You can use this optimization event to test variations in title or message copy.
For SMS and MMS messages, you can optimize Clicks. For RCS messages, you can optimize Reads or Clicks.
In order for the step to have an event that it optimizes towards:
- SMS and MMS messages must contain a link.
- RCS messages must contain a link or a suggested reply.

At this time, RCS messaging with Content Optimizer does not support SMS fallbacks.
Best practices
- In general, we recommend testing more components rather than fewer for the Content Optimizer step. For example, instead of testing two components for email, test three.
- Test at least 10 total combinations for best results.
- If you’re optimizing for clicks, include subject lines in your tests, as stronger subject lines can contribute to increased opens and create more opportunities for clicks.
- If you’re optimizing for opens, keep your testing focused on the subject line.
- If this is your first time using Content Optimizer, consider using an Experiment Paths step so only part of your audience enters the branch that contains the Content Optimizer step. For example, you could send half your users down a path with the Content Optimizer step and send the other half of your users down a control path that sends the Message Step with your current business-as-usual content. Then, gather data for 2-3 weeks and compare any key performance indicators (KPIs) or counter-metrics before you increase traffic to the paths with Content Optimizer steps.
- For an effective one-to-one comparison, we recommend that your Content Optimizer step contains your business-as-usual content as one of the variants for each component.
Considerations
- Multi-language settings aren’t supported in Content Optimizer steps. Instead, we recommend using one Content Optimizer step per language and branching paths individually.
- Liquid tags for Content Optimizer components aren’t supported in Message steps, so the Liquid aborts in Message steps.
Analytics
To review performance, open the step-level analytics panel to see metrics by content variant and overall combination performance. The Content Optimizer step uses the same analytics as the Message step.

Performance by component
The Performance by component section displays the performance for each component in the Content Optimizer step. The Component column matches the content component you’re testing (for example, Subject line or Primary CTA). The Identifier column matches the identifier for this variant in the Content Optimizer Settings tab.
The unique opens and clicks are captured within seven days of sending a message. Which columns you see depends on your channel and selected optimization event.
| Metric | Description |
|---|---|
| Sends | The number of sends attributed to this variant for that component in this step, using the same step-level send counting as Sends in the Performance by combination table. |
| Opens | When this column appears for your channel, the number of unique opens for this variant within seven days of send. See Unique Opens. |
| Open rate | When this column appears, the percentage of sends for this variant that logged at least one qualifying unique open within seven days. |
| Clicks | The number of unique clicks for this variant within seven days of send. See Total Clicks, Unique Clicks, and Step 5: Select optimization event. |
| Click rate | The percentage of sends for this variant that logged at least one qualifying unique click within seven days, using the same step window as the Performance by combination table. For more information, see Why step analytics differ from general analytics. |
| Reads | When this column appears (for example, for RCS when you optimize for reads), counts when a consumer reads the message with read receipts enabled. See Reads. |
| Read rate | The percentage of sends for this variant that resulted in a read among users with read receipts on. See Read Rate. |

Performance by combination
The Performance by combination section displays the performance for each combination in the Content Optimizer step. Combinations are the mix of variants that define this row—one selected variant from each content component you’re testing (for example, a subject line paired with a primary CTA).
The unique opens and clicks are captured within seven days of sending a message. The columns you see depend on your channel and selected optimization event.
| Metric | Description |
|---|---|
| Sends | The total number of messages sent from this step using this combination. Counts follow the same general meaning as Sends, scoped to each combination. |
| Opens | The number of unique opens for this combination within seven days of send. For how unique opens are defined for email, see Unique Opens. |
| Open rate | The percentage of sends for this combination that logged at least one qualifying unique open within seven days. |
| Clicks | The number of unique clicks for this combination within seven days of send. For how Braze defines clicks by channel, see Total Clicks and Unique Clicks. |
| Click rate | The percentage of sends for this combination that logged at least one qualifying unique click within seven days. Because Content Optimizer uses the step’s seven-day, de-duplicated counts, this rate may not match click rates in general campaign analytics. For more information, see Why step analytics differ from general analytics. |
| Reads | When this column appears (for example, for RCS when you optimize for reads), counts when a consumer reads the message with read receipts enabled. |
| Read rate | When this column appears, the percentage of sends for this combination that resulted in a read among users with read receipts on. |

Why step analytics differ from general analytics
Reasons that analytics in the Content Optimizer step differ from the Analytics section include:
- Push sends are de-duplicated for sends to the same user on different devices.
- In general, clicks and opens are de-duplicated to be unique for each user.
- Only clicks and opens that happen within seven days of sending a message are counted in the Content Optimizer step.
Troubleshooting
| Issue | Description | Fix |
|---|---|---|
| Missing Liquid tags | If you add a content component (such as Subject or CTA) but don’t insert the corresponding Liquid tag into your base message, you’ll see: - A warning on the Content Optimizer Settings tab - An error on the Messaging Channels tab |
Copy the Liquid snippet shown under each component in the Content Optimizer Settings tab and paste it into the appropriate part of your message. |
| Orphaned Liquid tags | If you delete a content component but leave its Liquid tag in the base message, the message may not render as expected when sent. | Remove any unused message_component tags from your base message before launching. |