The one-glance table
Max bundle weight, how weight is measured, animation cap, and whether the backup image goes inside the ZIP. Read the per-platform notes below before relying on any single cell — several of these have gotchas that a table can't hold.
| Platform | Max bundle | Weight measured | Animation | Backup in ZIP? | ad.size meta |
|---|---|---|---|---|---|
| Google Ad Manager | 1 MB (bundle and extracted total) | ZIP and extracted | Not published* | Allowed | Not required |
| Campaign Manager 360 | 9.5 MB† | Asset size | 30 s | No — uploaded separately | Required |
| Adform (desktop standard) | 300 KB total | Unzipped | 30 s (must stop) | — | manifest.json instead |
| Xandr / Monetize | Not published‡ | — | Not published‡ | — | — |
* GAM publishes no file-count, request, CPU, or animation limit for HTML5 creatives. † Google's two docs conflict (9.5 vs 10 MB); trafficking to the stricter 9.5 MB is the safe choice. ‡ Xandr states there are no specific banner k-weight or animation requirements.
Google Ad Manager (GAM)
- Max size: 1 MB — and it applies to both the ZIP and the total extracted size, so a bundle that compresses under 1 MB but unpacks larger still fails.
- Dimensions: fixed only. No fluid/responsive HTML5 creatives.
- SSL: required. Every subresource must load over HTTPS.
-
Click tag: at least one standard
clickTag, and it must be unminified so GAM can rewrite the exit. - Not published by GAM: file-count, request, CPU, and animation limits. Any figure you see for those (including a 15 s animation or 100-file cap) is an IAB New Ad Portfolio fallback, not a GAM rule — treat it as advisory.
Sources: bundle / extracted size, SSL, dimensions, click tag, macro limitations.
Campaign Manager 360 (CM360 / DCM)
- Max size: Google's own pages say 9.5 MB in one place and 10 MB in another. Traffic to 9.5 MB and you are safe against both.
- Files: max 100 per bundle, no nested ZIPs.
-
ad.size meta: required —
<meta name="ad.size" content="width=300,height=250">in the primary HTML. - Backup image: must not be inside the ZIP. It is uploaded separately; a backup file in the bundle is a rejection.
-
Storage: no
localStorage/sessionStorage. - Polite load: the initial polite-load image should be under 40 KB.
- Click tag: readable (unminified) click tag required.
Sources: file rules, backup, storage, 9.5 MB figure, polite load.
Adform
- Max size: 300 KB for desktop standard sizes (300×250, 970×250, 728×90, 300×600, 160×600) — and weight is measured unzipped, which trips up teams used to compressed budgets.
-
Structure:
manifest.jsonplus the main HTML at the ZIP root, with declared dimensions and click tags in the manifest. -
Library: the Adform DHTML library must be referenced in
<head>. -
Click tag: case-sensitive — Adform expects
clickTAG. - Animation: max 30 s and it must stop (no infinite loops).
- Mobile: initial load 5 KB, max 200 KB.
Sources: HTML5 banner file requirements, display ad guidelines.
Xandr / Microsoft Monetize
- Weight / animation: Xandr explicitly publishes no banner k-weight, request, or animation limits — its docs state there are no specific technical requirements for banner creatives.
-
Structure (its actual rules): a single ZIP,
index.htmlat the root, a complete HTML document, a requiredclickTag, and secure (HTTPS) content only. - Practical baseline: because Xandr sets no numbers, a sensible advisory is the IAB New Ad Portfolio 300×250 group — 150 KB initial (gzipped), 300 KB subload, 10 initial requests, 15 s animation. That is guidance, not a Xandr requirement.
Sources: Xandr HTML5 guidelines, IAB New Ad Portfolio.
Stop guessing which limit applies. Upload your ZIP and CreativeValidator checks it against the exact platform preset — cited, and with a Dynamic vs Static click verdict.
Validate an HTML5 bundle →Why these numbers move
Platform docs change quietly, and two pages from the same vendor can disagree (CM360's 9.5 vs 10 MB is the classic). CreativeValidator watches these source pages for drift, and every limit its scanner enforces links back to the citation above — so when a spec changes, the verdict changes with it rather than silently going stale.