Unity Ads accepts a playable as one inlined, minified index.html file under 5 MB, built on MRAID 3.0, that opens the store with mraid.open only after the player has interacted. No runtime network requests, no self-fired attribution, and one responsive build that handles both portrait and landscape. Every value below comes from Unity's own Grow documentation.
What does Unity Ads require for a playable?
| Spec | Unity Ads requirement |
|---|---|
| Max file size | Less than 5 MB |
| Format | Single index.html, minified, all assets inlined as base64. No relative paths, folders or remote URLs |
| MRAID version | MRAID 3.0, full screen only. Injected by Unity, no script tag needed |
| Orientation | Portrait and landscape from one responsive build. Single orientation playables are marked for deprecation |
| Max duration | Not published |
| CTA / store redirect | mraid.open(url), from a player tap on the CTA after gameplay interaction |
| External calls | None at runtime. No XHR, no remote config or assets |
| Analytics / events | Player interaction data only, no personal data such as user or device IDs. Don't fire your own attribution events; Unity tracks start, view and click server side |
| Minimum OS | Android 5 or later, iOS 13 or later |
| Test tool | Ad Testing app (iOS and Android), loaded via QR code |
Source: Unity Grow, playable asset specifications. For how Unity compares with the other networks, see the specs hub.
What changed with ironSource and LevelPlay?
Unity announced the ironSource Ads sunset on 26 March 2026. New ironSource Ads accounts, campaigns and creatives stopped on 15 April, and direct demand stopped serving on 30 April 2026. Unity points advertisers to Unity Ads, and says Unity Vector was updated to carry over account history and audience signals. From 30 April the ironSource Ads network serves programmatic demand from ironSource Exchange only.
LevelPlay is Unity's mediation platform for publishers. It isn't a place you upload playables as an advertiser. If you buy user acquisition on Unity, you upload to Unity Ads, and the specs on this page are the ones that apply. Old ironSource playable specs and rejection lists you find online are out of date.
How should the MRAID lifecycle work on Unity?
This is where most Unity rejections start. The playable has to wait. Unity's documentation asks you to:
Unity doesn't support expand, resize, custom close buttons, sms, tel, calendar or storePicture. Unity controls when the player can close or skip.
For audio, Unity recommends the Web Audio API as the main path because HTMLAudioElement ignores the iOS mute switch. Use the audio element as a fallback only. Hide native video controls if you use video.
One build, every network. The mechanic and art are shared. The packaging isn't. Genie Playable exports a Unity Ads variant (single inlined HTML, MRAID 3.0 lifecycle, mraid.open) next to your Meta, AppLovin and Google builds, from the same source.
Try GenieWhat does Unity say about layout and the store redirect?
Keep text, buttons and anything interactive out of the top and bottom bands. Unity draws the countdown, close button and privacy or consent UI there. No fake close buttons, fake system UI or deceptive alerts.
For the redirect, Unity's sample checks the user agent for Android and treats everything else as iOS, because newer iPadOS reports itself as Macintosh. Redirects without interaction, on the first tap, or from a gameplay element that pretends to be something else are not allowed. Playable end cards follow the same rules and need a CTA that opens the App Store or Google Play.
For iOS apps, follow Apple's creative rules and show only the Apple App Store badge.
How do I test a Unity playable before upload?
Install Unity's Ad Testing app on a device, host your HTML at a public URL ending in.html (https for iOS), and scan the QR code. The Unity Ads dashboard can generate the QR code for you. If you self host, the server must send Access-Control-Allow-Origin: *. Run it several times, rotate the device, lock the screen, flip the mute switch.
QA checklist before you upload to Unity Ads
Why do Unity Ads playables get rejected?
| Rejection reason (Unity docs) | Usual fix |
|---|---|
| Breaks in portrait or landscape | Use one responsive layout and handle resize events |
| Ignores device lock | Pause and mute on viewableChange false |
| Ignores the iOS mute switch | Move audio to the Web Audio API |
| Content policy violation | Revise against Unity's advertising content policies |
| Gambling creative from an unmanaged partner | Become a managed partner through Unity support first |
| Blank screen in the ad unit (from the spec page) | An asset is still referenced by path or URL. Inline it |
In the dashboard, hover over the creative pack name to see the reason, fix it and resubmit. A campaign needs at least one approved creative pack to go live. Source: Unity, rejected moderation status.
From our side: teams we talk to who move a working AppLovin playable to Unity usually hit the same two issues. The playable starts on load instead of waiting for viewable, and audio ignores the mute switch. Both pass in a desktop browser, so test on a real iPhone. AppLovin's requirements are on our AppLovin spec page.
Where does Genie Playable fit?
Genie Playable builds a playable from your APK or HTML build plus the assets in Genie, from a format that's already working, or from a brief with Genie Agent. You iterate from the last version, without a developer, and export network-ready builds for Unity Ads, Meta, AppLovin, Liftoff, Google Ads, TikTok Ads, Pangle and Mintegral. Moloco coming soon.
It's not for you if you only run one network with an in-house playable engineer who already has a Unity pipeline. You won't gain much. It helps most when the same concept has to ship to five networks and the bottleneck is packaging and iteration, not ideas. More on building from your own game: make a playable from your game.
Ship your Unity build without a developer. One source in. A Unity Ads build out, alongside every other network you run.
Try Genie