Skip to main content

Overview

Media Buys are the actual execution layer where budget meets publisher inventory. Strategies provide the targeting configuration (channels, countries), and Media Buys execute with specific publishers through ADCP (Ad Context Protocol).
Two-Tier Architecture: Campaign → Strategy → Media Buy
  • Campaigns: Overall marketing initiative with total budget
  • Strategies: Targeting configuration (channels, countries) and media buy organization
  • Media Buys: Direct publisher execution at negotiated CPMs

The Media Buy Lifecycle

Phase 1: Discovery & Selection

Media buys begin with publisher product discovery:
// Discover available publisher products
const products = await discover_publisher_products({
  query: "premium video inventory for sports fans",
  maxCpm: 30,
  formats: ["video", "display"]
});

// Returns publisher media products with pricing:
// • ESPN Video Package - $25 CPM (guaranteed delivery)
// • Fox Sports Display - $18 CPM (non-guaranteed)  
// • NBC Sports CTV - $45 CPM (premium guaranteed)

Phase 2: Creation & Pricing

Create a media buy within a strategy with transparent pricing:
const mediaBuy = await media_buy_create({
  strategyId: "strat_123",
  salesAgentId: "agent_espn_456",
  mediaProductId: "prod_video_789",
  name: "Q4 ESPN Video Buy",
  budget: {
    amount: 25000,
    currency: "USD",
    dailyCap: 1000,
    pacing: "even"
  },
  cpm: 25.00,           // Base CPM from publisher
  signalCost: 2.50      // Additional cost for data targeting
});

// Total effective CPM: $27.50
// Projected impressions: ~909,090

Phase 3: Execution via ADCP

Media buys are submitted to publishers through their ADCP sales agents:
const execution = await media_buy_execute({
  mediaBuyId: "mb_123"
});

// Status progression:
// draft → pending_approval → active → completed
// ⚪     → 🟡              → 🟢    → ✅

Phase 4: Performance Tracking

Real-time performance data flows back from publishers:
const performance = await media_buy_get({
  mediaBuyId: "mb_123"
});

// Returns live metrics:
// 📊 Impressions: 450,230 delivered
// 💰 Spend: $12,381 (49.5% of budget)
// 📈 CPM: $27.51 (on target)
// ⏱️ Pacing: On track (51% remaining, 10 days left)

Key Concepts

Budget Allocation

Media buys are organized under strategies for campaign execution:

Pricing Transparency

Every media buy shows complete pricing breakdown:
  • Base CPM: Publisher’s rate for the inventory
  • Signal Cost: Additional cost for data/targeting
  • Total CPM: Effective cost you pay per thousand impressions
// Example pricing breakdown
{
  pricing: {
    cpm: 25.00,         // What publisher charges
    signalCost: 2.50,   // Data/targeting premium
    totalCpm: 27.50     // What you actually pay
  }
}

Publisher Integration States

Media buys progress through clear states:
StatusIconDescriptionNext Action
draftCreated but not submittedExecute to submit
pending_approval🟡Awaiting publisher approvalWait for webhook
active🟢Live and deliveringMonitor performance
rejected🔴Publisher declinedReview and modify
completedFully deliveredAnalyze results
failedTechnical failureCheck error details

Working with Media Buys

Creating Your First Media Buy

  • Conversational
  • Programmatic
User: "Create a $10,000 media buy with ESPN for my sports strategy"

Claude: Creating ESPN media buy...

✅ Media Buy Created Successfully!

## 💰 Q4 ESPN Sports Buy

### 📦 Publisher Details
• Publisher: ESPN
• Product: Premium Video Inventory
• Delivery: Guaranteed

### 💳 Budget Allocation
• Amount: $10,000 USD
• Daily Cap: $500
• Pacing: even

### 💰 Pricing
• Base CPM: $28.00
• Signal Cost: +$2.00
• Total CPM: $30.00
• Projected Impressions: ~333,333

### 🔗 ADCP Integration
• Status: ⚪ draft

Next: Execute this buy with media_buy_execute

Managing Multiple Media Buys

Strategies typically have multiple media buys for diversification:
// List all media buys for a strategy
const mediaBuys = await media_buy_list({
  strategyId: "strat_123"
});

// Returns aggregated view:
// Total Media Buys: 5
// Active: 3 ($45,000 allocated)
// Pending: 1 ($10,000 allocated)  
// Draft: 1 ($5,000 allocated)
// 
// Top Performer: ESPN Buy (120% delivery)
// Needs Attention: Fox Buy (65% delivery)

