Skip to main content

カタログ

カタログはセラーがブランドに優れた成果を提供できるよう渡すすべての材料です。EC ブランドはプロダクトカタログ(SKU、価格、画像)をプッシュして、プラットフォームがスポンサードプロダクトのカルーセルを構築できるようにします。旅行広告主はフライト、ホテル、目的地ガイドをプッシュします。雇用主は求人をプッシュします。小売業者は店舗の場所とリアルタイムの在庫をプッシュします。ブランドはオファリング、サービス、季節のキャンペーンをプッシュします。 材料が豊かであるほど、結果は良くなります。特に AI プラットフォームでは、カタログデータがクリエイティブのインプットそのものになる — プラットフォームの LLM は事前に構築されたバナーを配信するのではなく、プロダクト、オファリング、ブランドコンテキストから広告を組み立てる。しかしカタログは AI メディア以外でも重要だ: リテールメディアネットワーク、コマースプラットフォーム、ネイティブ広告ネットワークなど、データから動的に広告を組み立てるセラーはすべて、豊かなカタログフィードから恩恵を受けます。 カタログは測定とも直接つながっています。ストアカタログをプッシュすると、セラーは広告配信と店舗レベルの来客トラフィックを関連付けられます。プロダクトカタログをプッシュすると、リテールメディアネットワークは購買アトリビューションのループを閉じられます。より優れたクリエイティブを可能にする同じデータが、より優れた測定も可能にします。

仕組み

  • フォーマットが宣言するassets 配列内の catalog アセットタイプとして必要なカタログタイプを宣言します
  • バイヤーが同期するsync_catalogs を通じてセラーアカウントにカタログフィードをプッシュし、プラットフォームがレビューと承認を行います
  • クリエイティブが参照する — マニフェストの assets マップ内でアイテムをインラインに埋め込む代わりに、catalog_id で同期済みカタログを参照します

どのカタログタイプを使うべきか

広告するものに合ったカタログタイプを選ぶ。 各バーティカルタイプ(job から app)は定義された AdCP スキーマを持ち、フィールドテーブルと開始テンプレートを含む例についてはカタログアイテムスキーマページを参照。構造的タイプ(product、inventory、promotion)は feed_formatfeed_field_mappings を通じて既存のフィードフォーマットにマッピングするフリーフォームスキーマを使用します。

sync_catalogs の位置づけ

sync_catalogsバイヤーからセラーへのタスクです。バイヤーはカタログフィードをセラーのアカウントにプッシュし、セラーはキャンペーンで使用される前にレビューと承認を行います。

アクター

ライフサイクル上の位置

sync_catalogs はフォーマット発見とクリエイティブ提出の間に位置します。バイヤーは同期前にフォーマットが必要とするカタログタイプを知る必要があり、クリエイティブが参照する前に承認されたカタログが必要です。 これはアカウント状態に記載されているのと同じ依存関係の順序だ: sync_catalogssync_creativescreate_media_buy

sync_catalogs とインラインの使い分け

すべてのワークフローが sync_catalogs を必要とするわけではありません。以下の場合に使用します:
  • プラットフォームレビューが必要 — コンテンツポリシーチェックを通過するプロダクトカタログ(Google Merchant Center のようなもの)
  • フィードが頻繁に変更される — URL を指定してプラットフォームがスケジュールに従って再フェッチできるようにします
  • 複数のクリエイティブが同じフィードを共有する — 一度同期して、多くのクリエイティブから catalog_id で参照します
  • セラーがすでにデータを持っている可能性がある — ディスカバリーモードを使用してアカウントに既に存在するものを確認します
少数のアイテムを含むシンプルなキャンペーンの場合、クリエイティブの assets マップ内のアセットとしてインラインカタログを使用することで十分だ — 同期ステップは不要。

カタログタイプ

カタログタイプは2つのカテゴリに分類されます: データの役割を説明する構造的タイプと、業界固有のアイテムスキーマを定義するバーティカルタイプ。

