- Navigate to the MoEngage Dashboard.
- From the left navigation, use one of the following options:
- Click Engage > Campaigns. The All Campaigns page displays. At the top right, click + Create Campaign. The Create Campaign page appears.

- Click Create New > Campaign. The Campaign page appears.

- Click Engage > Campaigns. The All Campaigns page displays. At the top right, click + Create Campaign. The Create Campaign page appears.
- Under Inbound, click In-App. The In-App campaign creation page appears.

Create an In-App Message Campaign
To create an In-App message campaign, follow these steps:- Target users: Define the audience for your campaign.
- Content: Design the message content.
- Schedule and goals: Set the delivery schedule and track campaign performance.
Step 1: Target Users
Campaign Details
The Campaign Details section includes:
- Campaign name: Enter a name to easily identify and manage your campaign. The campaign name must be between 5 and 256 characters.
- Campaign tags: Select up to five tags from the drop-down list. Tags help you organize and filter campaigns. For more information, refer to Campaign Tags.
Select Platform
In the Target platforms section, select the required platforms where your In-App message should display.
If Portfolio is enabled, you can select target projects from the Select Project dropdown to specify the website where your campaign will be delivered. For more info, refer to Portfolio for In-App Campaigns.
Trigger Criteria
This section defines when the In-App message triggers for users.- On session start
- On screen load
- On custom event
Select On session start to display the In-App message as soon as a user’s app session begins. An app session starts when the user first interacts with the app. The session ends if the user logs out, enters from another traffic source, or is inactive for longer than the defined inactivity period (default is 30 minutes).
Under Select trigger time, select Immediately to send the message as soon as the campaign is published, or select After Delay to send the message after a specified time.

- Make sure to add a delay so the In-App message does not appear on the splash screen.
- With the After Delay option, you can set a maximum delay of one day (86400 seconds) and a minimum delay of one second.
- The After Delay option is available in the following SDKs:
- Android SDK version 6.9.0 or later
- iOS SDK 4.11.1 or later
- React Native SDK 8.6.0 or later
- Cordova SDK 8.4.0 or later
- Capacitor SDK 3.1.0 or later
- This trigger condition is available in the following SDKs:
- Android SDK version 9.0.0 or later
- iOS SDK version 6.06.0 or later
- This trigger condition is presently available only for native Android and iOS. It is not supported for hybrid.
Select Target Audience
This section includes segmentation filters to help you select the target audience for your campaign.- All Users
- Filter by User Property
- Filter by User Behavior
- Filter by User Affinity
- Filter by Custom Segment
Select this filter option to send the campaign to all app users. When you use this option, you cannot add multiple filters.

- Create Multiple Filters: Create and combine multiple user property, user activity, and custom segment rules to build complex user segments.
- Click + Filter.
- Click AND or OR.
- Select the attribute or event and define the filter conditions.
- Exclude Users: Select this check box to define filter criteria for users to exclude from the campaign.
- Re-evaluate campaign eligibility before displaying: Turn this toggle on to verify a user’s segment eligibility at the exact moment a campaign is triggered. This prevents users from seeing irrelevant content if their attributes change during an active session. For more information, refer here.

- Reset filters: Click this option to clear all segmentation filters.
- Show count: Click this button to display the total number of users currently in the configured segment.

