Troubleshooting ad delivery

Find the failing step, fix it and verify the result on your website.

1. Start here: Open the page with the debugger

When an ad slot appears blank or shows unexpected content, use this structured diagnostic guide to isolate the cause in minutes.

Open the exact publisher page in your browser and append ?adserve_debug=1 to the URL. The on-page debugger outlines every ad slot, displaying its delivery status code, active campaign ID, and creative dimensions.

Troubleshoot in this exact order: Campaign State → Creative Publication & Size → Website Verification → Ad Tag Integration.

Example debug URL

https://example.com/page?adserve_debug=1

2. Campaign is inactive, outside dates, or ID invalid

Confirm that the Campaign status is Active. Campaigns in Draft, Paused, or Completed status serve nothing.

Verify Start and End dates against the current date. Check Dayparting: time-of-day schedules are evaluated in the campaign timezone, not the visitor local time.

Check data-campaign: If using direct campaign embeds, ensure the data-campaign attribute matches the exact cmp_ public ID.

3. Creative not published or dimension mismatch

Creating a creative does not automatically attach it. Confirm that the creative is attached under the campaign's Creatives tab.

Confirm the creative is Published. Draft revisions are never served to live placements.

Compare placement dimensions with published creative sizes: A 728x90 slot cannot display a 300x250 creative. Open Creatives, add the required size variant, preview it, and click Publish Revision.

4. Missing data-height or distorted layout

Always set data-height explicitly on the house-ad-slot container to match the intended slot height in pixels (e.g. data-height="250").

Without data-height, available page space or publisher CSS bounds determine slot size, causing layout shifts or unintended format selection.

Slot with explicit dimensions

<div class="house-ad-slot" data-placement="plc_..." data-width="300" data-height="250"></div>

5. Domain unverified or placement inactive

If the debugger reports DOMAIN_UNVERIFIED or API returns INVALID_DELIVERY: The request hostname must match the website Primary Domain or be listed under Authorized Domains.

Confirm that the website has completed domain verification and that the placement status is Active.

6. Budget exhausted, frequency capped, or geo-excluded

Budget Exhausted: The campaign has hit its lifetime ceiling or daily spend limit. Increase the budget cap or wait for the midnight reset.

Frequency Capped: The browser has reached the maximum allowed impressions within the configured time window. Test in an Incognito window.

Targeting Excluded: Current visitor device or IP country is excluded by campaign rules.

7. Script blocked, duplicate loaders, or CSP errors

Confirm ad.js loads only once per page. Duplicate loader tags with conflicting configurations cause delivery errors.

Check for ad blockers: Content filters (uBlock, Brave Shields) block ad requests.

Check Content Security Policy: If your server uses CSP, allow api.adservekit.com in script-src, frame-src, and connect-src directives.

Documentation feedback

AdServeKit evolves over time. If you notice information that appears outdated or inconsistent with the current dashboard, please report it so we can update the guide.