Remote Config personalization optimizes for Google Analytics events,
so if you can trigger an event with meaningful parameters, you can create a
personalization for it.
For the most useful results, you should choose an event that triggers often
with alternative values that you expect to produce significant differences in
outcomes. Personalization performs best when you have at least 10,000 users and
over 1000 triggering events per week (or conversions).
A few of the different ways you can personalize your app are described below.
Optimize for ad impression revenue
One way you can use personalization is to optimize for ad impression revenue.
For this use case, let's say you have a game with optional mini-games gated
behind a full-page ad and you want to optimize the mini-game experience for each
user, providing the most ad revenue without impacting user engagement.
Let's walk through one way you might accomplish this:
In your game, implement custom event logging for the ad_impression event
specific to the ad providers you use, making sure that currency and
value parameters are included and that revenue is being added in the
reported value parameter.
Determine the Remote Config parameter you’ll use and the alternative
values to choose from and ensure that the logic in your game can handle the
different values.
This example describes implementing a Remote Config parameter as a
feature flag to enable several different mini-games. To do this, open the
Remote Config page
and click Add parameter. You can name the Remote Config parameter
minigame with a default value of no_game.
Now, add a personalization by clicking Add new and selecting
Personalization.
Add up to five alternative values, and then click Next.
For this minigame example, you can use tictactoe, word_scramble, and
race.
Next, choose an objective. Because you are now logging ad impression events
that contain revenue values, select Ad Impression as the objective,
choose SUM and value as the parameter to aggregate, and add an
additional tracking metric for User engagement time. This allows you to
see how it compares in personalization results.
You can select one other event as a custom metric here, too, if you find it
relevant.
Click Next to choose a target condition. Because you are optimizing on
the aggregated value of ad impression revenue, if you aren't converting your
event revenue value into the same currency, you may want to create a
condition based on users in a specific region to improve consistency.
Click Next and name your personalization, then click Save.
Click Publish changes to launch the personalization. Users will begin to
receive personalized parameter values in a few hours (depending on the
Remote Configfetch interval.
Because the amount of time a value is applied to a user (the stickiness
window) is 24 hours, we recommend that you let your personalizations run
for 14 days (or perpetually) so that they continually learn and improve,
providing an optimal experience for each user.
You can see how your personalizations are performing by clicking on the
parameter's targeting condition on the
Remote Config page.
Now that you've learned how to create a personalization, read on to explore
other use cases and discuss the options you can use to implement them.
Select the best ad placement for each user
Different users may respond in different ways when presented with certain ad
form factors or location. In this use case, you can use a Remote Config
parameter like ad_placement with different locational values, and optimize
for ad clicks.
When optimizing for ad_clicks, you may want to configure at least one
additional metric for user_engagement to track user engagement levels to
ensure they stay high.
Personalization Component
Potential and recommended values
Remote Config parameter
ad_placement
Alternative values
top-left, bottom, middle-panel, full-screen
Objective
ad_clicks
Additional metrics
user_engagement
Optimize for ad frequency
In this use case, you can optimize ad frequency, optimizing for user engagement
to determine which ad frequency results in the most user engagement. Use
ad_click as an additional metric to track.
Personalization Component
Potential or recommended values
Remote Config parameter
ad_display_freq_in_min
Alternative values
2, 10, 50
Objective
user_engagement
Additional metrics
ad_click
Determine the best difficulty selection to maximize for user engagement
In this use case, you can customize your app for each user, choosing the right
level of difficulty to fully engage each individual user with varying levels of
player skill. You can use level_difficulty as a Remote Config parameter
and user engagement as an objective. Add any additional metric you find
relevant here—this example uses level_complete to gain insight
into user progression through the game.
You could also use an objective like ad impression revenue (as configured in
Optimize for ad impression revenue) or
use in_app_purchase to optimize for IAPs.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-08-15 UTC."],[],[],null,["\u003cbr /\u003e\n\nRemote Config personalization optimizes for Google Analytics events,\nso if you can trigger an event with meaningful parameters, you can create a\npersonalization for it.\n\nFor the most useful results, you should choose an event that triggers often\nwith alternative values that you expect to produce significant differences in\noutcomes. Personalization performs best when you have at least 10,000 users and\nover 1000 triggering events per week (or conversions).\n\nA few of the different ways you can personalize your app are described below.\n\nOptimize for ad impression revenue\n\nOne way you can use personalization is to optimize for ad impression revenue.\nFor this use case, let's say you have a game with optional mini-games gated\nbehind a full-page ad and you want to optimize the mini-game experience for each\nuser, providing the most ad revenue without impacting user engagement.\n\nLet's walk through one way you might accomplish this:\n\n1. In your game, implement custom event logging for the `ad_impression` event\n specific to the ad providers you use, making sure that `currency` and\n `value` parameters are included and that revenue is being added in the\n reported value parameter.\n\n [Measure ad revenue](https://firebase.google.com/docs/analytics/measure-ad-revenue)\n describes how to\n [automatically log ad_impression events with Admob](https://firebase.google.com/docs/analytics/measure-ad-revenue#implementation-admob)\n and also provides a few other implementation examples for other ad serving\n platforms, like\n [AppLovin](https://firebase.google.com/docs/analytics/measure-ad-revenue#implementation-appLovin)\n and\n [ironSource](https://firebase.google.com/docs/analytics/measure-ad-revenue#implementation-ironsource).\n | **Important:** Report revenue values using the same base currency to ensure consistency.\n2. Determine the Remote Config parameter you'll use and the alternative\n values to choose from and ensure that the logic in your game can handle the\n different values.\n\n This example describes implementing a Remote Config parameter as a\n feature flag to enable several different mini-games. To do this, open the\n [Remote Config page](https://console.firebase.google.com/project/_/config)\n and click **Add parameter** . You can name the Remote Config parameter\n `minigame` with a default value of `no_game`.\n\n3. Now, add a personalization by clicking **Add new** and selecting\n **Personalization**.\n\n4. Add up to five alternative values, and then click **Next**.\n\n For this minigame example, you can use `tictactoe`, `word_scramble`, and\n `race`.\n\n5. Next, choose an objective. Because you are now logging ad impression events\n that contain revenue values, select **Ad Impression** as the objective,\n choose **SUM** and **value** as the parameter to aggregate, and add an\n additional tracking metric for **User engagement time**. This allows you to\n see how it compares in personalization results.\n\n You can select one other event as a custom metric here, too, if you find it\n relevant.\n\n6. Click **Next** to choose a target condition. Because you are optimizing on\n the aggregated value of ad impression revenue, if you aren't converting your\n event revenue value into the same currency, you may want to create a\n condition based on users in a specific region to improve consistency.\n\n7. Click **Next** and name your personalization, then click **Save**.\n\n8. Click **Publish changes** to launch the personalization. Users will begin to\n receive personalized parameter values in a few hours (depending on the\n Remote Config\n [fetch interval](/docs/remote-config/get-started?platform=web#minimum-fetch).\n Because the amount of time a value is applied to a user (the *stickiness\n window*) is 24 hours, we recommend that you let your personalizations run\n for 14 days (or perpetually) so that they continually learn and improve,\n providing an optimal experience for each user.\n\n You can see how your personalizations are performing by clicking on the\n parameter's targeting condition on the\n [Remote Config](//console.firebase.google.com/project/_/config) page.\n\nNow that you've learned how to create a personalization, read on to explore\nother use cases and discuss the options you can use to implement them.\n\nSelect the best ad placement for each user\n\nDifferent users may respond in different ways when presented with certain ad\nform factors or location. In this use case, you can use a Remote Config\nparameter like `ad_placement` with different locational values, and optimize\nfor ad clicks.\n\nWhen optimizing for `ad_clicks`, you may want to configure at least one\nadditional metric for `user_engagement` to track user engagement levels to\nensure they stay high.\n\n| **Personalization Component** | **Potential and recommended values** |\n|-------------------------------|-----------------------------------------------|\n| Remote Config parameter | `ad_placement` |\n| Alternative values | `top-left, bottom, middle-panel, full-screen` |\n| Objective | `ad_clicks` |\n| Additional metrics | `user_engagement` |\n\nOptimize for ad frequency\n\nIn this use case, you can optimize ad frequency, optimizing for user engagement\nto determine which ad frequency results in the most user engagement. Use\n`ad_click` as an additional metric to track.\n\n| **Personalization Component** | **Potential or recommended values** |\n|-------------------------------|-------------------------------------|\n| Remote Config parameter | `ad_display_freq_in_min` |\n| Alternative values | `2, 10, 50` |\n| Objective | `user_engagement` |\n| Additional metrics | `ad_click` |\n\nDetermine the best difficulty selection to maximize for user engagement\n\nIn this use case, you can customize your app for each user, choosing the right\nlevel of difficulty to fully engage each individual user with varying levels of\nplayer skill. You can use `level_difficulty` as a Remote Config parameter\nand user engagement as an objective. Add any additional metric you find\nrelevant here---this example uses `level_complete` to gain insight\ninto user progression through the game.\n\nYou could also use an objective like ad impression revenue (as configured in\n[Optimize for ad impression revenue](#optimize-for-ad-impression-revenue)) or\nuse `in_app_purchase` to optimize for IAPs.\n\n| **Personalization Component** | **Potential or recommended values** |\n|-------------------------------|---------------------------------------|\n| Remote Config parameter | `level_difficulty` |\n| Alternative values | `easy, medium, difficult, impossible` |\n| Objective | `user_engagement` |\n| Additional metrics | `level_complete` |"]]