Skip to content

BTA Feed

BTA Feed is a ready-to-use feed designed to display below an article. It consists of a set of configurable widgets, typically including Yaleo placement widgets. Ad serving uses Prebid.js with support for multiple ad providers.

Located under Yaleo / BTA Feed: https://app.adconsole.com/yaleo/bta-feed/v2

The publisher adds the BTA Feed script and initialization directly in their page markup.

Include the script tag on the page:

<script async src="https://cdn.adnz.co/bta-feed/index.js"></script>

Initialize the feed:

window.adnzBtaFeed = window.adnzBtaFeed || {};
window.adnzBtaFeed.queue = window.adnzBtaFeed.queue || [];
window.adnzBtaFeed.queue.push(() => {
window.adnzBtaFeed.start({
btaFeedId: '00000000-0000-0000-0000-000000000000',
element: document.getElementById('target-element-id'),
});
});

The integration script is deployed as a Raw JS entry in Headertag.

  1. Assign the BTA Integration Script (Prebid) script from AdConsole / Raw Scripts to the tag. The script defines the setupBtaFeed function:
window.setupBtaFeed = function setupBtaFeed(elementId, btaFeedId, options = {}, isPageReady = () => true) {
function onload() {
const checkElement = setInterval(
() => {
const element = document.getElementById(elementId);
if (element && isPageReady()) {
if (element.dataset.hydrated === '0') {
return;
}
if (window.htag.api) {
window.htag.api('1').clearEffects({ tags: [`waiting-for-element:${elementId}`] });
}
element.dataset.adnzShown = '1';
element.dataset.adnzLoaded = '1';
window.adnzBtaFeed.start({ ...options, element, btaFeedId });
}
},
250,
);
if (window.htag.api) {
window.htag.api('1').saveEffect(
() => {
clearInterval(checkElement);
},
{ tags: [`ad:${elementId}`, `waiting-for-element:${elementId}`] },
);
}
}
if (!window.adnzBtaFeed?.start) {
const script = document.createElement('script');
script.src = 'https://cdn.adnz.co/bta-feed/index.js';
script.async = true;
script.defer = true;
script.onload = onload;
document.head.appendChild(script);
} else {
onload();
}
};
  1. Add a new Raw JS script that calls setupBtaFeed with the target element ID and BTA Feed ID:
setupBtaFeed('target-element-id', '00000000-0000-0000-0000-000000000000');

For publishers with complex or non-standard integration requirements, per-publisher scripts are maintained in js/scripts/bta-feed/. Each script wraps the standard setupBtaFeed call and extends it with publisher-specific logic — for example, resolving the target element via XPath when a stable DOM ID is unavailable, or deferring initialization until a custom lifecycle hook fires.

window.adnzBtaFeed.start() accepts the following options:

Param Type Default Description
btaFeedId string Required. The BTA Feed ID.
btaFeedData BtaFeedResponse Provide the BTA Feed data directly, bypassing the API fetch. Useful for preview (e.g. console).
element HTMLElement Target element. If not provided, created next to the script tag.
debug boolean Enables app-specific debug logging and test mode for ads, and changes Shadow DOM mode to open.
forceMobile boolean Forces mobile configuration.
forceEnabled boolean Forces the feed to be enabled regardless of backend configuration.
forceDarkTheme boolean Forces dark theme regardless of OS preference or publisher site detection. Applies dark-theme to the feed container and yaleo-dark-theme to Yaleo placement content.
isDarkThemeSupported boolean Enables dark theme detection via the prefers-color-scheme media query. Does not affect publisher-specific custom detector rules. When omitted, enabled only on known dark-theme publisher sites.
iframeMode boolean Indicates that the root element is an iframe child, overriding the default auto-detection. Hides the parent iFrame and renders the BTA Feed container directly below it.
mockRecommendations boolean Uses mock data instead of real recommendations.
newItemMarkup boolean false Uses updated HTML markup for articles and ads.
endlessScrollEnabled boolean false Enables infinite scroll on the last Yaleo placement widget.
prebidMigrated boolean Overrides BtaFeedResponse.prebidConfig.migrated for testing. When true, native ads use the API prebidConfig bidders and floor prices.
lazyLoading boolean false Loads ads only when the BTA Feed is visible in the viewport.
headerTagUndoEffectEnabled boolean false Saves the cleanup effect to the Header Tag’s undo effect stack.
isDisabled () => boolean () => false Returns true to disable the feed, e.g. based on user language.
brandingTagLocation BrandingTagLocation PLACEMENT_CONTAINER Where to display the branding tag.
url string | null Overrides the page URL used for targeting and analytics.
forceXandrCreativeId number Forces all native ads to use a specific Xandr creative ID. Disables non-Xandr bidders when set.
containerAttributes DataAttributes Data attributes for the BTA section container element.
containerClassName ClassnamesArgument CSS class name(s) for the container element.
widgetListClassName ClassnamesArgument CSS class name(s) for the widget list container.
yaleoPlacementContentClassName ClassnamesArgument CSS class name(s) for Yaleo placement widget content containers.
Param Description
formatArticleDate Formats article dates.
formatReadingTime Formats article reading time.
formatRequestParams Modifies request parameters before sending to the server.
formatYaleoPlacementItems Formats, filters, or sorts Yaleo placement items.
getAdUrl Overrides ad URLs. Useful for mobile app deep links.
getAdAttributes Returns data attributes for ad elements.
getArticleClassNames Returns custom class names for article elements.
getArticleMeta Returns initial article meta data.
getArticleAttributes Returns data attributes for article elements.
getArticleUrl Overrides article URLs. Useful for mobile app deep links.
getWidgetAttributes Returns data attributes for each BTA widget container.
Param Description
onDisplay Fires when the BTA Feed block is displayed in the viewport.
onLoad Fires when the BTA Feed block is rendered on the page.
onViewed Fires when the BTA Feed block is completely viewed.
onElementsReady Fires when ads are loaded and DOM elements inside Shadow DOM are accessible.
onWidgetDisplay Fires when a widget enters the viewport.
onBtaFeedDataReceived Fires when BTA Feed data is received.
onLinkClick Fires when a link inside the BTA Feed is clicked.
onArticleClick Fires when an article is clicked.
onNativeAdClick Fires when a native ad is clicked.
onArticleBookmark Fires when an article bookmark action is triggered.

BTA Feed can gradually migrate native ad configuration from hardcoded publisher defaults to the prebidConfig returned by the BTA Feed API.

The rollout flag is stored per feed in BtaFeedResponse.prebidConfig.migrated. AdConsole exposes this as a Prebid section toggle.

When the flag is absent or false, runtime behavior is unchanged and native bidders come from the hardcoded publisher configuration. When the flag is true, runtime uses API prebidConfig bidders and floor prices. A default Audienzz Xandr bidder is always prepended; unaliased appnexus entries from the API config are ignored, and additional appnexus bidders must use an alias to distinguish them from the default. Floor rules are enabled when defaultFloorPrice is greater than zero and/or at least one bidder has floorPrices.

App Status Description
js/apps/bta-feed-prebid Current Current implementation. Use for all new integrations.
js/apps/bta-feed Deprecated Replaced by js/apps/bta-feed-prebid. Migration details and websites still using this script are tracked in #18279.