How to Set Up Google AdMob in Expo React Native (2026 Guide)

AA
Atif AliFull Stack Engineer
https://res.cloudinary.com/dbonkjhet/image/upload/v1792488858/groooh/blog-images/dgrygbf3kv43v6tw12ee.jpg

Set up Google AdMob in an Expo React Native app: install, config plugin, development build, test ads, and consent. Avoid account suspension.

How do you set up Google AdMob in an Expo React Native app?

To set up AdMob in Expo, install the react-native-google-mobile-ads library, add its config plugin with your Android and iOS App IDs to app.json, and create a development build, because Expo Go does not support the library. Then initialize the SDK once at launch and use Google's test ad IDs until you ship (react-native-google-mobile-ads docs).

Ads are one of the more dependable ways to earn from a free app, but the income is not automatic. It depends on your traffic, the ad formats you choose, your eCPM, and staying inside AdMob's policies. This guide covers the working setup, the metrics to watch, the rules that get accounts flagged, and the mistakes we see most often.

Need AdMob, consent, and ad placement set up properly in your app? Send us your project and we will review it. Request a free 30-minute review

What is Google AdMob and how does it earn money?

Google AdMob is Google's mobile advertising platform. You create ad units in your app, and AdMob fills them with ads from advertisers who bid for your users' attention, so you earn from impressions and clicks without selling ad space yourself. Each ad unit is assigned a format that decides how and where the ad appears (Google AdMob Help).

FormatWhere it appearsBest forWatch out for
BannerTop or bottom of the screenA simple, always-visible placementKeep to one per screen so the layout stays clean
InterstitialFull screen at natural breaksLevel endings and task completionsDo not show it the moment the app opens
RewardedFull-screen video the user chooses to watchExtra lives, hints, or a temporary unlockNeeds a reward users actually want
Rewarded interstitialFull screen at natural breaks, with a rewardTransitions where a reward fitsCheck Google's current status for the format
NativeInline, styled like your appFeeds and listsNeeds extra design work
App openOn launch or when returning to the appLaunch momentsCan annoy users if shown every time

The react-native-google-mobile-ads library supports all six formats (library docs). Google also advises enabling all ad types on an ad unit, because more advertisers can then bid on your inventory (AdMob optimization tips).

Why add ads to an app?

  • A free app is easier to install. Users are reluctant to pay for an app they have not tried, and ads let you earn from the first day without a paywall.
  • Revenue grows with your audience. More active users means more impressions, but the income still needs management: placements, policy compliance, and consent all affect what you earn.
  • Ads work alongside purchases. Most users of a free app never pay. Ads monetize them, while a paid "remove ads" option serves the users who prefer no interruptions.

Which AdMob metrics should you track?

Track four numbers: eCPM (earnings per 1,000 impressions), match rate (the share of ad requests that returned an ad), impressions, and CTR. Together they show whether low revenue comes from weak demand, unanswered ad requests, or too little traffic.

MetricWhat it measuresFormulaHow to read it
eCPMEstimated earnings per 1,000 impressions(Total earnings ÷ impressions) × 1,000$180 from 45,000 impressions is a $4.00 eCPM
Match rateShare of ad requests that received a response(Matched requests ÷ requests) × 100A low rate means many requests go unanswered
ImpressionsTimes an ad was shownA countHigh impressions with low revenue point to a low eCPM
CTRShare of impressions that were clickedClicks ÷ impressions10 clicks in 1,000 impressions is a 1 percent CTR

Definitions and the eCPM example come from Google AdMob Help and the AdMob reports glossary. Older guides call match rate "fill rate", and you will see both terms used loosely. AdMob's own reports use match rate.

Do not judge a network by eCPM alone. Multiply eCPM by the share of requests that are filled. An example on the AdMob blog compares a network paying $1 at 85 percent fill, worth 85 cents per 1,000 requests, with one paying $2 at 30 percent fill, worth only 60 cents (AdMob blog).

Read the numbers together. A falling eCPM with steady impressions suggests weaker demand, a falling match rate suggests requests are going unanswered, and falling impressions point to a traffic or placement problem.

How do you add AdMob to an Expo app, step by step?

Install the library, register both App IDs in the config plugin, build a development client, initialize the SDK once, then render ads with test IDs. The order matters, because the plugin only takes effect when you rebuild the native code.

