---
title: Ad formats
description: Overview of the ad formats supported by React Native Google Mobile Ads and how to choose between them.
---

The Google Mobile Ads package supports the following ad formats. Pick the format that best fits the placement in your app:

- [App open](/ad-formats/app-open) — full screen, shown as your app is brought to the foreground.
- [Banner](/ad-formats/banner) — component based, occupies a fixed area of your UI (anchored, adaptive, collapsible).
- [Interstitial](/ad-formats/interstitial) — full screen, shown at natural transition points.
- [Rewarded](/ad-formats/rewarded) — full screen, rewards the user for completing an action.
- [Rewarded interstitial](/ad-formats/rewarded-interstitial) — full screen reward format that does not require opt-in.
- [Native](/ad-formats/native) — component based, rendered with your own layout.

Two additional guides cover cross-cutting integration patterns:

- [React hooks](/ad-formats/hooks) — every hook in the library (fullscreen, app open manager,
  Ad Manager interstitial, native, multi-format, and pools) and the shared fullscreen lifecycle.
- [Google Ad Manager](/ad-formats/ad-manager) — Ad Manager (GAM) specific components and options.

## Before loading any format

<Warning>
  Complete your consent flow before calling `mobileAds().initialize()` or loading an ad. Keep this
  page focused on format behavior; follow [Consent & privacy basics](/consent-basics) for the
  integration sequence and regional requirements.
</Warning>

<Info>
  Always use [test ads](/first-ad#test-ads) while developing. Using production ad units on a device
  that is not registered as a test device can get your AdMob account suspended.
</Info>

## Load and refresh best practices

- Load fullscreen ads before the natural transition where you plan to show them, then show only
  after the loaded event or `status === 'loaded'`.
- Keep one load in flight per ad instance. The v17 hook API coalesces concurrent `load()` calls;
  with class APIs, guard your own loading state.
- Let the Google Mobile Ads SDK refresh a mounted banner according to the refresh interval
  configured for its ad unit. Do not add a second JavaScript refresh timer. Reload manually only
  for a lifecycle reason, such as the documented iOS foreground case.
- Do not retain loaded inventory indefinitely. Google documents a four-hour window for app open ads
  and a one-hour expiry on Android for
  [interstitial](https://developers.google.com/admob/android/interstitial) and
  [rewarded interstitial](https://developers.google.com/admob/android/rewarded-interstitial) ads.
  Other formats and platforms do not share one universal SDK expiry. For held pooled inventory, this library applies
  a conservative one-hour **publisher reload-policy default** to non-app-open formats; it is not a
  claim about every native SDK cache. Reload stale inventory before showing it. Pool handles
  expose `isStaleByPolicy()` when you use pools.
- Capture impression revenue through `onPaid`, `AdEventType.PAID`,
  `NativeAdEventType.PAID`, or a hook's `revenue`, depending on the API. See
  [Impression-level ad revenue](/impression-level-ad-revenue) and
  [Revenue telemetry and auction diagnostics](/revenue-telemetry-and-auction-diagnostics).

To keep a **buffer** of ready-to-show ads and poll at show time, see
[Preload pools and multi-format recipes](/preload-pools-and-multiformat-recipes).
For `destroy()`, structured errors, and other v17 deltas, see [Migrating to v17](/migrating-to-v17).
