Playable ad specs by network: the 2026 checklist
File size, packaging, MRAID version, the exact CTA call and review rules for AppLovin, Unity Ads, ironSource, Mintegral, Google, Meta and TikTok, checked against each network's own documentation.
A playable that runs perfectly in a phone browser can still be rejected by every network you upload it to. Each network has its own packaging, size cap and way of opening the store. A file built for AppLovin will not pass Meta's check, and a Meta file will not pass TikTok's.
This checklist covers the networks most UA teams buy playables on: AppLovin, Unity Ads, ironSource, Mintegral, Google Ads, Meta and TikTok, plus Moloco and Liftoff. Every line was checked against the network's own documentation on 8 October 2026, and the pages are listed under Sources. Specs change without notice, so confirm the details on the live page before you upload.
The specs at a glance
| Network | Package and size | MRAID | Store click | Orientation |
|---|---|---|---|---|
| AppLovin | Single HTML, 5 MB max, assets inlined | 2.0 | mraid.open() | Portrait and landscape |
| Unity Ads | Single index.html, inlined and minified, under 5 MB | 3.0, injected by the SDK | mraid.open() | Portrait and landscape |
| ironSource | Direct campaigns closed 30 April 2026; buy through Unity Ads | 2.0 on the exchange | mraid.open() | Both recommended |
| Mintegral | ZIP, 5 MB max, assets in base64 | Own API | window.install() | Both, free rotation |
| Google Ads | ZIP, 5 MB max, up to 512 files | Not required | ExitApi.exit() | Declared in a meta tag |
| Meta | Single HTML or ZIP, 5 MB (see note) | Must work without it | FbPlayableAd.onCTAClick() | Portrait, responsive |
| TikTok | ZIP under 5 MB with index.html and config.json | Not used | window.openAppStore() | Set in config.json |
| Moloco | Single HTML under 5 MB, not zipped | Must not include it | FbPlayableAd.onCTAClick() | Portrait and landscape |
| Liftoff | Single HTML or ZIP, 5 MB max | Supported | mraid.open() preferred | Responsive, both where possible |
The size cap has settled at roughly 5 MB almost everywhere, so size is rarely why a build fails. The store click is where builds break: there are five different calls above, and a validator that cannot find the one it expects will reject the file or make the whole ad clickable.
Rules every network shares
These rules appear in some form on almost every spec page. Build them in from day one and most rejections disappear.
- Self-contained. No requests to outside servers while the ad runs. Images, audio, fonts and code are inlined or packed in the ZIP. Unity says analytics calls may be permitted if they contain no personal data.
- No automatic redirect. The store opens only after a deliberate tap on a call to action. AppLovin and Unity also forbid opening the store on the very first touch, and Mintegral says it blocks redirects fired on load or on a timer.
- Sound waits for the player. AppLovin, Google, Liftoff and TikTok's ad network all say audio should start only after the first interaction. AppLovin adds that it must stop when the ad is hidden or closed.
- No close button of your own. AppLovin, ironSource, Mintegral and Liftoff draw the close control themselves, and on Unity the SDK controls skipping and your ad must not cover its controls. Liftoff asks you to keep a 50 by 50 pixel area clear in each top corner.
- Wait before you start. On MRAID networks, wait for the
readyevent before calling MRAID, and on Unity wait forviewableChangebefore starting play, so the first seconds are not spent off screen. - Responsive layout. Most networks want both orientations. Meta wants portrait. Lay the scene out from the real viewport, not from a fixed canvas size.
AppLovin
- Package: one HTML file of 5 MB or less, with every resource embedded as base64 or base122. External resources and network calls are prohibited.
- MRAID: HTML ads must support MRAID 2.0. Wait for
ready, or confirmmraid.getState()is notloading, before calling MRAID or making layout decisions. - Store click:
mraid.open()with the store URL. AppLovin's docs say any other method makes the click-through fail. - Orientation: must work in portrait and landscape.
- Watch out for: no redirect on the first tap, no auto-click, audio muted until the first interaction, and a fallback if WebGL fails or the context is lost. AppLovin supplies the close button, and its exchange documentation caps rewarded MRAID ads at 30 seconds.
- Test with: AppLovin's Playable Preview page, which loads your file on a device.
Unity Ads and ironSource
Unity Ads
- Package: a single
index.html, inlined and minified, with no links to other files, under 5 MB. Ads should not need any network requests. - MRAID: 3.0. The Unity Ads webview injects MRAID, so you do not bundle it. Wait for
viewableChangebefore starting the playable. - Store click: link directly to the store with
mraid.open(). - Orientation: portrait and landscape.
- Watch out for: the ad may not open the store automatically or on the first touch, and must not block the close button or other container UI. Unity documents playable end cards separately, as a single responsive HTML file up to 5 MB.
- Test with: the Ad Testing app for Unity Ads on iOS and Android. Host the file at an HTTPS URL ending in
.htmland open it with the QR code.
ironSource
This is the biggest change of 2026. Unity sunset ironSource Ads direct demand: advertisers could not create new campaigns or creatives after 15 April 2026, and the network stopped serving direct campaigns on 30 April 2026. Unity points advertisers to Unity Ads. The ironSource Exchange keeps serving programmatic demand.
In practice, a playable you would have uploaded to ironSource now goes to Unity Ads and follows the Unity spec above. If you reach that inventory programmatically, the exchange's MRAID guidelines apply instead: up to 4 MB downloaded to the device, MRAID 2.0, sizing from mraid.getMaxSize(), clicks through mraid.open(), and no timer or close button of your own.
Mintegral
- Package: a ZIP of no more than 5 MB. The ZIP, the assets folder and the HTML file must share the same name, using only letters, numbers and underscores. Everything other than HTML and JavaScript goes in as base64, and nothing loads dynamically.
- MRAID: Mintegral's guide does not use it. It defines its own hooks: call
window.gameReadywhen loading finishes,window.gameEndon a win or a loss, andwindow.gameRetryif the player replays. Expose globalgameStart()andgameClose()functions; the platform calls them, for example to start and stop music. - Store click: every path to the store calls
window.install && window.install(). - Orientation: portrait and landscape, with free rotation.
- Watch out for: a CTA button must stay visible for the whole playable, which changes your layout from the first frame. Mintegral adds its own loading page and close button, and its checker runs in a desktop browser, so every interaction must also work with a mouse. Review takes three to five business days.
- Test with: the playable testing tool linked from Mintegral's help centre, which checks the hooks, the install call and the file rules.
Google Ads
- Package: a ZIP of up to 5 MB with no more than 512 files, all referenced by relative paths. Google Fonts and a short list of Google-hosted libraries are the only external references allowed. No iframes and no local storage; the ad runs in a sandboxed frame that only allows scripts.
- MRAID: not required.
- Store click: include Google's
exitapi.jsas a literal script tag in the<head>, then callExitApi.exit(). If the script is missing, Google adds its own Install button. - Orientation: declare it with
<meta name="ad.orientation" content="portrait">(orlandscape, or both), or with anad.sizetag of 320 by 480 or 480 by 320. - Watch out for: sound must not start before the user interacts. Google expects a complete HTML document with explicit closing tags, and its help pages list a narrow set of supported file types, so run every build through the validator. Playable assets are billed per engagement in App campaigns.
- Test with: the Google Ads HTML5 validator, set to App campaigns. Uploaded files are reachable by anyone with the URL, so do not test unreleased work you cannot share.
Meta
- Package: a single HTML file with everything inlined as data URIs, or a ZIP with
index.htmlat the root and no more than 100 files. No network calls at all; evenXMLHttpRequestis not allowed. - Size: the Business Help Centre says 5 MB for both formats, but Meta's developer troubleshooting table still flags a single HTML file over 2 MB. Until the two agree, keep single-file builds under 2 MB or use the ZIP format.
- MRAID: the playable must work without
mraid.jsor similar frameworks. - Store click:
FbPlayableAd.onCTAClick(). The spec page calls it strongly recommended, but the uploader rejects files without it, so treat it as required. - Orientation: portrait, responsive across screen resolutions.
- Watch out for: JavaScript redirects are not allowed. Playables run under the app promotion objective with a lead-in video on Facebook and Instagram placements; Meta's developer docs say the lead-in video is not shown on Audience Network.
- Test with: Meta's Playable Preview Tool, which checks the spec and the CTA call. Meta notes that iPads are not supported for testing.
TikTok
- Package: a ZIP smaller than 5 MB after compression, with
index.htmlandconfig.jsonin the top-level folder. The playable must not make HTTP requests. - MRAID: not used; TikTok says the file should not be in
mraid.jsformat. - Store click: load TikTok's playable SDK script at the bottom of the body, before your own code, and call
window.openAppStore()when the player taps the CTA. The SDK handles the jump to the store. - Orientation: set
playable_orientationinconfig.json: 0 for both, 1 for portrait only, 2 for landscape only. - Watch out for: playables on the TikTok placement itself are only available in upgraded Smart+ campaigns; the TikTok Ad Network (formerly Pangle) serves them in interstitial and rewarded slots. TikTok's own best practices ask that players understand the game within two seconds, that sound plays only after a tap, and that the playable moves on by itself after ten seconds without input.
- Test with: the preview in TikTok Ads Manager, on a phone through the preview QR code. Store jumps are disabled in preview, so check the CTA fires rather than expecting a redirect.
Moloco and Liftoff
Moloco
A single HTML file under 5 MB, not zipped, with assets compressed into data URIs. No XMLHttpRequest or external references, and the file must not include mraid.js. The store click is FbPlayableAd.onCTAClick() called without parameters, the same call as Meta, so a Meta single-file build is a close starting point. Support both orientations; Moloco says the creative must work on phones, tablets and desktop. Audio before a tap is a per-creative setting. The preview in Moloco Ads Manager confirms when the CTA fires.
Liftoff
A single HTML file or a ZIP of up to 5 MB, with relative paths, ASCII file names and no iframes. Liftoff recommends loading a small bootstrap first and heavier assets after. It uses MRAID, so wait for ready and check viewability; its documentation does not state a version. For the store click, mraid.open() is preferred, with window.Liftoff.open() as an alternative, and window.location must not be used. Sound starts only after a tap, and the 50 pixel top corners stay clear for the close button. Ads Manager runs an automatic QA scan on upload.
One codebase, many builds
Nine networks do not mean nine playables. The game, art and timing stay identical; only a thin layer changes. We keep three things per network outside the game code:
- An adapter with two functions, one that waits until the ad may start and one that opens the store. Each output file contains exactly one literal store call, because validators look for that text.
- A packager that writes a single HTML or a ZIP, adds Google's meta tags or TikTok's
config.json, names the Mintegral files and checks the size. - A layout profile for orientation: portrait-only for Meta, free rotation for Mintegral and Unity, whatever the TikTok config declares.
Our step-by-step guide to making a playable ad shows the adapter pattern in code.
Pre-upload checklist
- The file opens with no network connection and nothing fails to load.
- Size is under the cap with a margin, measured on the final file or ZIP.
- The correct store call is present, fires on a deliberate tap, and nowhere else.
- No sound before the first touch; audio stops when the ad is hidden.
- No close button, timer or skip control of your own.
- Both orientations work, or the one the network requires is declared.
- The network's own preview or validator passes, and the build has been played to the end on a real iPhone and a mid-range Android phone.
To see what finished builds feel like, play our concept playables in the browser. For the design side, read our playable ad best practices.
Start a playable with us
Send us your store link and the list of networks you buy on. Every delivery is one self-contained file per network, tested on iOS and Android, so your team uploads instead of debugging. Write to info@zerind.com or use the form on our homepage.
Sources
Checked on 8 October 2026. Networks update their specs; always confirm against the current page before you upload.
- AppLovin, Creative specs and guidelines: https://support.applovin.com/en/growth/promoting-your-apps/creatives/best-practices-and-guidelines
- AppLovin Exchange, Creative types: https://support.applovin.com/en/max/demand-partners/demand-side-platforms/applovin-ortb-specification/creative-types
- Unity Ads, Playable asset specifications: https://docs.unity.com/en-us/grow/acquire/creatives/playable/specifications
- Unity Ads, Playable ad best practices: https://docs.unity.com/en-us/grow/acquire/creatives/playable/best-practices
- Unity Ads, Playable end cards: https://docs.unity.com/en-us/grow/acquire/creatives/end-cards/playable
- Unity Ads, Test creatives with the Ad Testing app: https://docs.unity.com/en-us/grow/acquire/creatives/creative-packs/test
- Unity, Guide for ironSource Ads direct demand sunset: https://docs.unity.com/en-us/grow/is-ads/ironsource-ads-sunset
- ironSource Exchange, MRAID specifications and guidelines: https://docs.unity.com/en-us/grow/programmatic/ironsource-exchange/mraid-specifications-guidelines
- Mintegral Help Center, Playable test guide: https://helpcenter.mintegral.com/en/docs/playable-ad-guide
- Google Ads Help, HTML5 and playable asset requirements for App campaigns: https://support.google.com/google-ads/answer/9981650
- Google Ads Help, Troubleshoot HTML5 playable assets: https://support.google.com/google-ads/answer/12771973
- Google Ads HTML5 validator: https://h5validator.appspot.com/adwords/asset
- Meta Business Help Centre, Playable ad specifications: https://www.facebook.com/business/help/412951382532338
- Meta Business Help Centre, Playable ad troubleshooting: https://www.facebook.com/business/help/586615595196412
- Meta for Developers, Playable ads: https://developers.facebook.com/docs/app-ads/formats/playable-ad/
- TikTok Ads Help, Playable ads: https://ads.tiktok.com/help/article/playable-ads
- TikTok Ads Help, How to create TikTok Ad Network playable ads: https://ads.tiktok.com/help/article/how-to-create-tiktok-pangle-playable-ads
- Moloco Help Center, Playable creative guide: https://help.moloco.com/hc/en-us/articles/24124525963799
- Liftoff Accelerate, Interactive ad integration: https://support.accelerate.liftoff.io/hc/en-us/articles/52724569196699