If you have the Portfolio feature enabled, you can create user segments by combining user data and behavior from different apps and websites (Projects) within your workspace. For more information, refer to Segmentation in a Multi-Project Portfolio.
Re-evaluate Campaign Eligibility
By default, segment membership is evaluated during the initial campaign call when a user opens the app. Any attribute changes occurring mid-session are not reflected until the next app launch. When you enable the Re-evaluate campaign eligibility before displaying toggle, the SDK intercepts the campaign trigger to perform a live check with the backend. If user attributes have changed (for example, transitioning from a Free to Paid status), the SDK discards the outdated campaign and fetches content relevant to the user’s updated state.InformationAvailability and Scope
- SDK Version: Support for segment re-evaluation is available starting with In-app Android SDK version 9.7.0 and In-app IOS SDK version 7.04.0.
- Supported segments: This feature is available only for User Attribute-based segments and Real-Time Segment Evaluation (RTSE) segments.
- Excluded segments: This option is hidden for segment types where real-time changes do not apply (for example, static segments).
- Limit: This option is available for up to five campaigns.
- Trigger detection: The user performs an action that matches the trigger criteria.
- Backend verification: The SDK initiates a backend request for a new evaluation.
- Eligibility check: The backend evaluates the user’s current attributes. If the user is eligible, the campaign appears; if not, it is dropped, and a failure is logged.
- Campaign refresh: If the campaign is dropped, the SDK performs a new campaign call to fetch campaigns relevant to the updated segment.
- Campaign display: The new, eligible campaign displays to the user within the same session on the next trigger.
| Step | Action | Logic | Result |
|---|---|---|---|
| 1 | User opens the app. | The SDK performs a campaign call. The user is identified as “Free”. | Campaign A (targeting Free users) is cached. |
| 2 | User upgrades their plan. | Attribute changes from Plan: Free to Plan: Paid. | SDK detects the attribute change. |
| 3 | User performs a trigger action. | Re-evaluate campaign eligibility before displaying toggle is turned ON. The SDK calls the backend. | Campaign display is paused for verification. |
| 4 | Evaluation occurs. | The backend identifies the user as “Paid”. | Campaign A is dropped,and a failure is logged. |
| 5 | Display. | The SDK fetches campaigns for “Paid” status. | Campaign B (Paid) appears on the next trigger point. |
Campaign Audience Limit
This feature helps you control campaign reach and expenditure by limiting the number of users who receive it based on engagement metrics like sends, impressions, and conversions. You can set total, daily, or instance-level limits for campaigns. For more information, refer to Campaign Audience Limit.
In-session Attributes
In-session attributes enable you to group and target users based on their actions within the current app session. For example, use in-session attributes to display onboarding flows exclusively to new users visiting your app for the first time. This method ensures that these users receive a customized experience immediately during their initial session. To add an in-session attribute:- Click the + In-session attributes button and select the required attribute from the list.

- Use And/Or to combine multiple in-session attributes.

- Select the Exclude Users check box to exclude users based on their in-session activity.
- Query Parameter: This attribute segments users based on query parameters in the Uniform Resource Locator (URL). Typically, users land on your personalized URL by clicking an advertisement on any social media platform.
- You can use UTM parameters to segment users based on their source or the campaign that led them to the URL.
- UTM parameters like utm_source identify campaigns driving users to websites. You can use UTM and custom parameters to segment users and personalize their experience.
- User Type: This attribute segments users based on whether they are new or returning. The SDK stores user details (unique_id) for each user in the app storage. A user is considered a Returning User if the associated user details exist in the SDK data storage. Otherwise, the user is considered New. If the user clears the app cache, they are considered new.
- Note: If two users (User 1 and User 2) use the same device and User 2 logs in after User 1, User 2 is considered a returning user.
- Day of the Week: This attribute segments users based on the day of the week they visit your app.
- Time of the Day: This attribute segments users based on the hour of the day they visit your app. You can choose from any of the one-hour slots available in the list.
- GeoLocation: This attribute segments users based on their geolocation when they visit your app. You can choose the country, state/region, and city where the user is located or exclude a specific country.
Control Group
This section provides information about control groups for the campaign. Control Groups are enabled only for promotional campaigns. They are not applicable for transactional campaigns. Enable control groups to which you want to send the promotional campaign.| In the Control group section: • Turn the Global control group toggle on to not send the campaign to all users in the control group. • Turn the Campaign control group toggle on to not send the particular campaign to the control group. For more information, refer to Control Group. | ![]() |
Step 2: Content
The following options are available to add content for your campaign:Prebuilt and Saved Templates
This option enables you to choose a template from the following categories: All (chosen by default), Pre-built, Saved templates, and API templates. In this section, you can perform the following actions:- Search templates: Enter the template name in the Search templates bar.
- Filter templates: Use the following options to filter templates:
-
- Filter By Type: Filter templates based on pre-built types (e.g., Nudges, Carousel, Pop-up).
- Filter By Use Case: Filter templates based on their purpose (e.g., Promotional, Feedback, Survey).
- Filter By Content: Filter templates based on their content (e.g., text-only, buttons).
- Filter By Editor: Filter based on the editor that supports the template (Native, HTML, or Self Handled).
-

