Segmenting Users for Targeted In-App Messaging in Braze

A hallway of three wooden doors, one open with green light on a grey runner and a hand on its handle, showing targeted in-app messaging reaching only the users who qualify.

Braze in-app message segmentation decides who is eligible for a message, but timing decides who actually sees it. Braze checks segment membership when a device downloads messages, usually at session start, and the device then shows each message when its trigger fires. Build segments around that sequence, and test them with User Lookup before launch.

‍

Key Takeaways

  • Braze checks segment membership when the device downloads in-app messages, which usually happens at session start.
  • Use the segment for who and the trigger for when, because the device shows each downloaded message when its trigger occurs.
  • Negative filters joined with or on one attribute target users with all values, so use and or an exclusion group.
  • Device-dependent filters match users, so a matching user is sent the message on all their devices.
  • Only one in-app message displays per occurrence of a trigger event, so overlapping segments on a shared trigger compete.
  • Re-evaluate campaign eligibility before displaying closes the gap between download and display, and it needs a network connection.

‍

How does Braze in-app message segmentation work?

In-app messages are pulled by the device, so segmentation behaves differently from email or push. Braze checks whether a user is in your target audience when their device downloads in-app messages, which usually happens at session start. The device stores eligible messages and shows each one when its trigger occurs.

Braze calculates exact segment membership before sending the message to the device. Segments also update in real time as data changes. Read together, those two facts mean a segment gives you a snapshot at download, and the trigger decides the moment of display.

‍

What should the segment decide, and what should the trigger decide?

Give each control one job. The segment answers who, the trigger answers when, and priority answers which message wins when several are waiting. Trouble starts when the segment is asked to do the trigger's job.

A segment built around "users on the pricing screen" is one example, since a custom event expresses that moment directly. We recommend settling the trigger and the timing first, then building the smallest segment that still describes the right person. A narrow trigger with a broad segment is easier to reason about than the reverse.

QuestionControlWhat Braze documents
Who is eligible?Segments and filtersExact segment membership is calculated before the message goes to the device
On which apps?Users from specific appsTargets users with at least one session in the specified apps
When does it show?Campaign triggerSession start, a purchase, or a custom event logged through the SDK
Which message wins?PriorityOnly one in-app message can display per occurrence of a trigger event
Still eligible at display?Re-evaluate campaign eligibility before displayingThe SDK makes an additional request to confirm eligibility

‍

How do you build a segment for an in-app message?

Work through the segment editor in a fixed order, because each step narrows the one before it. Under Audience > Segments, the procedure is:

  1. Name the segment for the user it describes, and add a description. Braze notes that vague segment titles can be confusing, and the description lets other team members see the intention of the audience.
  2. Choose the app. Selecting your iOS app means users who have both an iOS and an Android device only receive the message on their iOS device.
  3. Add filters and group them. Within a filter group and between groups you can join conditions with and or or.
  4. Add an exclusion group for anyone who must never see the message. Exclusion groups override segment criteria.
  5. Check the size, remembering that segment statistics come from a random sample with a 95% confidence interval.
  6. Open User Lookup, search for a known external_id or braze_id, and confirm the profile matches. When a user doesn't match, Braze lists the missing criteria.

‍

Braze also notes that it doesn't generate profiles for users until they've used the app for the first time. You can't target someone who hasn't opened your app yet, so plan first-session messaging with that in mind.

‍

Why does the or operator pull in the wrong users?

The or operator is true when a user meets one or more filters. That is fine for positive conditions. It breaks down with negative ones on the same attribute.

Braze documents the failure. If not included, is not, does not equal, or does not match regex appears with the or operator two or more times, users with all values for the relevant attribute will be targeted. Say you want everyone except two plan types, and you write "plan is not A or plan is not B".

Every user passes at least one test. We suggest using and between the negative filters, or moving the unwanted values into an exclusion group.

‍

What happens when a user has more than one device?

Device-dependent filters (device model, device OS and app version) match users, not devices. Braze documents that your segment contains all users who match. Those users are sent a message on all their devices, including ones that may not meet your filter criteria.

The practical consequence is that a message built for a new app version can reach a user's older device. Braze also notes that a user may have been in your target segment at send time but may not be part of it afterwards.

If a stakeholder asks why someone received a message they no longer qualify for, check the profile first. Look for multiple devices and recent changes before suspecting the segment.

‍

When is eligibility checked, and what happens if a user changes segment?

For campaigns, Braze checks eligibility when the device downloads messages. Users who become eligible during a session receive the message at their next session start. In a Canvas with a delay, Braze evaluates segment membership after the delay, and the message syncs during the next available session.

