At a glance: Use the revenue metric to calculate KPIs (like ROI and ARPU) and define audiences for retargeting and lookalike-based campaigns.
This article discusses revenue at a high-level:
- Discuss revenue sources
- How revenue analysis can boost marketing efforts
- Technical aspects of revenue attribution
There are three main sources for generating revenue.
Your app can offer in-app purchases. In-app purchases are not limited to the actual products that you sell. They can also include selling tickets or booking flights and hotels.
Basically, any action that involves purchasing products or services is an in-app purchase. For more information about the attribution of in-app purchases, we recommend reviewing our guide on Rich In-App Events.
Many apps, such as streaming and content apps, offer paid subscriptions. Subscriptions may be monthly, quarterly, or yearly but the most important thing is that they generate revenue.
Subscriptions may be considered as purchases (as in purchasing a service), however, the logic for attributing subscription revenue is different. For more information, you can review our Subscription Attribution Guide.
Another great way to generate revenue is by hosting ads on your app. For example, your app can display ads from other apps. If your users click on these ads, you generate revenue for each click. For more information, see our Ad revenue attribution guide.
Revenue attribution establishes the connection between revenue and other factors in your marketing operation. Such factors can be:
- Ad networks through which you run campaigns
- Campaigns that you run
- Ad sets in campaigns
- User attributes such as GEO location and type of device
- Retargeting campaigns
Let's look at some examples.
You run campaigns with the help of ad networks and some networks generate installs. As time goes by, some users purchase products and services using your app. When they do so, and you measure the revenue from these purchases, AppsFlyer knows which user comes from which network and attributes revenue accordingly.
Following the same logic, AppsFlyer also knows which campaigns generate installs. When users purchase products or services using your app, AppsFlyer knows what campaigns to attribute revenue to. You can then see which campaigns are successful and which are not.
Visualizing revenue data
Data is displayed according to the date range filter.
There are several pages in the dashboard that offer revenue data visualization.
The overview page shows the following:
Revenue divided between organic and non-organic users reported via in-app events. This includes retargeting revenue that is double-attributed.
Lifetime revenue per media source
Aggregated performance report
Revenue Per Event
ARPU - Average Revenue Per User
Cost - ROI
For more information, see our guide on the Dashboard Overview Page
The activity page contains an Activity Summary table where you can see Activity Revenue and ARPDAU (active revenue per daily active user) per media source.
For more information, see our guide on the Activity Report Page
The events page shows the Events Drill Down table. You can see the accumulated revenue for each event per media source. You can also group by Event.
For more information, see our guide on the Events Report Page
af_revenue is the only parameter that accumulates your users' revenue. Always use it with in-app events that represent actual revenue generation in your business logic.
The range of this value should be $-10,000 to $+10,000 or the equivalent original currency amount. Values outside of this range are included in raw data reports but not in aggregate reports.
af_revenue can also bear negative revenue values if you need to record events such as canceled transactions or refunds.
AppsFlyer displays the exact revenue as sent from the SDK. It does not include any calculations for VAT or app store commissions, etc., unless these were included by the developer on the SDK side prior to it being sent to AppsFlyer.
af_currency represents the currency that is stated in af_revenue (or af_price). If af_currency is missing from the event's parameters AppsFlyer sends it with the default value "USD".
You can use af_price as a monetary parameter that is not counted as revenue (such as in an “Add to Cart” event). This parameter refers to the individual item price. The total amount of all purchases appears under the af_revenue parameter.
Revenue recording and attribution in AppsFlyer bear some technical aspects.
Recording revenue data with AppsFlyer
Whenever you send in-app events such as a purchase or flight booking, you send it with its associated revenue. The sole parameter that carries revenue in in-app events is
Recording negative revenue
You can also record negative revenue in case a user cancels a purchase or if you issue a refund. To record negative revenue, all you have to do is append the minus sign (-) to the revenue value that you pass to
Do not format the revenue value in any way. It should not contain comma separators, currency, special characters, or text. A revenue value should be similar to 1234.56, for example. AppsFlyer provides revenue value with precision of up to five decimal places.
Sharing revenue data with ad networks
You can share revenue data with ad networks. To do so, you need to share revenue from in-app events with the ad network. You can also grant the ad network permission to configure revenue sharing by themselves.
Make sure to enable revenue sharing only for events that have
af_revenue defined in their event value. Otherwise, ad networks get events with empty revenue value.
To enable revenue sharing:
- Choose the Integrated Partner
- In the Integration tab, scroll to In-App Events Postback
- After you map the in-app event, choose one of the options in the Send Revenue drop-down:
- No values and no revenue
- Values and no revenue
- Values and revenue
It is recommended to share revenue if you want ad networks to optimize your campaigns and improve campaign results. However, sharing revenue is not mandatory.
This is how the parameters are sent in case of each data sending option:
Values & revenue
Values & no revenue
No values & no revenue
It's important to understand how AppsFlyer handles currency settings and currency conversion.
AppsFlyer handles the difference between app settings currency and in-app events currency using currency conversion.
The diagram above demonstrates the following process:
- In-app events are sent - different currency for each event
- AppsFlyer normalizes all currencies to USD
- AppsFlyer processes revenue data
- Revenue data in the dashboard is displayed in app settings currency
- AppsFlyer populates revenue data in raw data reports in both event and app settings currency
AppsFlyer uses Open Exchange Rates for currency conversion. The exchange rate is updated on an hourly basis. Whenever AppsFlyer performs currency conversion, it uses the exchange rate of the last hourly update.
In your app settings, you set currency to GBP. A user from France purchases a product using your app. The price is quoted in EUR (€). The in-app event that you send to AppsFlyer looks like this:
Map<String, Object> eventValue = new HashMap<String, Object>(); eventValue.put(AFInAppEventParameterName.REVENUE,200); eventValue.put(AFInAppEventParameterName.CONTENT_TYPE,"category_a"); eventValue.put(AFInAppEventParameterName.CONTENT_ID,"1234567"); eventValue.put(AFInAppEventParameterName.CURRENCY,"EUR"); AppsFlyerLib.getInstance().trackEvent(getApplicationContext() , AFInAppEventType.PURCHASE , eventValue);
In this case, AppsFlyer converts revenue from EUR to USD and then to GBP. Let's assume the exchange rate is €1 = $1.13. So €200 becomes $226.85. Next, AppsFlyer converts from USD to GBP. Let's assume the exchange rate is $1 = £0.78. So $226.85 becomes £176.92.
Currency is set in the app settings. The currency that you set in the app settings, is the currency that appears in the dashboard. No matter what currency you send in-app events, the revenue in the dashboard always appears in the currency that you set in the app settings.
Let's say that you send in-app events with different currencies than the one set in the app settings, or with no currency at all. In this example, currency in the app settings is set to GBP.
You send three in-app events to AppsFlyer.
- Event A has revenue of 234 and GBP as currency
- Event B has revenue of 171 and EUR as currency
- Event C has revenue of 171 but no currency specified
Revenue data in the dashboard
The revenue that appears in the dashboard is the converted value from the in-app event currency to USD and then to the app settings currency.
If no currency is specified in the event, AppsFlyer defaults to USD. The dashboard displays the event and revenue as follows:
|In-Apps Events||Unique Users||Number of Actions||Revenue|
|B||1||1||£149.4 - converted from EUR to USD and then to GBP.|
|C||1||1||£132.9 - defaults to USD as no currency is specified. Converted from USD to GBP directly.|
Revenue data in raw data reports
If you set the currency to GBP in the app settings but send in-app events with different currencies, the raw data report shows revenue in both app settings currency and in-app event currency.
If you set the currency to GBP in the app settings but send in-app events without currency, the raw data report shows revenue in both app settings currency and in USD.
The in-app events raw data report displays the event and revenue as follows:
|Event||Event Revenue||Event Revenue Currency||Event Revenue GBP|
|B||171||EUR||149.4 - converted from EUR to USD and then to GBP.|
|C||171||USD||132.9 defaults to USD as no currency is specified. Converted from USD to GBP directly.|