- Pre-Built templates
- Saved templates
Pre-built templates support various options beyond adding text, such as adding links and buttons, displaying ratings, and pop-up templates. The following table summarizes some common pre-built templates:
| Field | Description |
|---|---|
| Text | Displays templates with text. |
| With Image | Displays templates with images. |
| Without Image | Displays templates without images. |
| Single Button | Displays templates with a single button. |
| Multiple Button | Displays templates with multiple buttons. |
| Full Screen | Displays templates that enable full screen. |
| Pop up | Displays templates that have pop-up windows. |
| Embedded | Displays templates with embedded links. |
| Rating | Displays templates with rating options. |
| Nudge | Displays nudge templates in a non-intrusive manner. |
Start from Scratch
This option enables you to choose from the following content creation methods:- Self Handled: For more information, refer to Self Handled In-App Template.
- Zip upload: For more information, refer to Zip Upload Templates.
- Custom HTML upload: For more information, refer to HTML In-App Templates.
Add Content to the Template
Perform the following steps to add content to the selected template and template type.Common Actions
- Turn the Mirror platforms toggle on to use the same template and configure the message together for the selected platforms.
- Click + A/B test to create a variation. You can create a maximum of five variations.
For more information, refer to A/B Testing Overview. - Click + Locales to add a locale. You can add a maximum of 10 locales for a single campaign.
For more information, refer to Using Locales. - Click the icon to:
- Save Template
- Change Template
- Reset Template

