入札乗数

このAPIは、許可リストに登録されているパートナーと広告主だけに提供されています。これを使用する場合は、Meta担当者にお問い合わせください。

広告主は、入札乗数を利用して必要なオーディエンスセグメンテーションの量を減らすことができます。入札乗数によって、単一の広告セット内で1つのターゲットオーディエンスについて微妙な入札戦略を維持することができるからです。例えば、広告主は1つの広告セットを作成した後で、入札乗数を使用して、それらの最新性バケットについてそれぞれ異なる方法で入札することができます。

通常、広告主は、さまざまなオーディエンスセグメントに対して異なる入札ができるように広告セットを作成します。例えば、広告主は、18–25、26–35、36–65の3つの異なる年齢グループに対応する3つの広告セットを作成することができます。

住宅、雇用、クレジットの広告を掲載する広告主(米国に拠点を置く広告主、または米国をターゲットとした広告を掲載している広告主)には、さまざまな制限があり、一部のオーディエンスカテゴリを入札調整に利用できます。住宅、雇用、クレジットのキャンペーンでは、agegenderlocalehome_locationuser_bucket、および類似custom_audience(類似オーディエンスから派生したカスタムオーディエンス)のオーディエンスカテゴリに対する入札調整が制限されています。特別な広告カテゴリを参照してください。

2023年1月30日より、サードパーティのデータカテゴリ(booking_windowcustom_audience (疑似カスタムオーディエンスを含む)、lengthofstaytravelstartdatetravelstartdayofweekuser_recencyuser_bucket)の入札乗数を使用した広告は、オプトアウトしたユーザーには配信されなくなります。

入札乗数のベストプラクティス

  • カスタマイズした複合的な入札戦略を使用することにより、作成するオーディエンスセグメントや広告セットが多くなり過ぎないようにします。これは、キャンペーンを過剰にセグメント化して比較的少人数のオーディエンスを対象とした多数の広告セットにすることを回避しつつ、より良い広告配信を達成するのに役立ちます。
  • 入札乗数は1つの目的に固有のものではありません。それらは、APP_INSTALLSCLICKSLANDING_PAGE_VIEWSLEAD_GENERATIONOFFSITE_CLICKSOFFSITE_CONVERSIONSの最適化と互換性があります。
  • かつては、3種類の年齢グループに対応する3つの広告セットを作成できました。その上で、それらの広告セットのそれぞれを個別に入札することができました。単一の広告セットを作成し、複数の入札乗数を使用することにより、それらの年齢グループのそれぞれで異なる入札を実施することができます。入札乗数は、0.09から1.0までの範囲です。
  • 入札乗数は、単一のuser_groupsキーの下に指定する必要があります。

注: 入札乗数ではすべての入札戦略、具体的には入札価格上限、平均目標達成単価上限、および最小単価がサポートされています。

オーディエンスカテゴリを設定する

入札乗数により、オーディエンスカテゴリを定義し、オーディエンスカテゴリごとに入札乗数を割り当てることができます。オーディエンスカテゴリは、利用者データ情報、利用者のデバイス、広告主のカスタムデータにより定義されます。住宅、雇用、クレジットのキャンペーンでは、agegenderlocalehome_locationuser_bucket、および類似custom_audience(類似オーディエンスから派生したカスタムオーディエンス)のオーディエンスカテゴリに対する入札の割り当てが制限されています。

優先度説明

age

年齢または年齢範囲に基づいて異なる方法で入札します。(住宅、雇用、クレジットのキャンペーンにはご利用いただけません。)

booking_window

旅行開始までの日数に基づいて異なる方法で入札します。

custom_audience

ユーザーの属するcustom_audienceに基づいて入札します。このオプションでは、住宅、雇用、クレジットのキャンペーンを除き、類似オーディエンスがサポートされています。

device_platform

モバイルやデスクトップなど、利用者のデバイスプラットフォームに基づいてそれぞれ異なる方法で入札します。

gender

性別に基づいて異なる方法で入札します。(住宅、雇用、クレジットのキャンペーンにはご利用いただけません。)

home_location

ユーザーのhome_locationに基づいて入札します。これは、現在の自宅所在地を表します。home_locationの乗数は、市、地域、国のそれぞれに応じてきめ細かく指定できます。(住宅、雇用、クレジットのキャンペーンにはご利用いただけません。)

lengthofstay

旅行の開始と終了の間の日数に基づいて入札します。

locale

英語やスペイン語などのロケールに基づいて異なる方法で入札します。(住宅、雇用、クレジットのキャンペーンにはご利用いただけません。)

position_type

広告の表示される場所に基づいて入札します(facebook_feedfacebook_marketplaceinstagram_storyなど)。

publisher_platform

publisher_platformに基づいて入札します(facebookinstagramaudience_networkmessengerなど)。

travelstartdate

旅行開始日に基づいて異なる方法で入札します(20181231は2018年12月31日、など)。

travelstartdayofweek

