Skip to content
Last updated

Google Ads V2 Export Integration

デジタル市場法(DMA)規制により、2024年3月までにCustomer Matchのオーディエンスメンバーをアップロードする際に同意シグナルの送信を開始し、EUユーザー同意ポリシーに準拠し、欧州経済領域(EEA)のユーザーデータを使用してCustomer Matchオーディエンスを作成し続ける必要があります。2024年3月6日以降、Google Adsは有効な同意がないEUユーザーのCustomer Match、コンバージョン、および店舗売上データのアップロードを受け付けなくなります。つまり、EUユーザーの同意がないオーディエンスは処理されません。EU以外の地域の同意設定は、データアップロードに即座に影響を与えることはありません。ただし、Google Adsは将来的にこの情報を使用してターゲティングとパーソナライゼーション機能を向上させる可能性があります。

複数のGoogle Ads連携が利用可能です。この記事ではGoogle Ads Remarketing V2について説明します。

この連携を活用することで、メールアドレスや電話番号などのユーザープロファイルをGoogle Ads Remarketingのユーザーリストへエクスポートできます。TD SQLクエリジョブの結果を実行してCRMデータを一括でアップロードし、Googleリマーケティングユーザーリストへデータを追加または削除できます。

userIdカラムのデータをエクスポートできます。また、既存のセグメントからユーザーを削除することもできます。

この記事では、Audience Partner API経由のGoogle Ads(以前はDDP経由のAdWordsとして知られていた)については説明していません。この名称は、GoogleがGoogle AdWordsをGoogle Adsにリブランディングした後に変更されました。この連携は、特定のタイプのオーディエンスリストであるCustomer listでのみ機能します。アプリユーザーやウェブサイト訪問者などの他のリマーケティングリストタイプは、この連携ではサポートされていません。

前提条件

  • TD Toolbeltを含むTreasure Dataの基本知識
  • Google Adsアカウント
  • 自身のGoogle AdsアカウントへのTreasure Data Google OAuthアプリのアクセス許可。Google Adsアカウントでは、アクセスレベルが標準または管理者である必要があります。

制限事項

以下の制限事項は、Google Ads APIドキュメント「Remarketing and Audience Targeting」およびサポート記事に記載されています。

  • 最低5000ユーザー。広告は、少なくとも5000ユーザーを持つユーザーリストに配信されます。「Customer Match Limitations」セクションを参照してください。ドキュメントには次のように記載されています。「広告の配信を開始するには、リストに少なくとも5,000人のメンバーをアップロードしてください。」

  • Googleアカウントのメール。メールはGoogleアカウントを使用して接続する必要があります。「Customer Match with email address, address, or user ID」セクションを参照してください。

  • @gmail.com以外のアドレスは無視される。@gmail.comの形式のメールのみがGmailでのターゲティングに使用できます。「Customer Match with email address, address, or user ID」セクションを参照してください。

  • ユーザーリストの丸め処理。Google Ads管理サイトでは、ユーザーリストの数は正確には表示されません。

    • ユーザー数が1000未満の場合、百の位に丸められます。
    • それ以外の場合は、最も重要な2桁に丸められます。「Customer Match Limitations」セクションを参照してください。
  • Google Display NetworkのCustomer Match。Customer MatchはGoogle Display Network内のサードパーティサイトでは利用できません。「Customer Match with email address, address, or user ID」セクションを参照してください。

  • 48時間の遅延。Googleが新しいユーザーをリストに追加するには最大48時間かかります。https://support.google.com/google-ads/answer/7474263の「Note」セクションを参照してください。

  • replaceモードを実行する場合、最大72時間実行される可能性があります。Remove data from a Customer Match audience listを参照してください。

カラム名の命名規則

