Analytics Integration Guide

Step-by-step instructions to get up and running with any 3rd party analytics service.


Paid Plan Feature

Third-party analytics integrations require a subscription to one of our paid plans. Please contact us at [email protected] if you'd like to add this functionality to your account.


The Nami SDK offers support for custom 3rd-party analytics integrations that will work with all your favorite analytics providers including:

  • Adobe Analytics
  • Amplitude
  • Ensighten Pulse
  • Google Analytics / Firebase
  • Heap
  • KISSmetrics
  • Mixpanel
  • mParticle
  • and any others!

A few simple steps will get you up and running with Nami and your analytics service.

  1. Register an analytics handler. Add the code below to your AppDelegate in the function where you handle the setup of the Nami SDK for iOS. In React Native, add the javascript code in the first screen that displays when your app loads.
NamiAnalyticsSupport.registerAnalyticsHandler { (actionType : NamiAnalyticsActionType, analyticsItems : [String:Any]) in
    switch actionType {
        case .paywallRaise:
        case .purchaseActivity:
        @unknown default:
const { NamiAnalyticsEmitter } = NativeModules;
const analyticsEmitter = new NativeEventEmitter(NamiAnalyticsEmitter);

useEffect(() => {
  analyticsEmitter.addListener('NamiAnalyticsSent', onNamiAnalyticsReceived);
}, []);
const onNamiAnalyticsReceived = (event) => {
  const { analyticsItems, actionType } = event;

  switch (actionType) {
    case 'paywall_raise':
    case 'purchase_activity':
  1. Add analytics calls for each type of Nami action you wish to track.
  2. Append any Nami provided metadata to each of your analytics calls.

Note that the Nami SDK will send you two objects that you can use to pass data to your analytics provider: actionType and analyticsItems. We provide more detail on each of these below.

Action Types

The analytics handler you set up in the previous section supports the following action types.

  • paywallRaise This event will be fired when the Nami SDK displays a paywall to your user.
  • purchaseActivity is fired when a user makes a purchase from a paywall raised by the Nami SDK.

Metadata Available

When any of the four action types in the previous section occur, the Nami SDK provides several items of metadata that you may attach to the event. Some action types have different metadata available.

For all action types

  • campaignID unique ID for the campaign
  • campaignName the name of the campaign in the Control Center
  • campaignType the type of the Nami campaign that resulted in this paywall being displayed
  • namiTriggered true or false based on whether your campaign rules triggered the display of the paywall or the user invoked the paywall
  • paywallID unique id for the paywall
  • paywallName the name of the paywall in the Control Center
  • paywallType the type of the paywall
  • paywallProducts a list of all products included on the paywall as Product SKU objects


Nami Best Practice

We recommend converting paywallProducts into a list of product identifiers with some suitable separator before sending it to your analytics. A code snippet that generates a comma separated string of all products is below.

if let products = analyticsItems["paywallProducts"] as? [NamiMetaProduct] {
    let productList : String = products.reduce("", { (result, product) -> String in
        if result.isEmpty {    
            return product.productIdentifier
        } else {
            return result + "," + product.productIdentifier
if (analyticsItems.paywallProducts && analyticsItems.paywallProducts.length) {
  let products =, index) => {
    return product.productIdentifier

Specific to purchaseActivity

  • purchaseActivityType one of newPurchase, cancelled, resubscribe, or restored
  • purchaseTimestamp Swift Date object with the time of purchase
  • purchasedProduct a Nami Product SKU object with metadata about the product the user purchased