旅行開始曜日に基づいて入札します。0が月曜日、6が日曜日です。

user_bucket

広告主のピクセル起動回数またはアプリイベントで定義されるuser_bucket値に基づいて入札します。user_bucketフィールドは、0以上100以下の範囲の整数で表現される任意パラメーターです。(住宅、雇用、クレジットのキャンペーンにはご利用いただけません。)

user_device

user_deviceに基づいて入札します(iPhoneなど)。user_deviceを参照

user_os

user_osに基づいて入札します(iOSやAndroidなど)。

user_recency

利用者が最後にサイトまたはアプリを利用したのがいつかに基づいて入札します。

age

年齢範囲によってユーザーのグループを決定します(18-2526-35など)。例えば、最高入札価格が5米ドルである広告セットの場合、18才から25才までの利用者は2.5米ドルで、26才から40才までの利用者は3.5米ドルで、その他の利用者は5米ドルで入札することができます。: デフォルトは任意です。1.0 乗数としてを適用できます。

{
    "user_groups": {
      "age": {
        "18-25": 0.5,
        "26-40": 0.7,
        "default": 1.0
      }
    }
}

booking_window

可能な内訳値には、1以上の任意の整数が含まれます。例: 1-34-9など。

curl -X POST \ 
  -F 'bid_adjustments=
     {"user_groups":{"booking_window":{"event_sources":["123456789"],"1-2":0.1,"3-5":0.2,"default":0.5}}}' \ 
  -F 'access_token='$access_token \ 
  https://graph.facebook.com/<API_VERSION>/<ad_set_id>

旅行乗数の例も参照してください。

custom_audience

2023年1月30日より、サードパーティのデータカテゴリ(booking_windowcustom_audience (疑似カスタムオーディエンスを含む)、lengthofstaytravelstartdatetravelstartdayofweekuser_recencyuser_bucket)の入札乗数を使用した広告は、オプトアウトしたユーザーには配信されなくなります。

カスタムオーディエンスに基づいて入札を調整することができます。

curl -X POST \ 
  -F 'bid_adjustments=
     {"user_groups":{"custom_audience":{"<CUSTOM_AUDIENCE_ID>":0.8, "<CUSTOM_AUDIENCE_ID>":1.0, "default":0.5}}}' \ 
  -F 'access_token='$access_token \ 
  https://graph.facebook.com/<API_VERSION>/<ad_set_id>

device_platform

指定可能な内訳値は次のとおりです。

  • mobile
  • desktop

{
  "user_groups": {
    "device_platform": {
      "mobile": 0.7,
      "desktop": 0.9
    }
  }
}

gender

性別により利用者をグループに分類します。

{
  "user_groups": {
    "gender": {
      "male": 0.5,
      "female": 0.7,
      "default": 1.0
    }
  }
}

home_location

指定可能な内訳値は次のとおりです。

  • city id
  • region id
  • 2桁の国コード

city idregion idは、検索APIの中にあります。グラフAPIエクスプローラから、または自分のターミナルからクエリを実行できます。

注:defaultを設定できるのはhome_locationの下だけであり、citiesregionscountriesについては、いずれも設定できません。

{
  "user_groups": {
    "home_location": {
      "cities": {
         "2420605": 0.2
      },
      "regions": {
         "3847": 0.5
      },
      "countries": {
         "US": 0.2
      },
      "default": 0.8
     }
  }
}

length_of_stay

指定可能な内訳値には、1以上の任意の整数が含まれます。例: “1-3”“4-9”など。

curl -X POST \ 
  -F 'bid_adjustments=
  {"user_groups":{"length_of_stay":{"event_sources":["123456789"],"1-2":0.1,"3-     5":0.2,"default":0.5}}}' \ 
  -F 'access_token='$access_token \ 
  https://graph.facebook.com/<API_VERSION>/<ad_set_id>

旅行乗数の例も参照してください。

locale

ロケールまたはロケールグループのIDを使用できます。米国英語の場合は6、ドイツ語の場合は5などです。

ロケールIDは、ターゲット設定検索、ロケール(type=adlocale)により調べることができます。例:

{
  "user_groups": {
    "locale": {
      6: 0.8,
      5: 0.3
    }
  }
}

position_type

このカテゴリは、ターゲット設定APIの位置オプションによく似ています。指定可能な内訳値は次のとおりです。

配置

Facebookフィード

facebook_feed

Facebook Marketplace

facebook_marketplace

Facebook動画フィード

facebook_suggested_video

Facebook右側広告枠

facebook_right_hand_column

Facebookビジネス発見

facebook_biz_disco_feed

Instagramフィード

instagram_stream

Instagramプロフィールフィード

instagram_profile_feed

Instagram発見タブ

instagram_explore

Instagram発見ホーム

instagram_explore_home

Messenger受信箱

messenger_messenger_home

Instagramストーリーズ

instagram_story

Facebookストーリーズ

facebook_story

Messengerストーリーズ

messenger_story

Instagramリール

