CreativeQA.io
APIs for Quality Assurance
settings_ethernet
Ad Tag Tester
settings_system_daydream
HTML5 Validator
photo_camera_back
HTML5 Backup Ads
view_compact
HTML5 Ad Preview
play_circle_outline
VAST Inspector
video_settings
Video Analyzer
flare
HTML5 Optimizer
landscape
Image Cruncher

HTML5 Ad Validator (Zip)

Up to 25x FASTER than manual validation

IAB Initial Load, CPU/RAM usage, click tags, JavaScript errors... and much more!

Go ahead, try
it yourself !
photo_camera
Drop your HTML5 Ad here
Format: ZIP
cloud_upload
Uploading... 0%
landscape
Scanning ad
Your patience will be rewarded...
Desktop
Mobile
language
en-US
devices
Desktop

Help others
saving time too!
get_appDownload Zip
photo_camera_backMake Backup Ads
flareMinify/Crunch Zip
feedbackSend Feedback
toggle_off OFF
Ongoing Monitoring
 
share
Share Link
insights
PDF Report
more_vert
More

Quality Assurance Report

warning
Ad Dimensions
980x400
expand_more
fiber_manual_record
Blocked by AdBlock
No
expand_more
fiber_manual_record
CPU Usage
189 ms
expand_more
fiber_manual_record
Chrome's Heavy Ad Intervention
No
expand_more
warning
Click Tag
No
expand_more
fiber_manual_record
Console Warnings
0
expand_more
fiber_manual_record
Cookies Dropped
0
expand_more
stop
Creative Border
No
expand_more
fiber_manual_record
Creative Rendered
Yes
expand_more
fiber_manual_record
Dialogs & Modals
No
expand_more
stop
External Assets
Yes
expand_more
stop
HTML5 Library
CreateJS
expand_more
fiber_manual_record
Host-initiated Subload
0.0 KB
expand_more
fiber_manual_record
Iframe Count
1
expand_more
fiber_manual_record
Initial Load
373.7 KB
expand_more
fiber_manual_record
JavaScript Errors
0
expand_more
fiber_manual_record
Load Size (Total)
373.7 KB
expand_more
fiber_manual_record
Load Speed
182 ms
expand_more
fiber_manual_record
Local Storage
0
expand_more
warning
Memory Usage
5.8 MB
expand_more
warning
Meta tag ad.size
No
expand_more
fiber_manual_record
Missing Assets
No
expand_more
fiber_manual_record
Network Requests
6
expand_more
fiber_manual_record
Pixels Fired
0
expand_more
fiber_manual_record
Plays Video
No
expand_more
fiber_manual_record
SSL-Compliant
Yes
expand_more
fiber_manual_record
Uses document.write()
No
expand_more
fiber_manual_record
Uses jQuery
No
expand_more
fiber_manual_record
Visual Artifacts
No
expand_more
emoji_peopleIt took coutless hours and lots of coffee to create this scanner. Would you mind sharing this page?
menu_book
API Docs
vpn_key
API Key

New Automated Scanning - scan HTML5 ads from your own platform