出力結果は、事前定義されたカラム名を使用する必要があります。サポートされているカラム名は次のとおりです。

  • mobile_id: IDFA(Identifier for Advertising)またはAAID(Google Advertising ID)モバイルデバイスID。例: AEBE52E7-03EE-455A-B3C4-E57283966239(形式: 8-4-4-4-12の16進数文字)
  • email: メールアドレス
  • phone_number: 電話番号
  • user_id: 広告主が生成および割り当てたユーザーID。この機能を使用するには、ホワイトリストに登録されたGoogleアカウントである必要があります。詳細については、Customer Match Policyを参照してください。

クエリ結果にサポートされているカラムが見つからない場合は、エラーが発生します。カラムのエイリアスは大文字小文字を区別しません。たとえば、emailまたはEMAILを使用できます。

カラム名がサポートされている値と一致しない場合は、クエリでエイリアスを使用する必要があります。例:

SELECT an_email_column AS email,another_phone_column AS phone_numberFROM your_table;

データの正規化とハッシュ化

Treasure Dataの結果出力は、Googleのフォーマットおよびプライバシーガイドラインに従うために、値を自動的に正規化およびハッシュ化します。サポートされているハッシュアルゴリズムはSHA-256のみです。

CRMデータは、受け入れられるために特定のフォーマットガイドラインに従う必要があります。不適切なフォーマットは、アップロードエラーまたは一致するレコード数の低下につながる可能性があります。

正規化のために、結果出力時にデータタイプに応じて次の変換動作が適用されます。

  • Mobile Advertising ID: 正規化なし

  • Email:

    • データがプレーンテキストの場合、先頭と末尾の空白をトリミングし、すべての文字を小文字に変換してから、送信前にハッシュ化します
    • データが既にハッシュ化されている場合、変換は適用されません
  • Phone Number: E.164形式を使用します。例: +1234567890

    • データがプレーンテキストの場合、値をハッシュ化します
    • データが既にハッシュ化されている場合、変換は適用されません
  • User ID: 正規化なし

Google Adsポリシー

Treasure Dataは、特に以下のGoogle Adsポリシーに準拠することを推奨します。

TD Consoleを使用する

新しい接続を作成する

Treasure Dataでは、クエリを実行する前にデータ接続を作成して設定する必要があります。データ接続の一部として、連携にアクセスするための認証を提供します。

  1. TD Consoleを開きます。
  2. Integration Hub > カタログに移動します。
  3. Google Ads V2を検索して選択します。

  1. 認証を作成を選択します。オプションで、Audience Studioのアクティベーション経由で認証を作成することもできます。
  2. 認証するための資格情報を選択します。

  1. オプションで、こちらをクリックを選択し、Googleにログインします。

  1. Integration Hub > カタログに戻ります。
  2. Google Adsを検索して選択します。
  3. 新しい認証を選択します。
  4. OAuth接続フィールドの定義を確認します。
  5. 続行を選択します。
  6. 接続の名前を入力します。
  7. 完了を選択します。

クエリの定義

出力結果は事前定義されたカラム名を使用する必要があります。

user_idをGoogleにアップロードするには、user_idカラムをクエリする必要があります。

Treasure Dataの結果出力は、Googleのフォーマットおよびプライバシーガイドラインに従うように、値を自動的に正規化およびハッシュ化します。サポートされているハッシュアルゴリズムはSHA-256のみです。

  1. Destination Integrationの作成の手順を完了します。
  2. Data Workbench > クエリに移動します。
  3. データをエクスポートするクエリを選択します。
  4. クエリを実行して結果セットを検証します。
  5. 結果をエクスポートを選択します。
  6. 既存のIntegration認証を選択します。

  1. 追加のエクスポート結果の詳細を定義します。

  2. 完了を選択します。

  3. クエリを実行します。

  4. 指定した宛先にデータが移動したことを検証します。