instagram_reels

Facebookリール

facebook_facebook_reels

Facebookインストリーム動画

facebook_instream_video

Facebookリール広告

facebook_facebook_reels_overlay

Facebookの検索結果

facebook_search

Instagramの検索結果

instagram_ig_search

Messengerスポンサードメッセージ

サポートされない

Audience Networkネイティブ、バナー、インタースティシャル

audience_network_classic

Audience Network動画リワード

audience_network_rewarded_video

Audience Networkインストリーム動画

サポートされない

{
  "user_groups": {
    "position_type":{
        "facebook_feed":0.9,
        "messenger_messenger_home":0.7,
        "instagram_stream":0.8,
        "audience_network_classic":0.5,
        "default":0.4
    }
  }
}

publisher_platform

可能な内訳値は次のとおりです。

  • facebook
  • instagram
  • audience_network
  • messenger

{
  "user_groups": {
    "publisher_platform": {
      "facebook": 0.7,
      "instagram": 0.9,
      "default": 1.0 // We'll apply bid multiplier 1.0 if no default is specified anyway
    }
  }
}

travel_start_date

内訳値としては、_yyyymmdd_-_yyyymmdd_の形式の日付範囲が可能です。

curl -X POST \ 
  -F 'bid_adjustments=
     {"user_groups":{"travel_start_date":{"event_sources":["123456789"],"20180901-20181001":0.2,"default":0.9}}}' \ 
  -F 'access_token='$access_token \ 
  https://graph.facebook.com/<API_VERSION>/<ad_set_id>

旅行乗数の例も参照してください。

travel_start_day_of_week

内訳値としては、0以上6以下の整数を指定できます(0が月曜日、6が日曜日)。

curl -X POST \ 
  -F 'bid_adjustments=
  {"user_groups":{"travel_start_day_of_week":{"event_sources":        ["123456789"],"0":0.1,"2":0.2,"6":0.3,"default":0.9}}}' \ 
  -F 'access_token='$access_token \ 
  https://graph.facebook.com/<API_VERSION>/<ad_set_id>

旅行乗数の例も参照してください。

user_bucket

自分独自の利用者分類の結果をFacebookに送信することができます。その上で、追加のuser_bucketパラメーターをピクセル起動またはアプリイベントの中に入れてFacebookに送信してください。利用者バケットは、0から100までの範囲の整数です。

利用者バケットグループ定義は、以下の形式で指定します。

  • event_sources - トラッキングするピクセルの起動またはアプリイベントのソース。
  • event_retention - 任意。古いuser_bucket値を無視する時間(秒数)。
  • events_dedup_mode - 任意。単一のイベントソースが同じユーザーについて異なる複数のuser_bucket値を送信する場合に、使用するuser_bucket値がどれかを指示するためのフラグ。デフォルト値はlatest
  • event_source_preference - 任意。複数のイベントソースが同じユーザーについて異なる複数のuser_bucket値を送信する場合に、使用するuser_bucketがどれかを指示するためのフラグ。デフォルト値はlatest

{
  "user_groups": {
   "user_bucket": {
      "event_sources": [<pixel_id>,<app_id>,...],
      "event_retention": 604800, // optional, exclude old events
      
      //optional, useful when multiple event sources have user_bucket
      "events_dedup_mode": "max"|"min"|"latest",
      
      //optional, dedup user_bucket values sent from one single event source
      "event_source_preference": "max"|"min"|"latest",
      
      "1":0.7, // these are the bid multipliers
      "2":1.0,
     }
  }
}

user_device

指定可能な内訳値は次のとおりです。

  • iPad
  • iPhone

指定できるその他の値については、ターゲット設定検索APItype=adTargetingCategoryおよびclass=user_deviceを指定してご確認ください。

{
  "user_groups": {
    "user_device": {
      "iPad": 0.7,
      "iPhone": 0.9,
      "default": 1.0
    }
  }
}

curl
  -F 'name=Test BM Adset '$(date +%s) \
  -F 'bid_amount=3000' \
  -F 'billing_event=IMPRESSIONS' \
  -F 'optimization_goal=OFFSITE_CONVERSIONS' \
  -F 'daily_budget=15000' \
  -F 'campaign_id=23843038336220329' \
  -F 'promoted_object={"product_set_id":"267888283975766"}' \
  -F 'targeting={
     "geo_locations": {"countries":["AQ"]},
     "dynamic_audience_ids": ["23842885952670329"],
     "publisher_platforms": ["facebook"]
    }' \
  -F 'bid_adjustments={"user_groups":{"user_device": {"iPad": 0.7, "iPhone": 0.9, "default": 1.0}}}' \
  -F 'status=PAUSED' \
  -F 'access_token='$access_token \
  https://graph.facebook.com/<API_VERSION>/act_1653439931385336/adsets

