Discover your Rewarded UA potential — try our ROAS forecaster!

What is Unity Ads?

Unity Ads is a sophisticated mobile advertising network built specifically for game developers, offering a comprehensive monetization solution that integrates seamlessly with the Unity game development platform. As one of the largest specialized gaming ad networks, Unity Ads reaches over 2 billion monthly active users across more than 200 countries, providing developers with access to a massive global audience.

Unlike general-purpose ad networks, Unity Ads was designed with game monetization as its core focus, offering game-specific ad formats and integration options that complement gameplay rather than disrupting it. The platform enables developers to implement various ad types including rewarded video, interstitial, banner, and playable ads, each optimized for different points in the player journey.

Unity Ads vs. Competing Ad Networks

When selecting an ad network for your mobile game, understanding how Unity Ads compares to alternatives is crucial. The following comparison highlights key differences between Unity Ads and major competitors:

Feature Unity Ads AdMob ironSource AppLovin Facebook Audience Network
Game-Specific Focus High (built for games) Medium High High Low
Integration Ease with Unity Native integration Requires SDK Requires SDK Requires SDK Requires SDK
eCPM Rates (US/Tier 1) $10-25 $8-20 $10-30 $10-25 $8-15
Fill Rates 90-98% 85-95% 90-99% 90-98% 80-90%
Ad Formats Rewarded, Interstitial, Banner, Playable Rewarded, Interstitial, Banner, Native Rewarded, Interstitial, Banner, Offerwall Rewarded, Interstitial, Banner, Native Rewarded, Interstitial, Banner, Native
Cross-Promotion Tools Advanced Basic Advanced Advanced Limited
Bidding Support Yes (LevelPlay) Yes Yes (LevelPlay) Yes (MAX) Yes
Mediation Capabilities Limited Strong Strong (LevelPlay) Strong (MAX) Limited
Analytics Depth Deep Unity integration Good Excellent Excellent Good
Minimum Requirements None $1+ daily revenue $3+ daily revenue $5+ daily revenue None

Unity Ads’ primary strength lies in its native integration with the Unity engine and specialized focus on game monetization. However, its mediation capabilities are less robust than dedicated mediation platforms like ironSource’s LevelPlay or AppLovin’s MAX. Most top-performing games utilize multiple ad networks through a mediation layer rather than relying exclusively on a single network.

Unity Ads Implementation Guide

Implementing Unity Ads requires careful planning and execution to maximize revenue while maintaining a positive player experience. The following guide provides a step-by-step approach to integration:

Basic Implementation Process

  1. Setup Unity Ads Account Create a Unity developer account at https://unity.com/products/unity-ads if you don’t already have one. Navigate to the Monetization section to access your Unity Ads dashboard.
  2. Configure Your Project Add each app you want to monetize in the dashboard. You’ll need to provide basic information including app name, platform (iOS/Android), app store links, and category.
  3. Implement the SDK The implementation process varies slightly depending on whether you’re using Unity engine or another development platform:For Unity Engine Projects:
    // In your initialization script (e.g. GameManager.cs):
    using UnityEngine;
    using UnityEngine.Advertisements;
    
    public class GameManager : MonoBehaviour, IUnityAdsInitializationListener
    {
        private string _gameId = "YOUR_GAME_ID";
        private bool _testMode = false;
        
        void Start()
        {
            InitializeAds();
        }
        
        public void InitializeAds()
        {
            Advertisement.Initialize(_gameId, _testMode, this);
        }
        
        public void OnInitializationComplete()
        {
            Debug.Log("Unity Ads initialization complete.");
            // Now you can load ads
        }
        
        public void OnInitializationFailed(UnityAdsInitializationError error, string message)
        {
            Debug.Log($"Unity Ads Initialization Failed: {error.ToString()} - {message}");
        }
    }
    

    For Non-Unity Projects (Android – Java Example) BONUS: Check the best mobile game engines here.:

    // In your main activity:
    import com.unity3d.ads.IUnityAdsInitializationListener;
    import com.unity3d.ads.UnityAds;
    
    public class MainActivity extends AppCompatActivity implements IUnityAdsInitializationListener {
        private String unityGameID = "YOUR_GAME_ID";
        private boolean testMode = false;
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            
            UnityAds.initialize(getApplicationContext(), unityGameID, testMode, this);
        }
        
        @Override
        public void onInitializationComplete() {
            Log.d("UnityAds", "Initialization Complete");
            // Now you can load ads
        }
        
        @Override
        public void onInitializationFailed(UnityAds.UnityAdsInitializationError error, String message) {
            Log.e("UnityAds", "Initialization Failed: " + error.toString() + " - " + message);
        }
    }
    
  4. Implement Specific Ad Units After initializing the SDK, implement individual ad formats based on your monetization strategy:

Rewarded Video Implementation

Rewarded videos typically generate the highest revenue and offer the best user experience when implemented at natural reward points:

// Unity C# implementation
using UnityEngine;
using UnityEngine.Advertisements;

public class RewardedAdsManager : MonoBehaviour, IUnityAdsLoadListener, IUnityAdsShowListener
{
    private string _adUnitId = "Rewarded_Android"; // Use "Rewarded_iOS" for iOS
    
    public void LoadRewardedAd()
    {
        Advertisement.Load(_adUnitId, this);
    }
    
    public void ShowRewardedAd()
    {
        Advertisement.Show(_adUnitId, this);
    }
    
    // Load Callbacks
    public void OnUnityAdsAdLoaded(string adUnitId)
    {
        Debug.Log("Rewarded Ad Loaded: " + adUnitId);
    }
    
    public void OnUnityAdsFailedToLoad(string adUnitId, UnityAdsLoadError error, string message)
    {
        Debug.Log($"Rewarded Ad Load Failed: {error.ToString()} - {message}");
    }
    
    // Show Callbacks
    public void OnUnityAdsShowComplete(string adUnitId, UnityAdsShowCompletionState showCompletionState)
    {
        if (adUnitId.Equals(_adUnitId) && showCompletionState.Equals(UnityAdsShowCompletionState.COMPLETED))
        {
            Debug.Log("Reward player now!");
            // Reward the player here
        }
    }
    
    public void OnUnityAdsShowFailure(string adUnitId, UnityAdsShowError error, string message)
    {
        Debug.Log($"Rewarded Ad Show Failed: {error.ToString()} - {message}");
    }
    
    public void OnUnityAdsShowStart(string adUnitId) { }
    public void OnUnityAdsShowClick(string adUnitId) { }
}

Interstitial Implementation

Interstitial ads work best at natural break points in gameplay, such as between levels or after completing a game session:

// Unity C# implementation
using UnityEngine;
using UnityEngine.Advertisements;

public class InterstitialAdsManager : MonoBehaviour, IUnityAdsLoadListener, IUnityAdsShowListener
{
    private string _adUnitId = "Interstitial_Android"; // Use "Interstitial_iOS" for iOS
    
    public void LoadInterstitialAd()
    {
        Advertisement.Load(_adUnitId, this);
    }
    
    public void ShowInterstitialAd()
    {
        Advertisement.Show(_adUnitId, this);
    }
    
    // Load Callbacks
    public void OnUnityAdsAdLoaded(string adUnitId)
    {
        Debug.Log("Interstitial Ad Loaded: " + adUnitId);
    }
    
    public void OnUnityAdsFailedToLoad(string adUnitId, UnityAdsLoadError error, string message)
    {
        Debug.Log($"Interstitial Ad Load Failed: {error.ToString()} - {message}");
    }
    
    // Show Callbacks
    public void OnUnityAdsShowComplete(string adUnitId, UnityAdsShowCompletionState showCompletionState)
    {
        Debug.Log("Interstitial Ad Show Complete");
        LoadInterstitialAd(); // Load the next interstitial
    }
    
    public void OnUnityAdsShowFailure(string adUnitId, UnityAdsShowError error, string message)
    {
        Debug.Log($"Interstitial Ad Show Failed: {error.ToString()} - {message}");
    }
    
    public void OnUnityAdsShowStart(string adUnitId) { }
    public void OnUnityAdsShowClick(string adUnitId) { }
}

Banner Implementation

Banner ads provide passive revenue with minimal disruption and are typically displayed at the top or bottom of the screen:

// Unity C# implementation
using UnityEngine;
using UnityEngine.Advertisements;

public class BannerAdsManager : MonoBehaviour
{
    private string _adUnitId = "Banner_Android"; // Use "Banner_iOS" for iOS
    