Before you start

  • Create a Google AdMob account and add an app for each platform. Copy each App ID from the App settings page.
  • Use a development build. The library contains custom native code, so it does not run in Expo Go.
  • Use valid App IDs. A missing or invalid App ID makes the app crash on start or fail to build (library docs).

Step 1: Install the library

npx expo install react-native-google-mobile-ads

Step 2: Add the config plugin to app.json

Put the App IDs on the plugin only. You do not need to edit Info.plist or AndroidManifest.xml by hand.

{
  "expo": {
    "plugins": [
      [
        "react-native-google-mobile-ads",
        {
          "androidAppId": "ca-app-pub-xxxxxxxxxxxxxxxx~xxxxxxxxxx",
          "iosAppId": "ca-app-pub-xxxxxxxxxxxxxxxx~xxxxxxxxxx",
          "userTrackingUsageDescription": "This identifier will be used to deliver personalized ads to you."
        }
      ]
    ]
  }
}

The userTrackingUsageDescription text is the message iOS shows in the App Tracking Transparency prompt. Apple requires it when you request tracking permission.

Step 3: Create a development build

npx expo install expo-dev-client
npx expo prebuild
npx expo run:android
npx expo run:ios

If you build with EAS instead, run eas build --profile development. Rebuild whenever you change an App ID or any plugin option. Use npx expo prebuild --clean only when you want to regenerate the native folders from scratch, because it removes manual edits to them.

Step 4: Initialize the SDK once at launch

Initialize after you have gathered consent and set any request settings, such as child-directed treatment. Ads may start preloading as soon as initialize is called (library docs).

import mobileAds from 'react-native-google-mobile-ads';

mobileAds()
  .initialize()
  .then((adapterStatuses) => {
    // SDK is ready
  });

Step 5: Show a test banner

import { BannerAd, BannerAdSize, TestIds } from 'react-native-google-mobile-ads';

const adUnitId = __DEV__
  ? TestIds.BANNER
  : 'ca-app-pub-xxxxxxxxxxxxxxxx/xxxxxxxxxx';

export function AdBanner() {
  return <BannerAd unitId={adUnitId} size={BannerAdSize.BANNER} />;
}

A working setup shows a "Test Ad" label on the banner (library docs). Interstitial, rewarded, app open, and native ads have matching test IDs in TestIds.

About build warnings. A legacy warning about a missing root-level ios_app_id or android_app_id can appear even when the plugin already supplied the IDs. The library docs say it is safe to ignore. Do not ignore other warnings or errors (library docs).

What rules get AdMob accounts flagged or ads blocked?

Three rules matter most. Never click your own live ads, get consent from users in the EEA, UK, and Switzerland before serving personalized ads, and never encourage users to click. Breaking the first or third can get your account suspended or disabled.

  • Use test ads during development. Publishers may not click their own ads, and testing by clicking live ads is not allowed. Google offers two safe routes: its sample ad unit IDs, or your own ad unit IDs with your device registered as a test device (AdMob policy help).
  • Understand the penalty. Invalid activity can lead to suspension or a disabled account (AdMob help). If an account is disabled for invalid traffic, Google withholds all unpaid revenue (Google ad traffic quality).
  • Collect consent in Europe. Google's EU User Consent Policy requires disclosures and consent for users in the EEA, UK, and Switzerland. Without a Google-certified consent platform, only limited ads can serve to that traffic. Google's User Messaging Platform (UMP) SDK handles this (Google consent guide). Gather consent before you call initialize (library docs).
  • Ask for tracking permission on iOS. Apple requires the App Tracking Transparency prompt before an app can use the advertising identifier, which is why Step 2 sets userTrackingUsageDescription.
  • Configure child-directed apps first. If your app targets children, set tagForChildDirectedTreatment, tagForUnderAgeOfConsent, and a maximum content rating with setRequestConfiguration before initializing the SDK (library docs).
  • Publish an app-ads.txt file. It lists who may sell your ad inventory and protects against spoofing. Google says it is recommended, and AdMob accounts created after January 2024 may need to verify new apps with it. Place the file at the root of your developer website and allow up to 24 hours for AdMob to verify it (AdMob app-ads.txt help, app verification).

What are the most common AdMob mistakes in Expo apps?

Most setup problems come from seven mistakes, and each has a quick fix.