構造的タイプ

バーティカルタイプ

各バーティカルタイプは定義された AdCP アイテムスキーマを持つため、フォーマットは catalog_type: "hotel" と宣言でき、プラットフォーム固有のドキュメントを参照することなく両側が必須フィールドを把握できます。

型付きカタログアセット

バーティカルカタログアイテムは、オファリング型カタログと同じ OfferingAssetGroup 構造を使用する assets 配列をサポートします。これは具体的な問題を解決する: 標準カタログフィードには単一の image_url フィールドがあるが、Snap のホテル広告には 1080×1920 の縦型画像が必要で、ディスプレイバナーには 1920×1080 の横型ヒーロー画像が必要で、広告主のロゴは別のスロットに配置されます。型付きプールがなければ、クリエイティブエージェントはどのスロットにどの画像を使用するかを推測しなければなりません。 ロールでグループ化されたアセットを提供することで、各カタログアイテムは持っている画像を自己記述する:
asset_group_id の語彙はプロトコルレベルでは標準化されていない — 各フォーマットはカタログアセットの requirements 内の offering_asset_constraints を通じて使用するグループ ID を定義します。一般的な慣例: images_landscape(16:9)、images_vertical(9:16)、images_square(1:1)、logovideo。動画プールは画像プールと並ぶ第一級のカタログアセットグループです——汎用の video プールに加えて、向き固有の video_vertical(9:16)と video_horizontal(16:9)のプール ID により、画像プールと同じ方法でフィードが向きごとの動画を運べます。 フォーマットは field_bindingsフォーマットカタログ要件 を参照)を使用して、テンプレートスロットがどのアセットグループにマッピングされるかを明示的に宣言します。

Catalog オブジェクト

スキーマ URL: /schemas/core/catalog.json
test=false

コンバージョンイベント

conversion_events フィールドはカタログアイテムとコンバージョントラッキングシステムの間に明示的なリンクを作成します。バイヤーがコンバージョンイベントを宣言してカタログを同期すると、プラットフォームはどのイベントをどのカタログアイテムにアトリビュートするかを認識します。イベントの content_ids フィールドは接続するアイテム ID を保持します。 content_id_type フィールドは content_ids 値がどの識別子タイプを表すかを宣言する — 例えば、クロスリテーラーのプロダクトマッチングには gtin、求人には job_id。これはプラットフォームにカタログアイテムのどのフィールドと照合するかを伝える。カスタム識別子スキームを使用する場合は content_id_type を省略します。 バーティカル別の自然なマッピング: これらのマッピングはスキーマによって強制されるわけではない — バイヤーがカタログを同期する際に宣言します。submit_application と並んで lead イベントもトラッキングする求人カタログは完全に有効です。

カタログのソーシング

カタログデータを提供する方法は3つあり、それぞれ異なる成熟段階に適している:

インラインアイテム

どのカタログタイプも items 配列を通じてアイテムを直接埋め込める。アイテムスキーマはカタログの type に依存する:
バーティカルタイプは業界固有のアイテムスキーマを使用します:

外部フィード URL

AdCP の外部で管理されているフィードの場合、URL を指定してプラットフォームにフェッチさせる:

同期済みカタログへの参照

sync_catalogs を通じてアカウントに既に存在するカタログは、catalog_id で参照する:

カタログの同期

頻繁に変更されるカタログやプラットフォームレビューが必要なカタログには、sync_catalogs を使用してアカウント上でマネージドなライフサイクルを持たせる。これは sync_creatives と同じパターン — upsert セマンティクス、非同期承認、アイテムごとのステータス。