パラメータ必須説明
Ads Accountはいお客様のAds Customer IDです。フォーマットは: xxx-yyy-zzzz 結果のエクスポート設定を簡素化するため、Ads Accountフィールドには、提供されたOAuthでアクセス可能なすべてのGoogle Adsアカウントがリストされ、ユーザーが選択できるようになっています。
Mobile Application IDお客様のモバイルアプリケーションIDです。Mobile Advertising IDをエクスポートする場合に必要です。 - - iOSの場合、このネイティブ識別子はApp Store URLの最後に表示される9桁の文字列です。例えば、App Storeリンクが"http://itunes.apple.com/us/app/flood-it!-2/id476943146"である"Flood-It! 2"の識別子は476943146となります。 - Androidの場合、このネイティブ識別子はアプリケーションのパッケージ名です。例えば、Google Playリンクが"https://play.google.com/store/apps/details?id=com.labpixies.colordrips"である"Color Drips"の識別子はcom.labpixies.colordripsとなります。
UserList nameはいユーザーリストの名前。
UserList descriptionユーザーリストの説明。
Mode出力モード。 - - Append (デフォルト): クエリ結果が既存のユーザーリストに追加されるか、指定された入力名で既存のものがない場合は新しいユーザーリストが作成されます。 - Remove: クエリ結果は既存のユーザーリストから削除されます。 - Replace: クエリ結果は既存のユーザーリストに置き換えられます
Membership Lifespanユーザーの連絡先情報がユーザーリストに保持される日数(0から540の間の値が指定された場合)。デフォルト値: 10000 (有効期限なし)。
Ad user data consentオプション同意ステータス。サポートされている値: - unspecified - unknown - granted - denied
Ad personalization consentオプション同意ステータス。サポートされている値: - unspecified - unknown - granted - denied
Retry Limitシステムがあきらめる前の再試行回数。デフォルト: 5。
Initial retry time wait in millis最初と2回目の試行の間の時間(ミリ秒単位)。デフォルト: 500、これは0.5秒に相当します。
Max retry wait in millis2回目以降のすべての試行の間の時間(ミリ秒単位)。デフォルト: 300000、これは5分に相当します。

クエリの例

TDコンソールのクエリページから、出力結果がGoogle Ads接続に送られるように指定して、以下のようなクエリを実行します。このクエリは例に過ぎません。

SELECT
  email,
  phone_number
FROM
  (VALUES ('demo1@example.com', '+1234567890'), ('demo2@example.com', '+9876543210'),('demo3@example.com', '+9988776655')) tbl (email, phone_number)

上記のクエリはサンプル値を使用しています。 実際には以下のようにデータベースとテーブルを選択する必要があります。

SELECT email FROM app_users

クエリには以下を含めることができます:

  • mobile_idのみ
  • emailおよび/またはphone_numberのみ
  • user_idのみ
  • その他のカラムはすべて無視されます

クエリは数秒で完了するはずです。

オプション: クエリ結果の検証

オーディエンスリストを検証して、新しく入力されたデータを確認します:

(オプション) Query Export ジョブをスケジュールする

Scheduled Jobs と Result Export を使用して、指定したターゲット宛先に出力結果を定期的に書き込むことができます。

Treasure Data のスケジューラー機能は、高可用性を実現するために定期的なクエリ実行をサポートしています。

2 つの仕様が競合するスケジュール仕様を提供する場合、より頻繁に実行するよう要求する仕様が優先され、もう一方のスケジュール仕様は無視されます。

例えば、cron スケジュールが '0 0 1 * 1' の場合、「月の日」の仕様と「週の曜日」が矛盾します。前者の仕様は毎月 1 日の午前 0 時 (00:00) に実行することを要求し、後者の仕様は毎週月曜日の午前 0 時 (00:00) に実行することを要求するためです。後者の仕様が優先されます。

TD Console を使用してジョブをスケジュールする

  1. Data Workbench > Queries に移動します

  2. 新しいクエリを作成するか、既存のクエリを選択します。

  3. Schedule の横にある None を選択します。

  4. ドロップダウンで、次のスケジュールオプションのいずれかを選択します:

    ドロップダウン値説明
    Custom cron...Custom cron... の詳細を参照してください。
    @daily (midnight)指定されたタイムゾーンで 1 日 1 回午前 0 時 (00:00 am) に実行します。
    @hourly (:00)毎時 00 分に実行します。
    Noneスケジュールなし。

