Campaign Delivery: Mobile In-App and On-Site Messaging Campaigns

This article describes the anatomy of how a mobile In-App campaign and an On-Site Messaging (OSM) campaign are delivered to your user. Each section below describes the dependencies and configurations that affect the delivery of these messages.

The following common modules across Mobile In-App and OSM campaigns are important for the campaign delivery and rendering on the end user's device.

SDK Sync

The active mobile In-App and OSM campaigns are delivered to the SDK for rendering when the user opens the app. This sync is tried only once every 15 minutes as long as the app is in the foreground. After a campaign is delivered to the SDK, it will be shown as soon as the trigger action is performed by the user provided the other campaign conditions such as display controls and delivery controls are fulfilled.


While creating a mobile In-App campaign or an OSM campaign, you can choose to target all users or specify filters to select the audience you want to target.

  • When you select All users:
    These campaigns will be delivered to all users, even the ones who are opening your app for the first time.
  • When you select an option under Filter users by:
    When the campaign starts at the scheduled time, the filter conditions are evaluated and the users who satisfy the filter conditions are evaluated by running the segmentation query. This list of users is maintained on the MoEngage side and when one of the users opens the app/website, the campaign is delivered to the SDK.

Note for Segmented Campaigns

  • Campaign Segments are evaluated in real-time for user attribute segments. Segments that use user attributes, and events & event attributes within the last 30 days of data are also evaluated in real-time. (Know more)
  • Segments using events and event attribute data beyond 30 days are evaluated frequently for new users to move into your campaign segment list and start seeing the campaign. The frequency of segment evaluation can vary from 30 minutes to a few hours, based on the campaign type. The frequency is configurable.
  • Even after a user becomes a part of the campaign segment, it may still take about 15 more minutes for the SDK sync to happen and for the campaign to be rendered on the app/website.


Trigger Action

The Trigger Action is used to fetch the campaign payload including the template, personalized properties of the template and render the In-App or OSM on the app/website.

Trigger Actions for Mobile In-App Campaigns

The user can select one of the following trigger actions for creating Mobile In-App campaigns.


  • On app open: These campaigns are triggered immediately when the app or any screen is launched by the user.
  • On specific screen: Send the In-App message when the user navigates to the specified screen.
  • On custom event: These campaigns are triggered immediately when the custom event is tracked on the SDK. Please note that only the events which are tracked from the respective Android or iOS SDK can be used as trigger actions for the Mobile In-App campaigns.

Trigger Actions for OSM Campaigns

The user can select one of the following trigger actions for creating OSM campaigns:


  • On Page Load: These campaigns are triggered immediately on Page Load unless a value is provided for After Delay or After Scroll in which case the campaigns are triggered after the conditions are met.
  • On custom event: These campaigns are triggered immediately when the custom event is tracked on the SDK. Please note that only the events which are tracked on the web SDK can be used as trigger actions for OSM campaigns.
  • On Exit Intent: These campaigns are triggered when the user is about the leave the website. For more information on exit intent, please refer to this article.

Note for Trigger Actions

  • For Trigger Actions, only the actions generated on the same device and tracked by the MoEngage SDK are supported. Events tracked from S2S or generated by MoEngage internally on the server side like App / Site Opened, Device Uninstall, Device ReInstall or User ReInstall are not supported.
  • The actual campaign template is fetched in real-time as soon as the trigger action is detected by the SDK. We do not wait for the event to be processed to fetch the campaign template from MoEngage servers to keep the rendering real-time.
  • In the case of multiple campaigns with the same trigger action, only 1 campaign is selected by the SDK to be shown on the mobile app or website.

Campaign Priority

When there are multiple campaigns that have the same trigger action, in this case, we will make use of the Campaign Priority. Only the campaign with the highest priority will be displayed each time the trigger action is executed.

In case two campaigns have the same trigger action and the same priority, the campaign which was recently created will be shown.

Delivery Controls

Delivery Controls are used to control your In-App and OSM from appearing too frequently on your app and website. We have the following delivery controls:

  • Maximum times to show message ever: This will restrict your campaign to be shown for a maximum number of times as defined during campaign creation.
  • Minimum delay between 2 messages on this campaign: This will prevent your campaign from being shown frequently if the user executes the trigger action multiple times within a short time window.
  • Ignore Global Delay between 2 On-site Messaging campaigns: Global Delay will prevent your user from seeing too many In-App/OSM campaigns within a specific time window. Check this to not consider global delay for this specific campaign.
  • Auto dismiss message after: This will dismiss the in-app messages after the defined auto-dismiss time so that it does not bother the user.

Note for Delivery Controls

  • Delivery controls are applicable at a device level and hence for one user who has logged in with the same user unique id on two different devices, the delivery controls will be applied separately.
  • For User 1 who is logged in on an Android device and an iOS device, the mobile in-app campaign will be shown for 2 times on each device individually.
  • If the user logs out or clears the device cache, the delivery controls are reset and the user will be evaluated for the delivery controls from the beginning after this logout/cache clears.
  • Please note that for an OSM campaign, there is a default behavior that OSM campaigns do not show up on the same page more than once. The campaign will be shown on the next reload or on another page.


Campaign Scheduling and First-Time Sync

Once started, for the campaign to start getting displayed, following are the dependencies:

  • Once the campaign starts, the segment gets evaluated. Depending on the customer and the customer data we are scanning for the query, it may take around 15 minutes on average for the segmentation query to return a list of user ids for whom the campaign can be delivered.
  • After Segmentation, the campaign will only be delivered to the SDK when the user opens the app/website. Please also note that the SDK sync happens only once in 15 minutes and hence it may take more time for the campaign to be delivered to the SDK if the previous sync happened within the last 15 minutes.


  • A campaign is personalized when the user executes the trigger action and a campaign is selected for rendering by the SDK. Once done, the SDK will fetch the campaign template from MoEngage. During this activity, we will send a personalized template to the SDK.
  • In case of personalization failure, the campaign will not be rendered if no fallback is provided in the campaign. Any other campaign will not be attempted thereafter in case of personalization failure hence it is always a best practice to add fallbacks for personalized In-App/OSM messaging campaigns.


  • Internet Connectivity plays a crucial role in mobile In-App and OSM campaign rendering. Poor internet connectivity may delay the campaign rendering by delaying the template fetch from MoEngage, image download delays, or failures.
  • If the image download fails, the mobile in-app campaign will not be rendered at all on the mobile app.

Data Flow Diagram of how In-App and OSM Campaigns Work


SDK Integration for Mobile In-App Campaigns

To be able to show Mobile In-App Campaigns on your mobile apps, please ensure that you have followed the integration steps mentioned in our Integration docs for Android and iOS.

Please note that to be able to show the Nudge Templates on your app, you need to follow the integration steps mentioned here - Android, and iOS.

Also, if you plan to use Self-Handled In-App messages, refer to the integration docs for Android and iOS.

SDK Version Dependency for Mobile In-App Campaigns

Below are some of the features that are only supported for specific SDK Versions

Mobile In-App Feature Supported on Android SDK Version greater than Supported on iOS SDK Version greater than
Ignore Global Delay 10000 6.0.0
Allowing users to give a half-star rating 10000 6.0.0
More than 5 stars in the rating template 10000 6.0.0
Action -> SMS 10000 6.0.0
Action -> Custom Action 10000 6.0.0
Action -> Track Event with Event Attribute 10000 6.0.0

Please note that there is no SDK Integration required for OSM and there are no SDK Version dependent features for OSM either.

Was this article helpful?
5 out of 5 found this helpful

How can we improve this article?