curl
  -F 'name=Test BM Adset '$(date +%s) \
  -F 'bid_amount=3000' \
  -F 'billing_event=IMPRESSIONS' \
  -F 'optimization_goal=OFFSITE_CONVERSIONS' \
  -F 'daily_budget=15000' \
  -F 'campaign_id=23843038336220329' \
  -F 'promoted_object={"product_set_id":"267888283975766"}' \
  -F 'targeting={
     "geo_locations": {"countries":["AQ"]},
     "dynamic_audience_ids": ["23842885952670329"],
     "publisher_platforms": ["facebook"]
     }' \
  -F 'bid_adjustments={"user_groups":{"user_device": {"iPad": 0.7, "iPhone": 0.9, "default": 1.0}}}' \
  -F 'status=PAUSED' \
  -F 'access_token='$access_token \
   https://graph.facebook.com/<API_VERSION>/act_1653439931385336/adsets
   {"id":"23843038339320329"}

curl
  -F 'access_token='$access_token \
  https://graph.facebook.com/VERSION/ID?fields=bid_adjustments
  {"bid_adjustments":{"user_groups":"{\"user_device\":    {\"default\":1,\"iPad\":0.7,\"iPhone\":0.9}}"},"id":"ID"}

上級者向けの例も参照してください。

user_group_weight_spec

指定可能な内訳値は次のとおりです。

  • age
  • gender
  • device_platform
  • publisher_platform
  • user_device
  • user_os

上級者向けの例」も参照してください。

- user_group_weight_specはJSON構造であり、次のようになります。

{
  <BREAKDOWN_NAME>: {
    <BREAKDOWN_VALUE_1>: <WEIGHT_VALUE> OR <NESTED_USER_GROUP_WEIGHT_SPEC>,
    <BREAKDOWN_VALUE_2>: <WEIGHT_VALUE> OR <NESTED_USER_GROUP_WEIGHT_SPEC>,
    <BREAKDOWN_VALUE_3>: <WEIGHT_VALUE> OR <NESTED_USER_GROUP_WEIGHT_SPEC>,
    ...
    "default": <WEIGHT_VALUE> OR <NESTED_USER_GROUP_WEIGHT_SPEC>, // optional, if not specified, we'll use 1.0
  }
}
{
  "age": {
    "18-25": 0.7,
    "26-35": {
      "gender": {
        "male": 0.9,
        "female": 1.0
      }
    },
    "default": 0.85
  }
}

* For users between the ages of 18 and 25, we apply bid multiplier 0.7.
* For male users between the ages of 26 and 35, we apply bid multiplier 0.9.
* For female users between the ages of 26 and 35, we apply bid multiplier 1.0.
* For all other users, we apply bid multiplier 0.85.

内訳値は、年齢整数の範囲です。例えば、18-25の場合は最低年齢は18才です。範囲が重なり合ってはいけません。

{
  "user_groups": {
    "age": {
      "18-25": 0.7,
      "30-40": 1.0,
      "default": 0.3
    }
  }
}

上級者向けの例

> curl 
    -F 'bid_adjustments={"user_groups":{"user_device":{"iPad":0.3,"iPhone":{"user_os":{"Android":0.3,"iOS":{"age":{"18-35":0.3,"35-45":0.4}}}}}}}' -F access_token=$token https://graph.intern.facebook.com/v2.12/6089875504114
{"success":true}%
> curl -G 
   -d access_token=$token https://graph.intern.facebook.com/v2.12/6089875504114\?  fields\=bid_adjustments
{"bid_adjustments":{"user_groups":"{\"user_device\":{\"iPad\":0.3,\"iPhone\":{\"user_os\":{\"Android\":0.3,\"iOS\":{\"age\":{\"18-35\":0.3,\"35-45\":0.4}}}}}}"},"id":"6089875504114"}%

旅行乗数の例

curl -X POST \
  -F 'bid_adjustments={"user_groups":{"travel_start_day_of_week":{"event_sources":["1862565504034757"],"1":0.1,"3":0.1,"default":0.9}}}' \
  -F 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/<API_VERSION>/<ADSET_ID>

  Length of Stay 'bid_adjustments={"user_groups":{"length_of_stay":{"event_sources":["1862565504034757"],"1-2":0.1,"3-7":0.2,"default":0.5}}}'
  Booking window 'bid_adjustments={"user_groups":{"booking_window":{"event_sources":["1862565504034757"],"1-2":0.1,"3-7":0.2,"default":0.5}}}'
  Travel start date: 'bid_adjustments={"user_groups":{"travel_start_date":{"event_sources":["1862565504034757"],"20180918-20190101":0.1,"default":0.5}}}'
  Day of week: 'bid_adjustments={"user_groups":{"travel_start_day_of_week":{"event_sources":["1862565504034757"],"1":0.1,"2":0.1,"0":0.2,"default":0.5}}}'

user_os

指定可能な内訳値は次のとおりです。

  • iOS
  • Windows

指定できるその他の値については、ターゲット設定検索APItype=adTargetingCategoryおよびclass=user_osを指定してご確認ください。