    public void LoadBanner()
    {
        // Set banner position
        Advertisement.Banner.SetPosition(BannerPosition.BOTTOM_CENTER);
        
        // Create a banner load options object
        BannerLoadOptions options = new BannerLoadOptions
        {
            loadCallback = OnBannerLoaded,
            errorCallback = OnBannerError
        };
        
        // Load the banner
        Advertisement.Banner.Load(_adUnitId, options);
    }
    
    private void OnBannerLoaded()
    {
        Debug.Log("Banner loaded");
        ShowBanner();
    }
    
    private void OnBannerError(string message)
    {
        Debug.Log($"Banner Error: {message}");
    }
    
    private void ShowBanner()
    {
        BannerOptions options = new BannerOptions
        {
            clickCallback = OnBannerClicked,
            hideCallback = OnBannerHidden,
            showCallback = OnBannerShown
        };
        
        Advertisement.Banner.Show(_adUnitId, options);
    }
    
    private void OnBannerClicked() { }
    private void OnBannerShown() { }
    private void OnBannerHidden() { }
    
    public void HideBanner()
    {
        Advertisement.Banner.Hide();
    }
}

Advanced Implementation Strategies

Beyond basic implementation, there are several advanced strategies that can significantly improve performance and user experience:

Strategic Ad Placement

The most successful Unity Ads implementations use strategic placement based on game flow:

Game Stage Recommended Ad Type Implementation Notes
Game Start None Avoid showing ads before players experience your game
Between Levels Interstitial Natural break point that doesn’t interrupt gameplay
After Death/Failure Rewarded (Continue) Offer continues or extra lives via rewarded ads
Store/Resources Rewarded (Currency) Offer free currency or resources via rewarded ads
Game Completion Interstitial Natural conclusion point for session
Main Menu Banner Non-intrusive persistent monetization
Game Pause Banner Optional additional placement

Frequency Capping and Pacing

Proper frequency capping prevents ad fatigue and minimizes negative user experience:

// Example frequency capping implementation
public class AdFrequencyManager : MonoBehaviour
{
    private const int MAX_INTERSTITIALS_PER_SESSION = 3;
    private const int MIN_SECONDS_BETWEEN_INTERSTITIALS = 120;
    
    private int _interstitialsShownThisSession = 0;
    private float _lastInterstitialTime = 0;
    
    public bool CanShowInterstitial()
    {
        // Check if we've exceeded the session cap
        if (_interstitialsShownThisSession >= MAX_INTERSTITIALS_PER_SESSION)
            return false;
            
        // Check if enough time has passed since the last interstitial
        if (Time.time - _lastInterstitialTime < MIN_SECONDS_BETWEEN_INTERSTITIALS)
            return false;
            
        return true;
    }
    
    public void RecordInterstitialShown()
    {
        _interstitialsShownThisSession++;
        _lastInterstitialTime = Time.time;
    }
    
    public void ResetSession()
    {
        _interstitialsShownThisSession = 0;
    }
}

A/B Testing Ad Implementation

Testing different ad strategies is crucial for optimization:

// Example A/B testing manager for ad placement
public class ABTestManager : MonoBehaviour
{
    // User groups - set upon first app launch and stored in PlayerPrefs
    private enum TestGroup { Control, TestVariantA, TestVariantB }
    private TestGroup _userGroup;
    
    private void Start()
    {
        // Assign user to test group if not already assigned
        if (!PlayerPrefs.HasKey("AB_Test_Group"))
        {
            // Randomly assign to one of three groups
            int groupValue = Random.Range(0, 3);
            _userGroup = (TestGroup)groupValue;
            PlayerPrefs.SetInt("AB_Test_Group", groupValue);
        }
        else
        {
            _userGroup = (TestGroup)PlayerPrefs.GetInt("AB_Test_Group");
        }
        
        ApplyTestSettings();
    }
    
