Reference

Playable ad specs and size limits, network by network

Every network this editor exports to, with the file size it enforces, the package shape it expects, the call that sends a tap to the store, and the requirements that get a creative rejected. Each spec links to the network's own documentation and carries the date we last read it.

13
Networks supported
4 MB
Tightest size cap
5 MB
Most generous cap

Why the limits are smaller than they look

Almost every network here caps a playable at 5 MB, and most of them mean the finished file rather than the assets you started with. A single-file playable has to carry its images and audio as base64 text inside the HTML, and base64 costs roughly a third more than the bytes it encodes. Three megabytes of PNGs becomes about four megabytes of document before a line of code is counted. This is the gap that turns a build that looked comfortable in a folder into one that is rejected at upload, and it is the reason the exporter reports weight after encoding rather than before.

Single file or archive is not a preference

Networks split into two camps and several of them reject the wrong shape outright. Unity, AppLovin, ironSource, Chartboost and Moloco want one HTML document with everything inside it — Moloco says so explicitly and refuses a ZIP. Google, TikTok, Pangle and Mintegral accept only an archive, and each has rules about what sits at its root. Mintegral is the strictest: the ZIP, the folder inside it and the entry document must all share one name. Meta and InMobi take either. Handing a network the shape it does not accept is not a warning, it is a failed upload.

The exit call is the part that breaks silently

Every network sends a tap to the store through its own call, and a creative that uses the wrong one usually still runs — it simply does nothing when the button is pressed, which review catches and attributes to a broken ad. There are five conventions across these fourteen entries. MRAID networks take mraid.open(url) and use the URL you supply. Meta, Moloco and InMobi call FbPlayableAd.onCTAClick() and decide the destination themselves. TikTok and Pangle use window.openAppStore(), Mintegral window.install(), Google ExitApi.exit(), and Vungle and Liftoff a pair of events rather than a single call.

Who lets you check before you submit

Only some of these networks will tell you whether a build passes before a campaign depends on it. Unity ships a Playable Tester app, Google runs h5validator, Vungle and Liftoff share a Creative Verifier that takes the ZIP, and TikTok, Pangle, Meta and Mintegral scan on upload and report what failed. Chartboost, ironSource, Moloco and InMobi offer no first-party tester at all — with those four, a rejection notice is the first feedback anyone gets, which is worth knowing before you plan a launch around one.

Size limits and packaging, side by side

Caps apply to the finished creative. On a single-file network that means after assets are inlined, which is the measurement most builds fail on.

Playable ad file size limits, package format, exit call and landscape requirement for each supported ad network.
NetworkSize limitPackageExit callLandscape
Google Ads5 MBZIP archiveExitApi.exit()Optional
Meta / Facebook5 MBSingle HTML fileFbPlayableAd.onCTAClick()Optional
Unity Ads5 MBSingle HTML filemraid.open(url)Required
AppLovin5 MBSingle HTML filemraid.open(url)Required
TikTok5 MBZIP archivewindow.openAppStore()Optional
Mintegral5 MBZIP archivewindow.install()Required
Vungle5 MBZIP archivedownload / complete eventsRequired
Liftoff Monetize5 MBZIP archivedownload / complete eventsRequired
Moloco5 MBSingle HTML fileFbPlayableAd.onCTAClick()Required
Chartboost5 MBSingle HTML filemraid.open(url)Required
InMobi5 MBSingle HTML fileFbPlayableAd.onCTAClick()Required
Pangle5 MBZIP archivewindow.openAppStore()Optional
ironSource4 MBSingle HTML filemraid.open(url)Required

Network requirements change without notice. Each entry below links to the network's own documentation and shows when we last read it — check there before a campaign goes live.

Every network in detail

Google Ads

5 MB
Package
ZIP archive
Entry file
index.html
Exit call
ExitApi.exit()
Destination
The network decides
  • For App campaigns. index.html must sit at the root of the ZIP.
  • Local storage is not allowed, and every tag must be explicitly closed.
  • Without exitapi.js, Google adds its own Install button over the creative.
  • Check a build at h5validator.appspot.com/adwords/asset, with 'App campaigns' ticked.

Spec read 20 Aug 2026 from Google Ads documentation

Meta / Facebook

5 MB
Package
Single HTML file
Entry file
index.html
Exit call
FbPlayableAd.onCTAClick()
Destination
The network decides
  • Must work without mraid.js — the MRAID shim is left out entirely.
  • Built portrait, responsive across screen sizes.
  • JavaScript redirects are not allowed.