Custom cron... の詳細

Cron 値説明
0 * * * *1 時間に 1 回実行します。
0 0 * * *1 日 1 回午前 0 時に実行します。
0 0 1 * *毎月 1 日の午前 0 時に 1 回実行します。
""スケジュールされた実行時刻のないジョブを作成します。
 *    *    *    *    *
 -    -    -    -    -
 |    |    |    |    |
 |    |    |    |    +----- day of week (0 - 6) (Sunday=0)
 |    |    |    +---------- month (1 - 12)
 |    |    +--------------- day of month (1 - 31)
 |    +-------------------- hour (0 - 23)
 +------------------------- min (0 - 59)

次の名前付きエントリを使用できます:

  • Day of Week: sun, mon, tue, wed, thu, fri, sat.
  • Month: jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec.

各フィールド間には単一のスペースが必要です。各フィールドの値は、次のもので構成できます:

フィールド値 例の説明
各フィールドに対して上記で表示された制限内の単一の値。
フィールドに基づく制限がないことを示すワイルドカード '*''0 0 1 * *'毎月 1 日の午前 0 時 (00:00) に実行するようにスケジュールを設定します。
範囲 '2-5' フィールドの許可される値の範囲を示します。'0 0 1-10 * *'毎月 1 日から 10 日までの午前 0 時 (00:00) に実行するようにスケジュールを設定します。
カンマ区切りの値のリスト '2,3,4,5' フィールドの許可される値のリストを示します。0 0 1,11,21 * *'毎月 1 日、11 日、21 日の午前 0 時 (00:00) に実行するようにスケジュールを設定します。
周期性インジケータ '*/5' フィールドの有効な値の範囲に基づいて、 スケジュールが実行を許可される頻度を表現します。'30 */2 1 * *'毎月 1 日、00:30 から 2 時間ごとに実行するようにスケジュールを設定します。 '0 0 */5 * *' は、毎月 5 日から 5 日ごとに午前 0 時 (00:00) に実行するようにスケジュールを設定します。
'*' ワイルドカードを除く上記の いずれかのカンマ区切りリストもサポートされています '2,*/5,8-10''0 0 5,*/10,25 * *'毎月 5 日、10 日、20 日、25 日の午前 0 時 (00:00) に実行するようにスケジュールを設定します。
  1. (オプション) Delay execution を有効にすることで、クエリの開始時刻を遅延させることができます。

クエリを実行する

クエリに名前を付けて保存して実行するか、単にクエリを実行します。クエリが正常に完了すると、クエリ結果は指定された宛先に自動的にエクスポートされます。

設定エラーにより継続的に失敗するスケジュールジョブは、複数回通知された後、システム側で無効化される場合があります。

(オプション) Delay execution を有効にすることで、クエリの開始時刻を遅延させることができます。

Audience Studio で Segment をアクティベートする

Audience Studio で activation を作成することで、segment データをターゲットプラットフォームに送信することもできます。

  1. Audience Studio に移動します。
  2. parent segment を選択します。
  3. ターゲット segment を開き、右クリックして、Create Activation を選択します。
  4. Details パネルで、Activation 名を入力し、前述の Configuration Parameters のセクションに従って activation を設定します。
  5. Output Mapping パネルで activation 出力をカスタマイズします。

  • Attribute Columns
    • Export All Columns を選択すると、変更を加えずにすべての列をエクスポートできます。
    • + Add Columns を選択して、エクスポート用の特定の列を追加します。Output Column Name には、Source 列名と同じ名前があらかじめ入力されます。Output Column Name を更新できます。+ Add Columns を選択し続けて、activation 出力用の新しい列を追加します。
  • String Builder
    • + Add string を選択して、エクスポート用の文字列を作成します。次の値から選択します:
      • String: 任意の値を選択します。テキストを使用してカスタム値を作成します。
      • Timestamp: エクスポートの日時。
      • Segment Id: segment ID 番号。
      • Segment Name: segment 名。
      • Audience Id: parent segment 番号。
  1. Schedule を設定します。

  • スケジュールを定義する値を選択し、オプションでメール通知を含めます。
  1. Create を選択します。

