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

この記事では、Google Ads via Audience Partner API(旧AdWords via DDPとして知られていた)については説明しません。 この名前は、GoogleがGoogle AdWordsをGoogle Adsにリブランディングした後に変更されました。このIntegrationは、特定のタイプのAudience List(Customer list)でのみ機能します。App UserやWebsite Visitorsなどの他のRemarketing Listタイプは、このIntegrationではサポートされていません。
このIntegrationを活用することで、メールアドレスや電話番号などのユーザープロファイルをGoogle Ads Remarketingユーザーリストにエクスポートできます。TD SQLクエリジョブの結果を実行してCRMデータを一括アップロードし、Google Remarketingユーザーリストにデータを追加または削除できます。
userIdカラムのデータをエクスポートできます。また、既存のSegmentからユーザーを削除することもできます。
- TD Toolbeltを含むTreasure Dataの基本的な知識。
- Google Adsアカウント。
- 自身のGoogle AdsアカウントへのTreasure Data Google OAuthアプリアクセスの承認。
- Google AdsアカウントではStandardまたはAdminのアクセスレベルが必要です
以下の制限事項は、Google Ads APIドキュメント「Remarketing and Audience Targeting」およびサポート記事に記載されています。
- 最低5000ユーザー。広告は、少なくとも5000人のユーザーがいるユーザーリストに配信されます。「Customer Match Limitations」セクションを参照してください。ドキュメントには次のように記載されています:「広告の配信を開始するには、リストに少なくとも5,000人のメンバーをアップロードしてください。」
- Google Accountメール。メールはGoogle Accountを使用して接続する必要があります。「Customer Match with email address, address, or user ID」セクションを参照してください。
- @gmail.com以外のアドレスは無視されます。Gmailでのターゲティングには、@gmail.comの形式のメールのみ使用できます。「Customer Match with email address, address, or user ID」セクションを参照してください。
- ユーザーリストの丸め処理。 Google Ads管理サイトでは、ユーザーリストの数は正確には表示されません:
- ユーザー数が1000未満の場合、100の単位に丸められます。
- それ以外の場合は、最上位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_number
FROM
your_table;Treasure Dataの結果出力は、Googleのフォーマットとプライバシーガイドラインに従うため、値を自動的に正規化およびハッシュ化します。サポートされているハッシュアルゴリズムはSHA-256のみです。
CRMデータは、受け入れられるために特定のフォーマットガイドラインに従う必要があります。不適切なフォーマットは、アップロードエラーまたはマッチしたレコード数の低下につながる可能性があります。
以下の変換動作が、正規化のための結果出力時にデータタイプに応じて適用されます。
- Mobile Advertising ID: 正規化なし。
- Email:
- データがプレーンテキストの場合、先頭と末尾の空白をトリムし、すべての文字を小文字に変換してから、送信前にハッシュ化します
- データが既にハッシュ化されている場合、変換は適用されません
- Phone Number: E.164フォーマットを使用します。例: +1234567890
- データがプレーンテキストの場合、値をハッシュ化します
- データが既にハッシュ化されている場合、変換は適用されません
- User ID: 正規化なし。
Treasure Dataは、特に以下のGoogle Adsポリシーの遵守を推奨しています:
- Google Ads Policy for Personalized Advertising
- Google Ads カスタマーマッチポリシー: ファーストパーティコンテキストで収集した顧客情報のみをアップロードする
Treasure Data では、クエリを実行する前にデータ接続を作成して設定する必要があります。データ接続の一部として、統合にアクセスするための認証を提供します。
TD Console を開きます。
Integrations Hub > Catalog に移動します。
Google Ads V2 を検索して選択します。

- Create Authentication を選択します。

- 認証に使用する認証情報を選択します。
オプションで、Click here を選択して Google にログインします。

