<aside> <img src="/icons/sync_gray.svg" alt="/icons/sync_gray.svg" width="40px" /> Current version: v1.0 supports limited data related to the Google ecosystem focused on subscription-based apps. The last update was in October of 2023. New versions will be coming soon.
</aside>
<aside> <img src="/icons/exclamation-mark_gray.svg" alt="/icons/exclamation-mark_gray.svg" width="40px" /> Important note: each JSON template isn’t designed to be implemented the way it is. App developers must modify them to fit their app needs. To add or report any piece of information, contact Lucas Moscon on LinkedIn.
</aside>
<aside> 📖 Index
</aside>
<aside> 🧨 Most of the subscription-based apps in the industry simply don’t know how to do ad monetization correctly. As one of the least talked about topics out there, it’s hard to find valuable information on increasing ad revenue while positively impacting other product metrics like retention.
</aside>
<aside> 💪🏼 After talking with industry colleagues and posting ad monetization content on LinkedIn, I saw that a lot of small and medium app developers were looking for a place to get inspiration, learn how to use in their favor any tech stack, and they can do it by themselves without losing thousands of dollars in the way.
</aside>
<aside> 💡 Build the first ad monetization hub for subscription-based apps in the industry. The place where app founders, developers, UA, ASO, and Product Marketing Managers can learn a bit about how ad monetization works and how they can use it in their favor to boost their knowledge (career). The goal is to democratize the information so it's accessible to everyone.
</aside>
<aside> <img src="/icons/exclamation-mark_gray.svg" alt="/icons/exclamation-mark_gray.svg" width="40px" /> The documentation below considers that you have already installed the AdMob SDK, Google Analytics SDK and have it all linked to your Firebase project account. For documentation related to technical aspects, I recommend you to look at Google’s official page. The next versions plan to include step-by-step on technical aspects.
</aside>
Knowing the function and purpose of each pillar will help you understand sooner how the stack works together
Depending on your previous experience working with ad monetization, I recommend considering three options before using any JSON template.
Complexity | Stack | Data type | Conditions | Testing goal |
---|---|---|---|---|
Low | AdMob |
null |
0 | Ad Revenue |
Medium | AdMob Firebase GA |
string number boolean |
Up to 10 | Ad Revenue Purchases Retention |
High | AdMob Firebase GA |
json |
Unlimited | Ad Revenue Purchases Retention |
<aside> 1️⃣ Low
</aside>
If you have never used AdMob or tried changing eCPM floors to run soft experiments, I recommend doing that first. Play with bids, create ad units, make report templates, and learn how the solution works.
<aside> 2️⃣ Medium
</aside>
Before doing advanced setups with a JSON schema, prepare your app to receive a simple string when running an A/B test. For example, use a different ad unit ID string to run your first experiments against your baseline.
<aside> 3️⃣ High
</aside>
You have a decent experience in running multiple experiments and an understanding of how the framework operates. I recommend using a JSON approach instead of string, boolean, or number. It will help you scale faster
are essentially rules that you set up in the Firebase console to serve different configuration settings to different subsets of your user base. It follows the waterfall effect. So be clear in the way you structure your conditions.
This is a list of rule types I use the most you can use to create conditions on Firebase. Go here to read the full documentation.
Type | Value | Notes |
---|---|---|
app |
List of available apps in the project | n/a |
app_version |
Specify the version(s) of your app to target | n/a |
platform |
iOS, Android, Web | n/a |
language |
Select one or more languages | n/a |
country |
Select one or more regions or countries | n/a |
user_audiencies |
Select from a list of Google Analytics audiences | Delay of up to 48 to update |
user_propperty |
Select from a list of Google Analytics user properties | Relies on custom dimensions |
date |
A specified date and time | No time range is allowed |
Make sure each parameter you create in Firebase has a reason to exist. Before using any conditions, ask yourself if it’s necessary to have it. Maybe the ad unit itself (AdMob) has the condition by default. For example, you don’t need to include the platform condition if your ad unit is from an iOS project.
<aside> <img src="/icons/exclamation-mark_gray.svg" alt="/icons/exclamation-mark_gray.svg" width="40px" /> The main reason why this framework is so powerful is that any product/growth team can operate without the need for a developer to design and create experiments. To guarantee this, all logic conditions must happen under the Firebase project.
</aside>
You can design your waterfall schema with the JSON template in two ways.
<aside> <img src="/icons/thought_gray.svg" alt="/icons/thought_gray.svg" width="40px" /> I recommend you stay away from building a waterfall in the JSON configuration. It’s really hard to manage and optimize. Also, you lose the chance to access bidding. This may not apply for your setup in mind.
</aside>
This is hard to get done. Not all that glitters is gold.
10 things to consider before moving on:
Understand the possible elements of the code, their benefits, and functions. How to apply them, and if they must be included or not.
Parameters | Data types | Status | |
---|---|---|---|
Ad units | admob_unit_id_name description ad_unit_id format toggle_ad_unit |
string number boolean array |
Recommended |
Frequencies | frequency is_skippable always_on count_intervals |
string number boolean array |
Recommended |
User segmentation | segment_name segment_conditions |
string number boolean array |
Optional |
Premium users | block_ads_for_premium |
boolean |
Optional |
Cross-promotion | cross_promotion_ad_name description type fallback |
string number boolean array |
Optional |
<aside> <img src="/icons/exclamation-mark_gray.svg" alt="/icons/exclamation-mark_gray.svg" width="40px" /> This is just a simple model to build JSONs that can adapt to any app. It’s a starting point.
</aside>
These parameters will be focused on helping you to identify, localize, and control each ad unit
These parameters will help you define the intensity and volume of the impressions you serve to your users
You can effectively personalize your app's ad experience, showing the right kind of ads to the right users at the right time.
Control ads' visibility for users with a premium subscription to your app.
These parameters give you more control over your cross-promotion strategy and ensure that you maximize user engagement and revenue streams effectively.
<aside> <img src="/icons/snippet_gray.svg" alt="/icons/snippet_gray.svg" width="40px" /> Template 1
{
"block_ads_for_premium": true,
"app_sections": {
"ad_placement_1": {
"ad_units": [
{
"admob_unit_id_name": "Bonus_Rewarded",
"description": "Rewarded ad for bonus features",
"ad_unit_id": "ca-app-pub-XXXXXX/AAAAAA",
"format": "rewarded",
"toggle_ad_unit": true,
"always_on": false,
"frequency": 1,
"is_skippable": true,
"fallback": {
"type": "cross_promotion",
"cross_promotion_ad_name": "Bonus_Rewarded_CrossPromo",
"description": "Cross-promotion for bonus features"
}
}
]
},
"ad_placement_2": {
"ad_units": [
{
"admob_unit_id_name": "Level_Completion_Interstitial",
"description": "Interstitial shown upon level completion",
"ad_unit_id": "ca-app-pub-XXXXXX/ZZZZZZ",
"format": "interstitial",
"toggle_ad_unit": true,
"always_on": false,
"frequency": 2,
"is_skippable": false,
"fallback": {
"type": "cross_promotion",
"cross_promotion_ad_name": "Level_Completion_CrossPromo",
"description": "Cross-promotion upon level completion"
}
}
]
},
"ad_placement_3": {
"ad_units": [
{
"admob_unit_id_name": "MainPage_Banner",
"description": "Banner displayed on the main page",
"ad_unit_id": "ca-app-pub-XXXXXX/YYYYYY",
"format": "banner",
"toggle_ad_unit": true,
"always_on": true,
"frequency": 1,
"is_skippable": false,
"fallback": {
"type": "cross_promotion",
"cross_promotion_ad_name": "MainPage_CrossPromo",
"description": "Cross-promotion for main page"
}
}
]
}
}
}
</aside>
<aside> <img src="/icons/snippet_gray.svg" alt="/icons/snippet_gray.svg" width="40px" /> Template 2
</aside>
<aside> <img src="/icons/rainbow_gray.svg" alt="/icons/rainbow_gray.svg" width="40px" /> Use your creativity and imagination to take these templates to the next level.
</aside>