なぜ同期するか

  • プラットフォームレビュー: プロダクトカタログはコンテンツポリシーチェックを通過する(Google Merchant Center がプロダクトリストをレビューするように)。sync_catalogs はアイテムごとの承認ステータスを返します。
  • フィード管理: 外部フィード URL を指定するとプラットフォームがスケジュールに従って再フェッチするため、バイヤーは変更のたびに再同期する必要がない。
  • マルチフィードクリエイティブ: フォーマットは複数のカタログタイプ(product + inventory + store)を必要とすることがあります。カタログを別々に同期することで、クリエイティブが catalog_id で参照できます。
  • 承認ワークフロー: 非同期レスポンスにより、アイテムが承認、却下、または問題のフラグが立てられた時にバイヤーに通知します。

同期リクエスト

アイテムレベルのレビューを含む同期レスポンス

ディスカバリーモード

catalogs を省略すると、変更なしでアカウント上のすべてのカタログをリストアップする:
これは重要です。セラーは他のソースからブランドデータを既に持っている可能性があるからだ — 小売業者はコマースプラットフォームからブランドのプロダクトカタログを持っているかもしれない。ディスカバリーによりバイヤーはすべてを再アップロードするのではなく、既存の状態の上に構築できます。

フィードフィールドマッピング

外部フィードは AdCP カタログアイテムスキーマと完全に一致することはほとんどない。フィールド名が異なり、日付はプラットフォーム固有のフォーマットを使用し、価格は整数のセントとしてエンコードされている場合があり、画像は型なし URL として届く。feed_field_mappings は宣言的な正規化レイヤーを提供する — sync_catalogs リクエスト内の catalog オブジェクトに含まれる — これによりバイヤーはすべてのフィードを前処理することなく変換を記述できます。
各マッピングエントリは次のいずれかだ:

サポートされているトランスフォーム

複数のマッピングがネストされたオブジェクトを組み立てられます。上記の price.amountprice.currency のマッピングは price オブジェクトの各フィールドを独立して書き込む。

アイテムスキーマリファレンス

各バーティカルカタログタイプには、フィールドテーブル、必須フィールド、開始テンプレートを含む定義済みアイテムスキーマがあります。すべてのバーティカルタイプの最小例とフル例を含む完全なリファレンスについては**カタログアイテムスキーマ**を参照。

フォーマットカタログ要件

プロダクトリスト、ストアロケーター、プロモーションコンテンツをレンダリングするフォーマットは、assets 配列内の catalog アセットタイプとして必要なカタログフィードを宣言します。各カタログアセットは catalog_typemin_itemsrequired_fields などのフィールドを持つ requirements を持ちます。これにより購買エージェントはクリエイティブを提出する前にどのカタログを同期すべきかを把握できます。
購買エージェントはフォーマット発見後にフォーマットの assets 配列内のカタログアセットタイプを確認し、sync_catalogs 経由で必要なカタログを同期し、それらのカタログを参照するクリエイティブを提出します。

フィールドバインディング

フォーマットはカタログアセットの requirements 内に field_bindings を宣言して、テンプレートスロットをカタログアイテムフィールドまたはアセットプールに明示的にマッピングできます。これによりフォーマットが自己記述的になる — クリエイティブエージェントはどのカタログフィールドがどのテンプレートスロットにマッピングされるかを推測する必要がなくなります。
繰り返し可能なグループ(各スライドが1つのカタログアイテムのカルーセル)の場合、カタログアセットの requirements.field_bindings 内で format_group_idcatalog_item: true を使用します:
フィールドバインディングはオプション — バインディングがない場合、クリエイティブエージェントはフィールド名とアセットタイプからマッピングを推測できます。バインディングを提供することで曖昧さがなくなり、レンダリング前の検証が可能になります。

クリエイティブ内のカタログ

クリエイティブはマニフェストの assets マップのエントリとしてカタログを参照します。各カタログアセットはフォーマットで宣言された asset_id(例: product_catalog)でキー付けされます。これはデータ参照だ — クリエイティブにどのアイテムをレンダリングするかを伝える(カルーセルのプロダクト、ストアロケーターの場所)。キャンペーン展開ディレクティブではありません。キャンペーン構造と予算配分は create_media_buy パッケージによって処理されます。 フォーマットがカタログアセットタイプを宣言している場合、購買エージェントは必要なカタログをアカウントに同期し、クリエイティブの assets マップの対応するアセットキーを同期済みデータを参照するように設定します。

