๐Ÿš€ Live Optimon AI is out of beta: ranked answers from your own live GAM and Prebid data, and a briefing every morning before you ask.Read the post โ†’

What breaks when the AppNexus Prebid adapter goes away?

Microsoft removes the AppNexus adapter from Prebid.js in early 2027. Where your setup still calls it, what to change for msft, and the GAM line items to fix.

An old wooden telephone switchboard lit by a brass desk lamp, rows of brass jacks with cream patch cords and one violet cord plugged in among them.

Any Prebid setup that still calls the appnexus bidder will stop getting Microsoft Monetize bids once Microsoft removes that adapter from Prebid.js and retires its endpoint, which it has scheduled for early 2027. The fix is the msft adapter on Prebid.js 11.36.0 or later. The part that quietly costs money is in Ad Manager: line items keyed to hb_pb_appnexus.

The code change is small. Finding every place your stack still says appnexus, and keeping the Ad Manager side in step, takes longer, which is why it is worth starting this month rather than in January.

What Microsoft announced and when

Microsoft has been moving publishers off the old adapter for a year. The dates, from Microsoft and the Prebid.js repository:

Date What happened
14 October 2025 The msft adapter is merged into Prebid.js, marked "for closed testing"
19 November 2025 Microsoft's Q4 roundup says the new adapter "replaces the longstanding AppNexus adapter" and moves to an OpenRTB-based model
24 September 2026 A fix for how msft passes addtl_consent is merged
28 September 2026 Prebid.js 11.36.0 ships with that fix
21 October 2026 Microsoft: the AppNexus adapter shuts down in early 2027, removed from Prebid.js, legacy endpoint deprecated; publishers should move to msft and confirm they run 11.36.0
Early 2027 Removal, no exact day given

The 21 October post gives the reason for the version floor in one line: 11.36.0 "supports important consent passthrough" so that spend from DSPs, DV360 in particular, is not affected. It does not name the signal.

Why the post asks for Prebid.js 11.36.0

The 11.36.0 changelog has one line for this adapter: "msft Bid Adapter - fix support for addtl_consent". The pull request behind it says the adapter now writes the value to user.ext.addtl_consent and formats it the way the AppNexus adapter did.

addtl_consent carries Google's Additional Consent string. It sits next to the IAB TCF string and lists Google ad tech providers that are not on the IAB Global Vendor List. Google's spec says it only works alongside a TC string, and that Google discards it when no TC string comes with the request.

Putting those together is our reading, not something Microsoft wrote: the "consent passthrough" in the announcement is most likely this AC string fix, and a msft build older than 11.36.0 can send EEA requests without a usable AC string. If most of your Microsoft revenue comes from outside Europe, the version floor matters less for demand, but you still need a build that has the adapter at all. Microsoft's PSP page notes that on Prebid.js 10.12 or lower you must stay on appnexus.

Find every place your setup still calls appnexus

Do this on a production page with the console open. A single site often has more than one wrapper (the main template, AMP, a video player, a second domain), so repeat it on each.

  1. Check the version: pbjs.version. Anything below v11.36.0 needs an upgrade before the bidder swap. If it starts with 9 or 10, the jump to 11 has its own breaking changes, such as stricter media type checks and strict storage control by default. Read the Prebid.js 11 notes first.
  2. List the bidders that were actually requested: [...new Set(pbjs.getEvents().filter(e => e.eventType === 'bidRequested').map(e => e.args.bidderCode))]. This catches ad units passed straight to requestBids, which pbjs.adUnits can miss.
  3. List the aliases: pbjs.aliasRegistry. Any entry whose value is appnexus is a partner riding on the old adapter. If your build set the registry to private, you will get nothing back, and you have to read the wrapper config instead.
  4. Check server-side calls: pbjs.getConfig('s2sConfig'). Look for appnexus in bidders and for Microsoft endpoints. Microsoft's deprecation covers the legacy endpoint, so a Prebid Server or PSP setup that still names the old bidder belongs on the same list.
  5. Search the wrapper repository for appnexus, placementId, and appnexusAuctionKeywords. Those strings show you where the param changes below will land.

What changes in the bid params

The msft page keeps most params and renames a few. Some values the AppNexus adapter took as params now come from standard Prebid locations.

AppNexus adapter msft adapter
placementId placement_id, integers only
frameworks banner_frameworks
pub_click pubclick
external_imp_id ext_imp_id
publisher_id ortb2.publisher.id
user, app ortb2.user, ortb2.app
supply_type ortb2.site or ortb2.app
video, video.frameworks mediaTypes.video, mediaTypes.video.api
position mediaTypes.banner.pos
reserve the floors module
appnexusAuctionKeywords (setConfig) First Party Data, for example ortb2.site.keywords