    private void ApplyTestSettings()
    {
        switch (_userGroup)
        {
            case TestGroup.Control:
                // Standard settings
                AdSettings.interstitialFrequency = 180; // 3 minutes
                AdSettings.maxInterstitialsPerSession = 3;
                break;
                
            case TestGroup.TestVariantA:
                // More aggressive settings
                AdSettings.interstitialFrequency = 120; // 2 minutes
                AdSettings.maxInterstitialsPerSession = 5;
                break;
                
            case TestGroup.TestVariantB:
                // Less aggressive settings
                AdSettings.interstitialFrequency = 240; // 4 minutes
                AdSettings.maxInterstitialsPerSession = 2;
                break;
        }
        
        // Track test group in analytics
        Analytics.SetUserProperty("ab_test_group", _userGroup.ToString());
    }
}

Performance Metrics and Optimization

Understanding and optimizing key performance metrics is essential for maximizing Unity Ads revenue:

Key Performance Metrics

Metric Description Benchmark (2025) Optimization Tips
eCPM Effective cost per mille (revenue per 1,000 impressions) Rewarded: $10-25 Interstitial: $8-20 Banner: $1-3 Test different ad placements; Implement user segmentation; Optimize for high-value regions
Fill Rate Percentage of ad requests that are fulfilled 90-99% Implement proper caching; Use multiple ad networks; Ensure correct implementation
Completion Rate Percentage of video ads watched to completion 70-85% Place ads at natural breaks; Ensure clear value proposition; Keep rewards meaningful
CTR (Click-Through Rate) Percentage of impressions that result in clicks 1-3% Test different creative formats; Optimize ad relevance; Improve placement timing
ARPDAU Average Revenue Per Daily Active User Casual: $0.02-0.08 Midcore: $0.05-0.15 Hardcore: $0.10-0.30 Balance ad frequency; Combine with IAPs; Segment users by behavior
Retention Impact Effect of ads on next day return rate <5% negative impact Test ad frequency; Focus on rewarded formats; Avoid early-game ads

eCPM Optimization Strategies

Maximizing eCPM requires a strategic approach:

  1. Geographic Targeting eCPM varies significantly by region. The following table shows typical eCPM ranges for rewarded video ads:
    Region eCPM Range (2025)
    United States $15-25
    United Kingdom $12-22
    Canada $10-18
    Australia $10-18
    Germany $8-15
    Japan $12-20
    South Korea $8-16
    Brazil $2-8
    India $1-3
    Indonesia $1-4

    Consider implementing region-specific ad strategies, such as showing more ads to users in high-eCPM regions while focusing more on IAP conversions in lower-eCPM regions.

  2. Ad Format Optimization Different ad formats generate varying eCPMs:
    Ad Format Average eCPM Best Use Case
    Rewarded Video $10-25 Resource gains, continues, boosters
    Interstitial Video $8-20 Between levels, after sessions
    Interstitial Display $3-8 Natural breaks, menu transitions
    Banner $1-3 Persistent, non-intrusive monetization
    Playable $12-30 Special offers, featured promotions

    Focus your strategy on high-value formats while using lower-value formats as supplementary revenue streams.

  3. User Segmentation Not all users have the same value or tolerance for ads:
    // Example user segmentation for ad strategy
    public class UserSegmentation : MonoBehaviour
    {
        public enum UserSegment { NewUser, NonPayer, Payer, WhaleUser }
        
        private UserSegment _currentSegment;
        
        private void DetermineUserSegment()
        {
            int daysActive = PlayerPrefs.GetInt("days_active", 0);
            float totalSpend = PlayerPrefs.GetFloat("total_spend", 0f);
            
            if (daysActive < 2)
            {
                _currentSegment = UserSegment.NewUser;
            }
            else if (totalSpend == 0)
            {
                _currentSegment = UserSegment.NonPayer;
            }
            else if (totalSpend < 20f)
            {
                _currentSegment = UserSegment.Payer;
            }
            else
            {
                _currentSegment = UserSegment.WhaleUser;
            }
            
            ApplyAdStrategy();
        }
        
        private void ApplyAdStrategy()
        {
            switch (_currentSegment)
            {
                case UserSegment.NewUser:
                    // Go easy on new users
                    AdManager.SetInterstitialFrequency(300); // 5 minutes
                    AdManager.EnableRewarded(true);
                    AdManager.EnableBanners(false);
                    break;
                    
                case UserSegment.NonPayer:
                    // More aggressive with non-payers
                    AdManager.SetInterstitialFrequency(180); // 3 minutes
                    AdManager.EnableRewarded(true);
                    AdManager.EnableBanners(true);
                    break;
                    
                case UserSegment.Payer:
                    // Respect that they've paid
                    AdManager.SetInterstitialFrequency(300); // 5 minutes
                    AdManager.EnableRewarded(true);
                    AdManager.EnableBanners(false);
                    break;
                    
                case UserSegment.WhaleUser:
                    // Minimal ads for big spenders
                    AdManager.SetInterstitialFrequency(0); // Disable interstitials
                    AdManager.EnableRewarded(true); // Keep rewarded ads
                    AdManager.EnableBanners(false);
                    break;
            }
        }
    }
    

