Architecting Google Ad Manager MCM: Manage Inventory vs. Manage Account for Scaling Publishers

Google Ad Manager 360 enforces strict structural validation at the ad server edge: any Google Publisher Tag (GPT) request originating from a

3D architectural illustration of a Google Ad Manager Multiple Customer Management parent monolith connected via fiber-optic bridges to Manage Account and Manage Inventory child nodes.

Google Ad Manager 360 enforces strict structural validation at the ad server edge: any Google Publisher Tag (GPT) request originating from a non-owned-and-operated domain or mobile application without an active Multiple Customer Management (MCM) parent-child delegation mapping is systematically rejected from Google Ad Exchange (AdX) and Open Bidding auctions. When Google deprecated Scaled Partner Management (SPM), the ad server shifted from simple domain-list whitelisting to cryptographic network-to-network graph verification. For scaling publishers, monetization platforms, and ad networks, MCM is not merely an administrative onboarding workflow. It is a fundamental architectural boundary that dictates how ad units are addressed, how line item prioritization executes, how unified pricing rules (UPRs) apply across inventory segments, and how programmatic revenue splits are settled at the billing ledger level.

Selecting the wrong delegation model between Manage Account (MA) and Manage Inventory (MI) introduces severe operational friction as a publisher scales across web, mobile app, and Connected TV (CTV) environments. An architectural mismatch at the GAM 360 hierarchy layer directly impacts header bidding wrapper latency, complicates Prebid price-granularity line item maintenance, and restricts how first-party identity signals propagate to downstream demand-side platforms (DSPs). Publishers evaluating a unified SSP and monetization platform must align their internal ad operations capabilities with the exact technical boundaries of the MCM protocol.

At Sky Boosts, we architect hybrid and dedicated MCM environments designed for high-density auction throughput, strict HUMAN and Pixalate invalid traffic (IVT) filtration, and predictable Net-30 and Net-60 cash-flow clearing. Below is the complete engineering and AdOps specification for deploying, governing, and optimizing Manage Account and Manage Inventory delegations at scale.

Structural Mechanics of Multiple Customer Management (GAM 360)

Multiple Customer Management operates as a bilateral state machine between two distinct Google Ad Manager networks: a Parent Publisher (which holds a GAM 360 contract with an active AdX seat and MCM contract enablement) and a Child Publisher (which holds either a standard GAM Small Business account or its own GAM 360 instance). Under the hood, MCM establishes an explicit entity relationship between the parent's networkCode and the child's networkCode. This mapping tells Google's ad-serving infrastructure which network's AdX billing entity, policy compliance record, and auction mechanics govern a given ad request.

According to Google's official Multiple Customer Management overview, MCM is strictly mandatory under Sections 1.5 and 1.6 of the GAM Partner Guidelines whenever a parent entity monetizes non-owned-and-operated (non-O&O) inventory. Both delegation models require the child publisher to maintain an active, policy-compliant GAM network, yet the two frameworks diverge completely in where ad server execution, line item trafficking, and financial settlement occur.

From an engineering standpoint, the primary distinction lies in the execution context of the ad request. In a Manage Account setup, the ad request resolves entirely inside the child publisher's GAM network, pulling the parent's AdX demand into the child's unified first-price auction alongside the child's own direct-sold campaigns and header bidding line items. In a Manage Inventory setup, the ad request is routed directly into the parent publisher's GAM 360 network via a dual-network tag syntax, bypassing the child's GAM ad server execution layer altogether.

Isometric diagram comparing Google Ad Manager MCM Manage Account automatic revenue split vaults with Manage Inventory ad unit delegation pathways.

Manage Account (MA) Delegation and Automatic Revenue Share Splitting

Manage Account (MA) is designed for publishers with dedicated internal AdOps engineering teams that require complete administrative sovereignty over their GAM network while leveraging a parent partner's AdX demand, Open Bidding integrations, and programmatic yield infrastructure. In an MA relationship, the child publisher grants the parent read-and-write administrative access directly into the child's GAM instance. A child publisher can maintain only one active Manage Account parent at any given time, with an absolute limit of one parent linking to a maximum of one child account per MA delegation slot.