ワークフロー

  1. フォーマット要件を発見するlist_creative_formats を呼び出し、フォーマットの assets 配列で catalog アセットタイプとその requirements を確認します。
  2. カタログを同期するsync_catalogs を使用して必要なフィードをアカウントにプッシュします。承認を待つ。
  3. クリエイティブを提出する — 対応するアセットキーで catalog_id により同期済みカタログを参照する:

オファリング

スキーマ URL: /schemas/core/offering.json オファリングは offering 型カタログ内の個々のプロモート可能なアイテムだ — キャンペーン、プロダクト、サービス、プロモーション、または求人。各オファリングは独自の名前、有効期間、ランディング URL、クリエイティブアセット、地理的スコープを持つセマンティック単位です。
test=false

OfferingAssetGroup

スキーマ URL: /schemas/core/offering-asset-group.json オファリング内のクリエイティブアセットの型付きプール。フォーマットレベルのアセット定義と同じ asset_group_id の語彙を使用し、フォーマットが各オファリングが提供しなければなりませんものについてグループごとの制約を宣言できるようにします。
test=false

OfferingAssetConstraint

スキーマ URL: /schemas/core/requirements/offering-asset-constraint.json 各オファリングが提供しなければなりませんアセットグループを指定するためにフォーマットによって宣言されます。カタログアセットの requirements 内で使用して、カタログ内のオファリングが提供しなければなりませんものを制約します。
test=false

オファリングのフォーマット要件

list_creative_formats を呼び出し、フォーマットの assets 配列で catalog アセットタイプを確認して、どのカタログタイプが必要で各オファリングが何を提供しなければなりませんかを確認します:

ストア

スキーマ URL: /schemas/core/store-item.json StoreItem は store 型カタログ内の物理的な場所を表します。各ストアは座標、オプションの住所、およびその場所周辺の地理的な到達範囲を定義する1つ以上のキャッチメントエリアを持ちます。
test=false

キャッチメントエリア

スキーマ URL: /schemas/core/catchment.json キャッチメントはストアがサービスを提供する地理的エリアを定義します。3つの方法がサポートされている — 各キャッチメントに対して1つだけ提供します: 等時線インプット — プラットフォームが移動時間と交通手段から形状を解決し、道路ネットワーク、交通ルート、地形を考慮する:
シンプルな半径 — ストアの座標を中心とする円:
事前計算された GeoJSON — バイヤーがすでに境界を計算済み(TravelTime、Mapbox などを使用)またはカスタムのトレードエリアデータを持っている:
ストアは複数のキャッチメントを持てる — 異なる交通手段は異なる境界を生成します。都市部のフラッグシップストアは 10 分の徒歩キャッチメントと 15 分の自動車キャッチメントの両方を定義できる:
catchment_id はターゲティングが参照するものだ — キャンペーンは特定のストアの walk キャッチメントまたはカタログ内のすべてのストアの drive キャッチメントをターゲットにできます。

インラインストアカタログ

SI インテグレーション

カタログ内のオファリングはスポンサードインテリジェンスの会話を通じてプロモートできます。ブランドの SI エージェント URL は catalog ではなくブランドアイデンティティで宣言される — SI はブランドレベルの機能です。 offering_id がカタログアイテムを会話に接続する:
  1. ユーザーがインテントを表明する — 「来週 LA へのフライトが必要です」
  2. パブリッシャーがオファリングにマッチするkeywords を使用して関連するオファリングを見つけ、valid_from/valid_to を確認します
  3. パブリッシャーが SI セッションを開始するoffering_id とユーザーコンテキストをブランドの SI エージェントに渡します
  4. ブランドエージェントが応答する — コンテキスト情報、UI 要素、会話型エクスペリエンスで