The gap between download and display is where stale targeting comes from. A cached message can still show after a campaign is stopped if the user started a session before it stopped. Re-evaluate campaign eligibility before displaying closes that gap for frequently changing attributes.

The SDK makes an additional request to confirm the user is still eligible. That setting requires a network connection and adds a request before display, so Braze advises against it for messages that must trigger while the user is offline. It also doesn't send the message to users who became eligible after their session started.

‍

What happens when several segments compete for the same trigger?

Only one in-app message can display per occurrence of a trigger event. If several campaigns share a session start trigger, a user sees one per session, and the next chance for another eligible message is the next session. When messages share a priority level, the message created last displays first.

When a well-built campaign never appears, we suggest checking for overlapping segments on a shared trigger first. Either make the segments mutually exclusive or set the order yourself. In Braze you select Set Exact Priority and drag campaigns into the desired order.

The default capacity is 200 active, action-based in-app message campaigns per workspace, and your workspace may have a different capacity. Check the current figure in Braze documentation before you plan a large number of always-on campaigns.

‍

What does a worked example look like?

This example is hypothetical and illustrative. It is not client work and carries no results. Take a retailer with a loyalty programme that wants a modal inviting upgraded members to try a new feature in its iOS app.

The retailer first picks the trigger. A custom event fires when a member opens the relevant screen, so the modal appears when it makes sense instead of at launch. Next it builds the segment from a tier attribute and limits it to the iOS app.

Members with both an iOS and an Android device then only see it on iOS. Anyone who has already used the feature goes into an exclusion group, which overrides the tier criteria.

Because tier changes often, the retailer turns on re-evaluate eligibility, accepting the extra request and the need for a connection. It then sets exact priority so a seasonal promotion sharing the same trigger doesn't displace the feature modal. Finally, it looks up one member who should qualify and one who shouldn't, and confirms the match before launch.

‍

How does this connect to the rest of the programme?

Segmentation is one layer of a wider audience design. Our guide to audience segmentation in Braze covers the general principles, and segmenting mobile audiences looks at device and app signals.

The trigger half of the decision has its own post on setting up in-app message triggers. For creative choices, see engaging in-app messages, and for measurement, in-app message analytics.

If your segments feed longer journeys, segmenting audiences for automated campaigns is the natural next read. Segments are only as accurate as the profiles behind them. Where the same customer sits under several identifiers, our customer data management service covers identity resolution.

As a Braze implementation partner, CustomerIK recommends recording four things in one line before build: the segment, the trigger, the priority and the eligibility setting. That single line makes overlaps and gaps visible before users meet them.

‍

Frequently Asked Questions
‍

1. Can I use an in-app message in a multichannel campaign?

Braze notes that in-app messages aren't available in multichannel campaigns. Use a campaign for a single targeted message, or a Canvas for a multi-step journey.

2. Can an in-app message step in a Canvas be action-based?

Braze documents that steps containing in-app messages cannot be action-based. The Canvas step evaluates its audience when the user reaches it, and the message downloads at the next session start.

3. Why did a user see a message after leaving the segment?

Eligibility is checked at download, and the device displays the message when the trigger occurs. A user who changed segment in between can still see the cached message unless re-evaluate eligibility is on.

4. Do segment statistics show every user in a very small segment?

Not always. Segment statistics are calculated from a random sample, so a handful of users may not appear in the preview. Test membership with User Lookup instead.

5. What happens to campaigns when I archive a segment?

When you archive a segment, any campaigns or Canvases using it are also archived, even if the segment is used in only one Canvas component. Braze shows a warning listing what will be archived.

‍

Sources

  • Braze, Create an in-app message. Retrieved 26 Oct 2026.
  • Braze, Create a segment. Retrieved 26 Oct 2026.
  • Braze, In-app message FAQ. Retrieved 26 Oct 2026.
  • Limits such as campaign capacity are defaults that can change, so check the current Braze documentation before you plan around them.
  • Written by CustomerIK, a Braze implementation partner.

‍

CustomerIK is a Braze implementation partner working across onboarding, technical integration, marketing operations and customer data management.

If your in-app campaigns overlap or your segments drift from what users see, let's talk.

‍

Preferences

Privacy is important to us, so you have the option of disabling certain types of storage that may not be necessary for the basic functioning of the website. Blocking categories may impact your experience on the website.

Accept all cookies
Accept all cookies

These items are required to enable basic website functionality.

Always active

These items are used to deliver advertising that is more relevant to you and your interests.

These items allow the website to remember choices you make (such as your user name, language, or the region you are in) and provide enhanced, more personal features.

These items help the website operator understand how its website performs, how visitors interact with the site, and whether there may be technical issues.

Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.