Interstitial Ads
Updated: Mar 3, 2026
Copy for LLM
Interstitial ads are full-screen advertisements that cover the entire game view and are shown at natural transition points in your game.
When to Use Interstitial Ads
The key to effective interstitial ads is timing. Show them at moments when the player expects a pause in the action:
- Between levels — After completing a level and before the next one begins.
- After game over — On the game-over screen, before returning to the main menu.
- During screen transitions — When switching between major sections of your game (e.g., from the shop back to the menu).
- After completing an objective — When the player finishes a challenge, mission, or quest.
- On app resume — When the player returns to the game after being away (use with caution).
When NOT to Show Interstitial Ads
- During active gameplay — Never interrupt a player mid-action. This is the fastest way to drive players away.
- Immediately at game start — Let the player engage with your game before showing any ads. Showing an ad before the first play session is a very poor experience.
- Too frequently — The platform enforces a minimum 30-second interval between interstitial ads. Even if the platform allows it, showing ads every 30 seconds will frustrate players. Aim for natural breaks that occur every 1-3 minutes at most.
- During time-sensitive moments — Do not show ads right before a boss fight, during a countdown, or at any moment where the interruption would feel disrespectful of the player’s investment.
Creating an Interstitial Placement
Set up your interstitial placement in Monetization Manager:
- Go to the Monetization Manager.
- Select your app.
- Click Create Placement.
- Choose Instant Games as the platform.
- Select Interstitial as the ad format.
- Give the placement a descriptive name (e.g., “Between Levels Interstitial” or “Game Over Interstitial”).
- Save and note the Placement ID.
Consider creating separate placements for different locations in your game (e.g., one for between levels, another for game over). This lets you track performance per location and optimize your strategy.
SDK Integration
Interstitial ads follow the create, preload, show pattern.
Creating an Ad Instance
var interstitialAd = null; FBInstant.getInterstitialAdAsync('YOUR_PLACEMENT_ID') .then(function (interstitial) { interstitialAd = interstitial; console.log('Interstitial ad instance created.'); }) .catch(function (error) { console.error('Failed to create interstitial instance:', error.code); });
Preloading the Ad
Once you have an ad instance, preload it so it is ready to display immediately:
interstitialAd.loadAsync() .then(function () { console.log('Interstitial ad preloaded and ready to show.'); }) .catch(function (error) { console.error('Failed to preload interstitial:', error.code); });
Preload as early as possible. The best time to preload your first interstitial is during game initialization, right after
FBInstant.startGameAsync(). Preloading can take several seconds (especially for video ads), so you want the ad ready well before you need it.Showing the Ad
When the player reaches a natural break, show the preloaded ad:
interstitialAd.showAsync() .then(function () { console.log('Interstitial ad shown successfully.'); // The ad instance is now spent - preload a new one preloadNextInterstitial(); }) .catch(function (error) { console.error('Failed to show interstitial:', error.code); });
Important: Ad Instance Lifecycle
Each ad instance can only be shown once. After calling
showAsync, the instance is consumed and cannot be reused. You must create and preload a new ad instance for the next impression.Create instance --> Preload --> Show --> [Instance is spent]
|
v
Create new instance --> Preload --> Show --> ...
Complete Integration Example
Here is a full implementation showing how to manage interstitial ads throughout a game session:
var interstitialAd = null; var isInterstitialReady = false; var lastAdShownTime = 0; var MIN_AD_INTERVAL = 60000; // Show at most one interstitial per 60 seconds // Preload an interstitial ad function preloadInterstitial() { isInterstitialReady = false; FBInstant.getInterstitialAdAsync('YOUR_PLACEMENT_ID') .then(function (interstitial) { interstitialAd = interstitial; return interstitialAd.loadAsync(); }) .then(function () { isInterstitialReady = true; console.log('Interstitial ready.'); }) .catch(function (error) { isInterstitialReady = false; handleInterstitialError(error, 'preload'); }); } // Show an interstitial if one is ready and enough time has passed function showInterstitialIfReady() { var now = Date.now(); // Enforce a minimum interval between ads if (now - lastAdShownTime < MIN_AD_INTERVAL) { console.log('Too soon since last ad. Skipping.'); return; } if (!isInterstitialReady || !interstitialAd) { console.log('Interstitial not ready. Skipping.'); return; } isInterstitialReady = false; lastAdShownTime = now; interstitialAd.showAsync() .then(function () { console.log('Interstitial shown successfully.'); // Immediately preload the next ad preloadInterstitial(); }) .catch(function (error) { handleInterstitialError(error, 'show'); // Try to preload again for next time preloadInterstitial(); }); } // Handle errors function handleInterstitialError(error, phase) { switch (error.code) { case 'ADS_NO_FILL': console.log('No interstitial ad available. Will retry later.'); setTimeout(preloadInterstitial, 30000); break; case 'ADS_FREQUENT_LOAD': console.log('Interstitial load too frequent. Backing off.'); setTimeout(preloadInterstitial, 60000); break; case 'ADS_TOO_MANY_INSTANCES': console.log('Too many interstitial instances.'); break; default: console.error('Interstitial ' + phase + ' error:', error.code, error.message); setTimeout(preloadInterstitial, 30000); } } // --- Game lifecycle integration --- // Call during game initialization function initializeGame() { FBInstant.startGameAsync().then(function () { // Start preloading the first interstitial immediately preloadInterstitial(); // ... rest of initialization }); } // Call when the player completes a level function onLevelComplete(levelNumber) { showResults(levelNumber); // Show an interstitial at this natural break showInterstitialIfReady(); // Continue to the next level after a short delay setTimeout(function () { startLevel(levelNumber + 1); }, 2000); } // Call on game over function onGameOver() { showGameOverScreen(); // Show an interstitial at this natural break showInterstitialIfReady(); }
Frequency and Timing
Getting the frequency right is critical. Too many interstitials drive players away; too few leave revenue on the table.
Platform Enforcement
The Instant Games platform enforces a minimum 30-second interval between interstitial ad impressions. If you attempt to show an interstitial less than 30 seconds after the previous one, the
showAsync call will fail.Recommended Frequency
While the platform minimum is 30 seconds, most successful games use a longer interval:
| Game Type | Recommended Interval | Rationale |
|---|---|---|
Casual / Hyper-casual | 60-90 seconds | Short sessions mean fewer natural breaks, so each one should count. |
Mid-core / Puzzle | 90-120 seconds | Longer levels mean more time between ads. Players are more invested and more sensitive to interruptions. |
Story / RPG | 2-5 minutes | Deep engagement means interruptions are more disruptive. Show ads at chapter or scene boundaries. |
Frequency Capping Strategy
Implement your own frequency cap on top of the platform minimum:
var adShowCount = 0; var MAX_ADS_PER_SESSION = 10; // Cap total interstitials per session function shouldShowAd() { if (adShowCount >= MAX_ADS_PER_SESSION) { return false; // Player has seen enough ads this session } if (Date.now() - lastAdShownTime < MIN_AD_INTERVAL) { return false; // Too soon since last ad } return isInterstitialReady; }
Preloading Strategy
Effective preloading ensures ads are ready exactly when you need them. Here is the recommended strategy:
- Preload during initialization. Start preloading your first interstitial as soon as the game starts.
- Preload the next ad immediately after showing one. When an ad is shown, the player will be in a menu/transition screen for a few seconds — use that time to start preloading the next ad.
- Preload during gameplay. While the player is actively playing, preload the next interstitial in the background. The preload happens asynchronously and does not affect game performance.
- Retry failed preloads. If preloading fails (e.g., no fill), retry after 30-60 seconds. Do not retry immediately in a tight loop.
Error Handling
| Error Code | Meaning | What To Do |
|---|---|---|
ADS_NO_FILL | No interstitial ad is available. | Retry after 30-60 seconds. This is normal and not a bug. |
ADS_FREQUENT_LOAD | You are requesting ads too quickly. | Wait at least 30 seconds between load requests. |
ADS_TOO_MANY_INSTANCES | Too many ad instances have been created. | Only maintain one interstitial instance at a time. Discard old instances before creating new ones. |
ADS_NOT_LOADED | You called showAsync before the ad finished loading. | Check that loadAsync resolved successfully before calling showAsync. Use a flag like isInterstitialReady. |
INVALID_PARAM | The placement ID is invalid. | Verify the placement ID in Monetization Manager. |
RATE_LIMITED | Ads are being shown too frequently. | Increase the interval between ad impressions. |
Best Practices
Respect the Player’s Time
- Always show interstitials at natural breaks — moments where the player is already expecting a pause.
- Never interrupt active gameplay, even for a brief moment.
- After showing an ad, give the player a clear and immediate return to the game. Do not stack multiple ads.
Signal the Ad
- Consider showing a brief “Loading...” or transition screen before the interstitial. This manages expectations and prevents the jarring feeling of content suddenly disappearing.
- After the ad completes, return the player to exactly where they were before the ad appeared.
Do Not Punish Players
- Never make the game harder or slower to force more ad opportunities.
- Do not create artificial waiting periods just to show ads.
- If a player’s session is going well (long play time, high engagement), they are generating more ad opportunities naturally — do not undermine that positive experience.
Track Performance
- Create separate placement IDs for different locations (between levels, game over, etc.) so you can compare eCPM and engagement across placements.
- Monitor your retention metrics alongside ad revenue. If retention drops after increasing ad frequency, dial it back.
Combine with Rewarded Ads
- Interstitials and rewarded ads complement each other well. Show interstitials at mandatory break points and offer rewarded ads as an optional, player-initiated action at different moments.
- Do not show an interstitial and then immediately offer a rewarded ad — space them out.
Next Steps
- Rewarded Ads — Implement player-opted ads that grant in-game rewards.
- Banner Ads — Add passive banner revenue to menus and non-gameplay screens.
- In-App Ads Overview — Return to the ads overview for general guidance.
- Monetization Best Practices — Strategic advice for optimizing your ad monetization.