ディスプレイクリエイティブと SI は共存できる: 同じオファリングがディスプレイ広告として機能し、会話型エクスペリエンスでも利用できます。

ユースケース

ユニバーサルフォーマット(アセットプール)

バイヤーは複数のオファリングを提供し、それぞれが独自のクリエイティブアセットプールを持ちます。パブリッシャーは最も関連性の高いオファリングを選び、最適なヘッドライン/画像の組み合わせを組み立てる:

同期済みフィードを使ったプロダクトカタログ

リテールメディアでは、プロダクトと在庫フィードを同期してからクリエイティブで参照する:
パブリッシャーは同期済みプロダクトデータとリアルタイムの在庫からクリエイティブを組み立てる。

会話型のみ

事前構築されたクリエイティブなし — SI 会話に利用可能なオファリングのみ。ブランドの SI エージェント URL はブランドアイデンティティから発見されます:

場所固有のオファリング

複数の物理的な場所を持つブランド(レストラン、小売チェーン、求人募集)の場合、各オファリングは geo_targets を通じて地理的スコープを宣言する:
オファリングの geo_targets はオファリングが何であるかについてだ — アムステルダムの求人はロッテルダムにいる人には存在しません。キャンペーン全体の geo ターゲティングはパッケージの targeting_overlay に属します。

メディアバイライフサイクル内のカタログ

カタログはメディアバイライフサイクル全体を流れる — プロダクト発見から配信レポートまで。

カタログ駆動の発見

get_productscatalog を渡して、カタログアイテムにマッチするプロダクトを見つける。セラーはカタログアイテムをインベントリと照合し、マッチが存在するプロダクトを返します。プロダクトは catalog_types を通じてサポートするカタログタイプを宣言します。

カタログ駆動パッケージ

create_media_buy のパッケージに catalog フィールドを含めてカタログ駆動にします。1つの予算エンベロープがカタログ全体をプロモートする — プラットフォームはパフォーマンスに基づいてアイテム間の配信を最適化します。これは Google Performance Max や Meta Dynamic Product Ads のようなカタログベースのキャンペーンタイプの AdCP 相当です。

カタログアイテムとしてのバリアント

カタログ駆動パッケージでは、異なる広告実行としてレンダリングされる各カタログアイテムがクリエイティブバリアントだ。バリアントのマニフェストには、レンダリングされた特定のアイテムと共にカタログ参照が含まれます。

アイテムごとの配信レポート

get_media_buy_delivery は各パッケージ内の by_catalog_item ブレークダウンを返し、アイテムごとのインプレッション、支出、クリック、コンバージョン、ROAS を表示します。

コンバージョンアトリビューション

コンバージョンイベントは関与したカタログアイテムを識別する content_ids を持ちます。カタログの content_id_type は識別子タイプを宣言します。アトリビューションは広範だ — ユーザーはアイテム A をクリックしてアイテム B でコンバートするかもしれない。イベントは実際の content_id で発火します。コンバージョントラッキングを参照。

マクロによるアイテムレベルのトラッキング

インプレッションレベルのアトリビューション(どのアイテムがクリックされたか、どのアイテムが閲覧されたか)には、クリエイティブのトラッカーピクセル URL にカタログアイテムマクロを使用します。マクロは content_id_type 列挙型を反映する — 配信時に使用される同じ識別子がコンバージョンイベントに現れる:
配信時に、プラットフォームは {OFFERING_ID} をレンダリングされている特定のオファリングで置換します。5つのオファリングを表示するカルーセルでは、各アイテムのインプレッションがそのアイテムの識別子で発火します。 カタログの content_id_type に一致するマクロを使用します: これにより閉じたアトリビューションループが作成されます: 同じ識別子がインプレッショントラッカー(配信時のマクロ経由)、クリックトラッカー、コンバージョンイベント(イベント時の content_ids 経由)に現れる。

