100% Private & Browser Based

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.