Google Ads playable specs at a glance
| File format | .zip with a primary HTML file |
|---|---|
| Max file size | 5 MB for the ZIPOne of Google's troubleshooting pages says up to 5.2 MB for interstitials. Treat 5 MB as the limit. |
| Max files | 512 (folders don't count) |
| Allowed file types | CSS, GIF, HTML, JPEG, JS, PNG, SVG |
| File names | Letters, numbers, periods, hyphens and underscores. No spaces. |
| Required HTML | <!DOCTYPE html>, <html>, <body> and an orientation meta tag in <head> |
| Orientation | <meta name="ad.orientation" content="portrait"> (or landscape, or portrait,landscape). Without it the ad renders portrait only. |
| CTA call | ExitApi.exit(); after loading exitapi.js in the head |
| MRAID | Not required. Google uses its own Exit API. |
| External requests | Only Google Fonts and Google-hosted jQuery, GreenSock and CreateJS. Everything else inside the ZIP. |
| Not allowed | iframes, local storage, AMP, <video> without a source |
| Sound | Must not play before the user interacts |
| Campaigns | App campaigns for installs. Not pre-registration or engagement campaigns. |
| Testing | Google Ads HTML5 Validator |
Required code
Put the orientation tag and the Exit API script in the head as literal tags. Google warns that injecting exitapi.js from other JavaScript can make the whole ad clickable:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="ad.orientation" content="portrait">
<script type="text/javascript"
src="https://tpc.googlesyndication.com/pagead/gadgets/html5/api/exitapi.js"></script>
</head>
<body>
<!-- game -->
<button onclick="ExitApi.exit()">Install</button>
</body>
</html>
ExitApi.exit() takes no URL. Google sends the user to the app in your campaign. If you leave the Exit API out, Google adds its own “Install” button to the ad.
Older playables use <meta name="ad.size" content="width=320,height=480"> (or 480x320 for landscape) instead. That still works, but any other size is rejected with “Dimensions are not allowed”, and if both tags are present ad.orientation wins.
Building in Google Web Designer? Don't use the Exit API there. Use GWD's Tap Area component, and publish with the gwd-googleads or gwd-admob environment.
Where Google playables run
HTML5 playables are an asset type in App campaigns for installs. Google shows them full screen, mostly in interstitial slots on the Google Display Network, which includes the in-app inventory of AdMob publishers. You're charged per engagement (the first interaction or click), and installs within 30 days of an engagement count as conversions. Each ad group takes up to 20 HTML5 ZIPs.
Sound and video
Google supports sound in playables, but it must not start until the user interacts. Audio and video files aren't on the allowed file-type list, and a <video> tag without a source gets disapproved. In practice, ship sound as base64 inside the JavaScript and play it through the Web Audio API after the first tap.
How to test a Google playable
- Run the ZIP through the Google Ads HTML5 Validator with the App campaigns option. Fix everything it flags.
- Upload it to the App campaign and open the asset preview. Clicks are blocked in preview on purpose.
- With the preview open, check Chrome DevTools' Network and Console tabs for outside requests or security errors. These pass upload and get the ad disapproved later as an “Invalid fourth party call”.
Why Google rejects playables
- File size is too large: the ZIP is over 5 MB.
- Too many files: over 512.
- Unsupported file type: anything other than CSS, GIF, HTML, JPEG, JS, PNG or SVG, such as an MP3 or a font file.
- Unsupported characters: spaces in a file or folder name.
- Missing primary HTML file: no orientation or size meta tag, a missing doctype,
htmlorbody, or self-closing tags like<path />that need an explicit end tag. - Dimensions are not allowed: an
ad.sizeother than 320×480 or 480×320. - Referenced asset not found: a path that doesn't match a file in the ZIP.
- External reference / Invalid fourth party call: a CDN, analytics or font request not on Google's allowlist.
- Unacceptable HTML5 ad: iframes, AMP tags or a
<video>with no source.
Common questions
What is the file size limit for Google playable ads?
5 MB for the ZIP, with no more than 512 files inside. Google's main HTML5 spec page for App campaigns gives 5 MB.
What is ExitApi.exit() in Google playables?
Google's call for the install button. Load exitapi.js from tpc.googlesyndication.com in the head, then call ExitApi.exit() when the user taps install. It takes no URL; Google sends the user to the app in the campaign.
Do Google playable ads need MRAID?
No. Google uses its own Exit API. If the playable doesn't include exitapi.js, Google adds its own Install button.
What is the ad.orientation meta tag?
A tag in the head that tells Google which orientations the playable supports: portrait, landscape, or portrait,landscape. Without a valid orientation tag the ad renders in portrait only.
Which file types can a Google playable ZIP contain?
CSS, GIF, HTML, JPEG, JS, PNG and SVG. Other types, including audio, video and font files, are rejected.
Do Google playables run on AdMob?
Google serves HTML5 playables from App campaigns full screen on the Google Display Network, mostly in interstitial slots, which is where AdMob in-app inventory sits. Google Web Designer even has a gwd-admob publishing environment for them.
How do I test a Google playable ad?
Upload the ZIP to the Google Ads HTML5 Validator at h5validator.appspot.com and choose App campaigns, then check the asset preview in Google Ads.
Sources
Networks change their specs without notice. These are the pages this summary was checked against. If anything here disagrees with them, follow the network.