batch journey の activation を作成する必要がある場合は、Creating a Batch Journey Activation を参照してください。

トラブルシューティング

質問: 1日または2日間「Populating」のステータスだったユーザーリストが、「Error with the last upload」というステータスに変わるのはなぜですか?

回答: テストの結果、複数のリストを同時にアップロードすると、Google APIにこの問題が発生するようです。問題を引き起こす可能性のあるユーザーリストの数は不明ですが、一度にアップロードするユーザーリストは3~5個に制限することをお勧めします。

質問: ユーザーリストのサイズの値が変わり続けるのはなぜですか?

回答: 観察によると、各ネットワークのサイズは、アクティブユーザー数に基づいて日々変化する可能性があります:

質問: リストに「Populating...」というステータスが表示されるのはなぜですか?

回答: リストにメンバーが入力されるまで6~12時間かかるため、12時間に1回以上の頻度でオーディエンスリストにアップロードすると、Ads UIに「Populating...」ステータスが表示される可能性が高くなります。ほとんどの場合、リストが確定するまでに最大48時間かかることがあります。

質問: 十分な権限を持つユーザーを設定したにもかかわらず、「Caused by: io.grpc.StatusRuntimeException: PERMISSION_DENIED: Request had insufficient authentication scopes.」というエラーが発生しました。なぜですか?

回答: 設定されたユーザーがMCCアカウントである可能性があります。MCCアカウントは管理用であり、エクスポートジョブを完了するための十分な権限がないため、Googleアカウントを使用する必要があります。

質問: オプトアウトユーザーリストを同期する代替方法はありますか? リストは毎日更新されますが、リストが置き換えられて更新されるまでに最大48時間の遅延があると管理が困難です。

回答: メンバーシップ期間パラメータを利用できます。たとえば、この値を3日に設定できます(これは、更新されていないすべてのオーディエンスが3日後に自動的に削除されることを意味します)。翌日に既存のオーディエンスを再度アップロードすると、時間がリセットされます。ただし、メンバーシップ期間パラメータを使用する際は、「最大48時間の遅延」に注意してください。

オプション: ワークフローでのエクスポート結果の設定

Treasure Workflowでは、データコネクタを使用してデータをエクスポートするように指定できます。

詳細については、ワークフローを使用したTD Toolbeltによるデータのエクスポートを参照してください。

ワークフローの例 - UserListへのuser_idの追加

_export:
  td:
    database: google_ads_v2_db

+google_ads_v2_export_task:
  td>: append_user_id.sql
  database: ${td.database}
  result_connection: new_created_google_ads_v2_auth
  result_settings:
    type: google_adwords_v2
    client_customer_id: "xxx-yyy-zzzz"
    name: "test_append_user_id"
    mode: "append"
    ad_user_data_consent: "granted"
    ad_personalization_consent: "denied"

ワークフローの例 - UserListからのuser_idの削除

_export:
  td:
    database: google_ads_v2_db

+google_ads_v2_export_task:
  td>: remove_user_id.sql
  database: ${td.database}
  result_connection: new_created_google_ads_v2_auth
  result_settings:
    type: google_adwords_v2
    client_customer_id: "xxx-yyy-zzzz"
    name: "test_remove_user_id"
    mode: "remove"
    ad_user_data_consent: "granted"
    ad_personalization_consent: "denied"

詳細については、ワークフローを使用したTD Toolbeltによるデータのエクスポートを参照してください。