カタログコンテンツマクロ

上記のマクロは、レンダリングされたアイテムの識別子に解決されます。カタログコンテンツマクロは、カタログ駆動のクリエイティブテンプレート(sponsored_placement / DPA——Meta DPA、Snap Collection、TikTok Shopping)向けに、レンダリングされたアイテムのスカラーフィールド値に解決されます。各トークンは、field_bindings が使うのと同じ catalog_field のドット記法パスを介して、カタログアイテムのフィールドに 1:1 でマップされます——コンテンツマクロは並行するものを定義するのではなく、その語彙を再利用します: コンテンツマクロはシングルブレース {MACRO} 構文を使い、ID マクロと同じ代入安全性のルール(NFC 正規化 → RFC 3986 パーセントエンコード → 一巡のネスト展開禁止 → URL コンテキストのスコープ)の下で代入されます。{{ダブルブレース}} はコンテンツマクロ構文ではありません——セールスエージェントが中和しなければならない下流のアドサーバーマクロのために予約されたままです。URL 値と画像値のフィールド(landing_url、画像プール)は、コンテンツマクロではなく field_bindings を介して url/アセットスロットにバインドされます。 どのアイテムがレンダリングされるかは、sponsored_placement フォーマットの fanout_mode 列挙(Meta-DPA の広告ごとに 1 アイテムのパターンには single_itemper_item、または multi_item_in_creative)を介してセラーが宣言します——バイヤー側の選択フィールドはありません。ML 最適化された DPA サーフェスでは、プラットフォームがバイヤーの作成したオーバーレイテキストを上書きする場合があるため、コンテンツマクロはセラーが尊重してもよい(MAY)ヒントです。

ベストプラクティス

asset_group_id をフォーマットの語彙に合わせる

オファリングを構築する前に list_creative_formats からフォーマット定義を読む。asset_group_id の値は各カタログアセットの requirements 内の offering_asset_constraints でフォーマットが宣言しているものと正確に一致しなければなりません。headlinesimagesvideos などのグループ ID はフォーマット定義の語彙であり、プロトコル定数ではない — 各フォーマットは独自の ID を選択します。プロトコルはコンテナと制約メカニズムを提供します。フォーマットは語彙を定義します。

最小限以上のアセットを提供します

アセットプールを使用するフォーマットは最もパフォーマンスの高い組み合わせを選択します。許可される最大数のアイテムを提供することで、パブリッシャーに使える素材が増える。

有効期間を設定します

期間限定プロモーションには、常に valid_fromvalid_to を設定します。パブリッシャーは期限切れのオファリングを自動的にフィルタリングします。

本質的に場所固有のオファリングには geo_targets を使います

オファリングのアイデンティティが地理的な場所に結びついている場合 — 求人募集、店内プロモーション、ローカルイベント — geo_targets でスコープを宣言します。これは広告ターゲティングではありません。オファリングが何であるかのプロパティです。

カタログオファリングには常に landing_url を提供します

カタログ駆動クリエイティブでは、landing_url はプラットフォームが広告のリンクアウト URL(スワイプアップ、CTA ボタン、カルーセルカードリンク)にマッピングするアイテムごとのクリックスルーデスティネーションです。カタログ内のすべてのオファリングに landing_url を含めるべきです。直接コンバージョンがサポートされている場合は checkout_url も含めます。

カタログアイテム間の予算配分

カタログアイテム間の予算配分はプラットフォームの最適化の決定だ — 一部のプラットフォームは均等に配分し、他はパフォーマンスシグナルに基づいて配分します。プロトコルは特定の配分方法を規定しません。予算は個々のオファリングではなく create_media_buy パッケージに属します。アイテムごとの予算上限が必要なキャンペーンの場合、オファリングごとに別のパッケージを使用します。

関連ドキュメント