Get started

AdMob Mediation is a feature that lets you serve ads to your apps from multiple sources, including the AdMob Network, third-party ad networks, and AdMob campaigns. AdMob Mediation helps maximize your fill rate and increase your monetization by sending ad requests to multiple networks to ensure you find the best available network to serve ads. Case study.


Before you can integrate mediation for an ad format, you need to integrate that ad format into your app:

New to mediation? Read Overview of AdMob mediation.

For bidding: Google Mobile Ads SDK 7.53.1 or higher.

Initialize the Mobile Ads SDK

The quick start guide shows you how to initialize the Mobile Ads SDK. During that initialization call, mediation and bidding adapters also get initialized. It is important to wait for initialization to complete before you load ads in order to ensure full participation from every ad network on the first ad request.

The sample code below shows how you can check each adapter's initialization status prior to making an ad request.


import GoogleMobileAds

class AppDelegate: UIResponder, UIApplicationDelegate {

  func application(_ application: UIApplication,
      didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    let ads = GADMobileAds.sharedInstance()
    ads.start { status in
      // Optional: Log each adapter's initialization latency.
      let adapterStatuses = status.adapterStatusesByClassName
      for adapter in adapterStatuses {
        let adapterStatus = adapter.value
        NSLog("Adapter Name: %@, Description: %@, Latency: %f", adapter.key,
        adapterStatus.description, adapterStatus.latency)

      // Start loading ads here...

    return true



@import GoogleMobileAds;

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application
    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

  GADMobileAds *ads = [GADMobileAds sharedInstance];
  [ads startWithCompletionHandler:^(GADInitializationStatus *status) {
    // Optional: Log each adapter's initialization latency.
    NSDictionary *adapterStatuses = [status adapterStatusesByClassName];
    for (NSString *adapter in adapterStatuses) {
      GADAdapterStatus *adapterStatus = adapterStatuses[adapter];
      NSLog(@"Adapter Name: %@, Description: %@, Latency: %f", adapter,
            adapterStatus.description, adapterStatus.latency);

    // Start loading ads here...
  return YES;


Check the value of adNetworkClassName

Each ad format class has an adNetworkClassName property on the GADResponseInfo object that returns the class name of the ad network that fetched the current ad. This property only has a value once an ad successfully loads.

Here is some sample code that logs the ad network class name for each ad format.


func adViewDidReceiveAd(_ bannerView: GADBannerView) {
  print("Banner adapter class name: \(bannerView.responseInfo.adNetworkClassName)")


- (void)adViewDidReceiveAd:(GADBannerView *)bannerView {
  NSLog(@"Banner adapter class name: %@", bannerView.responseInfo.adNetworkClassName);



func interstitialDidReceiveAd(_ interstitial: GADInterstitial) {
  print("Interstitial adapter class name: \(interstitial.responseInfo.adNetworkClassName)")


- (void)interstitialDidReceiveAd:(GADInterstitial *)interstitial {
  NSLog(@"Interstitial adapter class name: %@", interstitial.responseInfo.adNetworkClassName);

Rewarded Video


func rewardBasedVideoAdDidReceive(_ rewardBasedVideoAd: GADRewardBasedVideoAd) {
  print("Rewarded video adapter class name: \(rewardBasedVideoAd.adNetworkClassName)")


- (void)rewardBasedVideoAdDidReceiveAd:(GADRewardBasedVideoAd *)rewardBasedVideoAd {
  NSLog(@"Rewarded video adapter class name: %@", rewardBasedVideoAd.adNetworkClassName);



func adLoader(_ adLoader: GADAdLoader,
              didReceive nativeAd: GADUnifiedNativeAd) {
  print("Native adapter class name: \(nativeAd.responseInfo.adNetworkClassName)")


- (void)adLoader:(GADAdLoader *)adLoader
    didReceiveUnifiedNativeAd:(GADUnifiedNativeAd *)nativeAd {
  NSLog(@"Native adapter class name: %@", nativeAd.responseInfo.adNetworkClassName);

Refer to Retrieving Information about the Ad Response for details.

Make sure to disable refresh in all third-party ad networks UI for banner ad units used in AdMob mediation. This will prevent a double refresh since AdMob also triggers a refresh based on your banner ad unit's refresh rate.

Rewarded ads mediation

We recommend that you override all default reward values by setting reward values in the AdMob UI. To do this, select the Apply to all networks in Mediation groups box so that the reward is consistent across all networks. Some ad networks don't provide a reward value or type at all. By overriding the reward value, the reward is consistent no matter which ad network served the ad.

For more information on setting reward values in the AdMob UI, refer to create a rewarded ad unit.

Native ads mediation

The following are some best practices to consider when implementing native mediation.

Native ad presentation policy
Each ad network has its own policies. When using mediation, it's important to remember that your app still needs to abide by the policies of the mediated network that provided the ad.
Avoid using the GADMultipleAdsAdLoaderOptions class when making requests
Requests for multiple native ads only serve Google ads. The multiple native ads feature does not support mediation.