Skip to main content

Why Scope3 Reporting is Different

Unlike basic campaign platforms, Scope3 provides enterprise-grade analytics with conversational AI integration:

Real-time Insights

Instant campaign health scores, pacing alerts, and performance recommendations

Conversational Analytics

Ask questions like “How’s my campaign doing?” and get rich, contextual answers

Enterprise Data Export

Export to CSV, JSON for BI tools with flexible grouping and filtering

ML-Powered Optimization

Statistical significance testing and AI-driven optimization recommendations

Core Reporting Tools

📊 Campaign Summary & Insights

Get comprehensive campaign analysis as structured JSON data. The summary includes:
  • Structured Data: Campaign metrics, pacing analysis, and currency-aware monetary values
  • AI Insights: Performance analysis with actionable recommendations, priority levels, and top tactics
  • External ID Support: Client campaign IDs for addressability and integration
  • Text Summary: Rich markdown text optimized for conversational interfaces like Claude and ChatGPT
const summary = await getCampaignSummary({
  campaignId: "camp_airmax_123",
  includeCharts: true,
  verbosity: "detailed"
});

// Returns structured JSON for flexible client rendering
console.log(`Campaign Status: ${summary.pacing.status}`);
console.log(`Spend: ${summary.summary.spend} ${summary.currency}`);

// Access different insight types
const topTactics = summary.insights.find(i => i.type === 'top_tactics')?.tactics;
console.log(`Best Tactic: ${topTactics?.[0]?.description}`);

const optimizations = summary.insights.filter(i => i.type === 'optimization');
console.log(`Optimization Tips: ${optimizations.length}`);

// Rich text summary available for conversational interfaces
console.log(summary.textSummary);

📈 Data Export for BI & Analytics

Export structured data for business intelligence tools:
const exportResult = await exportCampaignData({
  brandAgentId: "ba_nike_123",
  datasets: ["delivery", "events", "tactics"],
  groupBy: ["date", "campaign", "signal", "story"],
  dateRange: { start: "2024-01-01", end: "2024-01-31" },
  format: "csv",
  compression: "gzip"
});

// Perfect for data warehouses, dashboards, ML pipelines
console.log(`${exportResult.totalRecords} records ready`);

🎯 ML-Powered Tactic Analysis

Deep performance analysis with statistical significance testing:
const analysis = await analyzeTactics({
  campaignId: "camp_airmax_123",
  analysisType: "signals",
  compareSignals: true,
  timeframe: "30d"
});

// Statistical analysis with confidence intervals
analysis.signalEffectiveness.forEach(signal => {
  console.log(`${signal.signal}: ${signal.effectivenessScore} (p=${signal.pValue})`);
  if (signal.pValue < 0.05) {
    console.log(`✅ Statistically significant improvement`);
  }
});

How Delivery Data Flows

Sales agents report delivery data (impressions, spend, clicks) back to Scope3 through one of three methods. You configure the reporting method when registering a sales agent.
Choose one method - You only need to configure one reporting type per sales agent. Pick the method that best fits your infrastructure and requirements.
All three methods follow the ADCP Optimization & Reporting specification. For complete protocol details, refer to the official ADCP documentation.

Configuring Reporting Type

When you register a sales agent, specify how it will deliver reporting data: Agent: Call tool agent_register with body:
{
  "type": "SALES",
  "name": "Example Sales Agent",
  "endpointUrl": "https://sales-agent.example.com",
  "protocol": "MCP",
  "reportingType": "WEBHOOK",
  "auth": { ... }
}
Reporting TypeDescriptionBest For
WEBHOOKSales agent pushes data to Scope3 (default)Real-time reporting, most integrations
BUCKETSales agent writes files to cloud storageHigh-volume batch reporting
POLLINGScope3 fetches data from sales agentLegacy systems without outbound webhooks
If you don’t specify reportingType, it defaults to WEBHOOK.
Existing sales agents: If you registered a sales agent before reporting types were available, you can update it using agent_update to add a reportingType. See Updating Reporting Type below.

Method 1: Webhook Reporting (Default)