When an ad request hits a child network under MA, the auction executes inside the child's GAM environment:

  1. Line Item Residency: All direct-sold Sponsorship and Standard campaigns, Prebid.js or Prebid Mobile price-bucket line items, and house campaigns live inside the child's GAM network.
  2. AdX Seat Injection: Once the MCM MA invitation is accepted and child verification completes, the parent's AdX account is provisioned inside the child's GAM network as a linked exchange account.
  3. Unified Pricing Rules (UPRs) and Floors: Floor price optimization happens inside the child's GAM interface. Both the child's internal AdOps team and the parent's yield analysts can configure UPRs, first-look pricing, and bidder-specific floor elasticity rules within the child's inventory hierarchy.
  4. Automated Ledger Settlement: During the onboarding handshake, the parent and child agree on an explicit revenue share percentage (for example, an 85/15 or 90/10 split). Google's billing engine calculates this split automatically at impression clearing time. When the auction closes, Google credits the child's AdSense/AdX payment profile with their exact share and routes the management percentage directly to the parent's GAM 360 billing entity.

Because the auction runs inside the child's network, Manage Account prevents the ad-request hop latency associated with client-side passbacks. The child's Prebid wrapper competes in a single unified auction against the parent's AdX and Open Bidding demand inside the same GAM instance. However, MA places a higher operational burden on the child publisher: if the child lacks the engineering resources to maintain thousands of Prebid price-granularity line items, manage key-value targeting constraints, or monitor creative-level policy blocks, the child's yield can degrade rapidly.

Manage Inventory (MI) Tag-Level Control and Parent-Child Network Codes

Manage Inventory (MI) shifts the entire ad-serving execution layer into the parent publisher's GAM 360 network. Even though both the parent and the child must possess active GAM networks to establish the cryptographic MCM handshake, the child's GAM network acts solely as an identity, site-verification, and policy-registration ledger. As documented in the GAM MCM specification, the parent manages delegated ad requests directly inside the parent account with zero child visibility into the parent's GAM UI.

Under Manage Inventory, the operational architecture changes fundamentally:

  1. Parent-Hosted Trafficking: The parent creates specific ad units inside its own GAM 360 hierarchy designated for the child publisher. All Prebid line items, Open Bidding yield groups, programmatic guaranteed (PG) deals, and unified pricing rules are built and maintained inside the parent's GAM 360 environment.
  2. Multi-Parent Flexibility: Unlike Manage Account, where a child is locked to a single parent, Manage Inventory allows a child publisher to establish active MI delegations with up to 15 different MCM parents simultaneously. This allows large publishers to segment inventory by geography, device class (such as CTV SSAI vs. Mobile Web), or specific ad placements across specialized monetization partners.
  3. Consolidated Clearing and Net Terms: Google does not split payments automatically in Manage Inventory. 100% of the clearing revenue from AdX and Open Bidding settles into the parent's GAM 360 ledger. The parent then aggregates earnings across AdX, Open Bidding, Prebid SSPs, and direct VAST/OpenRTB demand, remitting a single consolidated payout to the child publisher on predictable Net-30 or Net-60 payment cycles.
  4. Unified Demand Density: Because the ad request executes inside the parent's GAM 360 instance, the child's inventory immediately benefits from the parent's full stack of server-to-server connections, custom floor algorithms, and enterprise GAM 360 rate limits without requiring the child to touch a single line item.

For publishers evaluating enterprise MCM publisher solutions, the choice between MA and MI comes down to infrastructure ownership. Below is the engineering comparison across core operational dimensions:

Architectural Dimension Manage Account (MA) Manage Inventory (MI)
GAM Auction Execution Context Executes inside Child GAM network Executes inside Parent GAM 360 network
Maximum Concurrent Parents Exactly 1 Parent per Child network Up to 15 Parents per Child network
Child UI Visibility Full access to own GAM UI, reports, and line items Zero visibility into Parent GAM 360 UI; reporting via Parent portal/API
Prebid Line Item Residency Trafficked and maintained in Child GAM Trafficked and maintained in Parent GAM 360
GPT Slot Tag Syntax /childNetworkCode/adUnitPath /parentNetworkCode,childNetworkCode/adUnitPath
Revenue Split Mechanism Automated split at Google billing ledger 100% paid to Parent; Parent settles via Net-30/Net-60 consolidated payout
ads.txt / app-ads.txt Entry Child lists Parent (RESELLER) and own AdX seat (DIRECT) Child lists Parent's AdX Pub ID and SSP lines as DIRECT or RESELLER per ownership

