# 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について説明します。 ![](/assets/googleadsv2.b378ba32e6353b624a341d3e1ab649cead72385b279ebbaf5551e4e2016e8216.5f804aca.png) この連携を活用することで、メールアドレスや電話番号などのユーザープロファイルを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」](https://developers.google.com/google-ads/api/docs/remarketing/audience-types/customer-match)およびサポート記事に記載されています。 - **最低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](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_numberFROM 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ポリシー](https://support.google.com/adwordspolicy/answer/143465) - [Customer Matchに関するGoogle Adsポリシー: ファーストパーティコンテキストで収集した顧客情報のみをアップロードする](https://support.google.com/adwordspolicy/answer/6299717?hl=en) ## TD Consoleを使用する ### 新しい接続を作成する Treasure Dataでは、クエリを実行する前にデータ接続を作成して設定する必要があります。データ接続の一部として、連携にアクセスするための認証を提供します。 1. **TD Console**を開きます。 2. **Integration Hub** > **カタログ**に移動します。 3. Google Ads V2を検索して選択します。 ![](/assets/googleadsv2.b378ba32e6353b624a341d3e1ab649cead72385b279ebbaf5551e4e2016e8216.5f804aca.png) 1. **認証を作成**を選択します。オプションで、[Audience Studioのアクティベーション](https://docs.treasuredata.com/smart/project-product-documentation/create-an-activation)経由で認証を作成することもできます。 2. 認証するための資格情報を選択します。 ![](/assets/google_adword2_new_authentication.1d422083aa08e2ed053dd44536e8e62d1ebefba708ae28b8e4a3ae96a191f948.5f804aca.png) 1. オプションで、**こちらをクリック**を選択し、Googleにログインします。 ![](/assets/goodglead2loging.44bbf77ccf6ce82bb0c466035239b161c6477187379519b4215e6c4b242113b3.5f804aca.png) 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の作成](https://docs.treasuredata.com/display/PD/Creating+a+Destination+Integration)の手順を完了します。 2. **Data Workbench > クエリ**に移動します。 3. データをエクスポートするクエリを選択します。 4. クエリを実行して結果セットを検証します。 5. **結果をエクスポート**を選択します。 6. 既存のIntegration認証を選択します。 ![](/assets/existintegration.86ecc43259ce7a4767a2114389aa9824b8eb32133ba2e4594db43e5d0fbd8040.5f804aca.png) 1. 追加のエクスポート結果の詳細を定義します。 2. **完了**を選択します。 3. クエリを実行します。 4. 指定した宛先にデータが移動したことを検証します。 ### Google Ads Remarketing V2のIntegrationパラメータ ![](/assets/exportadwordsv2.d93f5d71ab9cfe65b8435e7845988e28774e57f727766375b6a20c19749322c4.5f804aca.png) | パラメータ | 必須 | 説明 | | --- | --- | --- | | 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](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](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接続に送られるように指定して、以下のようなクエリを実行します。このクエリは例に過ぎません。 ```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/valaudiencelist.e25992eaee5c608bb8bb3a173ec37aa3e9379635bfe9d42dcb21b9e583578e29.5f804aca.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 を有効にすることで、クエリの開始時刻を遅延させることができます。 ## 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 出力をカスタマイズします。 ![](/assets/ouput.b2c7f1d909c4f98ed10f5300df858a4b19f71a3b0834df952f5fb24018a5ea78.8ebdf569.png) - 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** を設定します。 ![](/assets/snippet-output-connector-on-audience-studio-2024-08-28.a99525173709da1eb537f839019fa7876ffae95045154c8f2941b030022f792c.8ebdf569.png) - スケジュールを定義する値を選択し、オプションでメール通知を含めます。 1. **Create** を選択します。 batch journey の activation を作成する必要がある場合は、[Creating a Batch Journey Activation](/products/customer-data-platform/journey-orchestration/batch/creating-a-batch-journey-activation) を参照してください。 ## トラブルシューティング **質問**: 1日または2日間「Populating」のステータスだったユーザーリストが、「Error with the last upload」というステータスに変わるのはなぜですか? **回答**: テストの結果、複数のリストを同時にアップロードすると、Google APIにこの問題が発生するようです。問題を引き起こす可能性のあるユーザーリストの数は不明ですが、一度にアップロードするユーザーリストは3~5個に制限することをお勧めします。 **質問**: ユーザーリストのサイズの値が変わり続けるのはなぜですか? **回答**: 観察によると、各ネットワークのサイズは、アクティブユーザー数に基づいて日々変化する可能性があります: ![](/assets/userlistsize.6a3199e93c82c0ae7b2e94973ebf72b685b7a544cde5f7eb87c2dcf28568c337.5f804aca.png) **質問**: リストに「Populating...」というステータスが表示されるのはなぜですか? **回答**: リストにメンバーが入力されるまで6~12時間かかるため、12時間に1回以上の頻度でオーディエンスリストにアップロードすると、Ads UIに「Populating...」ステータスが表示される可能性が高くなります。ほとんどの場合、リストが確定するまでに最大48時間かかることがあります。 **質問**: 十分な権限を持つユーザーを設定したにもかかわらず、「`Caused by: io.grpc.StatusRuntimeException: PERMISSION_DENIED: Request had insufficient authentication scopes.`」というエラーが発生しました。なぜですか? **回答**: 設定されたユーザーが[MCCアカウント](https://ads.google.com/intl/ja/home/tools/manager-accounts/)である可能性があります。MCCアカウントは管理用であり、エクスポートジョブを完了するための十分な権限がないため、Googleアカウントを使用する必要があります。 **質問**: オプトアウトユーザーリストを同期する代替方法はありますか? リストは毎日更新されますが、リストが置き換えられて更新されるまでに最大48時間の遅延があると管理が困難です。 **回答**: メンバーシップ期間パラメータを利用できます。たとえば、この値を3日に設定できます(これは、更新されていないすべてのオーディエンスが3日後に自動的に削除されることを意味します)。翌日に既存のオーディエンスを再度アップロードすると、時間がリセットされます。ただし、メンバーシップ期間パラメータを使用する際は、「最大48時間の遅延」に注意してください。 ## オプション: ワークフローでのエクスポート結果の設定 Treasure Workflowでは、データコネクタを使用してデータをエクスポートするように指定できます。 詳細については、[ワークフローを使用したTD Toolbeltによるデータのエクスポート](https://docs.treasuredata.com/display/PD/About+Exporting+Data)を参照してください。 ### ワークフローの例 - 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" ad_user_data_consent: "granted" ad_personalization_consent: "denied" ``` ### ワークフローの例 - 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" ad_user_data_consent: "granted" ad_personalization_consent: "denied" ``` 詳細については、[ワークフローを使用したTD Toolbeltによるデータのエクスポート](https://docs.treasuredata.com/display/INT/Google+Ads+Remarketing+V2+Export+Integration+CLI)を参照してください。