Spec read 17 Aug 2026 from Meta / Facebook documentation

Unity Ads

5 MB
Package
Single HTML file
Entry file
index.html
Exit call
mraid.open(url)
Destination
You set the URL
  • Landscape layout required. The creative has to work rotated, not just scale to fit. Export is blocked until the project has a landscape layout to give, because a portrait-only build sent to one of these is a rejection with a slow turnaround.
  • Store link scanned. Review checks the creative for an App Store or Play Store address. A click-through that does not resolve to one is reported as a fault by the network's own validator.
  • Must wait for the MRAID viewableChange event before play starts.
  • Inlined and minified, in one file with no companion folders.
  • Its validator scans for an App Store or Play Store link in the creative.

Spec read 17 Aug 2026 from Unity Ads documentation

AppLovin

5 MB
Package
Single HTML file
Entry file
index.html
Exit call
mraid.open(url)
Destination
You set the URL
  • Landscape layout required. The creative has to work rotated, not just scale to fit. Export is blocked until the project has a landscape layout to give, because a portrait-only build sent to one of these is a rejection with a slow turnaround.
  • MRAID 2.0. Wait for the ready event before calling any MRAID method.
  • Timers may only start after the first interaction, and the first tap must not exit.
  • Needs a visible fallback if WebGL fails or its context is lost.

Spec read 17 Aug 2026 from AppLovin documentation

TikTok

5 MB
Package
ZIP archive
Entry file
index.html
Exit call
window.openAppStore()
Destination
The network decides
  • Needs a config.json beside index.html declaring which orientations are supported.
  • TikTok's own feed UI overlays the creative — keep key elements inside the safe zone.

Spec read 20 Aug 2026 from TikTok documentation

Mintegral

5 MB
Package
ZIP archive
Entry file
{name}/{name}.html
Exit call
window.install()
Destination
The network decides
  • Landscape layout required. The creative has to work rotated, not just scale to fit. Export is blocked until the project has a landscape layout to give, because a portrait-only build sent to one of these is a rejection with a slow turnaround.
  • Lifecycle events required. The container has to be told the ad has ended. Nothing can infer which moment that is — only the author knows — so a project with no End Ad action cannot satisfy these networks at all.
  • The strictest contract here: gameReady, gameStart, gameEnd, gameRetry and gameClose.
  • Free rotation is mandatory, and it must also work with a mouse — their QA runs in a browser.
  • Mintegral draws the close button and the loading screen. Review takes 3–5 business days.

Spec read 17 Aug 2026 from Mintegral documentation

Vungle

5 MB
Package
ZIP archive
Entry file
index.html
Exit call
download / complete events
Destination
The network decides
  • Landscape layout required. The creative has to work rotated, not just scale to fit. Export is blocked until the project has a landscape layout to give, because a portrait-only build sent to one of these is a rejection with a slow turnaround.
  • Lifecycle events required. The container has to be told the ad has ended. Nothing can infer which moment that is — only the author knows — so a project with no End Ad action cannot satisfy these networks at all.
  • Two events, not one: download on the CTA, complete after enough interaction.
  • They must never fire together — that double-calls the store and fails review.
  • QA it at vungle.com/creative-verifier — it takes the ZIP, not a loose HTML file.

Spec read 21 Aug 2026 from Vungle documentation

Liftoff Monetize

5 MB
Package
ZIP archive
Entry file
index.html
Exit call
download / complete events
Destination
The network decides
  • Landscape layout required. The creative has to work rotated, not just scale to fit. Export is blocked until the project has a landscape layout to give, because a portrait-only build sent to one of these is a rejection with a slow turnaround.
  • Lifecycle events required. The container has to be told the ad has ended. Nothing can infer which moment that is — only the author knows — so a project with no End Ad action cannot satisfy these networks at all.
  • Liftoff Monetize is Vungle's network under its post-acquisition name.
  • Selecting it alongside Vungle produces a single build, not two.
  • QA it at vungle.com/creative-verifier — it takes the ZIP, not a loose HTML file.

Spec read 21 Aug 2026 from Liftoff Monetize documentation

Moloco