Template Settings
| Field | Description and action |
|---|---|
| Background color | Select the Background color option and define the background color of the message. |
| Phone background color | Select and define the background color of the phone or device. |
| Image | Do one of the following: 1. Select the Image URL option and enter or paste the URL of the image. 2. Select the Upload Image option and drag and drop the image or click upload from the computer to upload the stored image. Note: • Ensure that the image size is less than 10MB. • Ensure that the aspect ratio of the image is 2:1 (Width x Height). |
| Animation | Entry and exit animations for the entire In-App message. Select from one of the following animations: • None - no animation • Slide up - Message displays from the top of the screen. • Slide down - Message displays from the bottom of the screen. • Slide left - Message displays from the left of the screen. • Slide right - Message displays from the right of the screen. • Fade in - Message displays with the fade-in effect. Applicable only for entry animation. • Fade out - Message displays with the fade-out effect. Applicable only for exit animation. |
| Close Button | 1. Enable or disable the display of the close button. 2. From the Type drop-down, customize the appearance of the close button by selecting one of the following: • White-filled (Android only) • Black-filled • Grey-filled • Brown-filled • Cross only black • Cross only grey • Black-empty (iOS only) 3. From the Close button placement drop-down, select the placement as one of the following: • Left • Right |
| Border | Select the following: 1. Use the slider to define the Width of the border in pixels. 2. Use the slider to define the Radius of the border in pixels. 3. Select or type the hexadecimal code of the Border color. |
Text
| Field | Description and action | ||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Heading | Type or paste the heading in the text box. | ||||||||||||||||||||||||||
| Font size | Type or use the up and down arrows to select the font size used in the text. | ||||||||||||||||||||||||||
| Font color | Type the hexadecimal code or select the font color used in the text. | ||||||||||||||||||||||||||
| Custom font | Select the custom font and type the font name used in the text. | ||||||||||||||||||||||||||
| Background color | Select and define the background color of the message. | ||||||||||||||||||||||||||
| Action | Select one of the following from the drop-down list:
| ||||||||||||||||||||||||||
| Width, Margin, and Padding | |||||||||||||||||||||||||||
| Width | Use the slider or type the value to define the width of the text box in percentage. | ||||||||||||||||||||||||||
| Margin | Select Together and use the slider or type the value to define all margins of the text box in pixels. OR Select Separate and use the slider or type the value to define the top, bottom, right, and left margins of the text box in pixels. | ||||||||||||||||||||||||||
| Padding | Select Together and use the slider or type the value to define all padding for the text box in pixels. OR Select Separate and use the slider or type the value to define the top, bottom, right, and left padding of the text box in pixels. | ||||||||||||||||||||||||||
| Border | Select the following:
| ||||||||||||||||||||||||||
Image
Perform one of the following actions:| Field | Description | ||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Image URL | Select the Image URL option and enter or paste the URL of the image. | ||||||||||||||||||||||||||
| Upload image | Select the Upload image option and drag and drop the image or click upload from the computer to upload the stored image. Note: • Ensure that the image size is less than 10MB. • Ensure that the aspect ratio of the image is 2:1 (Width x Height). | ||||||||||||||||||||||||||
| Action | Select one of the following from the drop-down list:
|
Buttons
| Field | Description | ||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Button text | Type or paste the text used in the button. | ||||||||||||||||||||||||||||||
| Font size | Type or use the up and down arrows to select the font size used in the button. | ||||||||||||||||||||||||||||||
| Font color | Type the hexadecimal code or select the font color used in the button. | ||||||||||||||||||||||||||||||
| Custom font | Select a custom font and type the font name used in the button. | ||||||||||||||||||||||||||||||
| Background color | Select and define the background color of the button. | ||||||||||||||||||||||||||||||
| Action | Select one of the following from the drop-down list:
| ||||||||||||||||||||||||||||||
| Width, Margin, and Padding | |||||||||||||||||||||||||||||||
| Width | Use the slider or type the value to define the width of the text box in percentage. | ||||||||||||||||||||||||||||||
| Margin | Select Together and use the slider or type the value to define all margins of the text box in pixels. OR Select Separate and use the slider or type the value to define the top, bottom, right, and left margins of the text box in pixels. | ||||||||||||||||||||||||||||||
| Padding | Select Together and use the slider or type the value to define all padding for the text box in pixels. OR Select Separate and use the slider or type the value to define the top, bottom, right, and left padding of the text box in pixels. | ||||||||||||||||||||||||||||||
| Border | Select the following:
| ||||||||||||||||||||||||||||||
Personalize Content
Personalize the content of your In-App campaign by using the ’@’ symbol to insert user attributes, user events, product sets, content APIs, and content blocks. This enables dynamic and relevant messages for each user. For more information, refer to:- MoEngage Templating Language (JINJA)
- Derived Events & Attributes
- Content APIs
- Content Block
- Auxiliary Data
- In step 2 of campaign creation, click the text box or the image property URL.
- Type @ to personalize the content.
- Click either Data personalization or Content Block.
- Click the Data personalization tab and from the drop-down, select one of the following:
- User Attributes
- Select one of the following as fallback options if personalization does not work:
- No Fallback: No alternate content is provided if personalization fails.
- Do not send In-App: The In-App message is not sent if personalization fails.
- Replace Text: Type or paste the text to use if personalization fails.
- Product Sets
- Content API: Modify the values of the Content API parameters.
- Click Content Block:
- Select the content block to insert.
- Click Insert only the content of the content block.
- Click Done.
Test Campaign (optional)
Test Campaign (optional)
Test campaigns enable you to preview the campaign on a test device to ensure your notification displays as desired.Test the campaign you created by selecting any of the following options and providing the value for the attribute chosen for your test user:
- Unique ID
- Email ID
- Mobile Number (Registered With MoEngage)
- Google Advertising Identifier
- iOS Identifier For Advertising
- Device Push Token
-
Custom Segment

Step 3: Schedule and Goals
This section includes:- Delivery Schedule: Choose when to deliver the campaign to your users and how often.
- Conversion goals: Select the conversion goals and revenue metrics to track for the campaign.
- Delivery controls: Choose advanced delivery options such as throttling, frequency capping, and expiration settings.
Delivery Scheduling
The following delivery schedule options are available for In-App Campaigns:- One Time
- Periodic
Select this option to send the campaign immediately or at a specified time to target users.

