デジタル市場法(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: 正規化なし
Treasure Dataは、特に以下のGoogle Adsポリシーに準拠することを推奨します。
Treasure Dataでは、クエリを実行する前にデータ接続を作成して設定する必要があります。データ接続の一部として、連携にアクセスするための認証を提供します。
- TD Consoleを開きます。
- Integration Hub > カタログに移動します。
- Google Ads V2を検索して選択します。

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

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

- Integration Hub > カタログに戻ります。
- Google Adsを検索して選択します。
- 新しい認証を選択します。
- OAuth接続フィールドの定義を確認します。
- 続行を選択します。
- 接続の名前を入力します。
- 完了を選択します。
出力結果は事前定義されたカラム名を使用する必要があります。
user_idをGoogleにアップロードするには、user_idカラムをクエリする必要があります。
Treasure Dataの結果出力は、Googleのフォーマットおよびプライバシーガイドラインに従うように、値を自動的に正規化およびハッシュ化します。サポートされているハッシュアルゴリズムはSHA-256のみです。
- Destination Integrationの作成の手順を完了します。
- Data Workbench > クエリに移動します。
- データをエクスポートするクエリを選択します。
- クエリを実行して結果セットを検証します。
- 結果をエクスポートを選択します。
- 既存のIntegration認証を選択します。

追加のエクスポート結果の詳細を定義します。
完了を選択します。
クエリを実行します。
指定した宛先にデータが移動したことを検証します。

| パラメータ | 必須 | 説明 |
|---|---|---|
| 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 millis | 2回目以降のすべての試行の間の時間(ミリ秒単位)。デフォルト: 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のみ- その他のカラムはすべて無視されます
クエリは数秒で完了するはずです。
オーディエンスリストを検証して、新しく入力されたデータを確認します:

Scheduled Jobs と Result Export を使用して、指定したターゲット宛先に出力結果を定期的に書き込むことができます。
Treasure Data のスケジューラー機能は、高可用性を実現するために定期的なクエリ実行をサポートしています。
2 つの仕様が競合するスケジュール仕様を提供する場合、より頻繁に実行するよう要求する仕様が優先され、もう一方のスケジュール仕様は無視されます。
例えば、cron スケジュールが '0 0 1 * 1' の場合、「月の日」の仕様と「週の曜日」が矛盾します。前者の仕様は毎月 1 日の午前 0 時 (00:00) に実行することを要求し、後者の仕様は毎週月曜日の午前 0 時 (00:00) に実行することを要求するためです。後者の仕様が優先されます。
Data Workbench > Queries に移動します
新しいクエリを作成するか、既存のクエリを選択します。
Schedule の横にある None を選択します。

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

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

| 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) に実行するようにスケジュールを設定します。 |
- (オプション) Delay execution を有効にすることで、クエリの開始時刻を遅延させることができます。
クエリに名前を付けて保存して実行するか、単にクエリを実行します。クエリが正常に完了すると、クエリ結果は指定された宛先に自動的にエクスポートされます。
設定エラーにより継続的に失敗するスケジュールジョブは、複数回通知された後、システム側で無効化される場合があります。
(オプション) Delay execution を有効にすることで、クエリの開始時刻を遅延させることができます。
Audience Studio で activation を作成することで、segment データをターゲットプラットフォームに送信することもできます。
- Audience Studio に移動します。
- parent segment を選択します。
- ターゲット segment を開き、右クリックして、Create Activation を選択します。
- Details パネルで、Activation 名を入力し、前述の Configuration Parameters のセクションに従って activation を設定します。
- 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 番号。
- + Add string を選択して、エクスポート用の文字列を作成します。次の値から選択します:
- Schedule を設定します。

- スケジュールを定義する値を選択し、オプションでメール通知を含めます。
- 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によるデータのエクスポートを参照してください。
_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"_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によるデータのエクスポートを参照してください。