現在使用できる値は以下のとおりです。

  • Android
  • Windows
  • Windows Phone
  • iOS

{
  "user_groups": {
    "user_os": {
      "Android": 0.7,
      "iOS": 0.9,
      "default": 1.0
    }
  }
}

iOS14の影響

ウェブサイトコンバージョンキャンペーンの入札乗数は、iOS 14でのポリシーの変更による影響を受けますか?

はい。iOS 14の変更によりシグナル損失や属性の識別可能性の低下が発生し、その結果広告セット当たりのシグナルが減少することが予想されます。入札可能なカテゴリの大半は引き続き通常どおり機能するはずではあるものの、iOS 14.5ユーザーがターゲットの場合、最新性の乗数、カスタムオーディエンスとuser_bucketが影響を受けます。それらの乗数は、FBピクセルまたはコンバージョンAPIによって測定されるイベントに依存しているからです。その他の乗数はすべてオンサイトデータに由来するものであり、FBピクセルにもコンバージョンAPIにも依存しません。

user_recency

利用者にピクセル起動またはアプリイベントがあるため、利用者を時間別に分類します。どのイベントソースをトラッキングするかを指定し、さらに時間枠を指定する必要があります。

この例は、86400秒以内にピクセルの起動またはアプリイベントが実行されるユーザーに、入札乗数1.0を適用する方法を示しています。

{
  "user_groups": {
    "user_recency": {
      "event_sources": [<pixel_id>,<app_id>,...],
      "0-86400": 1.0,
      "86401-172800": 0.7,
      "default": 0.5
    }
  }
}

複数内訳のカスケード

浮動入札乗数をさらに細かい内訳指定に置き換えることにより、複数内訳の利用者グループを定義することもできます。例えば、最大入札価格が5米ドル以下の広告セットの設定は、次のようになります。

  • 男性利用者の場合は4.5米ドルで入札
  • 18才から25才までの女性利用者の場合は3.5米ドルで入札
  • 26才から35才までの女性利用者の場合は4.0米ドルで入札
  • その他のすべての利用者は5.0米ドルで入札
{
  "user_groups": {
    "gender": {
      "male": 0.9,
      "female": {
        "age": {
          "18-25": 0.7,
          "26-35": 0.8
        }
      }
    }
  }
}

使用方法要件

  • 入札乗数の値の範囲は、0.09から1.0までです。

API呼び出し

取得

curl -G \
  -d 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/<API_VERSION>/<ADSET_ID>?fields=bid_adjustments

更新

curl \
  -F 'bid_adjustments={"user_groups":<USER_GROUP_WEIGHT_SPEC>}' \
  -F 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/<API_VERSION>/<PRODUCT_CATALOG_ID>/<ADSET_ID>

広告セットの入札乗数を作成または更新する

以下は、既存の広告セットを更新するサンプルAPI呼び出しです。(広告セットID、アクセストークン、イベントソース、対象とする入札乗数の値を指定する必要があります。)

