# Ad blockers

Collective Audience™ serves both editorial content (quizzes, polls, games created by your newsroom) and sponsored content. Ad blockers should only block the sponsored part. This page explains how we separate the two, which domains are involved, and what to check on your side.

## How it works

When a reader uses an ad blocker, the SDK still loads and still fills your slots, but **only with your own editorial content**:


1. The SDK first calls our main delivery server (`s.collectiveaudience.co`). This server can return sponsored or editorial content.
2. If that call is blocked, the SDK automatically retries on our editorial-only server (`contents.collectiveaudience.co`).
3. The editorial server never returns sponsored content. Your quizzes, polls and other creatives are displayed as usual.

There is nothing to configure on the creative. The fallback is built into the SDK.

## Domains

| Domain | Role | Expected status with an ad blocker |
|--------|------|------------------------------------|
| `widget.collectiveaudience.co` | SDK and widget | Allowed                            |
| `contents.collectiveaudience.co` | Editorial-only delivery (fallback) | Allowed                            |
| `media.collectiveaudience.co` | Images and assets | Allowed                            |
| `data.collectiveaudience.co` | Votes, forms, results | Allowed                            |
| `engage.collectiveaudience.co` | Hosted landing pages | Allowed                            |
| `s.collectiveaudience.co` | Main delivery (sponsored and editorial) | Blocked                            |
| `hb.collectiveaudience.co` | Header bidding (Prebid) | Blocked                            |
| `ads-tracking.collectiveaudience.co` | Sponsored content tracking | Blocked                            |

This split is the one agreed with the EasyList maintainers in August 2025. EasyList is the list used by Adblock Plus, AdBlock and, by default, uBlock Origin.

## Checklist for publishers

* **Load the SDK from** `**widget.collectiveaudience.co**`**.** The legacy domain `beop.io` is fully blocked by EasyList, so an integration that still uses `https://widget.beop.io/sdk.js` shows nothing at all to readers with an ad blocker. Use the snippet from [JavaScript SDK](/doc/javascript-sdk-z7G56MMTLi).
* Remove any `preconnect` or `dns-prefetch` hints that still point to `*.beop.io`.
* Keep the slot markup as documented (`<div class="BeOpWidget" data-name="...">`). The SDK takes care of the rest.

## Known limits

* Some lists other than EasyList (for example AdGuard Tracking Protection, used by AdGuard and available in uBlock Origin) also block our statistics domain. The content still displays, but impressions and interactions from these readers may be under-counted in your reports.
* Our video player domain may be blocked by some lists. Video bricks can be affected.
* Collective Audience™ is not part of the Acceptable Ads program at the moment. This program only applies to Adblock Plus and AdBlock, and only to sponsored content. It does not change anything for editorial content.

## If a reader still sees an empty slot


1. Check that the page loads `https://widget.collectiveaudience.co/sdk.js` (and not a `beop.io` URL).
2. [Run the Diagnostics script ](/doc/running-sdk-diagnostics-cgdTsyUFmz) with the ad blocker turned off, then on.
3. As a temporary workaround, share the hosted landing page of the creative ([Link (Hosted)](/doc/creative-connect-Y36y1vnEgU)). It is served from `engage.collectiveaudience.co` and is not blocked.
4. Contact your account team with the page URL, the ad blocker name and version, and the lists enabled.