AdX Eligibility, Partner Guidelines (Sections 1.5 & 1.6), and Policy Boundaries

Sections 1.5 and 1.6 of the Google Ad Manager Partner Guidelines govern how third-party inventory is represented, verified, and monetized across the programmatic supply chain. Before MCM, unauthorized arbitrage networks frequently pooled dozens of unverified domains under a single AdX publisher ID, obscuring supply paths and exposing DSPs to domain spoofing and IVT.

Under Sections 1.5 and 1.6, a parent publisher is strictly prohibited from serving AdX or Open Bidding ads on any web domain, mobile application, or CTV app unless two conditions are met: the child entity has been explicitly verified via MCM, and the domain or app has passed Google's site and app readiness review inside the child's linked record. Violating this boundary by firing a standard parent GPT tag (/parentNetworkCode/adUnit) on a non-O&O domain without the child network code attached results in immediate policy enforcement, automated impression clawbacks, and potential suspension of the parent's GAM 360 MCM privileges.

At Sky Boosts, our compliance architecture reinforces these GAM Partner Guidelines with strict pre-bid and post-bid hygiene. We exclusively monetize 100% Google-friendly, mainstream brand-safe inventory. We enforce zero tolerance for alcohol, gambling, adult, tobacco, or restricted content categories, pairing Google's native policy crawlers with continuous HUMAN and Pixalate IVT monitoring to protect both child publisher domain reputation and parent AdX seat integrity.

Child Publisher Verification Workflows

Onboarding a child publisher into an MCM hierarchy requires a multi-stage verification sequence that synchronizes account legal entities, domain ownership, and supply-chain transparency files:

  1. Network Provisioning and Invitation Dispatch: If the child publisher does not yet have a GAM account, the parent triggers an invitation from the GAM 360 MCM console, which prompts the child to provision a standard GAM network. If the child already operates a GAM network, the parent initiates the request using the child's existing networkCode, specifying either Manage Inventory or Manage Account (along with the proposed revenue share percentage for MA).
  2. Google Account Entity Verification: Once the child accepts the parent's request inside their GAM Admin > Multiple Customer Management tab, Google triggers a background compliance check on the child entity. The child must have an approved, policy-compliant Google billing/AdSense profile with no history of unresolved IVT terminations or copyright infringements.
  3. Site and App Inventory Readiness Approval: Under MCM, every root domain (example.com) and mobile app store package (com.example.app on Google Play or Apple App Store ID) must be declared in the GAM Sites or Apps tab. In Manage Inventory, both the parent and child must list and verify the domain, and Google's crawler inspects the live property for content policy compliance, valid ads.txt or app-ads.txt formatting, and proper CMP (TCF v2.2 / GPP) implementation.
  4. Supply Chain Authorization (ads.txt, app-ads.txt, and sellers.json): No AdX bid request will clear until the child domain's root ads.txt or app-ads.txt file contains the exact google.com, pub-XXXXXXXXXXXXXXXX, RESELLER, f08c47fec0942fa0 (or DIRECT where applicable) record corresponding to the monetizing AdX seat. For mobile app and CTV publishers managing dozens of bundle IDs, we streamline this verification layer through automated app-ads.txt management to prevent syntax drift or unauthorized reseller injection from breaking auction eligibility.

Secure Signals Deployment in MCM Manage Inventory (>5% Impression Threshold)

As third-party cookies deprecate across web environments and device identifiers face tighter OS-level restrictions on mobile and CTV, Google Ad Manager's Secure Signals (formerly Encrypted Signals for Publishers, or ESP) provides the primary conduit for passing cryptographically obfuscated first-party and third-party user IDs to AdX and Open Bidding buyers.

