# Google Ads Remarketing Export Integration **警告!** デジタル市場法(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について説明します。 ![](/assets/screen-shot-2022-03-01-at-2.53.28-pm.90c4896f5c975331928e3cc606f32435788a17bd0c8097393ab3341824f08021.4ce6d6a7.png) **この記事では、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」](https://developers.google.com/google-ads/api/docs/remarketing/audience-types/customer-match)およびサポート記事に記載されています。 - **最低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](https://support.google.com/google-ads/answer/7474263)の「Note」セクションを参照してください。 - **replace**モードを実行する場合、最大**72時間**かかる場合があります。[Remove data from a Customer Match audience list](https://developers.google.com/google-ads/api/docs/remarketing/audience-types/customer-match#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](https://support.google.com/adspolicy/answer/6299717)を参照してください。 クエリ結果からサポートされているカラムが見つからない場合、エラーが発生します。カラムのエイリアスは大文字小文字を区別しません。例えば、**email**または**EMAIL**を使用できます。 カラム名がサポートされている値と一致しない場合は、クエリでエイリアスを使用する必要があります。例: ```sql 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フォーマット](https://en.wikipedia.org/wiki/E.164)を使用します。例: +1234567890 - データがプレーンテキストの場合、値をハッシュ化します - データが既にハッシュ化されている場合、変換は適用されません - User ID: 正規化なし。 ## Google Adsポリシー Treasure Dataは、特に以下のGoogle Adsポリシーの遵守を推奨しています: - [Google Ads Policy for Personalized Advertising](https://support.google.com/adwordspolicy/answer/143465) - [Google Ads カスタマーマッチポリシー: ファーストパーティコンテキストで収集した顧客情報のみをアップロードする](https://support.google.com/adwordspolicy/answer/6299717?hl=en) ## TD Console を使用する ### 新しい接続を作成する Treasure Data では、クエリを実行する前にデータ接続を作成して設定する必要があります。データ接続の一部として、統合にアクセスするための認証を提供します。 1. **TD Console** を開きます。 2. **Integrations Hub** > **Catalog** に移動します。 3. Google Ads V2 を検索して選択します。 ![](/assets/screen-shot-2022-03-01-at-2.53.28-pm.90c4896f5c975331928e3cc606f32435788a17bd0c8097393ab3341824f08021.4ce6d6a7.png) 1. **Create Authentication** を選択します。 ![](/assets/image2022-3-1_15-2-18.921b2e2ac305d16852f0e49a434a30fa4c8096029d7c9fae729b9d476a5320ab.4ce6d6a7.png) 1. 認証に使用する認証情報を選択します。 オプションで、**Click here** を選択して Google にログインします。 ![](/assets/image2022-3-1_15-4-7.7b9f2aa0678e07f094660dcdc3772de016b5521533c589e946b6eed8b26faf30.4ce6d6a7.png) 1. **Integrations Hub** > **Catalog** に戻ります。 2. Google Ads を検索して選択します。 3. New Authentication を選択します。 4. OAuth 接続フィールドの定義を確認します。 5. **Continue** を選択します。 接続の名前を入力します。 **Done** を選択します。 ### クエリを定義する 出力結果は、事前定義されたカラム名を使用する必要があります。 user_id を Google にアップロードするには、user_id カラムをクエリする必要があります。 Treasure Data の結果出力は、Google のフォーマットとプライバシーガイドラインに従うために、値を自動的に正規化してハッシュ化します。サポートされているハッシュアルゴリズムは SHA-256 のみです。 ### Google Ads Remarketing V2 の統合パラメータ ![](/assets/image2021-3-24_19-47-33.e1f4efd0a901e509bbbf5d5de5ae406015128ef71ada1ddf1dd3de6adc05a15f.4ce6d6a7.png) | パラメータ | 必須 | 説明 | | --- | --- | --- | | 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](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](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 接続への出力結果を指定して、次のようなクエリを実行します。このクエリは例です。 ```sql SELECT email, phone_number FROM ( VALUES ('demo1@example.com', '+1234567890'), ('demo2@example.com', '+9876543210'), ('demo3@example.com', '+9988776655') ) tbl (email, phone_number) ``` クエリではソーステーブルを指定する必要はありませんが、データベースを選択する必要があります。 ```sql SELECT email FROM app_users ``` クエリには次のものを含めることができます: - `mobile_id`のみ - `email`および/または`phone_number`のみ - `user_id`のみ - その他のすべてのカラムは無視されます クエリは数秒で完了するはずです。 ### オプション: クエリ結果を検証する オーディエンスリストを検証して、新しく入力されたデータを表示します: ![](/assets/image-20191015-160853.443df15a4962a02f51a4a92ec1a106659018eaa5f36ab48a286b8bc884b116dc.4ce6d6a7.png) ### (オプション) 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 を選択します。 ![](/assets/image2021-1-15_17-28-51.f1b242f6ecc7666a0097fdf37edd1682786ec11ef80eff68c66f091bc405c371.0f87d8d4.png) 4. ドロップダウンで、次のスケジュールオプションのいずれかを選択します: ![](/assets/image2021-1-15_17-29-47.45289a1c99256f125f4d887e501e204ed61f02223fde0927af5f425a89ace0c0.0f87d8d4.png) | ドロップダウン値 | 説明 | | --- | --- | | Custom cron... | [Custom cron... の詳細](#custom-cron-details)を参照してください。 | | @daily (midnight) | 指定されたタイムゾーンで 1 日 1 回午前 0 時 (00:00 am) に実行します。 | | @hourly (:00) | 毎時 00 分に実行します。 | | None | スケジュールなし。 | #### Custom cron... の詳細 ![](/assets/image2021-1-15_17-30-23.0f94a8aa5f75ea03e3fec0c25b0640cd59ee48d1804a83701e5f2372deae466c.0f87d8d4.png) | **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 を有効にすることで、クエリの開始時刻を遅延させることができます。 ## トラブルシューティング Q: 1日または2日間「Populating」のステータスが続いた後、ユーザーリストのステータスが「Error with the last upload」に変わります。なぜですか? - テスト中に、同時に複数のリストをアップロードすると、Google APIにこの問題が発生するようです。問題を引き起こす可能性のあるユーザーリストの数は不明ですが、一度にアップロードするユーザーリストは3〜5個に制限する必要があります。 Q: ユーザーリストのサイズの値が変わり続けるのはなぜですか? - 観察によると、各ネットワークのサイズは、アクティブユーザーの数に基づいて毎日変わる可能性があります: ![](/assets/image-20191015-161020.bad5ddd93faaacdd34e2adafbb48929859e859a70c039ca45bbffadbe329361c.4ce6d6a7.png) Q: リストのステータスが「Populating...」になるのはなぜですか? - リストにメンバーが入力されるまでに6〜12時間かかります。そのため、12時間ごとに1回以上の頻度でオーディエンスリストにアップロードすると、Ads UIで「Populating...」ステータスが表示される可能性があります。ほとんどの場合、リストが確定するまでに最大48時間かかることがあります。 Q: 十分な権限を持つユーザーを設定したにもかかわらず、「`Caused by: io.grpc.StatusRuntimeException: PERMISSION_DENIED: Request had insufficient authentication scopes.`」エラーが発生しました。なぜですか? - 設定したユーザーが[MCCアカウント](https://ads.google.com/intl/en-us/home/tools/manager-accounts/)である可能性があります。MCCアカウントは管理用であり、エクスポートジョブを完了するための十分な権限を持っていないため、Googleアカウントを使用する必要があります。 ## オプション: ワークフローでエクスポート結果を設定する Treasure Workflow内で、データコネクタを使用してデータをエクスポートするように指定できます。 詳細は[Using Workflows to Export Data with the TD Toolbelt](https://api-docs.treasuredata.com/en/tools/cli/api/#workflow-commands)をご覧ください。 ### ワークフローの例 - UserListにuser_idを追加する ```yaml _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" ``` ### ワークフローの例 - UserListからuser_idを削除する ```yaml _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](https://docs.treasuredata.com/display/INT/Google+Ads+Remarketing+V2+Export+Integration+CLI)をご覧ください。