Every network side by side
| Network | File | Max size | MRAID | CTA call | Test with |
|---|---|---|---|---|---|
| AppLovin | Single HTML | 5 MB | 2.0 | mraid.open() | Playable Preview |
| Meta (Facebook) | Single HTML or ZIP (100 files) | 5 MB | No | FbPlayableAd.onCTAClick() | Playable Preview Tool |
| Google Ads | ZIP (512 files) | 5 MB | No | ExitApi.exit() | HTML5 Validator |
| Unity Ads | Single index.html | 5 MB | 3.0 | mraid.open() | Ad Testing app |
| Liftoff (Vungle) | Single HTML or ZIP | 5 MB | Yes | mraid.open() (no URL) | Ads Manager QA |
| Moloco | Single HTML (no ZIP) | 5 MB | No | FbPlayableAd.onCTAClick() | Ads Manager, Creative Lab |
| Mintegral | ZIP, matching names | 5 MB | No | window.install() | Mindworks test tool |
| Chartboost | Single HTML | 3 MB* | 1.0 + some 2.0 | mraid.open(url) | Exchange demo app |
| TikTok | ZIP + config.json | 5 MB | No | window.openAppStore() | Ads Manager upload |
| Snapchat | ZIP + config.json | 5 MB | No | ScPlayableAd.onCTAClick() | Ads Manager upload |
| Adikteev | HTML snippet + JS/CSS | Not published | 1 | mraid.open(AK_CLICK_DESTINATION_URL) | Client partner |
* Chartboost's last published self-serve spec. Its exchange has no hard limit and recommends under 5 MB. Sizes are for the file you upload: the HTML file, or the ZIP.
Rules that apply on every network
The networks word them differently, but these hold everywhere. A playable that follows them only needs its packaging and CTA call changed per network:
- Everything ships in the file. No CDN libraries, web fonts, analytics or remote config. Only the network's own script is allowed (and Google's short allowlist).
- Only a tap opens the store. No redirect on load, on a timer, or on the first touch.
- Use the network's CTA call, never
window.locationor a plain link. It's how the network attributes the click. - No close button of your own. The network adds one; leave its corners clear.
- Sound waits for a tap and stops when the ad is hidden or the phone is muted or locked.
- Responsive, both orientations, except Meta and Snapchat, which are portrait only.
- A visible install button for the whole playable, and an end screen.
Three ways networks package a playable
- One self-contained HTML file with every asset inlined as base64: AppLovin, Unity, Moloco and Chartboost. Meta and Liftoff accept this too.
- A ZIP with a config file: TikTok and Snapchat want
index.htmlplusconfig.jsonat the root; Mintegral wants the zip, folder and HTML to share one name. - A ZIP of separate files: Google (with an
ad.orientationmeta tag), Meta and Liftoff.
That's why every network gets its own build. The CTA call, MRAID handling and packaging all differ, so a file made for one network won't pass review on another.
MRAID or not
MRAID is the IAB standard API that in-app ad SDKs give HTML ads. AppLovin (2.0), Unity (3.0), Liftoff, Chartboost and Adikteev use it, and the CTA is mraid.open(). Meta, Google, Moloco, Mintegral, TikTok and Snapchat don't, and several reject a file that references mraid.js. That's the most common reason a playable built for one network fails on another.
Common questions
What is the maximum file size for playable ads?
5 MB on almost every major network: AppLovin, Meta, Google, Unity, Liftoff, Moloco, Mintegral, TikTok and Snapchat. Chartboost's last self-serve spec allowed 3 MB.
Do all ad networks use MRAID for playable ads?
No. AppLovin, Unity, Liftoff, Chartboost and Adikteev use MRAID. Meta, Google, Moloco, Mintegral, TikTok and Snapchat use their own APIs, and several reject files that include mraid.js.
Can one playable ad file run on every network?
No. Each network needs its own build, because the CTA call, MRAID handling and packaging differ: a single HTML file with mraid.open() for AppLovin or Unity, a ZIP with config.json and window.openAppStore() for TikTok, a ZIP with matching names and window.install() for Mintegral.
Which networks require a single HTML file?
AppLovin, Unity and Moloco accept only one self-contained HTML file. Meta and Liftoff accept a single HTML file or a ZIP. Google, TikTok, Snapchat and Mintegral require a ZIP.
Can playable ads load assets from a CDN?
Generally no. Networks ban network requests, so images, audio and fonts are inlined or packed in the ZIP. Liftoff hosts ZIP contents itself, and Google allows a short list of Google-hosted libraries and Google Fonts.