<?php
include('CreativeQA-API.php');
$CQA = new CreativeQA();
$array = $CQA->scanZip("/path/to/uploaded_file.zip");
var_dump($array);
JSON Response (API v3.0)
{
    "account_id": "user_YTkQWpF3Zv",
    "blocked_by_adblock": false,
    "click_tag_found": false,
    "console": {
        "errors": [],
        "warnings": []
    },
    "cookies": [],
    "cpu_usage": 189,
    "creative_rendered": true,
    "dialogs": [],
    "dimensions": {
        "height": 400,
        "width": 980
    },
    "dom_content_loaded": 182,
    "file_structure": [{
        "content": [{
            "content": [{
                "bytes": 14568,
                "name": "Device.png",
                "type": "image"
            },
            {
                "bytes": 4881,
                "name": "Skugga.png",
                "type": "image"
            },
            {
                "bytes": 4884,
                "name": "CRMLogga.png",
                "type": "image"
            },
            {
                "bytes": 4850,
                "name": "LimeLogga.png",
                "type": "image"
            }],
            "name": "images",
            "type": "folder"
        },
        {
            "bytes": 346,
            "name": "manifest.json",
            "type": "json"
        },
        {
            "bytes": 322564,
            "name": "980x400.html",
            "type": "html"
        }],
        "name": "main",
        "type": "folder"
    },
    {
        "bytes": 880,
        "name": "ADFBannerProperties.xml",
        "type": "xml"
    }],
    "has_border": false,
    "has_external_assets": true,
    "has_video": false,
    "html5_library": "CreateJS",
    "iframes": 1,
    "job_id": "r38w6-36bdc-35a60",
    "local_storage": [],
    "memory_usage": 6078464,
    "meta": {
        "api_version": "v3.0",
        "cpu": "AMD 16-Core EPYC 7302P",
        "creative_type": "HTML5",
        "device": "Desktop",
        "language": "en-US",
        "ram": "128GB",
        "scan_duration": "3.412403",
        "server_location": "ams",
        "timestamp": 1619105677,
        "ua": "Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/90.0.4430.85 Safari\/537.36"
    },
    "meta_ad_size": false,
    "mobile_friendly": false,
    "network": {
        "load_size": {
            "host_initiated_subload": 0,
            "initial_load": 382638,
            "total": 382638
        },
        "responses": [{
            "bytes": 322564,
            "headers": {
                "content-encoding": "br",
                "content-type": "text\/html",
                "date": "Thu, 22 Apr 2021 15:34:34 GMT",
                "last-modified": "Fri, 06 Mar 2020 10:00:58 GMT"
            },
            "is_pixel": false,
            "method": "GET",
            "resource_type": "document",
            "server_ip": "127.0.0.1",
            "ssl": true,
            "ssl_info": {
                "protocol": "TLS 1.3",
                "validFrom": 1607455037,
                "validTo": 1922815037
            },
            "status": 200,
            "status_text": "",
            "timing": 169,
            "url": "https:\/\/www.creativeqa.io\/tmp\/r38w6-36bdc-35a60.zip\/main\/980x400.html"
        },
        {
            "bytes": 4884,
            "headers": {
                "accept-ranges": "bytes",
                "content-length": "4884",
                "content-type": "image\/png",
                "date": "Thu, 22 Apr 2021 15:34:34 GMT",
                "last-modified": "Fri, 06 Mar 2020 10:00:58 GMT"
            },
            "is_pixel": false,
            "method": "GET",
            "resource_type": "image",
            "server_ip": "127.0.0.1",
            "ssl": true,
            "ssl_info": {
                "protocol": "TLS 1.3",
                "validFrom": 1607455037,
                "validTo": 1922815037
            },
            "status": 200,
            "status_text": "",
            "timing": 322,
            "url": "https:\/\/www.creativeqa.io\/tmp\/r38w6-36bdc-35a60.zip\/main\/images\/CRMLogga.png"
        },
        {
            "bytes": 30891,
            "cors_header": "*",
            "headers": {
                "access-control-allow-origin": "*",
                "cache-control": "public, max-age=604800",
                "content-encoding": "gzip",
                "content-type": "application\/x-javascript",
                "date": "Thu, 22 Apr 2021 15:34:34 GMT",
                "etag": "W\/\"5f844815-78ab\"",
                "last-modified": "Mon, 12 Oct 2020 12:12:05 GMT",
                "p3p": "CP=\"NOI DSP COR NID CURa ADMa DEVa TAIa PSAa PSDa OUR LEG NAV INT\"",
                "server": "nginx",
                "x-cache-status": "MISS"
            },
            "is_pixel": false,
            "method": "GET",
            "resource_type": "script",
            "server_ip": "37.157.2.247",
            "ssl": true,
            "ssl_info": {
                "protocol": "TLS 1.2",
                "validFrom": 1568592000,
                "validTo": 1632139200
            },
            "status": 200,
            "status_text": "",
            "timing": 218,
            "url": "https:\/\/s1.adform.net\/banners\/scripts\/rmb\/Adform.DHTML.js?bv=0.7663488352056913"
        },
        {
            "bytes": 14568,
            "headers": {
                "accept-ranges": "bytes",
                "content-length": "14568",
                "content-type": "image\/png",
                "date": "Thu, 22 Apr 2021 15:34:34 GMT",
                "last-modified": "Fri, 06 Mar 2020 10:00:58 GMT"
            },
            "is_pixel": false,
            "method": "GET",
            "resource_type": "image",
            "server_ip": "127.0.0.1",
            "ssl": true,
            "ssl_info": {
                "protocol": "TLS 1.3",
                "validFrom": 1607455037,
                "validTo": 1922815037
            },
            "status": 200,
            "status_text": "",
            "timing": 337,
            "url": "https:\/\/www.creativeqa.io\/tmp\/r38w6-36bdc-35a60.zip\/main\/images\/Device.png"
        },
        {
            "bytes": 4850,
            "headers": {
                "accept-ranges": "bytes",
                "content-length": "4850",
                "content-type": "image\/png",
                "date": "Thu, 22 Apr 2021 15:34:34 GMT",
                "last-modified": "Fri, 06 Mar 2020 10:00:58 GMT"
            },
            "is_pixel": false,
            "method": "GET",
            "resource_type": "image",
            "server_ip": "127.0.0.1",
            "ssl": true,
            "ssl_info": {
                "protocol": "TLS 1.3",
                "validFrom": 1607455037,
                "validTo": 1922815037
            },
            "status": 200,
            "status_text": "",
            "timing": 346,
            "url": "https:\/\/www.creativeqa.io\/tmp\/r38w6-36bdc-35a60.zip\/main\/images\/LimeLogga.png"
        },
        {
            "bytes": 4881,
            "headers": {
                "accept-ranges": "bytes",
                "content-length": "4881",
                "content-type": "image\/png",
                "date": "Thu, 22 Apr 2021 15:34:34 GMT",
                "last-modified": "Fri, 06 Mar 2020 10:00:58 GMT"
            },
            "is_pixel": false,
            "method": "GET",
            "resource_type": "image",
            "server_ip": "127.0.0.1",
            "ssl": true,
            "ssl_info": {
                "protocol": "TLS 1.3",
                "validFrom": 1607455037,
                "validTo": 1922815037
            },
            "status": 200,
            "status_text": "",
            "timing": 354,
            "url": "https:\/\/www.creativeqa.io\/tmp\/r38w6-36bdc-35a60.zip\/main\/images\/Skugga.png"
        }]
    },
    "score": 86,
    "screenshot": {
        "highres": {
            "bytes": 28880,
            "color": "#daeeec",
            "mime_type": "image\/png",
            "url": "https:\/\/try.cdn.creativeqa.net\/img\/r38w6_r38w6-36bdc-35a60_kpt8mds3.png"
        },
        "thumbnail": {
            "bytes": 1322,
            "color": "#daeeec",
            "mime_type": "image\/jpg",
            "url": "https:\/\/try.cdn.creativeqa.net\/img\/r38w6_r38w6-36bdc-35a60_85dqr9mp.jpg"
        }
    },
    "ssl": {
        "compliant": true,
        "insecure_urls": []
    },
    "tests": {
        "dimensions": {
            "actual": "980x400",
            "data_type": "string",
            "expected": "On acceptable list",
            "message": "This creative has dimensions 980x400, which is not a standard size. Did you expect this ad size? If you want to accept it, add it to the list of allowed ad sizes.",
            "name": "Ad Dimensions",
            "result": "failed",
            "unit": ""
        },
        "adblock": {
            "actual": false,
            "data_type": "boolean",
            "expected": "false",
            "message": "This tag will likely not be blocked by ad blockers.",
            "name": "Blocked by AdBlock",
            "result": "passed",
            "unit": ""
        },
        "cpu": {
            "actual": 189,
            "data_type": "int",
            "expected": "< 500 ms",
            "message": "CPU usage is acceptable at 189 ms.",
            "name": "CPU Usage",
            "result": "passed",
            "unit": "ms"
        },
        "blocked_by_heavy_ad_intervention": {
            "actual": false,
            "data_type": "boolean",
            "expected": "< 15 seconds CPU and < 4 MB load size",
            "message": "This ad is not considered heavy, and probably will pass Chrome's Heavy Ad Intervention policy.",
            "name": "Chrome's Heavy Ad Intervention",
            "result": "passed",
            "unit": ""
        },
        "click_tag_found": {
            "actual": false,
            "data_type": "boolean",
            "expected": "true",
            "message": "The clickTag for click tracking is not found in the main HTML document. See the IAB guidelines.",
            "name": "Click Tag",
            "result": "failed",
            "unit": ""
        },
        "console_warnings": {
            "actual": 0,
            "data_type": "array",
            "expected": "0 warnings",
            "message": "No console warnings have been detected.",
            "name": "Console Warnings",
            "result": "passed",
            "unit": ""
        },
        "cookies": {
            "actual": 0,
            "data_type": "array",
            "expected": "0 cookies",
            "message": "This ad doesn't seem to drop cookies.",
            "name": "Cookies Dropped",
            "result": "passed",
            "unit": ""
        },
        "has_border": {
            "actual": false,
            "data_type": "boolean",
            "expected": "true",
            "message": "This creative doesn't have a high-contrasting border.",
            "name": "Creative Border",
            "result": "ignored",
            "unit": ""
        },
        "creative_rendered": {
            "actual": true,
            "data_type": "boolean",
            "expected": "true",
            "message": "The creative was loaded successfully.",
            "name": "Creative Rendered",
            "result": "passed",
            "unit": ""
        },
        "dialogs": {
            "actual": 0,
            "data_type": "boolean",
            "expected": "0 dialogs",
            "message": "No interruptive dialogs have been detected.",
            "name": "Dialogs & Modals",
            "result": "passed",
            "unit": ""
        },
        "has_external_assets": {
            "actual": true,
            "data_type": "boolean",
            "expected": "false",
            "message": "This creative loads assets from external domains.",
            "name": "External Assets",
            "result": "ignored",
            "unit": ""
        },
        "html5_library": {
            "actual": "CreateJS",
            "data_type": "string",
            "expected": "Any on list",
            "message": "This creative uses a library from CreateJS.",
            "name": "HTML5 Library",
            "result": "ignored",
            "unit": ""
        },
        "host_initiated_subload": {
            "actual": 0,
            "data_type": "int",
            "expected": "< 1048576 bytes",
            "message": "The host-initiated subload is acceptable at 0.00 KB.",
            "name": "Host-initiated Subload",
            "result": "passed",
            "unit": "bytes"
        },
        "iframe_count": {
            "actual": 1,
            "data_type": "int",
            "expected": "<= 3 iframes",
            "message": "This creative uses 1 iframes.",
            "name": "Iframe Count",
            "result": "passed",
            "unit": ""
        },
        "initial_load": {
            "actual": 382638,
            "data_type": "int",
            "expected": "< 1048576 bytes",
            "message": "The initial load size is acceptable at 373.7 KB.",
            "name": "Initial Load",
            "result": "passed",
            "unit": "bytes"
        },
        "js_errors": {
            "actual": 0,
            "data_type": "array",
            "expected": "0 errors",
            "message": "No JavaScript errors have been detected.",
            "name": "JavaScript Errors",
            "result": "passed",
            "unit": ""
        },
        "load_size": {
            "actual": 382638,
            "data_type": "int",
            "expected": "< 1048576 bytes",
            "message": "The load size is acceptable at 373.7 KB.",
            "name": "Load Size (Total)",
            "result": "passed",
            "unit": "bytes"
        },
        "dom_content_loaded": {
            "actual": 182,
            "data_type": "int",
            "expected": "< 1000 ms",
            "message": "The DOMContentLoaded event fired after 182 ms.",
            "name": "Load Speed",
            "result": "passed",
            "unit": "ms"
        },
        "local_storage": {
            "actual": 0,
            "data_type": "int",
            "expected": "0 localStorage objects",
            "message": "This ad doesn't seem to use HTML5 localStorage.",
            "name": "Local Storage",
            "result": "passed",
            "unit": ""
        },
        "memory": {
            "actual": 6078464,
            "data_type": "int",
            "expected": "< 5242880 bytes",
            "message": "This creative uses 5.8 MB of memory. That's quite a lot.",
            "name": "Memory Usage",
            "result": "failed",
            "unit": "bytes"
        },
        "meta_ad_size": {
            "actual": false,
            "data_type": "boolean",
            "expected": "true",
            "message": "The meta tag 'ad.size' is not found in the HEAD. See the IAB guidelines.",
            "name": "Meta tag ad.size",
            "result": "failed",
            "unit": ""
        },
        "missing_assets": {
            "actual": 0,
            "data_type": "boolean",
            "expected": "No 40x HTTP status codes",
            "message": "All HTTP requests were valid.",
            "name": "Missing Assets",
            "result": "passed",
            "unit": ""
        },
        "network_requests": {
            "actual": 6,
            "data_type": "int",
            "expected": "<= 15 requests",
            "message": "A total of 6 HTTP requests were made (including pixels).",
            "name": "Network Requests",
            "result": "passed",
            "unit": ""
        },
        "pixels_fired": {
            "actual": 0,
            "data_type": "int",
            "expected": "< 5 pixels",
            "message": "This creative fires 0 pixels.",
            "name": "Pixels Fired",
            "result": "passed",
            "unit": ""
        },
        "has_video": {
            "actual": false,
            "data_type": "boolean",
            "expected": "true or false",
            "message": "This ad doesn't seem to play videos.",
            "name": "Plays Video",
            "result": "passed",
            "unit": ""
        },
        "ssl_compliant": {
            "actual": true,
            "data_type": "boolean",
            "expected": "true",
            "message": "All requests are loaded over https, including pixels and images.",
            "name": "SSL-Compliant",
            "result": "passed",
            "unit": ""
        },
        "document_write": {
            "actual": false,
            "data_type": "boolean",
            "expected": "false",
            "message": "This creative doesn't use document.write().",
            "name": "Uses document.write()",
            "result": "passed",
            "unit": ""
        },
        "uses_jquery": {
            "actual": false,
            "data_type": "boolean",
            "expected": "false",
            "message": "This creative doesn't use the jQuery library.",
            "name": "Uses jQuery",
            "result": "passed",
            "unit": ""
        },
        "visual_artifacts": {
            "actual": false,
            "data_type": "boolean",
            "expected": "false",
            "message": "No dimension discrepancies have been detected.",
            "name": "Visual Artifacts",
            "result": "passed",
            "unit": ""
        }
    },
    "uses_document_write": false,
    "uses_jquery": false,
    "visual_artifacts": false,
    "_tmp": {
        "timers": {
            "10_sort_json_by_key": "3.416655",
            "11_get_data_for_db": "3.416670"
        }
    }
}