5 MB
Package
Single HTML file
Entry file
index.html
Exit call
FbPlayableAd.onCTAClick()
Destination
The network decides
  • Landscape layout required. The creative has to work rotated, not just scale to fit. Export is blocked until the project has a landscape layout to give, because a portrait-only build sent to one of these is a rejection with a slow turnaround.
  • A ZIP is rejected outright — one HTML file, always.
  • Must run on phone, tablet and desktop.
  • Must not contain mraid.js or XMLHttpRequest.

Spec read 17 Aug 2026 from Moloco documentation

Chartboost

5 MB
Package
Single HTML file
Entry file
index.html
Exit call
mraid.open(url)
Destination
You set the URL
  • Landscape layout required. The creative has to work rotated, not just scale to fit. Export is blocked until the project has a landscape layout to give, because a portrait-only build sent to one of these is a rejection with a slow turnaround.
  • MRAID 1.0/2.0, and only some 2.0 methods — stay on the common subset.
  • The close button appears after 5s on interstitial, 20s on rewarded.
  • The 5 MB counts assets loaded at render time, not just the first payload.
  • Chartboost publishes no uploader-facing packaging spec and has no creative tester — this build follows the MRAID convention its family shares.

Spec read 17 Aug 2026 from Chartboost documentation

InMobi

5 MB
Package
Single HTML file
Entry file
index.html
Exit call
FbPlayableAd.onCTAClick()
Destination
The network decides
  • Landscape layout required. The creative has to work rotated, not just scale to fit. Export is blocked until the project has a landscape layout to give, because a portrait-only build sent to one of these is a rejection with a slow turnaround.
  • InMobi accepts a Meta-format build from tools it has no integration with.
  • Delivered to an InMobi contact rather than uploaded self-serve.

Spec read 17 Aug 2026 from InMobi documentation

Pangle

5 MB
Package
ZIP archive
Entry file
index.html
Exit call
window.openAppStore()
Destination
The network decides
  • Renamed TikTok Ad Network — it may not appear as 'Pangle' in the UI.
  • Uploaded through TikTok's own Creative Library; there is no Pangle portal.
  • Reached by setting a campaign's placement to TikTok Pangle, not by a different build.

Spec read 20 Aug 2026 from Pangle documentation

ironSource

4 MB
Package
Single HTML file
Entry file
index.html
Exit call
mraid.open(url)
Destination
You set the URL
  • Landscape layout required. The creative has to work rotated, not just scale to fit. Export is blocked until the project has a landscape layout to give, because a portrait-only build sent to one of these is a rejection with a slow turnaround.
  • The tightest cap of any network here at 4 MB.
  • Timers and the close button are drawn by ironSource — do not add your own.

Spec read 20 Aug 2026 from ironSource documentation

Common questions

What is the file size limit for a playable ad?
Most networks cap a playable at 5 MB. ironSource is the tightest of the ones here at 4 MB, and it counts everything downloaded to the device rather than the first payload alone. The limits apply to the finished file, so a single-file build is measured after its assets have been inlined as base64 — which adds roughly a third to their size.
Can one playable file be used on every network?
No, and the differences are not cosmetic. The exit call, the package shape and the entry filename all change between networks, and several reject the wrong shape without running the creative. Networks that share a convention do share a build — selecting Vungle and Liftoff Monetize produces one file, not two, and TikTok and Pangle are reached from the same archive by choosing a placement.
Why was my playable ad rejected?
In roughly the order it happens: the file is over the cap once assets are inlined, the package is the wrong shape for the network, the exit call belongs to a different network so the CTA does nothing, the creative is portrait-only on a network that requires landscape, or the ad never signals that it has ended on a network that requires lifecycle events. Each of those is listed per network on this page.
What is MRAID, and which networks use it?
MRAID is a standard interface between a creative and the app showing it, and its mraid.open(url) is how a tap reaches the store. Unity, AppLovin, ironSource and Chartboost use it here. The catch is that a creative must wait for the container to report itself ready before calling any MRAID method, and on Unity it must also wait for viewableChange before play starts — a playable that begins immediately can burn its opening seconds off-screen.
Do these specs change?
Yes, which is why every entry on this page carries the date its spec was last read and a link to the network's own page. Networks revise caps and requirements without announcement, and a spec inherited from an aggregator is a rejected campaign waiting to happen. Check the network's documentation before a launch — this page is a starting point and a comparison, not a substitute for it.

Your next playable is one afternoon away.

Open the editor, pick a format and start placing objects. Nothing to install, and nothing to pay.