With webhook reporting, the sales agent pushes delivery data to Scope3 whenever new metrics are available. How it works:
  1. You register the sales agent with reportingType: WEBHOOK
  2. When you execute a media buy, Scope3 includes webhook configuration in the ADCP request
  3. The sales agent posts delivery reports to Scope3’s webhook endpoint
  4. Scope3 processes the data and updates your media buy metrics
No additional setup required - once the sales agent is registered with reportingType: WEBHOOK, delivery reporting is automatic.
The sales agent must implement the ADCP webhook payload format. See the ADCP Webhook-Based Reporting documentation for webhook configuration details and payload structure.
Webhook payload schema: The webhook payload follows the ADCP get_media_buy_delivery response schema with additional metadata fields like notification_type, sequence_number, and next_expected_at.

Method 2: Bucket Integration

With bucket integration, the sales agent writes delivery reports to a cloud storage bucket that Scope3 monitors. This is ideal for high-volume reporting or when you prefer batch file uploads. Supported cloud providers:
  • Amazon Web Services (S3)
  • Google Cloud Platform (GCS)
  • Microsoft Azure (Blob Storage)
Step 1: Register the sales agent with bucket reporting Agent: Call tool agent_register with body:
{
  "type": "SALES",
  "name": "High Volume Sales Agent",
  "endpointUrl": "https://sales-agent.example.com",
  "protocol": "MCP",
  "reportingType": "BUCKET",
  "auth": { ... }
}
Step 2: Create the bucket integration Agent: Call tool reporting_data_integration_create with body:
{
  "agentId": "salesagent_abc123",
  "importBucket": {
    "name": "Production Reporting",
    "provider": "AMAZON_WEB_SERVICES",
    "storageSystem": "S3",
    "bucket": "my-company-reporting-bucket",
    "path": "scope3-reports/",
    "config": {
      "roleArn": "arn:aws:iam::123456789012:role/Scope3DataIntegrationRole",
      "region": "us-east-1"
    }
  }
}
Step 3: Grant Scope3 access to your bucket
Create an IAM role that Scope3 can assume:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::SCOPE3_ACCOUNT_ID:root"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
Contact Scope3 support to get the AWS account ID for the trust policy.
Attach a policy allowing read access to your bucket:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::my-company-reporting-bucket",
        "arn:aws:s3:::my-company-reporting-bucket/scope3-reports/*"
      ]
    }
  ]
}
Step 4: Drop files into the bucket The sales agent writes delivery report files to the configured path. Scope3’s pipeline automatically detects new files and ingests the data. Supported file formats:
  • JSON (single delivery report)
  • JSON Lines (multiple reports, one per line)
  • CSV
  • Parquet
Files must follow the ADCP get_media_buy_delivery response schema. For detailed file format specifications, see the ADCP Offline File Delivery documentation.
Files must be valid and match the ADCP delivery response schema. Invalid files will be logged as errors and skipped.

Method 3: Polling

With polling, Scope3 periodically fetches delivery data from the sales agent. This is useful for legacy systems that can’t push webhooks or write to cloud storage. Step 1: Register the sales agent with polling Agent: Call tool agent_register with body:
{
  "type": "SALES",
  "name": "Legacy Sales Agent",
  "endpointUrl": "https://sales-agent.example.com",
  "protocol": "MCP",
  "reportingType": "POLLING",
  "reportingPollingCadence": "DAILY",
  "auth": { ... }
}
CadenceDescription
DAILYScope3 fetches delivery data once per day
MONTHLYScope3 fetches aggregated monthly data
How it works:
  1. Scope3 calls the sales agent’s getMediaBuyDelivery endpoint on the configured schedule
  2. The sales agent returns delivery data for all active media buys
  3. Scope3 processes the response and updates metrics
  4. Late or delayed reports are automatically handled
The sales agent must implement the ADCP get_media_buy_delivery task. See the request and response schemas for implementation details. Scope3 handles retry logic and late report reconciliation automatically.

Updating Reporting Type