In a Manage Account configuration, the child publisher controls their own Secure Signals switches directly inside their GAM network settings. However, in a Manage Inventory (MI) setup, because the child has zero UI visibility into the parent's GAM 360 settings, signal deployment requires a distinct governance mechanism to prevent unauthorized script execution on a child's property.

As detailed in Google's Secure Signals MCM technical documentation, when a parent publisher enables a "Google deploy" Secure Signals provider inside the parent's GAM 360 network, GPT will automatically load and execute that signal provider's script on a child publisher's domain only if the parent publisher has served more than 5% of the child domain's recent historical impressions.

This >5% impression threshold serves as an automated security gate:

  • Preventing Drive-By Script Injection: Because a child can have up to 15 MI parents, Google prevents a minor parent partner serving a tiny fraction of passback impressions (for example, 0.5% of total volume) from automatically side-loading third-party identity scripts onto the child's page via GPT.
  • Child Opt-Out Control: Even when a parent exceeds the 5% impression share threshold on a child domain, the child publisher retains override authority inside their own GAM network under Inventory > Secure signals. The child can explicitly toggle off parent-deployed signals if their legal or privacy posture restricts specific identity providers.
  • Custom Signal Push via GPT API: When operating below the 5% threshold or when integrating custom Prebid User ID submodules in a hybrid wrapper, AdOps engineers should bypass automatic Google deployment and push pre-resolved signals directly into the googletag.secureSignalProviders array on the client page before googletag.enableServices() fires.

Programmatic Direct and Passback Tag Syntax (/parentCode,childCode/) Under MCM

At the ad-tagging and Prebid integration layer, Manage Inventory requires strict adherence to Google's dual-network-code addressing scheme. If a parent publisher's GAM 360 network code is 1234567 and the approved child publisher's GAM network code is 89101112, every GPT slot definition, VAST ad tag URL, and GMA SDK ad unit string must concatenate both network codes separated by a comma.

According to the Google Publisher Tag passback and MCM syntax guide, the ad unit path inside googletag.defineSlot() must be formatted as /parentNetworkCode,childNetworkCode/AdUnitPath. If the child network code is omitted, GAM's edge servers evaluate the request as an owned-and-operated impression belonging to the parent. When the Referer header or app_bundle fails to match the parent's O&O site list, GAM drops AdX and Open Bidding demand from the auction and logs an "Unrepresented Inventory" policy warning.

Below is a production-grade implementation demonstrating how to integrate a Prebid.js 11.x client-side auction with a GAM 360 Manage Inventory GPT configuration, including explicit Secure Signals pushing and strict auction timeout handling:

// Production Prebid.js 11.x + GPT Manage Inventory (MI) Integration
window.googletag = window.googletag || { cmd: [] };
window.pbjs = window.pbjs || { que: [] };

const MCM_PARENT_NET_CODE = '1234567';
const MCM_CHILD_NET_CODE = '89101112';
const PREBID_TIMEOUT_MS = 1200;

// Construct compliant MCM Manage Inventory Ad Unit Path
const mcmAdUnitPath = `/${MCM_PARENT_NET_CODE},${MCM_CHILD_NET_CODE}/child_domain_web/leaderboard_atf`;

const adUnits = [{
  code: 'div-gpt-ad-leaderboard-atf',
  mediaTypes: {
    banner: {
      sizes: [[728, 90], [970, 250]]
    }
  },
  bids: [
    {
      bidder: 'skyboosts',
      params: {
        placementId: 'sb_ent_994810',
        publisherId: 'pub_mcm_89101112',
        floor: 1.50
      }
    }
  ]
}];