Automate Everything
Integrate the APIs in your platform. Automatically determine CPU/RAM usage, initial load, JS errors and much more!
Scale to thousands
Loop through thousands of ads and perform a quality assurance check for each of them in seconds. Great time saver!
Prevent broken ads
Never launch or sell a broken ad anymore. Use the API to automatically detect issues before ads go live.
file_presentExport to Excel
more_vert
More

File Structure 7

folder_openmain
folder_openimages
crop_originalDevice.png
14.23 KB
 
 
Image
crop_originalSkugga.png
4.77 KB
 
 
Image
crop_originalCRMLogga.png
4.77 KB
 
 
Image
crop_originalLimeLogga.png
4.74 KB
 
 
Image
wysiwygmanifest.json
0.34 KB
 
 
JSON
laptop_chromebook980x400.html
315.00 KB
 
 
HTML
wysiwygADFBannerProperties.xml
0.86 KB
 
 
Xml

Console Log

Message Line
content_paste
No data to display

Network Requests 6

Timing Resource URL Status Protocol File Size Enc Type Remote IP
0.169
lockhttps://www.creativeqa.io/tmp/r38w6-36bdc-35a60.zip/main/980x400.html
200 315.0 KB br Document 127.0.0.1
expand_more
0.322
lockhttps://www.creativeqa.io/tmp/r38w6-36bdc-35a60.zip/main/images/CRMLogga.png
200 4.8 KB - Image 127.0.0.1
expand_more
0.218
lockhttps://s1.adform.net/banners/scripts/rmb/Adform.DHTML.js?bv=0.7663488352056913
200 30.2 KB gzip Script 37.157.2.247
expand_more
0.337
lockhttps://www.creativeqa.io/tmp/r38w6-36bdc-35a60.zip/main/images/Device.png
200 14.2 KB - Image 127.0.0.1
expand_more
0.346
lockhttps://www.creativeqa.io/tmp/r38w6-36bdc-35a60.zip/main/images/LimeLogga.png
200 4.7 KB - Image 127.0.0.1
expand_more
0.354
lockhttps://www.creativeqa.io/tmp/r38w6-36bdc-35a60.zip/main/images/Skugga.png
200 4.8 KB - Image 127.0.0.1
expand_more