Balancing Monetization and User Experience

Successful ad implementation requires balancing revenue goals with user experience:

User Experience Impact Assessment

Different ad formats affect user experience in different ways:

Ad Format User Experience Impact Implementation Best Practices
Rewarded Video Low (user opt-in) Make rewards valuable; Place at resource pinch points; Make completion feedback clear
Interstitial Medium to High Implement frequency caps; Avoid during active gameplay; Place at natural breaks
Banner Low to Medium Use standard positions; Avoid gameplay areas; Consider removing for paying users
Playable Low (if rewarded) Ensure relevance to audience; Make interaction clear; Provide adequate rewards

Retention Impact Minimization

To minimize negative effects on retention:

  1. Gradual Ad Introduction Introduce ads gradually as users engage with your game. Consider this implementation approach:
    Days Since Install Recommended Ad Strategy
    Day 1 Rewarded ads only, no interstitials
    Days 2-3 Add interstitials with low frequency (1 per 10 minutes)
    Days 4-7 Standard interstitial frequency (1 per 5-7 minutes)
    Day 8+ Optimized frequency based on engagement levels
  2. Player Progress Consideration
    // Example implementation considering player progress
    public class AdProgressionManager : MonoBehaviour
    {
        private int _playerLevel;
        
        private void UpdateAdStrategy()
        {
            _playerLevel = PlayerPrefs.GetInt("player_level", 1);
            
            if (_playerLevel < 3)
            {
                // New players - minimal ads
                AdManager.DisableInterstitials();
                AdManager.DisableBanners();
                AdManager.EnableRewarded(true);
            }
            else if (_playerLevel < 10)
            {
                // Established players - standard ads
                AdManager.EnableInterstitials(180); // 3 min frequency
                AdManager.EnableBanners(true);
                AdManager.EnableRewarded(true);
            }
            else
            {
                // Advanced players - balance ads with deeper engagement
                AdManager.EnableInterstitials(240); // 4 min frequency
                AdManager.EnableBanners(true);
                AdManager.EnableRewarded(true);
                AdManager.IncreaseRewardedValue(20); // 20% more rewards for loyal players
            }
        }
    }
    

Case Studies: Successful Unity Ads Implementations

Examining real-world success stories provides valuable insights into effective Unity Ads strategies:

Case Study 1: Puzzle Game “Color Match”

Game Profile:

  • Casual puzzle game
  • 2.5 million monthly active users
  • Free-to-play with IAP

Challenge: The developer needed to increase revenue without harming the game’s strong retention metrics (45% D1, 22% D7).

Implementation Strategy:

  • Implemented rewarded videos offering extra lives and power-ups
  • Added interstitials between levels, but only after level 10
  • Implemented user segmentation based on play patterns
  • A/B tested different ad frequencies

Results:

  • 30% increase in ARPDAU (from $0.035 to $0.046)
  • Minimal impact on retention (less than 2% decrease)
  • Rewarded ads accounted for 70% of ad revenue
  • Total revenue increased by 42% when combining ads with IAP

Key Learnings:

  • Delaying interstitials until players are engaged significantly reduced negative impact
  • Rewarded videos actually improved retention by 5% when implemented at difficulty spikes
  • Segmenting users based on play frequency allowed for customized ad experiences

Case Study 2: Hypercasual Game “Endless Runner X”

Game Profile:

  • Hypercasual endless runner
  • 5 million monthly active users
  • Ad-monetization focused

Challenge: Maximize ad revenue without sacrificing the game’s simplicity and quick session gameplay.

Implementation Strategy:

  • Interstitials after every 3 game sessions
  • Rewarded videos for continue opportunities
  • Banner ads in menu screens only
  • Implemented adaptive frequency capping based on session length