To change a sales agent’s reporting type after registration: Agent: Call tool agent_update with body:
{
  "agentId": "salesagent_abc123",
  "reportingType": "POLLING",
  "reportingPollingCadence": "DAILY"
}
When switching to POLLING, you must also specify reportingPollingCadence. When switching away from POLLING, the cadence is automatically cleared.

Quick Start Examples

Morning Campaign Review

User: "Show me how all my campaigns performed yesterday"

Claude: 📊 Portfolio Performance (Yesterday):

🏃 Running Campaign: $347 spend, 28K impressions, $12.39 CPM ✅ Healthy
👟 Air Max Campaign: $2,180 spend, 156K impressions, $13.97 CPM ✅ Healthy  
👕 Lifestyle Campaign: $892 spend, 67K impressions, $13.31 CPM ⚠️ Warning

⚠️ Alert: Lifestyle campaign CTR dropped to 0.6% (below 0.8% threshold)
🔧 Action needed: Review creative performance or adjust targeting

Weekly Performance Analysis

// Export weekly data for team meeting
const weeklyReport = await exportCampaignData({
  brandAgentId: "ba_nike_123",
  dateRange: { start: "2024-01-08", end: "2024-01-14" },
  datasets: ["delivery", "events"],
  groupBy: ["date", "campaign", "creative"],
  format: "csv"
});

// Perfect for Excel analysis and presentations
console.log("Weekly report ready for download");

Signal Optimization

User: "Which audience signals are working best across all campaigns?"

Claude: 🎯 Cross-Campaign Signal Analysis:

Top Performers (30 days):
1. age_25_34 + tech_interest: $11.24 CPM, 1.67% CTR ⭐️ Winner
2. lookalike_existing_customers: $13.89 CPM, 1.42% CTR, 3.12% conv rate
3. interest_premium_brands: $15.67 CPM, 1.23% CTR

🔧 Recommendation: Increase budget on winners by 40%
📊 Statistical confidence: 95% (all signals significantly different)

Integration Patterns

Real-time Dashboard

Monitor campaigns with live updates:
// Get campaign insights for dashboard
async function updateDashboard() {
  const campaigns = await listCampaigns({ brandAgentId: "ba_nike_123" });
  
  for (const campaign of campaigns.campaigns) {
    const summary = await getCampaignSummary({ 
      campaignId: campaign.id,
      verbosity: "brief" 
    });
    
    updateCampaignWidget(campaign.id, {
      healthScore: summary.healthScore,
      spend: summary.todaySpend,
      impressions: summary.todayImpressions,
      alerts: summary.alerts
    });
  }
}

Data Pipeline

Automated export for BI systems:
# Daily ETL pipeline
def daily_campaign_export():
    yesterday = (datetime.now() - timedelta(days=1)).strftime('%Y-%m-%d')
    
    export_result = client.export_campaign_data(
        brand_agent_id="ba_nike_123",
        date_range={"start": yesterday, "end": yesterday},
        datasets=["delivery", "events", "tactics"],
        group_by=["date", "campaign", "signal", "story"],
        format="csv"
    )
    
    # Load into data warehouse
    load_to_warehouse(export_result['downloadUrl'])

Get Started with Reporting

Campaign Insights

Start with conversational campaign analysis and health monitoring

Export Data

Export structured data for BI tools and custom analysis (coming soon)

Advanced Analytics

Deep performance analysis with ML insights and recommendations (coming soon)

New to programmatic advertising? Start with Campaign Insights for conversational analysis.Building dashboards or BI integrations? Jump to Data Export for structured data access.Need optimization insights? Use Advanced Analytics for ML-powered recommendations.

Why Teams Choose Scope3 Reporting

“Unlike other platforms that just show basic metrics, Scope3’s conversational reporting helps us understand why performance changed and what to do about it.” - Marketing Director, Fortune 500 Company
“The ability to export granular signal and story data has transformed our attribution modeling. We finally understand which tactics actually drive conversions.” - Head of Analytics, Agency
“Having Claude explain campaign performance in plain English saves our team hours of manual analysis every week.” - Campaign Manager, Brand
Ready to experience next-generation campaign reporting? Get started with our Quick Start guide or dive into the Campaign Insights tool.