# 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/adspolicy/answer/143465)
- [Google Ads カスタマーマッチポリシー: ファーストパーティコンテキストで収集した顧客情報のみをアップロードする](https://support.google.com/adspolicy/answer/6299717?hl=en)


## Treasure コンソール を使用する

### 新しい接続を作成する

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

1. **Treasure コンソール** を開きます。
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 分に相当）。 |


#### クエリの例

Treasure コンソール の 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) に実行することを要求するためです。後者の仕様が優先されます。

#### Treasure コンソール を使用してジョブをスケジュールする

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.


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

div
| フィールド値  | 例  | 例の説明  |
|  --- | --- | --- |
| 各フィールドに対して上記で表示された制限内の単一の値。 |  |  |
| フィールドに基づく制限がないことを示すワイルドカード
`'*'`。 | `'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 ワークフロー内で、データコネクタを使用してデータをエクスポートするように指定できます。

詳細は[Using Workflows to Export Data with the TD Toolbelt](/tools/cli-and-sdks/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](/int/google-ads-remarketing-export-integration)をご覧ください。