Results:

  • Achieved $0.052 ARPDAU across all users
  • Interstitial completion rate of 78%
  • Rewarded video opt-in rate of 40%
  • Session length increased by 15% due to continue opportunities

Key Learnings:

  • Adaptive frequency capping based on session length improved overall revenue
  • Rewarded continues actually increased session time and lifetime value
  • Removing banners from gameplay screens improved retention by 8%

Unity Ads Revenue Optimization Checklist

Use this checklist to ensure your Unity Ads implementation is fully optimized:

Foundation Setup

  • [ ] Unity Ads SDK is up-to-date
  • [ ] All ad units are properly configured in dashboard
  • [ ] Basic analytics tracking is implemented
  • [ ] Proper initialization and error handling in place

Strategic Implementation

  • [ ] Ad placements aligned with game flow
  • [ ] Frequency capping implemented
  • [ ] User segmentation strategy developed
  • [ ] A/B testing framework in place

Format Optimization

  • [ ] Rewarded videos offer compelling value
  • [ ] Interstitials placed at natural break points
  • [ ] Banner positioning optimized for viewability
  • [ ] All ad formats tested for performance

Performance Monitoring

  • [ ] Regular eCPM analysis by region
  • [ ] Fill rate monitoring system in place
  • [ ] User experience metrics tracked alongside revenue
  • [ ] Retention impact monitoring implemented

Advanced Features

  • [ ] Personalized ad experience based on user behavior
  • [ ] Multiple monetization channels working together
  • [ ] Regular A/B tests running to optimize performance

Future Trends in Unity Ads (2025 and Beyond)

As the mobile advertising landscape evolves, several emerging trends will impact Unity Ads implementations:

Programmatic Advertising

Unity’s expansion into programmatic bidding is revolutionizing how ads are sold. Instead of traditional waterfalls, real-time bidding allows advertisers to compete simultaneously for inventory, typically resulting in higher eCPMs for publishers.

To take advantage of this trend:

  1. Enable programmatic in your Unity dashboard
  2. Implement audience data collection where permitted
  3. Create balanced waterfall setups that combine programmatic and direct deals

Privacy-First Advertising

With increasing privacy regulations (GDPR, CCPA, ATT), ad targeting is evolving:

// Example implementation handling ATT consent (iOS)
#if UNITY_IOS
using Unity.Advertisement.IosSupport;
#endif

public class PrivacyConsentManager : MonoBehaviour
{
    void Start()
    {
        #if UNITY_IOS
        if (ATTrackingStatusBinding.GetAuthorizationTrackingStatus() == 
            ATTrackingStatusBinding.AuthorizationTrackingStatus.NOT_DETERMINED)
        {
            // Show custom explanation UI
            ShowCustomTrackingDialog();
        }
        else
        {
            // Initialize ads normally
            InitializeAds();
        }
        #else
        // For Android, implement appropriate consent flow
        ShowAndroidConsentDialog();
        #endif
    }
    
    public void RequestTrackingAuthorization()
    {
        #if UNITY_IOS
        ATTrackingStatusBinding.RequestAuthorizationTracking();
        #endif
    }
    
    private void ShowCustomTrackingDialog()
    {
        // Your custom explanation UI before showing the system prompt
        // This helps improve opt-in rates
    }
    
    private void ShowAndroidConsentDialog()
    {
        // Your Android consent implementation
    }
}

Alternative Compensation Models

Some developers are exploring alternative models like:

  • Watch-to-earn (cryptocurrency/token rewards for ad viewing)
  • Subscription tiers (ad-free experience for subscribers)
  • Hybrid models (reduced ad frequency for small purchases)

Conclusion

Unity Ads offers game developers a powerful monetization solution that, when implemented strategically, can generate significant revenue while maintaining a positive user experience. Success requires balancing technical implementation with thoughtful placement strategy and continuous optimization.

By following the advanced implementation guidance, performance optimization techniques, and user experience best practices outlined in this guide, developers can maximize their Unity Ads revenue while preserving player satisfaction and retention.

Remember that monetization strategy should evolve alongside your game and user base. Regular analysis of key performance metrics, experimentation with new approaches, and staying current with platform updates are essential practices for long-term success with Unity Ads.