In this video
- The package: one .ZIP, 5 MB maximum, no more than 512 files, up to 20 ZIPs per ad group
- Inside it: a doctype, <html> and <body>, explicit end tags, relative paths, UTF-8, a responsive design
- The orientation meta tag in the <head> — portrait, landscape, or both
- The exit: Google’s exitapi.js as a script tag, and ExitApi.exit() on your CTA — Google does not use MRAID
- No external references (Google names only Google Fonts, jQuery, Greensock and CreateJS), and no sound before the viewer interacts
- The trap: Google’s uploaded DISPLAY specs are 600 KB and 40 files — not the App campaign playable rules
- Build it: remix a template, tick Google in Export, and upload the ZIP that is inside the download
- Check it free with the Playable Ad Spec Checker before you upload — Google re-checks it itself at upload
About this video
A playable ad on Google Ads is an HTML5 asset in an App campaign: one .ZIP file of 5 MB or less, holding no more than 512 files, whose primary HTML carries a doctype, an orientation meta tag, explicit end tags and relative paths to everything else in the archive. Google does not use MRAID for it — the click-through is Google’s own ExitApi.exit(), with exitapi.js loaded as a script tag in the head, which is why a creative built for another network reports no clicks here. Every rule in this video is quoted from Google’s own help pages for App campaigns, linked above — not from the uploaded-display-ad pages, whose numbers are different. In Playable Ads Maker the whole thing is a tick box: the Google export builds index.html and main.js into a ZIP with the exit, the orientation tag and the relative paths already right, and the free Spec Checker grades the result in your browser before you hand it to Google.
Exports for Unity, AppLovin, Google, IronSource, Mintegral, Meta (Facebook), Moloco, TikTok, Liftoff, Vungle, Chartboost, InMobi and Pangle — a ready-to-upload file for each network.
Google — About HTML5/Playable ads for App campaigns →Google — Fix issues with HTML5 assets for App campaigns →Free Playable Ad Spec Checker →
Transcript
Captions in 18 languages on YouTube
This scratch card is the exact file Google gets: a .ZIP, with one HTML file inside it. Rub the gold foil off.
In the next few minutes: what Google requires of an HTML5 playable, how to build one, how to validate it, and how to upload it.
Half the foil gone, and the End Card takes over. Its button is the click-through — on Google, through Google’s own exit call, not MRAID.
Read the full transcriptShow less
Every rule here comes from one Google page: “About HTML5/Playable ads for App campaigns”. It’s linked in the description.
First, the package. Google takes a .ZIP file, 5 MB at most, with no more than 512 files inside it.
Inside, the main HTML file needs a doctype, an <html> tag and a <body> tag, explicit closing tags, relative paths to everything else in the ZIP, and a responsive design.
It also needs an orientation meta tag in the <head>. Ours says content="portrait,landscape", so one file serves both.
Now the big one. Google does not use MRAID. Google’s exitapi.js script goes in the <head>, and your button calls ExitApi.exit(). A creative wired for another network reports no clicks here.
Everything else lives inside the zip. No external references — the only exceptions Google names are its own fonts, jQuery, Greensock and CreateJS.
Sound and video are allowed, but sound must not start before the viewer interacts with the ad.
And a trap: Google’s uploaded display ad specs are different numbers — 600 KB, 40 files. 5 MB and 512 files are the App campaign playable rules.
Let’s build one. I’ll use the Scratch Card template: the first touch is a scratch, never a trip to the store, and it ends on an End Card.
Click Remix this template, and it opens in the editor.
It already has a portrait and a landscape layout, which is exactly what that orientation tag promises Google.
Press Export, and tick Google. See the SDK badge? Google decides the destination itself, through an exit call that takes no URL — so click parameters cannot travel here.
Paste your store links anyway. They fill the click tag inside the file, and the web copy uses them.
The estimate is 3.26 MB, comfortably inside Google’s 5 MB.
Keep Web Preview on. It adds a copy that plays in any browser, and it never uses an export.
Then Export. On the real site you sign in first, and a network export counts as one of your plan’s monthly exports.
Here is what people get wrong. The download holds two things: the web copy, and the Google .zip. The inner one is what Google gets — index.html and main.js at its root.
Before uploading, check it. Our free Spec Checker reads the file right in your browser, and nothing is uploaded.
Choose the Google .zip, and it picks Google by itself. A pass: 3.26 of 5 MB, ZIP packaging accepted, and ExitApi.exit() wired.
It reads the whole archive — both files — and finds no external asset requests and no network calls. That is Google’s no-external-references rule, checked.
A pass means nothing disqualifying is visible in the file. It is not Google’s approval.
And here is the bundle itself, unzipped and played on a phone: index.html, with main.js beside it.
Same files, turned sideways.
To upload, open your App campaign in Google Ads and add the .ZIP as an HTML5 asset. You can have up to 20 .ZIP files in one ad group.
Then it is reviewed like any other ad — most within one business day. One catch: HTML5 playables do not serve on App campaigns for pre-registration, or for engagement.
To try it yourself, remix the Scratch Card template from this video. It is linked below, next to Google’s own spec page. See you in the next video!
Build your first one free, at playableadsmaker.com.