Skip to content
Free tools

Free · no account needed

Playable ad validator

Drop an HTML5 playable and see, for nine ad networks, whether it passes the size limit, packaging, MRAID and store-call rules, with what to change when it doesn’t.

Read as text on our server, never run there, and not stored. Play it runs only in your browser.

What the validator checks

Each check runs once per network, because the networks disagree: a file that’s right for Meta is wrong for AppLovin. Read more in what a playable ad is.

  1. 01

    File size

    Against each network’s limit: 2 MB for Meta, 5 MB for the rest. A ZIP checked for a single-file network is sized as one HTML file with its assets inlined, which adds about a third to each asset.

  2. 02

    Packaging

    One HTML file for AppLovin, Unity, ironSource, Meta and Moloco. A ZIP with the right entry file for the others: index.html for Google, index.html and config.json for TikTok, ad.html for Liftoff, name/name.html for Mintegral.

  3. 03

    mraid.js

    Present where the network serves MRAID (AppLovin, Unity, ironSource), absent where it’s rejected (Meta, Moloco, TikTok).

  4. 04

    Start gate

    On MRAID networks the game should wait for MRAID’s ready event and for the ad to be viewable. Unity requires the viewable part.

  5. 05

    Store call

    The install button has to use the network’s own call: mraid.open(), dapi.openStoreUrl(), FbPlayableAd.onCTAClick(), ExitApi.exit(), openAppStore(), window.install() or a postMessage.

  6. 06

    External requests

    Scripts, stylesheets, fonts, images or fetch calls to other servers, and libraries loaded from a CDN instead of inlined. Ad web views block them and networks reject the ad.

  7. 07

    Network extras

    Google’s exitapi.js and ad.orientation meta tag, Mintegral’s gameEnd() call, Liftoff’s "complete" message when the game ends.

  8. 08

    Phone basics

    A viewport meta tag, a layout that follows resize and rotation, sound that waits for a tap, no store redirect on a timer and no alert() dialogs.

Playable ad size limits and specs

The table the validator works from. Each network has a page with the full spec: what goes in the file, how the store opens, and what happens when a build is over the limit.

Playable ad limits per network
NetworkMax sizePackagemraid.jsStore call
AppLovin5 MBSingle HTML fileRequiredmraid.open(storeUrl)
Unity Ads5 MBSingle HTML fileRequiredmraid.open(storeUrl)
ironSource5 MBSingle HTML fileRequireddapi.openStoreUrl()
Meta2 MBSingle HTML fileLeave outFbPlayableAd.onCTAClick()
Google Ads5 MBZIP · index.htmlLeave outExitApi.exit()
TikTok5 MBZIP · index.html + config.jsonLeave outwindow.openAppStore()
Mintegral5 MBZIP · name/name.htmlLeave outwindow.install()
Moloco5 MBSingle HTML fileLeave outFbPlayableAd.onCTAClick()
Liftoff5 MBZIP · ad.htmlLeave outparent.postMessage("download", "*")

How your file is handled

  • Nothing runs on our server

    The file is read as text and matched against the rules. A ZIP is unpacked in memory, with limits on file count, size and paths.

  • Nothing is kept

    The report goes back to your browser and the file is dropped. We don’t store uploads or log what’s in them.

  • The rules our export uses

    Limits, layouts and store calls come from the code that packages Playbaker exports, last checked 13 October 2026.

Validator questions

Skip the fixing

Get a playable that passes on every network.

Paste your store link. Playbaker builds the game and exports it for each network.