googletag.cmd.push(function() {
  // Disable initial load so Prebid auction can attach key-values before GAM fires
  googletag.pubads().disableInitialLoad();
  googletag.pubads().enableSingleRequest();

  // Push custom Secure Signals directly to ensure availability regardless of 5% MI threshold
  googletag.secureSignalProviders = googletag.secureSignalProviders || [];
  googletag.secureSignalProviders.push({
    id: 'uidapi.com',
    collectorFunction: function() {
      return Promise.resolve(window.__uid2_advertising_token || '');
    }
  });

  // Define slot using mandatory /parentNetworkCode,childNetworkCode/ syntax
  googletag.defineSlot(
    mcmAdUnitPath,
    [[728, 90], [970, 250]],
    'div-gpt-ad-leaderboard-atf'
  )
  .setTargeting('mcm_mode', 'manage_inventory')
  .setTargeting('inventory_safety', 'tier1_clean')
  .addService(googletag.pubads());

  googletag.enableServices();
});

pbjs.que.push(function() {
  pbjs.setConfig({
    priceGranularity: 'high',
    enableSendAllBids: false,
    bidderTimeout: PREBID_TIMEOUT_MS,
    userSync: {
      filterSettings: {
        iframe: { bidders: '*', filter: 'include' }
      }
    }
  });

  pbjs.addAdUnits(adUnits);
  pbjs.requestBids({
    bidsBackHandler: triggerGamAuction,
    timeout: PREBID_TIMEOUT_MS
  });
});

function triggerGamAuction() {
  if (pbjs.initAdserverSet) return;
  pbjs.initAdserverSet = true;
  googletag.cmd.push(function() {
    pbjs.que.push(function() {
      pbjs.setTargetingForGPTAsync();
      googletag.pubads().refresh();
    });
  });
}

When deploying MCM Manage Inventory in a multi-tier setup where the child publisher runs their own primary ad server and calls the MCM parent via a client-side GPT passback (for example, when an unfilled remnant impression waterfalls from the child's network to the parent's GAM 360 network), the same comma-delimited syntax applies inside the autonomous passback tag:

<!-- Standalone GPT Passback Tag for MCM Manage Inventory -->
<script async src="https://securepubads.g.doubleclick.net/tag/js/gpt.js"></script>
<div id="gpt-passback-slot">
  <script>
    window.googletag = window.googletag || {cmd: []};
    googletag.cmd.push(function() {
      googletag.defineSlot('/1234567,89101112/passback_remnant_300x250', [300, 250], 'gpt-passback-slot')
        .setTargeting('passback_source', ['child_waterfall'])
        .setPageUrl('https://www.verified-child-publisher.com/article-path')
        .addService(googletag.pubads());
      googletag.enableServices();
      googletag.display('gpt-passback-slot');
    });
  </script>
</div>

Notice the explicit .setPageUrl() call in the passback configuration. When a passback executes inside a cross-domain iframe or a nested third-party container, GPT may lose visibility into the top-level window URL. Explicitly passing the verified child domain URL via setPageUrl() ensures that GAM 360 matches the request against the approved child site record under /1234567,89101112/, preserving full AdX transparency and Programmatic Guaranteed (PG) deal eligibility.

For Connected TV (CTV) and mobile app environments utilizing VAST 4.3 or Server-Side Ad Insertion (SSAI), the MCM Manage Inventory syntax translates directly into the iu (Inventory Unit) query parameter of the GAM Master Video Tag:

https://pubads.g.doubleclick.net/gampad/ads?iu=/1234567,89101112/ctv_ssai_midroll&description_url=https%3A%2F%2Fwww.verified-child-publisher.com&tfcd=0&npa=0&sz=1920x1080&gdfp_req=1&output=vast&unviewed_position_start=1&env=vp&impl=s&correlator=171892341099

Whether scaling CTV SSAI pods, high-concurrency mobile apps, or content-rich web properties, architecting your GAM MCM hierarchy requires aligning tag syntax, ads.txt cryptographic verification, and unified pricing rules with your operational capabilities. Publishers looking to audit their current MCM delegation structure, eliminate "Unrepresented Inventory" policy leakage, or consolidate Prebid, OpenRTB 2.6, and AdX demand under predictable Net-30 and Net-60 terms can talk to our monetization team for a full technical architecture review.

Next step

Put it to work.

Every pattern in this article runs on our unified SSP and monetization platform: GAM and MCM management, Prebid client and server-side, and CTV SSAI.

Net-30 / Net-60 terms · 100% brand-safe demand