Google Ads HTML5 ZIP Specifications & Upload Requirements
Uploading HTML5 creatives to Google Ads (formerly AdWords) requires adherence to some of the strictest standards in the digital advertising industry. Google enforces these rules to protect user safety, prevent slow page loads, and guarantee click tracking compliance.
Google Ads ZIP Checklist
| Specification | Limit / Requirement | Severity |
|---|---|---|
| Maximum ZIP file size | 600 KB | Hard Block (Rejection) |
| Maximum File Count | 40 files total inside ZIP | Hard Block (Rejection) |
| Primary File | index.html at the root folder level | Hard Block (Rejection) |
| clickTag variable | Required (case sensitive spelling) | Hard Block (Rejection) |
| ad.size metadata | Mandatory in HTML head | Hard Block (Rejection) |
| SSL compliance | All assets must load via HTTPS | Hard Block (Rejection) |
| External resources | None (except Google Hosted CDNs) | Hard Block (Rejection) |
| Storage APIs | localStorage / sessionStorage forbidden | Hard Block (Rejection) |
File Size and Count Limits
Google Ads currently accepts uploaded HTML5 ZIP files up to 600 KB. Keeping the initial payload lean can still improve delivery performance, and some publisher bookings may impose stricter limits. Google Ads also restricts the ZIP to no more than 40 files, including HTML, CSS, JavaScript, images, and fonts.
External Scripts & Approved CDNs
Google Ads forbids referencing external resources in your creative to prevent data leakage and latency. All images, layouts, stylesheets, and custom scripts must be packaged locally within the ZIP bundle. The only exception is referencing Google approved CDN links for standard libraries like GreenSock (GSAP), jQuery, or CreateJS. Any other CDN reference (like Cloudflare or cdnjs) will cause immediate upload failure.
Local Storage API Prohibition
Google Ads strictly blocks creatives that access localStorage, sessionStorage, indexedDB, or SQL databases. Because these APIs can be used to set persistent user tracking profiles without consent, they violate Google's tracking policies. Creatives must use temporary, in memory JavaScript variables to store runtime animation states.