Share with anyone

Metadata

Scan UI/APIUI on CreativeQA.io
Server LocationAmsterdam (NLD)
CPUAMD 16-Core EPYC 7302P
Memory128GB
Unix Timestamp1619105677 - 55 days ago
Scan Duration3.41 seconds
Creative TypeHTML5
User-AgentMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36
DeviceDesktop
Languageen-US
API Versionv3.0
Developers

Seamless integration with any platform

Use the JSON API to automatically scan creatives via your own platform.

MORE FREE TOOLS FROM CREATIVEQA.IO

Made with favorite by Ad Ops.

Ad Tag Validator

Check third-party ad tags for load speed, 3p cookies, memory usage, SSL-compatibility, mobile friendliness and much more! A great tool for publishers.

VAST Inspector

30 Quality Assurance tests for VAST Video Ads. Check the video codecs, frame rate, video size, MOOV atom position, download speed... an indispensable tool!

HTML5 Ad Optimizer

Image compression and JS/CSS minification to speed up ad loading. Download your ZIP with all assets optimized and the file structure maintained.

HTML5 Ad Preview Tool

Stack all HTML5 ads on a single page for preview and evaluation. Forget email attachments. Upload your HTML5 Zip ads and send the whole ad set in one link.

HTML5 Backup Ads

Still taking screenshots manually? Simply upload your HTML5 Zip and choose the best image from 6 different shots. How cool is that!

Image Cruncher

Lossless compression and optimization to speed up ad loading. Shave off bytes that don't matter. Reducing file size means faster ads.