Three details catch people out. Keywords change format: each value repeats its key, as in genre=news,genre=sport, instead of grouping values under one key. Native ad units must use ORTB Native 1.2 with eventtrackers for event type 1 (impression) and event type 2 (viewable MRC); the legacy Prebid native setup is not supported, and the docs warn that missing trackers can reduce demand. And a single requestBids call can only carry placements from one parent publisher, so a shared wrapper that bids for several publishers gets no demand for the mixed placements.

A placementId written as a string, "12345678", is the first thing I would grep for. The new param takes integers only.

The Ad Manager side: line items keyed to appnexus

This is where revenue goes missing without an error. With Send All Bids, Prebid sets bidder-specific keys. After the swap, Microsoft's bid arrives as hb_pb_msft, hb_bidder_msft and so on, and a line item that targets hb_pb_appnexus=5.00 or hb_bidder=appnexus no longer matches anything. The bid comes back and has nothing in Ad Manager to win against.

What to check, per setup:

  • Send All Bids: add hb_pb_msft and the other msft keys as key-values, then either create Microsoft line items or retarget the existing ones. The docs list eleven keys, and Ad Manager truncates key names to 20 characters.
  • Send Top Bid only: the generic hb_pb line items still work. Any targeting or report filter on hb_bidder=appnexus needs msft added.
  • Aliased partners: their keys follow the alias name, so they do not change unless the partner changes its bidder code.
  • Reports and alerts: any saved report, dashboard or alert filtered on the appnexus value will show a drop on swap day that is only a rename. Add msft to the filter before you ship.

Roll it out on a slice and measure

Swap the bidder on a share of traffic first, through the wrapper or a test ad unit. Compare appnexus and msft over the same days on the same ad units, so weekday mix does not muddy it:

Number Where to read it What a problem looks like
Bid rate Prebid analytics, bids per bid request msft well below appnexus on the same units: check params and placement IDs
Timeouts Prebid analytics A rise after the swap: compare response times before blaming the new endpoint
Win rate in Ad Manager Ad Manager report with hb_bidder as a key-value dimension Bids arrive but rarely win: line items or price buckets are missing for msft
Revenue per 1,000 requests Ad Manager plus Prebid analytics Flat bids but lower revenue: check native trackers and EEA traffic separately

Splitting by country matters for the consent question. If msft holds steady outside Europe and falls inside it, check the version and the AC string before anything else.

Optimon reads your own Ad Manager and Prebid data and shows what moved after a change like this one, by bidder and ad unit, with the numbers next to it.

What to do tomorrow morning

  1. Run the five console checks on every wrapper and write down each appnexus call and alias.
  2. If pbjs.version is below 11.36.0, put the upgrade on the plan first.
  3. List the Ad Manager line items, reports and alerts that name appnexus.
  4. Swap one slice, compare the four numbers for a full week, then roll out.
  5. Ask each partner that aliases appnexus which bidder code they will use in 2027.

FAQ

Do I lose Microsoft demand today if I stay on the appnexus adapter?

Not from the announcement alone. Microsoft gives "early 2027" for removing the adapter and retiring the legacy endpoint, with no exact day. Its 21 October post does tie Prebid.js 11.36.0 to consent passthrough that DSPs such as DV360 need, so an old build may already carry less demand than it could. Measure it on a slice before you assume either way.

Can I keep an old Prebid.js version and only swap the bidder code?

Only if the build is new enough to contain msft. Microsoft's PSP page says that on Prebid.js 10.12 or lower you must use the legacy appnexus adapter, and Microsoft asks for 11.36.0 or later. A build older than 11 is a major version jump, so read the Prebid.js 11 notes before you schedule it.

What happens to adapters that alias appnexus?

Each one needs checking on its own. The msft page allows aliases of the new adapter, and Prebid.js has already moved some aliases across, such as Project Agora. Run pbjs.aliasRegistry in the console, list every alias that resolves to appnexus, and ask that partner which bidder code they want after the switch.

Sources

Contact

Let's talk yield.

Whether you want a demo, a free audit, or just want to ask us something - we're a real team that reads every email.

Response time

We reply to every message within one business day. Enterprise enquiries typically get a call scheduled same-day.

Direct line

Prefer email? hello@optimon.io

Not sure where to start?

Drop your domain into the homepage scanner. We'll show you what we find before you commit to anything.

Free scan โ†’