| Field | Action |
|---|---|
| As soon as possible | Sends the campaign immediately to target users. You can select: • Campaign time zone - the timezone in which the campaign should send. • Ends: the date on which the campaign should end. The following options are available: • Never: The campaign runs daily. • On: The campaign ends on the end date and end time you specify. |
| At specific date and time | Send the campaign at the specified time, time zone, or predicted time. This section helps you send the campaign on a specific date and time and contains the following fields: • Campaign time zone - the timezone in which the campaign should send. • Start date - the date on which the campaign should send. • Send time - the time at which the campaign should send. Select AM or PM depending on the time of day. • Ends: the date on which the campaign should end. The following options are available: • Never: The campaign runs daily. • On: The campaign ends on the end date and end time you specify. |

Conversion Goals
You can add conversion goals to track business metrics for your campaigns, with a maximum of five goals. Choose any app event as a conversion goal activity. The first goal is treated as a primary goal. For example, if you want to track the number of customers who purchased an iPhone after your campaign was sent (Event: Purchase event, Product: iPhone), your conversion goal setup might resemble the following image:
- How many users viewed the product page?
- How many added that product to the cart?
- How many made a successful order?
Tracking Revenue Performance (Optional)
Tracking Revenue Performance (Optional)
| With MoEngage, you can track the revenue generated by your campaigns. For example, track the revenue generated by your product after sending a communication. To track revenue performance, enable the Revenue performance toggle for the conversion goal for which you want to track the revenue. In the example here, to track revenue for orderSuccessful events, enable the Revenue performance toggle. | ![]() |
| After choosing the goal, select the numeric attribute that captures the order’s total monetary value. In this example, cartValue contains the total order value. You can choose the currency in which your monetary value is reported. | ![]() |
| Set Attribution window: Set an attribution window (a time period or window calculated from when the user receives/clicks the campaign, for which you want to attribute conversion goals to a specific campaign). By default, it is set for 36 hours, while the maximum attribution window can be set up to 10 days. In the example below, the attribution window is set to 5 hours. | ![]() |
Campaign Priority
Set a priority for your In-App campaign as Critical, High, Medium, Normal, or Low.
Delivery Controls
You can select the following options for your In-App Campaign:- Limit the maximum number of times a user can see messages from this campaign to: Control campaign frequency by entering how many times to display the message. Note: Frequency capping works at the device level, not the user level. This means if your user logs on to two devices at once, they receive the campaign on both devices even if the frequency setting is set to 1.
- Add a minimum delay between two messages of this campaign: Add a minimum delay between two messages to control the frequency and timing of displaying In-App messages to the user. This setting is disabled for Nudge Templates.
- Ignore frequency capping: Enable this toggle to ignore the frequency capping limit for this In-App campaign. For more information, refer to Frequency Capping. Note: Support for frequency capping is available from In-App Android SDK version 9.8.0 and In-App iOS SDK version 7.04.0.
-
Count for frequency capping: Enable this toggle if you want the In-App message to be included in the overall frequency capping, allowing you to monitor the total number of messages delivered to the user.
- Ignore global minimum delay: Enable or disable global minimum delay settings for this particular campaign.
-
Auto Dismiss message after: This option dismisses the In-App message after a specified duration (in seconds). After the specified time, the In-App message is dismissed even if the user does not perform any action on it.

Delay Between Two Campaigns
Delay Between Two Campaigns
If you have multiple In-App campaigns, you can stagger them by setting a minimum delay between messages from different campaigns. Go to Settings > Channels > Delivery controls.Note: This minimum delay applies to messages from different campaigns and the same campaign.Here you can set the minimum delay (in minutes) between two In-App messages from different campaigns. With this setting, if your user sees a message from Campaign 1 at time T and another message is sent before T+15, it does not display.

In-App campaigns support the Campaign Approval Workflow (CAF). If CAF is enabled, the campaign must be reviewed and approved for publishing. For more information, refer to CAF. To enable CAF, contact your Customer Success Manager.



















