Try for free
Learn/Specs by network

What are the Unity Ads playable ad specs in 2026?

Unity Ads playable requirements: single HTML under 5 MB, MRAID 3.0, mraid.open, no network requests. QA checklist and rejection fixes.

Written by Yonathan Avivi, Head of Marketing, Genie Labs

Technical review by Yotam Wolf, CTO · Published Oct 26, 2026 · Last verified Oct 26, 2026 · 7 min read

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.

Key takeaways
Under 5 MB, single index.html, all images, audio and video inlined as base64. Unity's spec page doesn't mention ZIP.
MRAID 3.0. Unity injects MRAID for you, so don't add a mraid.js script tag.
Start only after the MRAID ready event and only while the ad is viewable. Pause and mute on viewableChange.
Store redirect with mraid.open, from a CTA tap, after gameplay. Never on the first tap.
ironSource Ads stopped serving direct demand on 30 April 2026. Unity Ads is where that spend moved.
Genie Playable exports a Unity Ads build from the same source as your other networks, without a developer.

What does Unity Ads require for a playable?

SpecUnity Ads requirement
Max file sizeLess than 5 MB
FormatSingle index.html, minified, all assets inlined as base64. No relative paths, folders or remote URLs
MRAID versionMRAID 3.0, full screen only. Injected by Unity, no script tag needed
OrientationPortrait and landscape from one responsive build. Single orientation playables are marked for deprecation
Max durationNot published
CTA / store redirectmraid.open(url), from a player tap on the CTA after gameplay interaction
External callsNone at runtime. No XHR, no remote config or assets
Analytics / eventsPlayer 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 OSAndroid 5 or later, iOS 13 or later
Test toolAd 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:

01Check mraid.getState. If it returns "loading", listen for the ready event.
02On ready, register a viewableChange listener.
03Start the playable only when mraid.isViewable is true. Not on page load.
04On viewableChange false, pause gameplay and mute audio. Resume when it flips back.

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 Genie

What 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

·File is one index.html, minified, under 5 MB. Grep it for http, src=" with a path, and fetch or XMLHttpRequest.
·No mraid.js script tag.
·Nothing starts before ready plus viewable.
·Lock the screen mid play: audio stops. Wake it: audio resumes.
·Flip the iOS mute switch: sound follows it.
·Rotate mid play: layout holds in both orientations.
·First tap does not open the store. CTA tap after gameplay does, to the right store per platform.
·No custom close button, nothing interactive in the top or bottom bands.
·No attribution pixels. Analytics, if any, carry no user or device IDs.

Why do Unity Ads playables get rejected?

Rejection reason (Unity docs)Usual fix
Breaks in portrait or landscapeUse one responsive layout and handle resize events
Ignores device lockPause and mute on viewableChange false
Ignores the iOS mute switchMove audio to the Web Audio API
Content policy violationRevise against Unity's advertising content policies
Gambling creative from an unmanaged partnerBecome 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

FAQ

Sources

  1. 01Unity Grow, Playable asset specifications
  2. 02Unity Grow, Test creative packs with the Ad Testing app
  3. 03Unity Grow, Rejected moderation status
  4. 04Unity, Guide for ironSource Ads direct demand sunset
  5. 05IAB Tech Lab, MRAID standard

Keep reading

All articles →
Playable ads · 7 min read

Playable ad specs by network (2026): size limits, MRAID and file format

Playable ads · 6 min read

AppLovin playable ad requirements and how to test before you upload

Playable ads · 10 min read

Playable ad networks: where should you run playables, and how do you choose?

Ready to ship playables from your game?

Try for freeBook a demo

How to make a playable ad from your own game (without rebuilding it)

Three ways to turn your game into a playable ad: engine export, HTML5 rebuild, or building from your APK. Steps, specs, testing and mistakes to avoid.

Written by Yonathan Avivi, Head of Marketing, Genie Labs

Technical review by Yotam Wolf, CTO · Published Sep 26, 2026 · Updated Sep 26, 2026 · 11 min read

A playable ad from your own game is a 30 to 90 second interactive slice of your game: your characters, your art and one clear mechanic, packaged as a small HTML5 file an ad network can run. You can't ship your game build as it is. Networks cap playables at about 5 MB in a single HTML file or ZIP, with strict rules on code and clicks. So you have three options: export a stripped-down scene from your engine, rebuild the moment in an HTML5 framework, or use a tool that builds the playable from your game's build and assets. This guide walks through all three.

Key takeaways
{{ k }}

What does "a playable ad from your own game" actually mean?

It means the player sees your game, not a generic template with your logo on top. Studios that do this well keep three things fixed and treat the rest as open.

Keep fixedOpen to change
{{ r.ak }} {{ r.av }}{{ r.bk }} {{ r.bv }}

This matches what UA and creative leads tell us. Brand fidelity is non-negotiable. Gameplay is often borrowed from whatever is trending. The catch is policy. The UK ASA now treats even a genuine but non-core mechanic as potentially misleading, and Google Play bans ads that don't represent the app. The closer your playable is to what players actually get, the safer it is, and the better it tends to retain.

Why can't I just ship my game build as a playable?

Ad networks run playables inside their own ad containers, not as apps. Every playable has to fit this box:

SizeAbout 5 MB on every major network (AppLovin, Meta, Google, TikTok, Unity, Mintegral, Moloco, Snapchat). A WebGL export of a real game is usually far bigger. An empty Godot export is already over the limit.
FormatOne self-contained HTML file with every asset inlined (AppLovin, Unity, Moloco), or a ZIP with an index.html (Google, TikTok, Mintegral, Snapchat). Meta accepts both.
No external callsNothing loads from your servers at runtime.
Click-out callmraid.open() on AppLovin and Unity, FbPlayableAd.onCTAClick() on Meta and Moloco, ExitApi.exit() on Google, window.openAppStore() on TikTok, window.install() on Mintegral.
Behavior rulesMuted until the first interaction, no store redirect on the first tap, no auto-redirects, works in portrait and landscape.

The full list lives in our Playable ad specs by network (2026).

What are the three ways to turn my game into a playable?

1. Engine export 2. HTML5 rebuild 3. Build from your APK or HTML and assets
{{ r.k }} {{ r.a }} {{ r.b }} {{ r.c }}

Most studios mix routes: a hand-built hero playable for a launch, and faster tooling for the weekly variations that keep a campaign alive.

What buyers expect to pay and wait: roughly $3,000 to $8,000 and two to four weeks per new playable from an external studio, and roughly $600 to $2,000 in-house once the setup exists. Nobody has a clean source for these numbers, so treat them as market expectations. One mid-size studio we spoke to put it simply: the market norm is "two weeks onwards", and their target is under a week.

Your game is already the brief.

Upload your APK or HTML build. Genie Playable turns it into a playable ad with your own art, characters and live events, ready for 10 ad networks.

Try it free on your game

How do I make a playable ad from my game, step by step?

01\Pick the moment worth playing

Choose one mechanic a stranger understands in three seconds. Good sources: your core loop at its most satisfying, the live event running now, or a format already converting in your genre. If you can't explain the moment in one sentence, it's too complex. One mechanic beats two.

“Merge plus puzzle looks clever and almost always tests worse.”
Segwise

02\Script the arc

Almost every playable follows the same shape:

{{ a.n }} {{ a.k }} {{ a.v }}

03\Prepare your assets

Export characters, backgrounds, UI and sounds from your game, then cut hard. Compress images, use sprite sheets, trim audio to short loops and subset fonts. Base64 inlining adds about a third to file size, so aim for 2 to 3 MB in total and treat 5 MB as the ceiling.

04\Build it

Whatever route you use, keep the logic in plain HTML and JavaScript, make the layout work in 9:16 and 16:9, and keep sound off until the first tap.

05\Package it for each network

This is where engineer time quietly disappears. "A unit that passes on AppLovin can bounce on Unity," as Segwise puts it. Each network needs the right file format, the right click-out call and any required hooks. Mintegral, for example, expects gameReady() and gameEnd() calls. Build once and generate network variants from one source. Hand-editing copies is how bugs creep in.

06\Test before you upload

{{ t.k }}{{ t.v }}

Then test on a real low-end Android phone. A desktop browser hides most of the problems.

07\Launch and measure

Give each playable enough data before you judge it. A common rule of thumb is about 50 conversions in four days, or 100 in seven. Judge on D7 ROAS and retention, not CPI alone. If you can, add events inside the playable (start, first interaction, win or lose, CTA tap, drop-off point), because network dashboards only show the last step.

08\Plan the next version before this one fatigues

Top-grossing games ship dozens of new playables a month, and most of that volume is variations of a winner. Leading teams put roughly 70% of output into variations and 30% into new concepts. Decide now which single thing you'll change next: the hook, the fail state, the character, the event skin or the end card.

What should I keep from my game, and what can I borrow?

Keep everything that helps a player recognise your game after install: art, characters, UI language, sound. Borrow structure freely, whether that's a proven hook, a pacing pattern or a format working in another genre. Racing and narrative studios often tell us their game "isn't playable". The honest read: a playable doesn't need your full core loop. It needs one true moment from your world.

What are the most common mistakes?

Mistake What happens Fix
{{ m.a }}{{ m.b }}{{ m.c }}
The next version, not a new brief.

When a playable fatigues, Genie Playable lets your UA or creative team change the hook, the character or the event skin on the last version and ship it again. No dev queue.

Book a demo

Where does Genie fit?

Genie Playable takes the third route, and adds two more ways in. You can build from your game: your APK or HTML build together with the assets, narrative, mechanics and live events already in Genie. You can start from a format that's already working and rebuild it with your game inside. Or you can start from scratch and describe the playable to Genie Agent.

Genie Core keeps every version on brand, and Genie Playable exports network-ready variants for Meta, AppLovin, Unity Ads, Liftoff, Google Ads, TikTok Ads, Pangle and Mintegral from one source, with Moloco coming soon. No developer is needed at any step, and your team makes the final call on every version. Sign-up is free and covers your first two playables. Try it on your game.

Where to go next

First playable? Follow how to make a playable ad step by step, then run it through the playable ad best practices checklist. Once it's live, read how to know if your playable ad is working and how to A/B test playable ads.

FAQ

{{ f.a }}

Sources

  1. {{ s.n }}{{ s.name }}

{{ a.h1a }} {{ a.h1b }}

{{ a.desc }}

Written by {{ a.author }}

{{ a.meta }}

Ready to ship playables from your game?