主な最適化タスク
デリバリーレポート
get_media_buy_delivery でインプレッション、消化額、クリック、コンバージョンなど全パッケージのパフォーマンスデータを取得します。
あるいはメディアバイ作成時に Webhook ベースのレポーティング を設定し、定期的な自動通知を受け取ります。
キャンペーン更新
パフォーマンスインサイトに基づき、update_media_buy で設定・予算・構成を更新します。
最適化ワークフロー
一般的な最適化サイクル:- 配信を監視: 目標に対するパフォーマンスを追跡
- パフォーマンス分析: 最適化の機会を特定
- 調整を実施: 予算・ターゲティング・クリエイティブ割り当てを更新
- 変化を追跡: 最適化の影響をモニタリング
- 反復: 定期的な分析で継続的改善
メトリクスのライフサイクル
AdCP のすべての最適化メトリクス——セラーネイティブ(clicks、views、reach)、卒業済みのベンダー証明(viewability)、ベンダー定義(アテンション、ブランドリフト、排出量)のいずれであっても——は、同じ一連のサーフェスを流れます。バイヤーは次の三つの問いを順に立ててメトリクスを推論します:- できるか? — プロダクトはこのメトリクスを最適化できるか? (ディスカバリー)
- やるか? — このパッケージについて、最適化と報告をコミットするか? (コミットメント)
- やったか? — 配信において値はいくつで、コミットメントを満たしたか? (レポーティング)
metric_id(ベンダー証明メトリクスでは (vendor, metric_id) タプル)がすべてのレイヤー——ディスカバリー、機能宣言、パッケージのコミットメント、配信——を流れるため、目標に対して配信を照合するバイヤーは変換表を必要としません。
標準メトリクスのフロー(例: clicks、viewable_rate)
ベンダー証明メトリクスのフロー(例: Adelaide アテンション、Scope3 排出量、Kantar ブランドリフト)
同じライフサイクルで、単なるmetric_id の代わりに (vendor, metric_id) タプルがあらゆる箇所に入ります:
なぜ両方のフローが重要か
二つのフローは重複ではありません——標準化された計測とベンダー固有の計測の違いをエンコードしています。クリックはどのセラーでも同じ意味を持ちますが、アテンションはそうではありません。ベンダーの紐付けは、どのアテンションモデルが最適化・報告されているかについてバイヤーとセラーが合意したという、ワイヤーレベルの証拠です。あるメトリクスがどちらのフローを使うかを決める Tier 0 → Tier 1 の卒業ポリシーはmeasurement/taxonomy.mdx を参照してください。
レイヤー間で必要な整合性
三つのルールがレイヤーを接続し、孤立した目標を防ぎます:-
最適化には機能が必要。 パッケージの
optimization_goals[]エントリは、プロダクト機能と一致しなければなりません(MUST)——kind: "metric"にはmetric_optimization.supported_metrics、kind: "vendor_metric"にはvendor_metric_optimization.supported_metrics。セラーは不一致をTERMS_REJECTEDで拒否します。 -
最適化には報告のコミットメントが必要。
kind: "vendor_metric"の目標では、一致する(vendor, metric_id)がパッケージのcommitted_metrics[]にも現れなければなりません(MUST)。セラーが報告をコミットしていないメトリクスの最適化は検証不能です——バイヤーには目標を採点する手段がありません。セラーはコミットされていない vendor_metric 目標をTERMS_REJECTEDで拒否します。(このルールは特にベンダーメトリクスについて規範的です。セラーネイティブなmetric目標では、セラーネイティブであること自体により通常は常に報告されるため、整合性は暗黙的です。)三つ目の前提条件——ディスカバリー、すなわちmetric_idがベンダーの公開するmeasurement.metrics[]カタログに現れること——は、計測ベンダーの AdCP 適合の機能公開への対応が追いつくまで、このマイナーでは SHOULD であり、次のマイナーで MUST に強化されます。 -
パフォーマンスのアカウンタビリティは独立。
performance_standards[]は並行して存在します——バイヤーは、最適化目標も設定するかどうかに関わらず、セラーが報告をコミットする任意のメトリクスに閾値のコミットメントを追加してよい(MAY)。三つのサーフェス(目標 / コミットメント / 基準)は組み合わさります:- 目標のみ — 「これに向けて押し進めて」、アカウンタビリティの下限なし
- 基準のみ — 「X 以上を負っている」、達成方法はセラーが決める
- 両方 — 最適化が舵を取り、基準が下支えする
-
優先度は序数で、値が小さいほど優先。
optimization_goals[]が明示的なpriority値を運ぶ場合、セラーは最小の priority 値を持つ目標を主目標として扱います——priority: 1の目標がない場合でも(priority が2と3なら2が主)。priorityが省略された場合、セラーは配列の位置を使ってよい。重複する priority 値は未定義です。
実例: Adelaide アテンションのエンドツーエンド
バイヤーが Adelaide のattention_score を閾値 70 で最適化したいとします。四つのサーフェスがどう並ぶかを示します:
1. プロダクト機能(get_products でディスカバリー):
create_media_buy でのパッケージ提案 — バイヤーは報告のコミットと最適化目標の両方を設定します(報告整合性ルールにより両方必須):
performance_standard を上に重ねてもよい(MAY)——例: { "metric": "attention_score", "vendor": { "domain": "adelaidemetrics.com" }, "threshold": 65 }——が、これは目標とは独立です。
3. 配信(get_media_buy_delivery レスポンス):
73.2 は閾値 70 を上回るため、目標は達成されています。measurable_impressions の分母(配信インプレッション 100 万のうち 420000 など)は Adelaide の計測のカバレッジ値です——ベンダー SDK が配信インプレッションの 100% で発火することはまれで、今日の CTV におけるアテンションベンダーのカバレッジは、アプリ SDK の有無に応じて通常 30〜60% です。報告値について推論する前に、必ず measurable_impressions / impressions からカバレッジを計算してください。
4. アカウンタビリティギャップの報告(コミットメントが満たされない場合、同じく get_media_buy_delivery レスポンス内):
vendor_metric_values を埋められなかった場合、同じ (vendor, metric_id) が missing_metrics に現れます——ライフサイクル全体で同じキーであるため、バイヤーの照合は行レベルの結合になります。
パフォーマンス監視
リアルタイム指標
配信中のキャンペーンを追跡します。- 目標に対する インプレッション配信状況
- 予算に対する 消化ペース
- CTR とエンゲージメント
- 事業成果に紐づく コンバージョン追跡
ヒストリカル分析
時間軸でパフォーマンス傾向を把握します。- 主要指標の 日次/時間別の内訳
- 期間をまたいだ パフォーマンス比較
- 最適化機会を見つける トレンド識別
アラート/通知
重要なキャンペーンイベントを把握します。- ペース異常に対する 配信アラート
- 大きな変化に対する パフォーマンス通知
- 上限到達前の 予算警告
配信方法
パブリッシャーは Webhook 通知またはオフラインファイル配信でレポートデータをバイヤーへプッシュできます。これによりポーリングを不要にし、タイムリーなインサイトを提供します。 Webhook Push(リアルタイム) - バイヤーのエンドポイントへ HTTP POST- 適合: 多くのバイヤー・セラー関係
- レイテンシ: ほぼリアルタイム(秒〜分)
- コスト: 標準的な Webhook 基盤
- 適合: 高ボリュームの大口バイヤー/セラー
- レイテンシ: 定期バッチ(毎時/日次)
- コスト: 大幅に低い(0.50-2.00/100 万 Webhook)
- フォーマット: JSON Lines, CSV, Parquet
- ストレージ: S3, GCS, Azure Blob Storage
Webhook ベースのレポーティング
Webhook 設定
メディアバイ作成時にreporting_webhook パラメーターでレポート Webhook を設定します。
authentication設定は必須(32 文字以上)- Bearer トークン: シンプルで開発向き(Authorization ヘッダー)
- HMAC-SHA256: 本番推奨。リプレイ攻撃を防止(署名ヘッダー)
- 資格情報はオンボーディング時に帯域外で交換
- 実装詳細は Security を参照
サポートされる頻度
パブリッシャーはプロダクトのreporting_capabilities でサポートする頻度を宣言します。すべてをサポートする必要はなく、運用に適した頻度を選択します。
hourly: キャンペーン期間中、毎時間通知(任意。コスト/複雑性を考慮)daily: 1 日 1 回通知(最も一般的、フェーズ1に推奨)monthly: 月 1 回通知(タイムゾーンはパブリッシャー指定)
提供可能な指標
指標の可否は 2 つのレベルで宣言します。- プロダクトレベル:
reporting_capabilities.available_metricsでプラットフォームが提供できる指標を宣言 - フォーマットレベル: クリエイティブフォーマットの
reported_metricsでそのフォーマットが生成できる指標を宣言(Reported Metrics を参照)
impressions と spend は積集合によらず常に提供されます。標準的な指標:
impressions: 広告表示(常に提供)spend: 消化額(常に提供)clicks: クリック数ctr: クリック率views: プラットフォーム定義の閾値での視聴数completed_views: 動画/オーディオの完了数(最適化目標がカスタムの視聴尺を設定する場合は閾値ベースの完了数)completion_rate: 完了率(completed_views/impressions)。該当しない場合(非動画の購入など)はnullconversions: クリック後/視聴後コンバージョンconversion_value: 帰属コンバージョンの金銭的価値roas: 広告費用対効果cost_per_acquisition: コンバージョンあたりコストnew_to_brand_rate: 初回購入者によるコンバージョンの割合leads: リード獲得数reach: ユニークリーチ(reach_unitと対)。計測ウィンドウはreach_window(cumulative/period/rolling)で宣言。reach_windowが省略された場合ウィンドウは未指定であり、バイヤーは行をまたいでリーチを合計してはなりません(MUST NOT)。reach_window: リーチ/フリークエンシーのウィンドウ意味論——kind(キャンペーン開始以降のcumulative、重複しないスナップショットのperiod、後方ウィンドウのrolling)とperiod: Duration(periodとrollingで必須)を持つオブジェクトfrequency:reach_windowにわたって計測された、リーチ単位あたりの平均フリークエンシーgrps: グロスレーティングポイント(CPP 課金向け)engagements: 視聴を超える直接的な広告インタラクション(リアクション、タップ、オープン)engagement_rate: プラットフォーム固有のエンゲージメント率follows: 配信に帰属する新規フォロワー、ページのいいね、アーティスト/ポッドキャスト/チャンネルのフォロー、または無料のチャンネル/フィード購読。有料サブスクリプションはevent_type: "subscribe"のコンバージョンイベントです。saves: 配信に帰属する保存、ブックマーク、プレイリスト追加(プラットフォームによって名称が異なる——Pinterest の「repins」、TikTok の「video_saves」——すべてこの正準キーで報告)profile_visits: ブランドのプラットフォーム内ページへの訪問viewability: ビューアビリティデータ(measurable_impressions, viewable_impressions, viewable_rate, viewed_seconds, standard, vendor)。MRC 基準と GroupM 基準を区別。viewed_secondsは計測可能インプレッションあたりの平均インビュー時間で、viewed_seconds最適化目標のレポート側の対応物であり、viewable_rateと同じstandard閾値に従います。任意のvendorフィールドはBrandRefを運ぶため行が自己記述的になります——配信を単独で読むバイヤーエージェントは、package.committed_metricsやpackage.performance_standardsへ結合し直すことなく数値を計測ベンダーに帰属できます。quartile_data: 動画クォータイル完了データ(q1〜q4)。該当しない場合(非動画の購入など)はnulldooh_metrics: DOOH 固有指標(ループ再生数、スクリーン数、会場別内訳)cost_per_click: クリックあたりコスト(spend / clicks)cost_per_completed_view: 完了視聴あたりコスト(spend / completed_views)。動画/オーディオ在庫の CPCV 価格スカラーcpm: 1000 インプレッションあたりコスト((spend / impressions) × 1000)。CTV、ディスプレイ、モバイル/ウェブ動画、ネイティブ、オーディオ、DOOH をまたぐ普遍的な価格スカラーdownloads: オーディオ/ポッドキャストのダウンロード(IAB Podcast Measurement Technical Guidelines の手法)。viewsとは別units_sold: 配信に帰属して販売された点数(リテールメディアのコマーススカラー。conversionsとは別——1 トランザクションが複数の点数を含みうる。アトリビューションウィンドウはmeasurement_termsで宣言)new_to_brand_units:new_to_brand_rateの点数版——初回購入者に販売された点数のカウントplays: DOOH/放送在庫の生の再生回数(forecastable-metric.playsに対応)。dooh_metrics.loop_plays(スクリーンごとのローテーション)やimpressions(乗算後のオーディエンス数)とは別
requested_metrics で必要な指標のみを要求し、ペイロードを抑えて KPI に集中できます。
completion_rate と quartile_data については、セラーはメトリクスが該当しないことを示すために null を返してよく(MAY。例: 非動画の購入)、クライアントはこの二つのフィールドについて null を有効な値として受け入れなければなりません(MUST)。他のすべてのメトリクスは省略によって「該当なし」を示します——セラーは null を送るのではなく省略します。
ベンダー定義メトリクス
標準のavailable_metrics 列挙は閉じたプロトコル語彙です。ベンダー定義メトリクス——独自のアテンションスコア、インプレッションあたり排出量、パネルベースのデモグラフィック、ブランドリフト調査、フライト中のアテンションパネル、カスタムのビューアビリティ亜種——は並行する構造化サーフェスに存在します:
-
宣言(
reporting_capabilities.vendor_metrics): 各エントリはベンダーのメトリクスカタログへのポインタ({ vendor: BrandRef, metric_id })です。セラーは「このベンダーのメトリクスをサポートする」と言うだけで、それ以外(カテゴリ、手法、標準との整合、人が読めるドキュメント)はベンダー側に存在します。識別子はベンダーで名前空間化されます——同じmetric_idが異なるベンダーの語彙で異なる意味を持ちうる。 -
ディスカバリーのアンカー: ベンダーの
brand.jsonのagents[type='measurement']が、計測エージェントの URL、機能プロファイル、手法、各メトリクスが実装する標準、メトリクスごとのドキュメントを見つける正準的な場所です。AdCP はそのメタデータをすべてのセラーのプロダクトごとの拡張に複製しません。バイヤーは必要なときにベンダーごとに一度だけ解決します(キャッシュ可能)。 -
フィルター(
get_productsのfilters.required_vendor_metrics): 各エントリはvendorおよび/またはmetric_idを指定します(少なくとも一方)。ベンダー横断のクエリ(例: 「サポートするベンダーの任意のアテンション計測」)はバイヤーエージェントの責任です: エージェントはbrand.jsonレコードを通じてどのベンダーがカテゴリを提供するかを解決し、それらをフィルターエントリとして列挙します。他のrequired_*フィルターと同じ filter-not-fail の慣習。 -
レポーティング(各
by_package配信行のvendor_metric_values): 各値は{ vendor, metric_id, value, unit?, measurable_impressions?, breakdown? }を運びます。measurable_impressionsはカバレッジの分母です——ベンダー計測が配信インプレッションの 100% であることはまれです。このフィールドが存在する場合、バイヤーはカバレッジをmeasurable_impressions / impressionsとして計算します。存在しない場合、カバレッジは未指定です(率を計算したり、完全なカバレッジを仮定したりしないでください)。breakdownスロットは、単一のスカラーを超える構造化ペイロード(パネルのデモグラフィック、共視聴比率、増分の分解)をベンダーが置く場所です。これが唯一の逃げ道であり、値エンベロープの残りは閉じています。 -
昇格パス: 業界が公開された標準を通じてあるメトリクスに収束したとき、仕様はそれを閉じた
available_metrics列挙に追加し、ベンダー拡張は歴史的なエイリアスになります。昇格は、場当たり的なベンダー収束数ではなく、標準化団体の公開に基づきます。 -
アカウンタビリティのスコープ: セラーが
package.committed_metricsにベンダーメトリクスを刻印する場合(scope: "vendor")、標準メトリクスと同じget_media_buy_deliveryのmissing_metrics契約の対象になります。ベンダーメトリクスを確かに証明できないセラーは、それをcommitted_metricsに刻印すべきではありません(SHOULD NOT)。不在はメトリクスを助言的なままにし、照合はvendor_metric_values.measurable_impressionsのカバレッジと、ベンダーの計測エージェントを通じた帯域外の検証にフォールバックします。助言的か説明責任を伴うかの区別は、メトリクスのスコープ間で非対称であるのではなく、契約レイヤーで明示的になりました。
パブリッシャーのコミットメント
レポート Webhook を設定した場合、パブリッシャーは以下を送信します。 (campaign_duration / reporting_frequency) + 1 回の通知- キャンペーン期間中、頻度ごとに 1 回
- キャンペーン完了時に最終通知を 1 回
- 想定遅延時間を超える場合は
"delayed"通知を送信
Webhook ペイロード
レポート Webhook は完全な MCP Webhook エンベロープを送ります。配信レポート自体はget_media_buy_delivery と同じペイロード構造にメタデータを加えたものですが、result の下にネストされます。内側の配信オブジェクトをトップレベルの POST ボディとして送らないでください。
result オブジェクトは個別に表示・保存できますが、この形状はトップレベルの Webhook POST ボディとしては無効です:
notification_type:"scheduled"(定期)、"final"(完了)、"delayed"(データ未準備)sequence_number: 連番(1 起算)next_expected_at: 次回通知の ISO 8601 時刻(最終通知では省略)media_buy_deliveries: メディアバイ配信データの配列(パブリッシャーが複数メディアバイをまとめて返す場合あり)
タイムゾーンの扱い
レポーティングはすべて UTC を使用しなければなりません。 DST の複雑性を排除し、照合を簡素化し、一貫した 24 時間単位を保証します。- 日次: 00:00:00Z 〜 23:59:59Z(常に 24 時間)
- 時次: 時刻 00 分 00 秒〜59 分 59 秒(常に 1 時間)
- 月次: 月初〜月末
遅延レポーティング
プロダクトのexpected_delay_minutes 内にレポートデータが用意できない場合、パブリッシャーは notification_type: "delayed" で通知します。
計測成熟ウィンドウ
課金グレードのデータが初日に最終値として届くのではなく段階的に生成されるチャネルでは、セラーはプロダクトにmeasurement_windows を宣言します。各ウィンドウは、独自の想定提供時期を持つ成熟ステージを表します。このパターンはチャネルをまたいで使われます:
各ウィンドウの数値は前のものに優先します。通常、一つのウィンドウが
is_guarantee_basis——双方が照合する数値——です。計測ベンダーの処理時間は各ウィンドウの expected_availability_days に取り込まれます(累積と処理の両方を含む)。
放送では、初期ウィンドウのデータの遅延や疎さは、通常セラー側のメタデータの問題ではなく、計測ベンダーの精算の問題です。Nielsen、Comscore、VideoAmp、その他の指定ベンダーは、Live、C3、C7、Live+5、または市場レベルの結果を波状に公開しうる。その期間中、セラーは配信を暫定または計測ベンダーの確定待ちとしてラベル付けし、measurement_window を保持し、is_final、finalized_at、supersedes_window、および遅延/ウィンドウ更新の通知を使って何が変わったかを示すべきです。バイヤーは、部分的なアフィリエイトや局の可視性を表すためにクリエイティブレコードやプロダクトメタデータをフォークすべきではありません。代わりに、セラーの配信行を市場、プレースメント、デイパート、クリエイティブ、計測ウィンドウで集約してください。
セラーは、最初に利用可能になるデータパイプラインを反映するようプロダクトに expected_delay_minutes を設定します。reporting_capabilities の measurement_windows 配列がウィンドウごとのタイムラインを提供します。
計測ウィンドウを持つプロダクトの配信データには、各パッケージに三つのフィールドが含まれます:
is_final— セラーがこのレポート期間についてデータを確定とみなす場合true。データが更新される(より広いウィンドウ、追加処理)場合はfalse。セラーが暫定と最終を区別しない場合は不在。measurement_window— このデータがどのウィンドウを表すか(例:"c3")。プロダクトのmeasurement_windowsのwindow_idを参照します。ウィンドウ成熟のない標準的なデジタルレポーティングでは不在。supersedes_window— このレポートがどの以前のウィンドウを置き換えるか(例: C3 データが届いたときの"live")。ある期間の最初のレポートでは不在。
notification_type: "window_update" を使います。これは adjusted(同じウィンドウ内の訂正)とは別です。
計測ウィンドウのライフサイクル例 — 3月1日に放映される放送スポット:
3月2日 — Live データが到着(notification_type: scheduled):
window_update):
window_update):
window_update が届くたびに保存データを置き換えます。is_final: true のとき、それが保証に対して照合すべき数値です。同じライフサイクルの形状が、DOOH(tentative → final)、IVT フィルタリング付きデジタル(post_givt → post_sivt)、ポッドキャスト(downloads_7d → downloads_30d)、その他データが段階的に成熟するあらゆるチャネルに適用されます——異なるのはウィンドウ ID とタイミングだけです。
measurement_window が課金条件にどう現れ、照合と請求のクロックをどう駆動するかは、Accountability を参照してください。
Webhook の集約
複数のメディアバイが以下を共有する場合、呼び出し数削減のため Webhook を集約すべきです。- 同一 Webhook URL
- 同一のレポート頻度
- 同一のレポート期間
- 集約なし: 1 日 100 件の Webhook(非効率)
- 集約あり: 1 日 1 件の Webhook に 100 キャンペーンをまとめる(最適)
media_buy_deliveries 配列には Webhook 1 件あたり 1〜N のメディアバイが含まれます。バイヤーは配列を反復して各キャンペーンを処理してください。
Aggregated webhook example:
部分的な失敗の扱い
複数メディアバイを 1 つの Webhook にまとめる際、キャンペーンごとにデータ可否が異なる場合があります。 方針: ステータス付きベストエフォート配信 パブリッシャーは利用可能なデータをすべて含めた集約 Webhook を送り、ステータスで可否を示すべきです。partial_data: いずれかのキャンペーンでデータ欠落がある場合に trueunavailable_count: 遅延/欠落しているキャンペーン数status: キャンペーン単位のステータス("active","reporting_delayed","failed")expected_availability: 遅延データの準備予定時刻(分かる場合)
- 上流遅延: データソースの速度差があります
- システム劣化: 部分的な障害が一部キャンペーンに影響
- データ品質問題: 特定キャンペーンのみ検証に失敗
- レートリミット: API 制限で全キャンペーンを取得できません
- 全体障害:
"delayed"通知を送る - 全キャンペーンに影響:
notification_type: "delayed"を使用 - バイヤー側エンドポイント問題: サーキットブレーカーで送信を止める
- データがない場合もステータス付きで全キャンペーンを配列に含めます
- 遅延/失敗がある場合は
partial_data: trueを設定 - 分かる場合は
expected_availabilityを返す - Webhook 全体をリトライしません。必要ならバイヤーは個別にポーリング
- 部分配信率をモニタリングし、システム的な問題を検知
プライバシーとコンプライアンス
GDPR/CCPA 向けの PII マスキング
パブリッシャーはすべての Webhook ペイロードから PII を削除し、GDPR/CCPA に準拠しなければなりません。レポート Webhook には集計・匿名化された指標のみを含めてください。 除去するもの:- ユーザー ID、デバイス ID、IP アドレス
- メールアドレス、電話番号
- 正確な位置情報(緯度/経度)
- Cookie ID、広告 ID(集計されていない場合)
- PII を含むカスタムディメンション
- 集計指標(インプレッション、消化額、クリックなど)
- 粗い地理情報(市/州/国。番地は不可)
- デバイスタイプカテゴリ(モバイル/デスクトップ/タブレット)
- ブラウザ/OS カテゴリ
- 時間ベースの集計
- Webhook 配信ではなくデータ収集レイヤーで PII をマスクします
- 再識別されないよう集計閾値を設定(例: セグメントあたり 10 ユーザー以上)
- 収集データと Webhook で共有するデータの違いを明文化
- GDPR 準拠のため DPA(データ処理契約)を提供
- GDPR/CCPA の削除依頼に対応
requested_metricsやカスタムディメンションで PII を要求しません- Webhook データが集計・匿名化されていることを理解します
- 適切なデータ保持ポリシーを実装
- プライバシーポリシー/ユーザー通知に Webhook データを含めます
実装ベストプラクティス
- 配列を扱う: 1 件でも
media_buy_deliveriesは配列として処理します - 冪等なハンドラー: 重複通知を安全に処理(Webhook は at-least-once 配信)
- シーケンス管理:
sequence_numberで欠落/順不同の通知を検知 - フォールバックポーリング: Webhook 失敗時に備え定期ポーリングを継続
- タイムゾーン意識: 期間計算のためパブリッシャーのタイムゾーンを保持
- 頻度の検証: リクエストした頻度が
available_reporting_frequenciesに含まれることを確認 - 指標の検証: リクエストした指標が
available_metricsに含まれることを確認 - PII コンプライアンス: Webhook ペイロードにユーザーレベルデータを含めない
Webhook Health Monitoring
Webhook 配信ステータスは AdCP のグローバルタスク管理システム で追跡します(Task Lifecycle 参照)。reporting_webhook を設定してメディアバイを作成すると、パブリッシャーは配信用のタスクを生成します。バイヤーは標準のタスククエリで Webhook の健全性を監視できます。
タスク管理を使う利点:
- すべての AdCP オペレーションで一貫したステータス管理
- ポーリング/Webhook の標準パターンを利用
- ステータス/履歴/エラーの既存インフラを活用
- メディアバイ固有の健全性エンドポイントが不要
オフラインファイル配信ベースのレポーティング
例: オフライン配信 パブリッシャーが日次レポートをバイヤーのクラウドストレージへプッシュ:- 同一バイヤーで 100 本超のアクティブキャンペーン
- 時間単位レポートが必要(コスト 24 倍削減)
- 詳細な内訳や多次元データでボリュームが大きい
- バイヤーにバッチ処理基盤があります
get_adcp_capabilities で宣言します。get_media_buy_delivery によるポーリングは常に利用可能です——これはすべての media_buy セラーの必須タスクです。
reporting_capabilities でサポートするケイデンスとメトリクスを宣言します:
prefix で分離した共有バケットを使ってもよく、いずれの場合もバイヤーは自分のアカウントのパス配下のデータにのみアクセスできます。複数の購買プラットフォームが同じブランドで動作する場合、それぞれが別個のアカウント(オペレーター/エージェントでスコープ)を得るため、データはプレフィックスで分離されます。
バケットの場所は sync_accounts が返すアカウントオブジェクトに現れます:
get_media_buy_deliveryはすべてのmedia_buyセラーの必須タスクです。セラーがどのプッシュ方法をサポートするかに関わらず、ポーリングは常にベースラインとして利用可能です。reporting_delivery_methodsにofflineが含まれ、アカウントにreporting_bucketが存在する場合、セラーは詳細な配信データをバケットにもプッシュします。バッチ基盤を持つバイヤーは効率のためバケットから読むべきです。- バケット内のファイルは
file_retention_days(reporting_bucketで宣言)の間保持されます。バイヤーはこのウィンドウ内にファイルを読まなければなりません。 get_media_buysは常に、ステータス・合計・ペーシングのスナップショットを持つメディアバイオブジェクトを返します。詳細なレポートではなくステータス確認に使ってください。
.jsonl.gz/.csv.gz のように gzip 圧縮してストレージと転送コストを削減できます。Parquet、Avro、ORC は内部圧縮を使うため、これらのフォーマットではトップレベルの compression フィールドは無視されます。
JSON Lines (JSONL)
1 行 1 メディアバイ(改行区切り JSON)。各行にレポート期間とパッケージレベルのデータを持つ 1 つのデリバリーオブジェクトが含まれます。ネスト構造を保持しつつ、行単位で簡単にパースできるためストリーミング処理に適しています。 Example JSONL file:CSV
For tabular analysis CSV files require unnesting nested arrays. Each record should be unnested to theby_package level, meaning one row per package with parent-level data (reporting period, media buy info, totals) duplicated.
Example CSV structure:
Parquet
For high-volume analytics Columnar format optimized for analytics workloads. Excellent compression ratios. Supports nested structures natively. Best for data warehouses and big data processing. Example Parquet schema:Avro
スキーマリッチなストリーミングパイプライン向け スキーマを埋め込んだ行指向フォーマット。自己記述的で、リーダーは外部のスキーマファイルを必要としません。スキーマの進化(フィールドの追加/削除)を優雅に扱えます。Kafka と Hadoop のエコシステムで一般的。内部圧縮(snappy、deflate、zstd)を使用します。 Avro スキーマの例:ORC
Hive/Spark 分析向け Hadoop エコシステムのツール(Hive、Spark、Presto)での読み取り中心の分析に最適化された列指向フォーマット。述語プッシュダウン、組み込みインデックス、軽量圧縮(snappy、zlib、zstd)が I/O を削減します。struct と array 型を通じてネスト構造をサポートします。 ORC は Parquet と同じ論理スキーマを使います。データウェアハウスが Hive ネイティブなら ORC を、より広いツール互換性なら Parquet を選んでください。 File Structure: Each file contains one media buy delivery per line (JSONL), row (CSV/Parquet/ORC), or record (Avro). Files may contain:- Multiple media buy deliveries (one per line/row)
- Multiple reporting periods for the same media buy (separate rows)
- Multiple media buys (each with its own rows)
- Process files in chronological order using file timestamps
- Handle duplicate files gracefully (idempotent processing)
- Validate file integrity using checksums if provided
- Monitor for missing files and alert on gaps
オフライン配信のセキュリティ考慮事項
オフラインファイルはfile_retention_days の間 at rest で存在するため、IAM ポリシーの設定ミスはテナントをまたいで過去のレポートを漏洩させます。一般的なセキュリティ管理が適用されます。オフライン固有の要件は次のとおりです:
- アクセスは秘匿ではなく IAM レイヤーでスコープする。 バイヤーの読み取りアクセスは
{bucket}/{prefix}/*にスコープされなければなりません(MUST。S3 のバケットポリシー条件、GCS のresource.name.startsWith(...)による条件付き IAM バインディング、またはプレフィックスにスコープした Azure SAS)。セラーがアカウントごとに一つのプレフィックス配下にしか書き込まない場合でも、バケット全体の読み取り付与は非適合です。 - リストもスコープする。 プレフィックスのスコープは、オブジェクトレベルの操作(
s3:GetObject)とリスト(s3:prefix条件付きのs3:ListBucket)の両方をカバーしなければなりません(MUST)。GetObjectをプレフィックスにスコープしつつListBucketを未スコープのままにするポリシーは、バイヤーが他テナントのプレフィックス名を列挙できてしまいます——そのオブジェクトへの読み取りアクセスがなくてもテナント分離の失敗です。GCS のstorage.objects.listと Azure のlistSAS 権限にも同じことが当てはまります。 - アカウント終了時にアクセスを取り消す。 セラーが
account.statusのinactive・suspended・closedへの遷移を出すとき、セラーは関連する認証情報の受け入れを停止しなければならず(MUST)、バイヤーはそのステータス変更を、自分側で対応する IAM の信頼を削除するトリガーとして扱うべきです(SHOULD)。廃止されたバケットに付与されたままのセラー IAM ロールは横展開のリスクです。
setup_instructions はセラー提供の URL です。これはオペレーター向けのドキュメントであり、エージェントが消費するコンテンツではありません。バイヤーエージェントはこの URL を自動取得してはならず(MUST NOT)、人間のオペレーターに提示すべきです(SHOULD)。実装が取得を選ぶ場合(例: オペレーターに見せる前に対象をプレビューする)、Webhook URL の SSRF 検証を適用し、取得したコンテンツは間接プロンプトインジェクションの防御なしに LLM コンテキストへ渡してはなりません(MUST NOT)——このフィールドのセラー制御のテキストは、認証情報のローテーション、請求の変更、下流エージェントの挙動の改変を指示しうる。
Data Reconciliation
get_media_buy_delivery API はすべてのキャンペーン指標の正式な信頼できる唯一の情報源です。 ポーリングは常にベースラインとして利用可能です。セラーがプッシュ型の配信(Webhook やオフラインバケット)もサポートする場合、それらの方法はタイムリーなデータを提供しますが、get_media_buy_delivery が照合の経路であり続けます。
照合は あらゆるレポート配信方法 で重要です。
- Webhooks: ネットワーク障害やサーキットブレーカーで欠落する場合があります
- オフラインファイル: 遅延・破損・処理失敗の可能性があります
- ポーリング: API 障害中にデータを欠損する場合があります
- 遅延データ: 初回レポートから 24〜48 時間以上後に届くインプレッションがある(全手段共通)
Reconciliation Process
バイヤーは定期的に配信データを API と照合し、精度を確認すべきです。 Recommended Reconciliation Schedule:- Hourly delivery: Reconcile via API daily
- Daily delivery: Reconcile via API weekly
- Monthly delivery: Reconcile via API at month end + 7 days
- Campaign close: Always reconcile after campaign_end + attribution_window
- Delivery failures: Webhooks missed, offline files corrupted, API timeouts during polling
- Late-arriving data: Impressions attributed after initial reporting (all delivery methods)
- Data corrections: Publisher adjusts metrics after initial reporting
- Processing errors: Buyer-side failures to process delivered data
- Timezone differences: Period boundaries may differ between delivery and API query
- For billing: Always use
get_media_buy_deliveryAPI at campaign end + attribution window - For real-time decisions: Use delivered data (webhook/file/poll) for speed, reconcile later
- For discrepancies: API data wins, update local records accordingly
- For audits: API provides complete historical data, delivered data is ephemeral
- Store webhook
sequence_numberto detect missed notifications - Run automated reconciliation daily for active campaigns
- Alert on discrepancies >2% for impressions or >1% for spend
- Use API data for all financial reporting and invoicing
- Document reconciliation process for audit compliance
Late-Arriving Impressions
Ad serving data often arrives with delays due to attribution windows, offline tracking, and pipeline latency. Publishers declareexpected_delay_minutes in reporting_capabilities:
- Display/Video: Typically 4-6 hours
- Audio: Typically 8-12 hours
- CTV: May be 24+ hours
遅延データの扱い
過去の期間に遅延データが届いた場合、その期間をis_adjusted: true 付きで 再送 します。
- 大きなデータ変化(インプレッション ±2% 超、または消化額 ±1% 超)
- campaign_end + attribution_window 時点での最終照合
- データ品質修正
Webhook の信頼性
レポート Webhook は AdCP 標準の信頼性パターンに従います。- At-least-once 配信: 同じ通知が複数回届く場合があります
- ベストエフォート順序: 順不同で届く場合があります
- タイムアウトとリトライ: 配信失敗時は回数を限定して再試行
最適化の戦略
コンバージョン最適化
メディアバイパッケージに最適化目標を設定することで、特定の成果(目標 CPC、CPV、ROAS、CPA など)に向けた配信を促します。指標目標(クリック、視聴数)はイベント設定不要で機能します。イベント目標にはイベントソースの設定とコンバージョンデータが必要です。 完全なセットアップ手順は Conversion Tracking を、optimization_goals 配列のリファレンスは Optimization Goals を参照してください。
予算最適化
update_media_buyで成果の高低パッケージ間での 再配分- ペーシング調整 —
even、asap、front_loadedの配信方式を切り替え - 消化効率 — パッケージ間でのコンバージョンあたりコストを比較し、優れたパッケージへ予算をシフト
クリエイティブ最適化
get_media_buy_deliveryでクリエイティブ別の内訳を使った パフォーマンス分析- A/B テスト —
creative_assignmentsでウェイト付き複数クリエイティブを割り当て - リフレッシュ戦略 — 疲弊を防ぐため、ライブラリ対応のセラーには
sync_creativesで、インライン専用のセラーにはupdate_media_buyのインラインpackages[].creativesでクリエイティブを交換
ターゲティング改善
- 地理的最適化 — 地域別配信データに基づき
targeting_overlayを調整 - フリクエンシー管理 — 配信パターンに基づき
frequency_cap(クールダウン抑制または max_impressions/per/window 上限)をチューニング
パフォーマンスフィードバックループ
ビジネス成果をパブリッシャーにフィードバックすることで、AI 主導の最適化を可能にします。詳細な API はprovide_performance_feedback を参照してください。
パフォーマンスインデックスの概念
相対的な成果を示す正規化スコア。0.0= 測定可能な価値や影響なし1.0= ベースライン/想定パフォーマンス> 1.0= 平均以上(例: 1.45 は 45% 改善)< 1.0= 平均未満(例: 0.8 は 20% 低下)
パフォーマンスデータの共有
バイヤーはprovide_performance_feedback タスクを使って任意で成果を共有できます。
サポートされる指標
- overall_performance: キャンペーン全体の成果
- conversion_rate: クリック後/視聴後コンバージョン率
- brand_lift: ブランド認知/想起のリフト
- click_through_rate: クリエイティブのエンゲージメント
- completion_rate: 動画/音声の完了率
- viewability: ビューアブル率
- brand_safety: ブランドセーフティ順守
- cost_efficiency: 望む成果あたりのコスト
パブリッシャーが活用する方法
パブリッシャーはパフォーマンスインデックスを活用して:- 配信最適化: 高成果セグメントへ配信をシフト
- 価格調整: 実証された価値に基づき CPM を更新
- プロダクト改善: 成果パターンに基づきプロダクト定義を磨く
- アルゴリズム強化: 実際のビジネス成果で ML モデルを学習
プライバシーとデータ共有
- パフォーマンス共有は任意でありバイヤーが制御します
- 集計されたパフォーマンス傾向はプラットフォーム全体の改善に利用される場合があります
- 個別キャンペーンの詳細はバイヤーとパブリッシャーの関係内に留まる
ディメンション内訳
配信データは各パッケージ内で複数のディメンションに分解できます。バイヤーはget_media_buy_delivery の reporting_dimensions パラメーターで特定の内訳を指定します。各内訳は by_package 項目内に by_* 配列として現れ、by_creative と同じ構成パターンに従います。
各内訳エントリは
delivery-metrics(clicks、conversions、その他の任意メトリクス)のすべてのフィールドに加え、ディメンション固有のフィールドを継承します。各エントリには必須フィールド列に示したフィールドが必要です。どのディメンションが利用可能かはプロダクトの reporting_capabilities で確認してください。同じセラーの異なるプロダクトが異なる内訳をサポートしうるため、プロダクトレベルのケイパビリティが権威的です。supports_geo_breakdown は利用可能なレベルとシステムを宣言するオブジェクトで、この表の他のケイパビリティ宣言はブール値のフラグです。supports_geo_breakdown 内では、country と region はブール値で、metro は metro-system の値でキー付けされ、ネイティブな postal_area は ISO 3166-1 alpha-2 の国でキー付けされ、国ローカルな postal-system 値の配列を持ちます。geo の行は geo_level: "metro" と "postal_area" で system を使います。ネイティブな郵便の行は country も含みます。非推奨の国融合型の郵便システムは互換性のため引き続き受け付けられます。
プレースメントのアイデンティティはパブリッシャースコープです。プレースメント行は publisher_domain(プロダクトの placements[] エントリ由来のパブリッシャー名前空間)を運んでよく(MAY)、それが存在する場合、バイヤーはマルチパブリッシャープロダクトについて {publisher_domain, placement_id} を安定したプレースメントのアイデンティティとして扱えます。セラーは、プロダクトのプレースメントがそれを運ぶ場合は常に publisher_domain を出すべきです(SHOULD。kind: "publisher_ref" では常に真)。セラーがそれを省略してよいのは、セラーエージェント自身のドメインが名前空間であるレガシーな単一パブリッシャーの文脈における kind: "seller_inline" のプレースメントに限られます。publisher_domain が省略された場合、バイヤーはそのレガシーな単一パブリッシャーの文脈でのみ placement_id をセラーエージェント自身のパブリッシャードメインに対して解釈してよく(MAY)、それ以外ではパブリッシャー横断のプレースメントキーを推測すべきではありません。各プレースメントは正確に一つのパブリッシャー名前空間に属するため、publisher_domain は単一値です。
内訳はオプトイン方式で、明示的に指定しない限りディメンションデータは返されません。指定したディメンションをサポートしていないセラーはそれを黙って省略します。各内訳配列には limit を超える追加行の有無を示す by_*_truncated ブール値が付属します。
ターゲティングの一貫性
レポーティングは AdCP の Targeting アプローチに沿って設計されており、以下を可能にします。- キャンペーンライフサイクル全体での 一貫した分析
- ターゲティングパラメーターによる きめ細かい内訳
- ポートフォリオ最適化のための キャンペーン横断インサイト
Target → Measure → Optimize
ターゲティングとレポーティングの一貫性が好循環を生み出します。- Target: ブリーフとオーバーレイでオーディエンスを定義(例:「主要都市圏のモバイルユーザー」)
- Measure: 同じ属性でレポート(デバイスタイプと地域別のパフォーマンスを追跡)
- Optimize: 配信改善にパフォーマンスをフィードバック(高成果セグメントへ予算をシフト)
標準指標
すべてのプラットフォームがサポートしなければなりませんコア指標:- impressions: 広告表示数
- spend: 通貨建て消化額
- clicks: クリック数(該当する場合)
- ctr: クリック率(clicks/impressions)
- conversions: クリック後/視聴後コンバージョン
- viewability: ビューアブルインプレッションの割合
- completion_rate: 動画/音声の完了率
- engagement_rate: プラットフォーム固有のエンゲージメント指標
プラットフォーム固有の考慮事項
プラットフォームによってレポーティング/最適化の機能は異なります。Google Ad Manager
- 包括的なディメンション別レポーティング、リアルタイム/ヒストリカルデータ、高度なビューアビリティ指標
Kevel
- リアルタイムレポーティング API、カスタム指標サポート、柔軟な集計オプション
Triton Digital
- 音声固有指標(完了率、スキップ率)、局別パフォーマンスデータ、デイパート分析
高度な分析
キャンペーン横断分析
- 複数キャンペーンにまたがる ポートフォリオパフォーマンス
- オーディエンスオーバーラップ とフリクエンシー管理
- キャンペーン間の 予算配分 最適化
予測インサイト
- ヒストリカルデータに基づく パフォーマンス予測
- AI 分析による 最適化レコメンデーション
- プロアクティブな調整のための トレンド予測
レスポンスタイム
最適化オペレーションには予測可能なタイミングがあります。- デリバリーレポート: 約 60 秒(データ集計)
- キャンペーン更新: 分〜日単位(変更内容による)
- パフォーマンス分析: 約 1 秒(キャッシュ済み指標)
ベストプラクティス
- 頻繁にレポートする: 定期的なレポーティングが最適化機会を増やす
- ペーシングを追跡する: 目標に対する配信を監視し、過不足を防ぐ
- パターンを分析する: ディメンション横断でパフォーマンストレンドを探す
- レイテンシを考慮する: 一部の指標には帰属遅延がある場合があります
- 指標を正規化する: パフォーマンス比較に一貫したベースラインを使用します
メディアバイライフサイクルとの統合
最適化/レポーティングはアクティブなキャンペーン全期間を通じて継続するフェーズです。- 作成との連携: 学習を活かして将来のキャンペーン設定を改善
- 更新の指針: キャンペーン変更のためのデータドリブンな意思決定
- スケールの実現: 実証された戦略を類似キャンペーンへ展開
- AI へのフィード: パフォーマンスデータが自動最適化を向上
関連ドキュメント
get_media_buy_delivery- デリバリーレポートの取得update_media_buy- パフォーマンスに基づくキャンペーン変更- Media Buy Lifecycle - キャンペーン管理の完全なワークフロー
- Targeting - ブリーフベースのターゲティングとオーバーレイ