curl -X POST \ -F 'bid_adjustments={ "user_groups": { "user_bucket": { "event_sources": [ "<PIXEL_ID>", "<APP_ID>" ], "1": 0.1, "2": 0.2, "3": 0.3, "default": { "gender": { "male": 0.99, "female": 0.12 } } } } }' \ -F 'access_token=<ACCESS_TOKEN>' \ https://graph.facebook.com/v19.0/<AD_SET_ID>/
'use strict'; const bizSdk = require('facebook-nodejs-business-sdk'); const AdSet = bizSdk.AdSet; const access_token = '<ACCESS_TOKEN>'; const app_secret = '<APP_SECRET>'; const app_id = '<APP_ID>'; const id = '<AD_SET_ID>'; const api = bizSdk.FacebookAdsApi.init(access_token); const showDebugingInfo = true; // Setting this to true shows more debugging info. if (showDebugingInfo) { api.setDebug(true); } const logApiCallResult = (apiCallName, data) => { console.log(apiCallName); if (showDebugingInfo) { console.log('Data:' + JSON.stringify(data)); } }; let fields, params; fields = [ ]; params = { 'bid_adjustments' : {'user_groups':{'user_bucket':{'event_sources':['<pixelID>','<appID>'],'1':0.1,'2':0.2,'3':0.3,'default':{'gender':{'male':0.99,'female':0.12}}}}}, }; const sample_code = (new AdSet(id)).update( fields, params ); logApiCallResult('sample_code api call complete.', sample_code);
require __DIR__ . '/vendor/autoload.php'; use FacebookAds\Object\AdSet; use FacebookAds\Api; use FacebookAds\Logger\CurlLogger; $access_token = '<ACCESS_TOKEN>'; $app_secret = '<APP_SECRET>'; $app_id = '<APP_ID>'; $id = '<AD_SET_ID>'; $api = Api::init($app_id, $app_secret, $access_token); $api->setLogger(new CurlLogger()); $fields = array( ); $params = array( 'bid_adjustments' => array('user_groups' => array('user_bucket' => array('event_sources' => array('<pixelID>','<appID>'),'1' => 0.1,'2' => 0.2,'3' => 0.3,'default' => array('gender' => array('male' => 0.99,'female' => 0.12))))), ); echo json_encode((new AdSet($id))->updateSelf( $fields, $params )->exportAllData(), JSON_PRETTY_PRINT);
from facebook_business.adobjects.adset import AdSet from facebook_business.api import FacebookAdsApi access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<AD_SET_ID>' FacebookAdsApi.init(access_token=access_token) fields = [ ] params = { 'bid_adjustments': {'user_groups':{'user_bucket':{'event_sources':['<pixelID>','<appID>'],'1':0.1,'2':0.2,'3':0.3,'default':{'gender':{'male':0.99,'female':0.12}}}}}, } print AdSet(id).update( fields=fields, params=params, )
import com.facebook.ads.sdk.*; import java.io.File; import java.util.Arrays; public class SAMPLE_CODE_EXAMPLE { public static void main (String args[]) throws APIException { String access_token = \"<ACCESS_TOKEN>\"; String app_secret = \"<APP_SECRET>\"; String app_id = \"<APP_ID>\"; String id = \"<AD_SET_ID>\"; APIContext context = new APIContext(access_token).enableDebug(true); new AdSet(id, context).update() .setBidAdjustments(\"{\\"user_groups\\":{\\"user_bucket\\":{\\"event_sources\\":[\\"<pixelID>\\",\\"<appID>\\"],\\"1\\":0.1,\\"2\\":0.2,\\"3\\":0.3,\\"default\\":{\\"gender\\":{\\"male\\":0.99,\\"female\\":0.12}}}}}\") .execute(); } }
require 'facebook_ads' access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<AD_SET_ID>' FacebookAds.configure do |config| config.access_token = access_token config.app_secret = app_secret end ad_set = FacebookAds::AdSet.get(id) ad_set.bid_adjustments = {'user_groups':{'user_bucket':{'event_sources':['<pixelID>','<appID>'],'1':0.1,'2':0.2,'3':0.3,'default':{'gender':{'male':0.99,'female':0.12}}}}} ad_set.save

テストキャンペーンを設定する

Metaアカウントチームとの共同作業を効果測定指導で行い、コンバージョンリフトまたはA/Bテストを使用してテストキャンペーンを作成します。パフォーマンスを審査するには、3パターンのA/Bテストで以下のセルを提案します。

  • セル1 (コントロールA)、キャンペーン1 - 単一広告セット(全ターゲットユーザーに対して1回の入札)
  • セル2 (コントロールB)、キャンペーン2 - 複数の広告セット(ユーザーグループごとに1つの広告セットを作成) (ウェブサイト/モバイルカスタムオーディエンスのルールを使用してピクセル/アプリのパラメーターに基づいてセグメント化することが可能)。
  • セル3 (テスト)、キャンペーン3 - 単一広告セット(ユーザーグループごとに異なる入札乗数)。ここでユーザーグループに合わせて調整した入札が、セル2の中の対応する広告セットのための広告セットレベルの入札と同じであることを確認してください

A/Bテストを設定する

この時点で、入札乗数を使用してパフォーマンスを検証するためのA/Bテストとコントロールグループを設定する必要があります。ここでは1–2週間テストを実行します。最小予算は不要です。A/Bテストは、以下のように設定します。

  • セル1、コントロールA 1つの入札価格がある1つの広告セットが含まれていなければならず、ターゲット設定はすべてのuser_bucketに基づいたものでなければなりません。
  • セル2、コントロールBuser_bucketごとに1つの広告セットがある、複数の広告セットが含まれていなければなりません。広告セットごとに別個のuser_bucketとそれに対応する入札がターゲット設定されていなければなりません。ウェブサイトまたはモバイルのカスタムオーディエンスのルールを使用することにより、他のMetaピクセルまたはアプリイベントのパラメーターに基づいてさらに細かくオーディエンスをセグメント化することができます。ウェブサイトカスタムオーディエンスおよびモバイルアプリのカスタムオーディエンスをご覧ください。
  • セル3、テストuser_bucketごとの異なる複数の入札を決定するための、bid_adjustmentプロパティが指定された1つの広告セットが含まれます。乗数は、セル2、コントロールBの個々の広告セット入札に対応していなければなりません。

詳しくは、「A/Bテスト」をご覧ください。

テストキャンペーンを設定する

広告キャンペーンを通常のキャンペーン同様に設定します。入札調整の設定について詳しくは、Meta担当者にお問い合わせください。

user_groupsを設定し、グループごとに異なる複数の入札乗数を設定します。グループは、年齢、性別、利用者スコアやロイヤルティプログラムなどの特定のプロパティなど、利用者データのさまざまなプロパティに基づいています。例:

{
   "user_bucket":{
      "business_id":253286871795863,
      "1":0.7,
      "2":1.0,
      "3":{
         "gender":{
            "male":1.0,
            "female":0.8
         }
      },
      "default": 0.9
   }
}

この例で、

  • loyalty_program値が1の人には、入札乗数0.7を適用
  • loyalty_program値が2の人には、入札乗数1.0を適用
  • loyalty_program値が3male(男性)には、入札乗数1.0を適用
  • loyalty_program値が3female(女性)には、入札乗数0.8を適用
  • loyalty_programが1、2、3以外の人には、入札乗数0.9を適用
  • その他のすべての利用者には、入札乗数1.0を適用

ここで、広告キャンペーンを作成することができます。

curl -X POST \ -F 'name="My Adset with bid multiplier"' \ -F 'campaign_id="<AD_CAMPAIGN_ID>"' \ -F 'daily_budget=3000' \ -F 'billing_event="IMPRESSIONS"' \ -F 'optimization_goal="OFFSITE_CONVERSIONS"' \ -F 'bid_amount=500' \ -F 'bid_adjustments={ "user_groups": { "gender": { "male": 0.8, "female": 1 } } }' \ -F 'promoted_object={ "product_set_id": "<PRODUCT_SET_ID>", "custom_event_type": "ADD_TO_CART" }' \ -F 'targeting={ "facebook_positions": [ "feed" ], "geo_locations": { "countries": [ "US" ] } }' \ -F 'status="PAUSED"' \ -F 'access_token=<ACCESS_TOKEN>' \ https://graph.facebook.com/v19.0/act_<AD_ACCOUNT_ID>/adsets
'use strict'; const bizSdk = require('facebook-nodejs-business-sdk'); const AdAccount = bizSdk.AdAccount; const AdSet = bizSdk.AdSet; const access_token = '<ACCESS_TOKEN>'; const app_secret = '<APP_SECRET>'; const app_id = '<APP_ID>'; const id = '<AD_ACCOUNT_ID>'; const api = bizSdk.FacebookAdsApi.init(access_token); const showDebugingInfo = true; // Setting this to true shows more debugging info. if (showDebugingInfo) { api.setDebug(true); } const logApiCallResult = (apiCallName, data) => { console.log(apiCallName); if (showDebugingInfo) { console.log('Data:' + JSON.stringify(data)); } }; let fields, params; fields = [ ]; params = { 'name' : 'My Adset with bid multiplier', 'campaign_id' : '<adCampaignLinkClicksID>', 'daily_budget' : '3000', 'billing_event' : 'IMPRESSIONS', 'optimization_goal' : 'OFFSITE_CONVERSIONS', 'bid_amount' : '500', 'bid_adjustments' : {'user_groups':{'gender':{'male':0.8,'female':1}}}, 'promoted_object' : {'product_set_id':'<productSetID>','custom_event_type':'ADD_TO_CART'}, 'targeting' : {'facebook_positions':['feed'],'geo_locations':{'countries':['US']}}, 'status' : 'PAUSED', }; const adsets = (new AdAccount(id)).createAdSet( fields, params ); logApiCallResult('adsets api call complete.', adsets);
require __DIR__ . '/vendor/autoload.php'; use FacebookAds\Object\AdAccount; use FacebookAds\Object\AdSet; use FacebookAds\Api; use FacebookAds\Logger\CurlLogger; $access_token = '<ACCESS_TOKEN>'; $app_secret = '<APP_SECRET>'; $app_id = '<APP_ID>'; $id = '<AD_ACCOUNT_ID>'; $api = Api::init($app_id, $app_secret, $access_token); $api->setLogger(new CurlLogger()); $fields = array( ); $params = array( 'name' => 'My Adset with bid multiplier', 'campaign_id' => '<adCampaignLinkClicksID>', 'daily_budget' => '3000', 'billing_event' => 'IMPRESSIONS', 'optimization_goal' => 'OFFSITE_CONVERSIONS', 'bid_amount' => '500', 'bid_adjustments' => array('user_groups' => array('gender' => array('male' => 0.8,'female' => 1))), 'promoted_object' => array('product_set_id' => '<productSetID>','custom_event_type' => 'ADD_TO_CART'), 'targeting' => array('facebook_positions' => array('feed'),'geo_locations' => array('countries' => array('US'))), 'status' => 'PAUSED', ); echo json_encode((new AdAccount($id))->createAdSet( $fields, $params )->exportAllData(), JSON_PRETTY_PRINT);
from facebook_business.adobjects.adaccount import AdAccount from facebook_business.adobjects.adset import AdSet from facebook_business.api import FacebookAdsApi access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<AD_ACCOUNT_ID>' FacebookAdsApi.init(access_token=access_token) fields = [ ] params = { 'name': 'My Adset with bid multiplier', 'campaign_id': '<adCampaignLinkClicksID>', 'daily_budget': '3000', 'billing_event': 'IMPRESSIONS', 'optimization_goal': 'OFFSITE_CONVERSIONS', 'bid_amount': '500', 'bid_adjustments': {'user_groups':{'gender':{'male':0.8,'female':1}}}, 'promoted_object': {'product_set_id':'<productSetID>','custom_event_type':'ADD_TO_CART'}, 'targeting': {'facebook_positions':['feed'],'geo_locations':{'countries':['US']}}, 'status': 'PAUSED', } print AdAccount(id).create_ad_set( fields=fields, params=params, )
import com.facebook.ads.sdk.*; import java.io.File; import java.util.Arrays; public class SAMPLE_CODE_EXAMPLE { public static void main (String args[]) throws APIException { String access_token = \"<ACCESS_TOKEN>\"; String app_secret = \"<APP_SECRET>\"; String app_id = \"<APP_ID>\"; String id = \"<AD_ACCOUNT_ID>\"; APIContext context = new APIContext(access_token).enableDebug(true); new AdAccount(id, context).createAdSet() .setName(\"My Adset with bid multiplier\") .setCampaignId(\"<adCampaignLinkClicksID>\") .setDailyBudget(3000L) .setBillingEvent(AdSet.EnumBillingEvent.VALUE_IMPRESSIONS) .setOptimizationGoal(AdSet.EnumOptimizationGoal.VALUE_OFFSITE_CONVERSIONS) .setBidAmount(500L) .setBidAdjustments(\"{\\"user_groups\\":{\\"gender\\":{\\"male\\":0.8,\\"female\\":1}}}\") .setPromotedObject(\"{\\"product_set_id\\":\\"<productSetID>\\",\\"custom_event_type\\":\\"ADD_TO_CART\\"}\") .setTargeting( new Targeting() .setFieldFacebookPositions(Arrays.asList(\"feed\")) .setFieldGeoLocations( new TargetingGeoLocation() .setFieldCountries(Arrays.asList(\"US\")) ) ) .setStatus(AdSet.EnumStatus.VALUE_PAUSED) .execute(); } }
require 'facebook_ads' access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<AD_ACCOUNT_ID>' FacebookAds.configure do |config| config.access_token = access_token config.app_secret = app_secret end ad_account = FacebookAds::AdAccount.get(id) adsets = ad_account.adsets.create({ name: 'My Adset with bid multiplier', campaign_id: '<adCampaignLinkClicksID>', daily_budget: '3000', billing_event: 'IMPRESSIONS', optimization_goal: 'OFFSITE_CONVERSIONS', bid_amount: '500', bid_adjustments: {'user_groups':{'gender':{'male':0.8,'female':1}}}, promoted_object: {'product_set_id':'<productSetID>','custom_event_type':'ADD_TO_CART'}, targeting: {'facebook_positions':['feed'],'geo_locations':{'countries':['US']}}, status: 'PAUSED', })

広告セットを作成したら、APIによりその広告セットに対するbid_adjustmentsを設定します。このパラメーターは次のようになっていなければなりません。

{
  "user_groups": {
    "user_bucket": {
      "event_sources": [<pixel_id>,<app_id>,...],
      "event_source_preference": "max"|"min"|"latest", //optional, useful when multiple event sources have user_bucket
      "events_dedup_mode": "max"|"min"|"latest", //optional, dedup user_bucket values sent from one single event source
      "event_retention": 604800, // optional, exclude old events
      "1":0.7, // these are the bid multipliers
      "2":1.0,
      "default": { // used in the case that we don't have user_bucket for that user
         gender:{ // this is a nested example, but you could just do "default": 1.0,
            "male": {
              home_location: {
                  cities: { // city id, can be found in search API, eg: search?type=adgeolocation&q=Menlo Park&limit=10
                    "2420605": 0.2,
                  },
                  regions: {
                    "3847": 0.5
                  },
                  countries: {
                    "US": 0.2
                  }
                }
              }
            },
            "female": {
              "user_recency": {
                "event_sources": [<pixel_id>,<app_id>,...],
                "0-86400": 0.5,
                "86400-172800": 0.7,
                "default": 0.2
              }
            }
         },
      },
   },
}

現在のところ、このパラメーターは検証されません。広告セットIDをMetaの担当者に送信すれば、Metaが手動でチェックします。

イベントソースごとに、そのユーザーについて最後に受け取ったuser_bucketが使用されます。しかし、複数のイベントソースが指定されていて(例: ピクセルとアプリ)、そのうちの2つ以上に独自のuser_bucketが記録されている場合、それらすべての中の最大値が採用されます。

以下は、既存の広告セットを更新するサンプル呼び出しです。広告セットID、アクセストークン、イベントソース、入札乗数の値を指定する必要があります。

curl -X POST 
  -F access_token=<access_token> \
  -F 'bid_adjustments={"user_groups": {"user_bucket": {"event_sources": [<pixel_id>,  <app_id>,...], "1": 0.1, "2": 0.2, "3": 0.3, "default": {"gender": {"male": 0.99, "female": 0.1}} }} }' \ 
  https://graph.facebook.com/<VERSION>/<ad-set-id>