Integrations Hub > Catalog に戻ります。
Google Ads を検索して選択します。
New Authentication を選択します。
OAuth 接続フィールドの定義を確認します。
Continue を選択します。
接続の名前を入力します。
Done を選択します。
出力結果は、事前定義されたカラム名を使用する必要があります。
user_id を Google にアップロードするには、user_id カラムをクエリする必要があります。
Treasure Data の結果出力は、Google のフォーマットとプライバシーガイドラインに従うために、値を自動的に正規化してハッシュ化します。サポートされているハッシュアルゴリズムは SHA-256 のみです。

| パラメータ | 必須 | 説明 |
|---|---|---|
| Ads Account | はい | Ads Customer ID です。形式は xxx-yyy-zzzz です。 |
| Mobile Application ID | モバイルアプリケーション ID です。Mobile Advertising ID をエクスポートする場合に必須です。 - - iOS の場合、このネイティブ識別子は App Store URL の末尾に表示される 9 桁の文字列です(例: "476943146" は "Flood-It! 2" の識別子で、App Store リンクは "http://itunes.apple.com/us/app/flood-it!-2/id476943146" です)。 - Android の場合、このネイティブ識別子はアプリケーションのパッケージ名です(例: "com.labpixies.colordrips" は "Color Drips" のパッケージ名で、Google Play リンクは "https://play.google.com/store/apps/details?id=com.labpixies.colordrips" です)。 | |
| UserList name | はい | ユーザーリストの名前です。 |
| UserList description | ユーザーリストの説明です。 | |
| Mode | 出力モードです。 - - Append(デフォルト): クエリ結果は既存のユーザーリストに追加されます。指定された入力名でユーザーリストが存在しない場合は、新しいユーザーリストが作成されます。 - Remove: クエリ結果は既存のユーザーリストから削除されます。 - Replace: クエリ結果は既存のユーザーリストに置き換えられます。 | |
| Membership Lifespan | ユーザーの連絡先情報がユーザーリストに保持される日数です。デフォルト: 10000 | |
| Retry Limit | システムが諦めるまでの再試行回数です。デフォルト: 5 | |
| Initial retry time wait in millis | 最初と 2 回目の試行の間の時間(ミリ秒)です。デフォルト: 500(0.5 秒に相当)。 | |
| Max retry wait in millis | 2 回目以降のすべての試行の間の時間(ミリ秒)です。デフォルト: 300000(5 分に相当)。 |
TD Console の Queries ページから、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 を有効にすることで、クエリの開始時刻を遅延させることができます。
Q: 1日または2日間「Populating」のステータスが続いた後、ユーザーリストのステータスが「Error with the last upload」に変わります。なぜですか?
- テスト中に、同時に複数のリストをアップロードすると、Google APIにこの問題が発生するようです。問題を引き起こす可能性のあるユーザーリストの数は不明ですが、一度にアップロードするユーザーリストは3〜5個に制限する必要があります。
Q: ユーザーリストのサイズの値が変わり続けるのはなぜですか?
- 観察によると、各ネットワークのサイズは、アクティブユーザーの数に基づいて毎日変わる可能性があります:

Q: リストのステータスが「Populating...」になるのはなぜですか?
- リストにメンバーが入力されるまでに6〜12時間かかります。そのため、12時間ごとに1回以上の頻度でオーディエンスリストにアップロードすると、Ads UIで「Populating...」ステータスが表示される可能性があります。ほとんどの場合、リストが確定するまでに最大48時間かかることがあります。
Q: 十分な権限を持つユーザーを設定したにもかかわらず、「Caused by: io.grpc.StatusRuntimeException: PERMISSION_DENIED: Request had insufficient authentication scopes.」エラーが発生しました。なぜですか?
- 設定したユーザーがMCCアカウントである可能性があります。MCCアカウントは管理用であり、エクスポートジョブを完了するための十分な権限を持っていないため、Googleアカウントを使用する必要があります。
Treasure Workflow内で、データコネクタを使用してデータをエクスポートするように指定できます。
詳細はUsing Workflows to Export Data with the 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"_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"詳細はUsing Workflows to Export Data with the TD Toolbeltをご覧ください。