Performance Optimization

Media buys can be optimized while running:
// Pause underperforming buy
await media_buy_update({
  mediaBuyId: "mb_underperformer",
  status: "paused"
});

// Increase budget for high performer
await media_buy_update({
  mediaBuyId: "mb_top_performer",
  budget: {
    amount: 15000  // Increased from 10000
  }
});

// Adjust pacing for time-sensitive campaign
await media_buy_update({
  mediaBuyId: "mb_urgent",
  budget: {
    pacing: "asap"  // Changed from "even"
  }
});

Advanced Features

Webhook Integration

Media buys support real-time status updates via webhooks:
// Webhook payload when publisher approves
{
  event: "media_buy.approved",
  mediaBuyId: "mb_123",
  adcpMediaBuyId: "adcp_456",
  status: "active",
  timestamp: "2024-01-15T10:30:00Z"
}

// Automatic status update in your system
// No polling required

Budget Pacing Strategies

Three pacing options control delivery speed:
StrategyUse CaseBehavior
evenStandard campaignsConsistent daily delivery
asapTime-sensitiveDeliver as fast as possible
front_loadedLaunch campaignsHigher initial spend, taper down

Publisher Product Types

Different inventory types serve different goals:
TypeDescriptionTypical CPMBest For
premiumTop-tier placements$30-60Brand campaigns
run_of_siteGeneral inventory$10-25Scale/reach
targeted_packageCustom audiences$20-40Performance

Best Practices

1. Diversification Strategy

Don’t put all budget in one media buy:
// Good: Diversified across publishers
Strategy: $50,000
├── ESPN: $15,000 (30%)
├── Fox: $12,000 (24%)
├── NBC: $10,000 (20%)
├── CNN: $8,000 (16%)
└── CBS: $5,000 (10%)

// Risky: Single publisher concentration
Strategy: $50,000
└── ESPN: $50,000 (100%) ❌

2. CPM Benchmarking

Compare CPMs across similar inventory:
// Analyze CPM efficiency
const analysis = await analyze_media_buys({
  strategyId: "strat_123"
});

// Premium Video CPMs:
// ESPN: $28 (baseline)
// Fox: $26 (-7% vs ESPN) ✅
// NBC: $32 (+14% vs ESPN) ⚠️
// CBS: $25 (-11% vs ESPN) ✅

3. Performance Monitoring

Set up regular performance checks:
// Daily monitoring routine
const dailyCheck = async () => {
  const mediaBuys = await media_buy_list({
    strategyId: "strat_123",
    status: "active"
  });

  for (const mb of mediaBuys) {
    if (mb.performance.cpm > mb.pricing.totalCpm * 1.1) {
      // CPM drifting 10% above target
      console.warn(`Review ${mb.name}: CPM drift detected`);
    }

    if (mb.performance.impressions < mb.projectedDaily * 0.8) {
      // Under-delivering by 20%
      console.warn(`Review ${mb.name}: Under-delivery detected`);
    }
  }
};

Common Patterns

Testing New Publishers

// Start small with new publishers
const testBuy = await media_buy_create({
  strategyId: "strat_123",
  salesAgentId: "new_publisher",
  name: "Test Buy - New Publisher",
  budget: {
    amount: 1000,  // Small test budget
    pacing: "even"
  },
  cpm: 20.00
});

// If performance is good, scale up
if (testBuy.performance.qualityScore > 80) {
  await media_buy_update({
    mediaBuyId: testBuy.id,
    budget: { amount: 10000 }  // 10x increase
  });
}

Seasonal Inventory Booking

// Book premium inventory in advance
const holidayBuy = await media_buy_create({
  strategyId: "strat_holiday",
  name: "Black Friday Premium Video",
  budget: {
    amount: 50000,
    pacing: "front_loaded"  // Heavy early delivery
  },
  startDate: "2024-11-25",
  endDate: "2024-11-30"
});

Integration with Strategies

Media buys are organized under strategies for execution:
// Strategy organizes all media buys
const strategy = await strategy_get({
  strategyId: "strat_123"
});

// Shows aggregated metrics:
{
  metrics: {
    totalSpend: 45230,        // Sum of all media buys
    totalImpressions: 1650000, // Combined delivery
    averageCpm: 27.41,        // Weighted average
    activeMediaBuys: 3,       // Currently delivering
    totalMediaBuys: 5         // All statuses
  }
}

API Reference

Next Steps

I