Meta (Facebook) playable specs at a glance
| File format | A single .html / .htm file with all assets inlined as data URIs, or a .zip with index.html at the root |
|---|---|
| Max file size | 5 MB (the HTML file, or the whole ZIP)Meta's older developer docs still say 2 MB for a single HTML file. Staying under 2 MB is the safe target. |
| Max files in a ZIP | 100 |
| MRAID | Not allowed. Must work without mraid.js or similar frameworks. |
| CTA call | FbPlayableAd.onCTAClick();“Strongly recommended” in the spec, but uploads without it fail with “File missing CTA function call”. |
| External requests | None. No XMLHttpRequest, no loading assets from the network. |
| Redirects | No JavaScript redirects |
| Orientation | Portrait, responsive across screen sizes |
| Campaign | App promotion objective only (including Advantage+ app campaigns), with a lead-in video |
| Placements | Facebook and Instagram Feed, Stories and Reels; Meta Audience Network |
| Testing | Playable Preview Tool and the preview in Ads Manager |
Required code
Meta adds the FbPlayableAd object itself, so there's no script tag to include. Guard the call so the file still works when you open it in a browser:
installButton.addEventListener("click", function () {
if (typeof FbPlayableAd !== "undefined") {
FbPlayableAd.onCTAClick();
}
});
Meta sends the user to the right store page for the app in your campaign; you don't pass a URL. There are no required meta tags and no lifecycle events. Remove mraid.js, any mraid.open() call, analytics, web fonts and anything else that touches the network.
Single HTML file or ZIP?
- Single HTML. Every image, sound, font and script is inlined as base64 data URIs. It's the format most playable tools export, and the one Meta has supported longest.
- ZIP.
index.htmlat the root, with other files in subfolders referenced by relative paths. At most 100 files and 5 MB in total. Meta supports ZIPs on every placement, iOS and Android.
Base64 makes images and audio about a third bigger. If a single-file build is close to the limit, the ZIP version of the same playable is usually smaller.
How Meta playables run
A Meta playable is a two-part ad: a lead-in video plays in the feed, Stories or Reels with a prompt to try the game, and a tap opens the playable full screen. The install button in the playable calls onCTAClick(). You upload the playable in Ads Manager under the ad's destination (Playable source → Upload playable asset), or through the Marketing API.
Playables only work with the App promotion objective, and the app must be registered to the ad account. Any other objective fails with “Selected objective not supported for playable ads”.
How to test a Meta playable
- Open Meta's Playable Preview Tool (log in with a Facebook account). It checks the spec, lists errors, confirms the CTA call fires and sends a preview to your phone.
- Play it through on a real phone. Meta doesn't support testing on an iPad.
- Upload in Ads Manager and check the preview there before publishing.
Upload errors and what they mean
These are the errors listed in Meta's playable troubleshooting article:
- File size too large: the HTML is over 5 MB.
- Playable asset has too many files: the ZIP holds more than 100 files.
- File missing CTA function call:
FbPlayableAd.onCTAClick()isn't in the code. - This HTML file cannot be uploaded: it failed Meta's anti-virus scan, often because of obfuscated or minified third-party code.
- Selected objective not supported for playable ads: the campaign isn't App promotion.
- Selected placement not supported for playable ads: a placement other than those above is selected.
- App not selected: the ad account has no permission for the app.
Builds also get rejected for depending on mraid.js, loading anything over the network, redirecting by themselves or being built landscape-only.
Common questions
What is the file size limit for Facebook playable ads?
5 MB, for a single HTML file or for the whole ZIP. Meta's older developer documentation says 2 MB for a single HTML file, so staying under 2 MB avoids any doubt.
Do Facebook playable ads use MRAID?
No. Meta requires the playable to work without mraid.js. The install button calls FbPlayableAd.onCTAClick() instead.
What is FbPlayableAd.onCTAClick()?
The function Meta injects into the playable to open the app's store page. Call it when the user taps the install button. Uploads without it fail with 'File missing CTA function call'.
Can a Meta playable be a ZIP file?
Yes. A ZIP with index.html at the root and no more than 100 files, up to 5 MB in total, works on all placements. A single HTML file with everything inlined also works.
Can Facebook playable ads be landscape?
Meta's spec says playables must be built in portrait orientation and be responsive across screen sizes.
Which campaigns support Facebook playable ads?
Only the App promotion objective, including Advantage+ app campaigns. The playable runs after a lead-in video in Facebook and Instagram Feed, Stories and Reels, and on Meta Audience Network.
How do I test a Facebook playable ad?
Use Meta's Playable Preview Tool at developers.facebook.com/tools/playable-preview, which checks the spec and the CTA call and sends a preview to your phone, then check the preview in Ads Manager.
Sources
Networks change their specs without notice. These are the pages this summary was checked against. If anything here disagrees with them, follow the network.
- Meta Business Help Center: Specifications for playable ads assets
- Meta Business Help Center: Upload a playable source file
- Meta Business Help Center: Troubleshoot playable assets uploads
- Meta Business Help Center: About playable ads
- Meta for Developers: Playable ads for mobile apps (older 2 MB figure)
- Meta Playable Preview Tool