MistakeWhat you seeFix
Running the app in Expo GoThe ads module will not runCreate a development build with expo-dev-client or EAS
Missing or wrong App IDCrash on launch or a failed buildCopy the App IDs from AdMob App settings into the plugin and rebuild
Changing plugin settings without rebuildingNew settings have no effectRe-run prebuild or create a new EAS build after every plugin change
Using live ad unit IDs in developmentAccount flagged for invalid activityUse TestIds or register a test device
Loading ads before consent or initializationNon-compliant requests or empty ad slotsGather consent, set request settings, then call initialize
Ads missing in productionBlank space where the ad should beCheck that each App ID matches its platform, review the app-ads.txt status, and use Ad Inspector
Too many full-screen adsBad reviews and uninstallsShow interstitials at natural breaks and never on app open

The library docs list Ad Inspector as the tool for deeper diagnostics when ads do not appear (library docs). Google advises placing interstitials at natural breaks and transitions (AdMob optimization tips).

If your app uses other native libraries, check Expo SDK compatibility before upgrading. Our guide to why old React Native libraries crash on Expo SDK 55 explains how to find and patch the problem.

When is AdMob the wrong choice?

AdMob is a poor fit in five situations, and a good developer will tell you before you spend time integrating it.

  • Your audience is very small. Revenue scales with impressions. At a $4 eCPM, 100,000 impressions earn about $400, so a few hundred users will not cover the integration work.
  • Your product is subscription-first or business-focused. Ads can undermine trust in paid and professional tools, and a subscription usually earns more per user.
  • Your app targets children. It is possible, but it needs child-directed settings and content limits set before the SDK starts, and it narrows the ads you can serve.
  • You cannot maintain consent and policy compliance. If you serve Europe, the UK, or Switzerland, consent handling is mandatory, and invalid activity can cost you the account and unpaid revenue.
  • Ads would block the core task. If users need your app in time-sensitive or sensitive moments, full-screen ads will cost you more in uninstalls than they earn.

Frequently asked questions

Does AdMob work in Expo Go?

No. The react-native-google-mobile-ads library contains custom native code, which Expo Go does not include. You need a development build, created with expo-dev-client and a local prebuild or with EAS Build (library docs).

Which library should I use for AdMob in Expo?

Use react-native-google-mobile-ads, built and maintained by Invertase. It supports app open, banner, interstitial, rewarded, rewarded interstitial, and native ads, and it needs a Google AdMob or Google Ad Manager account (library docs).

How do I test AdMob ads without risking my account?

Use Google's test ad unit IDs, available in the library as TestIds, or register your device as a test device while using your own ad units. Never click your own live ads, because that counts as invalid activity (AdMob policy help).

How is AdMob eCPM calculated?

eCPM is total earnings divided by impressions, multiplied by 1,000. Google's example: an estimated $180 from 45,000 impressions gives an eCPM of $4.00 (Google AdMob Help).

Yes, for users in the EEA, UK, and Switzerland. Google's EU User Consent Policy requires disclosures and consent before personal data is used to serve ads, and Google's UMP SDK is the standard tool. On iOS you also need the App Tracking Transparency prompt (Google consent guide).

How much money can I make with AdMob?

Earnings equal impressions divided by 1,000, multiplied by eCPM. As an illustration, 500,000 impressions at a $4 eCPM earn about $2,000. Real eCPM varies by ad format, country, and app, so check your own AdMob reports rather than relying on averages.

Get AdMob set up correctly in your app

Send us your Expo project and we will review your AdMob setup, consent flow, and ad placements, and flag anything that risks your account or your revenue. Request your free review

Sources

Sources reviewed October 2026. Confirm library versions and Google policies against current documentation before shipping.

AA
Written byCore Contributor

Atif Ali

Full Stack Engineer

Full-Stack Engineer at Groooh with extensive expertise in cross-platform mobile development and cloud systems. Specializes in building unified digital ecosystems using React Native, Next.js, and PostgreSQL. Known for writing maintainable, test-driven code and optimizing app performance from database query tuning down to 60fps mobile UI interactions.

Google SearchPreferred Source

Add Groooh to Preferred Sources

Top Stories & AI Overviews

Prioritize our engineering & AI guides in your Google Top Stories & AI Overviews.

Have a Project in Mind?

Ready to build your next breakthrough product?

Let’s collaborate on your architecture roadmap, MVP sprint, or full product build with our senior team.

Start a Project

Relevant Blogs