Google Ads vs CM360 vs DV360: HTML5 Creative Spec Differences
Google Ads, Campaign Manager 360 and Display & Video 360 are three separate products with three separate rule sets. The biggest difference is weight: Google Ads caps the ZIP at 600 KB, CM360 at 9.5 MB, and DV360 sets no ZIP limit but caps what the browser downloads at 5 MB. Treating CM360 and DV360 as one environment is the most common reason a creative that passed one check fails the next.
After the comparison: the storage rule that trips up interactive builds most often, the reasons DV360 rejects a creative and the fix for each, and what other DSPs and the IAB expect.
Side by side comparison
| Rule | Google Ads | CM360 | DV360 |
|---|---|---|---|
| Weight | ZIP 600 KB or smaller | ZIP up to 9.5 MB (10 MB on one help page) | No ZIP limit, 5 MB downloaded per impression |
| Files in the ZIP | 40 | 100 | 100 |
| File types | HTML, CSS, JS, GIF, PNG, JPG, JPEG, SVG | Adds HTM, JSON, XML and fonts (EOT, OTF, TTF, WOFF, WOFF2) | Adds HTM and fonts (DFONT, EOT, OTF, TTE, TTF, WOFF, WOFF2) |
| External references | Only Google Fonts and Google hosted CreateJS, GreenSock and jQuery | No published allowlist | No published allowlist, video must be hosted externally |
| ad.size meta tag | Required in the head | Optional, recommended | Must match the ad's images |
| Exits | One exit. No ExitApi, no Tap Area | At least one click tag, several allowed | Click tags required, or Studio exits |
| Local and session storage | Not documented by Google; fails AdCheckLab's Google Ads mode to stay safe | Not accepted | Not accepted |
| Animation | 30 seconds, GIFs slower than 5 FPS | No published cap | 30 seconds |
| Backup image | No published requirement | Optional, uploaded separately, polite load image under 40 KB | No published requirement |
| Other | File names with letters, numbers, periods, hyphens and underscores only. HTML5 needs an eligible account | No ZIP inside the ZIP, no percent sign in file names | ZIP name under 50 characters, at most 25 cookies and 100 HTTP calls |
Sources: Google Ads 1722096 and 6335679, CM360 4558694 and 3145300, DV360 10261241 and 7128959.
What that means for one build
If the same creative runs on all three, build to the strictest rules, which are almost always Google Ads: under 600 KB and 40 files, only the eight Google Ads file types, no external references beyond the allowlist, an ad.size tag, one var clickTag exit and no storage. That ZIP also meets CM360 and DV360. Three things do not carry over:
- Multiple exits. A CM360 build with
clickTag2for a second product fails Google Ads, which reports multiple exits. Keep a separate single exit version for Google Ads. - Fonts. A WOFF file is fine for CM360 and DV360 but an unsupported file type on Google Ads. Use Google Fonts in the shared build.
- Studio exits. A Studio or Google Web Designer creative for DV360 exits through
Enabler.exit, which Google Ads does not accept. The differences between the three exit types are in the clickTag guide.
How weight is measured differs too
Google Ads and CM360 measure the ZIP you upload. DV360 measures the files a browser actually downloads when the ad serves, so the AdCheckLab validator adds up the unpacked size of every file for DV360 instead of reading the ZIP size.
Local and session storage
Campaign Manager 360 and Display & Video 360 both refuse HTML5 assets that use localStorage or sessionStorage. If a banner remembers which slide someone saw, keeps a game score, or caps how often it shows, that state has to live in memory or in the ad server instead.
- Campaign Manager 360: "To help protect user privacy, Campaign Manager 360 does not accept HTML5 assets that use local storage or session storage." Its HTML5 preparation guide explains that stored data can be used to capture personally identifiable information, track activity across sessions, or send data to third parties against Google Marketing Platform terms.
- Display & Video 360: "Display & Video 360 doesn't accept HTML5 assets that use local storage or session storage," according to its HTML5 creatives page.
- Google Ads: its upload specifications do not mention storage, but the AdCheckLab Google Ads mode treats any storage API as an error, so a single build stays safe on all three.
The validator scans every HTML and JavaScript file in the ZIP, minified libraries included, for localStorage, sessionStorage, indexedDB and openDatabase. In Google Ads mode any match is the error Disallowed Storage API. In CM360 and DV360 mode, localStorage or sessionStorage is the error Local or Session Storage Not Accepted; indexedDB and openDatabase there, and every match in Generic mode, show as the warning Storage API Usage. A match inside a third party library counts too, so check what your animation framework calls.
Storage also breaks previews. Ad servers and the AdCheckLab preview run a creative in a sandboxed iframe without same origin access, where a browser can refuse storage outright and throw an error; if the startup code does not catch it, the animation never starts. That is one of the causes in why a banner preview is blank. What to use instead:
- State during one view: plain JavaScript variables or objects. They last as long as the ad is on screen, which is all a banner needs.
- Frequency caps and targeting: set them in the ad server. CM360 recommends its own targeting and frequency caps as the replacement for storage based logic.
- Sequential messaging: build separate creatives and rotate them with the ad server's sequencing, rather than having one creative remember what it showed.
- Third party code: if a library touches storage for a feature you do not use, choose a build without it or remove the call.
DV360 rejection reasons and fixes
Display & Video 360 checks HTML5 creatives twice: once at upload, where a technical problem stops the file outright, and again at creative review, where every creative is tested for insecure calls and policy issues. Beyond the limits in the comparison table, DV360 wants the landing page to open in a new tab or window, allows no autoplaying audio (video may autoplay only when muted), and no pop ups or surveys. The reasons below come from DV360's Guidelines for HTML5 display creatives, HTML5 creatives, Troubleshoot creative uploads and About secure creatives, each paired with the fix.
Non secure http calls
If the creative loads an image or file from a link starting with http:, DV360 will not accept the upload, and the review repeats the test on everything the ad calls at serve time. Replace every asset and tracker URL with https:. Only the landing page is exempt. The HTTPS section of the QC checklist shows where these links usually hide.
Incorrect click tags
DV360 wants var clickTag declared in the <head>, spelled with the correct casing (clickTag, not Clicktag), and attached to the clickable element in the body with window.open(window.clickTag). A creative with no exit at all fails with "Creative has no clickthrough". Studio creatives and Google Web Designer files built in the Display & Video 360 environment exit through Enabler.exit instead, which the AdCheckLab DV360 mode accepts. See the Google Web Designer exit guide.
Unsupported file types
Anything outside the DV360 list in the table above has to go, including database files and video. DV360 allows video only when it is hosted outside the ZIP. Fonts are accepted here, unlike on Google Ads.
Dimension mismatch
The width and height in <meta name="ad.size" content="width=300,height=250"> must match the ad's images and canvas. The validator reports Ad Size Metadata Mismatch with both sizes.
File name too long, or a ZIP inside the ZIP
Rename the archive to fewer than 50 characters including .zip, and remove nested ZIP files. Export tools that name files after the full campaign and size string are the usual cause.
Metadata in the Google Web Designer HTML is invalid
The creative was built with an outdated version of Google Web Designer. Open it in the latest version and publish again.
Served weight over 5 MB
DV360 counts what the browser downloads, not the ZIP, so what matters is the unpacked size of every file the ad loads. Compress the images and remove unused assets. The Banner Compressor handles the PNG and JPEG part.
Local or session storage
DV360 does not accept HTML5 assets that use either API. Keep state in plain JavaScript variables, as described in the storage section.
To preaudit, select DV360 in the HTML5 Banner Validator before you upload. It adds up the uncompressed size of every file against the 5 MB cap, checks the DV360 file type list, fails every http:// reference and any local or session storage, applies the 30 second animation cap to GIFs, and accepts either a clickTag or a Studio exit.
Other DSPs, the IAB and the rules every DSP shares
Programmatic creatives pass through more hands than a direct booking: an ad server such as CM360, a DSP such as DV360, The Trade Desk or Xandr, and the publisher at the end of the chain. Each can refuse a creative. The DSP audits at upload and during review, the ad server checks the package it hosts, and a publisher may reject a creative that was accepted everywhere else.
- The Trade Desk, Xandr and other DSPs set their package limits per DSP and per deal. Use the current spec sheet from the trading desk, and do not infer a cap from the IAB dimensions.
- IAB guidance for publishers suggests 50 to 300 KB of initial load for the standard sizes, measured after gzip, no more than ten file requests in the initial load, and animation no longer than 15 seconds. The per size weights are in the banner ad sizes chart.
Seven rules hold on every DSP, so a build that follows them and the limits of the strictest platform it runs on travels well:
- index.html at the root. The primary HTML file sits at the top level of the ZIP, not inside a subfolder. See the primary asset fix.
- HTTPS everywhere. Every asset, font, script and tracking pixel loads over
https://. - A click tag the ad server can read.
var clickTagin the head, unminified, spelled exactly that way. Studio creatives useEnabler.exitinstead. - A size declaration that matches. The ad.size tag, the canvas and the images agree.
- Animation that ends. DV360 caps animation at 30 seconds and the IAB recommends 15. There is no documented loop count rule: the total running time is what counts.
- No storage, no pop ups, no autoplaying sound.
- Polite loading for heavy creatives. Load the minimum before the page's load event and the rest after it. The IAB defines subload as everything requested after that event, and allows it twice the initial weight.
Check all three without uploading
The HTML5 Banner Validator has a separate mode for each platform. Drop the ZIP once and switch between Google Ads, CM360 and DV360 to see which rules it breaks where; the Generic mode flags the portable basics for DSPs without a dedicated mode. For each platform in depth, read the Google Ads HTML5 requirements and the CM360 creative specs, and run the whole campaign through the HTML5 banner QC checklist before launch.