# Facebook Ads Insights インポート連携

Facebook Ads Insights のデータコネクタ(旧称 Facebook Ads Reporting)は、Facebook 広告キャンペーンの結果データをインポートすることができます。

# 前提条件

- Treasure Data の基本知識
- Facebook Marketing API、特に [Ads Insights API](https://developers.facebook.com/docs/marketing-api/reporting) の基本知識
- 管理者権限として Admin または Advertiser が必要


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

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

[Treasure Data Connections](https://console.treasuredata.com/app/connections/my-connections) に移動し、Facebook Ads を検索して選択します。次のダイアログが開きます。

![](/assets/image-20191017-181035.1577cc83f5875887b50ad38a67bdf8a6d5d95d993a4b9e160cc6050c17b8fc52.7ecd5fd4.png)

2つの認証方法をサポートしています:

- OAuth
- Access Token


#### OAuth を使用する

Facebook の既存の OAuth 接続を選択するか、OAuth connection の下にあるリンクを選択して新しい接続を作成します。

![](/assets/image-20191017-181104.d6e7e16dd7f44db42198d496e64bf99984d3766c9505f7705939367defbe8047.7ecd5fd4.png)

- 新しい OAuth 接続を作成する


ポップアップウィンドウで Facebook アカウントにログインします:

![](/assets/image-20191017-181215.84b82feaced3680bb19707fc0476cccb5f24b8dd22ba66375fadc90e070dd4e6.7ecd5fd4.png)

そして、Treasure Data アプリへのアクセスを許可します。

[Treasure Data Connections](https://console.treasuredata.com/app/connections/data-sources) にリダイレクトされます。最初のステップ(新しい接続を作成する)を繰り返し、新しい OAuth 接続を選択します。

![](/assets/image-20191017-181244.a60ae0b7f0aec4926d5bb6e9027725877936e6031873e0ece3d5fffe7045d67e.7ecd5fd4.png)

### Access Token を使用する

Access Token を作成するには、セクション3の「Facebook Token の取得」を参照してください。

### 新しい転送を作成する

接続を作成すると、自動的に [Authentications](https://console.treasuredata.com/app/connections/my-connections) タブに移動します。作成した接続を探して、New Source を選択します。

次のダイアログが開きます。

![](/assets/image-20191017-181852.d2ec4e6047223b7cccc3332d17d8f8a421150cf341c65ffcf559706b30bec298.7ecd5fd4.png)

以下の詳細を編集します:

- Ad Account ID
- Data Level
- Import Metadata for Related Objects
- Import all Insights or Insights Fields
- Breakdowns
- Filtering
- Action Attribution Windows
- Start and End Date or Incremental
- Reporting Period


これらのパラメータの詳細は次のとおりです:

#### Ad Account ID

Ad Account ID を追加します。これは[こちらの説明](https://www.facebook.com/business/help/1492627900875762)に従って見つけることができます。

#### Data Level

Ads オブジェクトレベルです。使用可能なオプションは、[Campaign](https://developers.facebook.com/docs/marketing-api/reference/ad-campaign-group)、[Ad Set](https://developers.facebook.com/docs/marketing-api/reference/ad-campaign)、[および Ad](https://developers.facebook.com/docs/marketing-api/reference/adgroup) です。

#### Import Metadata for Related Objects

デフォルトでは、Import metadata for related objects はチェックされておらず、コネクタは基本的なメタデータフィールドのみをインポートします: created_time、effective_status、status。

これをチェックすることで、インポートする関連オブジェクトまたは個別のメタデータフィールドを指定できます。

#### Related Edges

すべての関連 edges をインポートするには、All Metadata Fields を選択します。Fetch Metadata に各 edge を追加することで、インポートする edges を選択できます。

![](/assets/image-20191017-181943.0f8662c25dfaa1f79353be528fb0081ae03f2f43c1784f5f48f843c97839d9b0.7ecd5fd4.png)

#### Metadata Fields

Ads オブジェクトに関連付けられたメタデータフィールドです。Individual Metadata Fields を選択すると、必要なフィールドのみをインポートできます。Metadata Fields の下でフィールドを選択します。

![](/assets/image-20191017-182014.d8c6197ead093910d4d366530fdddb591b4ce6f4d99ef6c89786fd5206b6d49b.7ecd5fd4.png)

edge{field1, field2…} を使用して、Ads オブジェクトの edges にアクセスすることもできます。

#### Insights Fields

Insight フィールドは、キャンペーンのパフォーマンスに関するデータを提供します。

デフォルトでは、Import all insights fields がチェックされています。

![](/assets/image-20191017-182145.5f85958eaeb7374abdbeeacce093f8279dfffbce1dd8511fce87603fe0cbdf23.7ecd5fd4.png)

Import all insights fields のチェックを外して、特定のフィールドを選択できます。

![](/assets/image-20191017-182233.abf14a3a7aea654749a46b8a4e89bc52d41bb3cdd36adc1bf7eab279f0553e0e.7ecd5fd4.png)

[Insights](https://developers.facebook.com/docs/marketing-api/insights#field-expansion) フィールドの date_start と date_stop は、明示的に設定されていない場合、デフォルトで追加されます。Insight の値は、Ads オブジェクトの状態によって空の場合があります。フィールドに値が含まれていない場合でも、エラーは生成されません。

#### Breakdowns

Breakdowns は、異なるセットまたはコホートにグループ化された Ads Insights レスポンスをキャプチャするために使用されます。サポートされている breakdowns は次のとおりです:

- age
- gender
- country
- region
- hourly_stats_aggregated_by_advertiser_time_zone
![](/assets/image-20191017-182602.176baa834f7a5c988fb153840b1f707717ea1aa4bd2e2d5cf56833bb82c43cc9.7ecd5fd4.png)


#### Filtering

報告されたInsightsデータのフィルター。フォーマット: フィールド —> オペレーター —> 値、action_typeはカンマ区切りの値でINオペレーターをサポートします。例: post_like, like

![](/assets/image-20191017-182636.70e3b86ff9bd63c4aebb6d29997f5c20aac293a1785898c2008fad41a77ae1d3.7ecd5fd4.png)

#### Action Attribution Windows

アクションのアトリビューションウィンドウを決定します。サポートされる値は以下の通りです:

- 1d_view
- 7d_view
- 28d_view
- 1d_click
- 7d_click
- 28d_click


明示的に設定されていない場合、デフォルト値は: (["1d_view","28d_click"]) です。

![](/assets/image-20191017-182744.08b30b683726638e208b213f3e8165b5015c618e91133cf1158977685e764000.7ecd5fd4.png)

### Incremental Import and Start Date

**Incremental**インポートと**Start Date**を指定するかどうかを選択します。

incrementalを有効にすることで、各増分ロードの期間(日数)を定義できます。デフォルトは1日です。**Start Date**が指定されていない場合、デフォルトは過去30日間に設定されます。

取得されるデータには、前日の深夜まで利用可能なデータが含まれます。

### Reporting Period

**Start Date**と**End Date**を使用してレポート期間を選択した後、期間全体の結果を取得するか、より小さな時間単位で結果を取得するかを選択できます。**All Days**を選択すると、期間全体で1つの結果セットが取得されます。**monthly**を指定すると、指定された期間内の各暦月ごとに1つの結果セットが取得されます。

![](/assets/image-20191017-182818.b3f389943b38e920575a9742ccabc8647a09c5e7fc4d53df09cba266e5c55653.7ecd5fd4.png)![](/assets/image-20191017-182855.3ce754b59a79079685b577b72b2ea1e57e42d4b1585e06692418734f362cfdcf.7ecd5fd4.png)

または、**In Days**を選択して指定したN日間の期間ごとに1つの結果セットを取得することもできます。1から90までの日数を指定できます。

![](/assets/image-20191017-182922.3ce754b59a79079685b577b72b2ea1e57e42d4b1585e06692418734f362cfdcf.7ecd5fd4.png)

パラメーターの指定が完了したら、**Next**を選択します。以下のダイアログと同様のデータのプレビューが表示されます。**Next**を選択します。プレビューを超えて進めない場合は、[Preview while Importing Data](https://docs.treasuredata.com/smart/project-product-documentation/about-data-preview)を参照してください。

![](/assets/image-20191017-183241.0cc37aaa8b7ebcd6de0c81a800b22ae833fd9e18777c6196fc6a306ec8c4ea45.7ecd5fd4.png)

以下のダイアログに示すように、データを転送するデータベースとテーブルを選択します:

![](/assets/image-20191017-183551.7daa417c4552d8d9afeb062c627880a591e65eb2edac38f029a5fe7f8f85301d.7ecd5fd4.png)

以下のダイアログを使用してデータ転送のスケジュールを指定し、**Start Transfer**を選択します。

![](/assets/image-20191017-183622.02f17beca8df86817524a2635baefb2e2afd3e513414ef6af7cb557ca028dbd9.7ecd5fd4.png)

新しいデータ転送が進行中としてMy Input Transfersタブの下に表示され、対応するジョブがJobsセクションに表示されます。

これで、データの分析を開始する準備が整いました!

## Use Command Line

### Install TD Toolbelt

最新のTD Toolbeltをインストールします。

### Obtain Facebook Token

[Facebookは3種類のトークンを提供しています](https://developers.facebook.com/docs/facebook-login/access-tokens)。期限切れのないPage Access Tokenの使用を推奨します。User Tokenも使用できますが、延長しても2か月後に期限切れになります。バッチ処理には適していません。

期限切れのないPage Access Tokenの取得方法については、[Facebook Long-Lived Access Tokens](https://developers.facebook.com/docs/facebook-login/guides/access-tokens/get-long-lived/)を参照してください。

### Prepare Configuration and Preview Data

facebook_ads_reportingコネクターに対してtd connector:guessを実行する必要はありません。

以下のようにconfig.ymlを準備します:


```yaml
in:
  type: "facebook_ads_reporting"
  ad_account_id: '[your ad account id]'
  access_token: "[your Facebook access token]"
  data_level: ad
  fields:
    - clicks
    - impressions
  metadata_import: all
  metadata_edge:
    - adrules_governed
    - copies
    - keywordstats
    - leads
    - targetingsentencelines
  filtering:
    - {field : "clicks", operator: "GREATER_THAN", value: 10}
    - {field : "impressions", operator: "GREATER_THAN", value: 200}
out:
  mode: append
```

`preview`コマンドを使用してデータのプレビューを表示できます。


```bash
td connector:preview config.yml
```

### Configuration

利用可能なモードの詳細については、以下の表を参照してください。

| **Option name** | **Description** | **Type** | **Required?** | **Default value** |
|  --- | --- | --- | --- | --- |
| ad_account_id | access_tokenのアドアカウントID | string | yes | — |
| access_token | Access Token。期限切れのないトークンの使用を推奨します(次のセクションを参照) | string | yes | — |
| app_secret | 設定されている場合、appsecret_proofパラメーターがAPIへのアクセスに使用されます | string | optional | — |
| metadata_import | 関連エッジまたは個別のメタデータフィールドをインポートしますか? 利用可能なオプションはallとindividualです | string | optional | individual |
| metadata_edge | インポートする関連エッジ。metadata_importがallの場合のみ有効です。関連エッジを参照してください。 | array | optional | — |
| metadata_fields | 指定されたオブジェクトに対して取得したいメタデータフィールド。[利用可能なフィールドを確認してください。](https://developers.facebook.com/docs/marketing-api/reference/v2.9) | array | optional | created_time, status, effective_status |
| fields | Insightsに対して取得したいフィールド。[利用可能なフィールドを確認してください。](https://developers.facebook.com/docs/marketing-api/reference/v2.9) | array | optional | — |
| breakdowns | 詳細についてはbreakdownsを参照してください。 | string | optional | — |
| filtering | 詳細についてはfilterを参照してください。 | array | optional | — |
| action_attribution_windows | アクションのアトリビューションウィンドウを決定します。たとえば、28d_clickは広告がクリックされてから28日以内に発生したすべてのアクションをAPIが返すことを意味します。 | array | optional | — |
| retry_limit | 最大リトライ回数 | integer | optional | 5 |
| retry_initial_wait_sec | エクスポネンシャルバックオフの初期値の待機秒数 | integer | optional | 10 |
| last_fetched_at | この日付以降のデータのみをインポートします。指定されていない場合は、今日から30日前（つまり、today - 30 days）になります。推奨形式: %m/%d/%Y または %Y-%m-%dT%H:%M:%S.%L%Z | string | optional | — |
| incremental | embulk run -c config.diffで "config_diff" を生成する場合はtrue | bool | optional | true |
| duration | 開始日からインサイトデータを取得する日数。詳細は付録Bを参照してください。 | integer | optional | 1 |
| time_increment | 整数の場合、1から90までの日数を指定します。last_fetched_atとlast_fetched_untilを使用してレポート期間を選択した後、期間全体の結果を取得するか、より小さな時間スライスの結果を取得するかを選択できます。"all_days"を使用すると、期間全体の1つの結果セットが得られます。"monthly"を使用すると、指定された期間内の各カレンダー月ごとに1つの結果セットが得られます。または、このパラメータで指定されたN日間ごとに1つの結果セットを取得できます。詳細は付録Bを参照してください。 | string | optional | 1 |
| last_fetched_until | この日付までのデータのみをインポートします。指定されていない場合は今日になります。推奨形式: last_fetched_atを参照してください。詳細は付録Cを参照してください。 | string | optional | — |
| add_time_column | trueの場合、インサイトのdate_stop値に基づいて"time"カラムが自動的に追加されます。それ以外の場合は、upload_timeによって"time"カラムが追加されます | bool | optional | true |
| data_level | データレベルを取得します。Facebookインサイトレベル: Campaign –> Adset –> Ad。使用可能なオプションは "campaign"、"adset"、"ad"、または "ad_creative" です。 | string | optional | "ad" |
| api_version | 使用するFacebook APIのバージョン。デフォルトはv3.2です。指定されたバージョンがv3.1より古い場合（非推奨）、プラグインは "v3.2" を使用します | string | optional | "v3.2" |
| limit_per_page | ページあたりのレコード数。"Please reduce the amount of data you're asking for, then retry your request"というエラーメッセージが表示された場合は、この値を減らしてください | integer | optional | 100000 |


### サポートされている関連エッジ

#### Campaign

- ad_studies
- adrules_governed
- ads
- adsets
- copies


#### AdSet

- activities
- ad_studies
- adrules_governed
- ads
- copies
- targetingsentencelines


#### Ad

- adrules_governed
- copies
- keywordstats
- leads
- targetingsentencelines


### durationとtime_increment

#### durationはいつ使用しますか？

- **duration**は**incremental = true**の場合にのみ有効です
- **duration**は**last_fetched_at**に基づいてリクエストの時間範囲を計算するために使用されます。たとえば、**last_fetched_at = 02/01/2017**で**duration = 2**の場合、リクエストする時間範囲は02/01/2017 → 02/02/2017になります


Facebookリクエストパラメータに直接変換すると:


```
.time_range({"since":"2017-02-01","until":"2017-02-02"})
```

- このパラメータを使用する場合、ブレークダウンの動作はありません。時間範囲全体のインサイト値を返します。
- **注**: **last_fetched_at**が指定されていない場合、今日から30日前（つまり、today – 30 days）になります


#### time_incrementはいつ使用しますか？

- **time_increment**は、インサイトデータを日数で分割したい場合に使用します。結果は、インクリメンタルモードとdurationを使用しない場合に最も認識しやすくなります。


例:


```yaml
incremental: false
last_fetched_at: 03/01/2017
last_fetched_until: 03/31/2017
time_increment: 1
```

上記の設定を使用すると、2017年3月全体を1回の実行でインポートでき、それでも日次で分割できます。

#### durationとtime_incrementの違い

- **duration**は**incremental**モードで使用されます
- **time_increment**は公式のFacebookパラメータです
- **重要な注意事項**: **duration**と**time_increment**の両方が使用可能な場合（デフォルト）、**duration**の値が**time_increment**より小さい場合、**duration**は**time_increment**よりも優先されます。つまり、**duration = 1**の場合、2日ごとのブレークダウンデータ（**time_increment = 2**）は取得できず、結果は1日分のデータになります。一方で、2日間のduration（**duration = 2**）に対して日次でデータを分割（**time_increment = 1**）することは完全に可能です。


#### last_fetched_untilはいつ使用しますか？

- **last_fetched_until**はオプションであり、その唯一の用途はインポートするデータを終了日で制限することです。


例: 2017年3月のデータをインポートするジョブがあり、毎日データを取得するために繰り返し実行するようにスケジュールされています。したがって、次の設定を使用してこれを実現できます:


```yaml
incremental: true
duration: 1
last_fetched_at: 03/01/2017
last_fetched_until: 03/31/2017
```

**注**: ご覧のとおり、**duration**を使用してジョブを繰り返し実行することで**time_increment**の効果をシミュレートできますが、より多くのリクエストが発生します（リクエストレート制限により早く到達します）。

- スケジュールされたジョブが（最終的に）設定された**last_fetched_until**を超えた場合、空の結果が返されます。


## 2018年7月10日リリースでのData Connectorスキーマの変更

Facebook APIの最近の変更により、Data Connectorが更新されました。

**変更前:** 一部のフィールドが追加されましたが、値が空だったため、出力スキーマに一部のカラムが欠落していました。

**変更後:** 一部の新しいカラムが追加されますが、値が含まれていない場合があります。出力スキーマは、入力設定と必須フィールドから組み合わされます。

必須フィールドと暗黙的に追加されるカラムは次のとおりです:

- メタデータフィールド
  - created_time
  - effective_status
  - status
- インサイトフィールド
  - date_start
  - date_stop


以前の更新でスキップされた可能性のある無効な`**fields**`は、更新後にエラーになります。インサイトフィールドとメタデータフィールドの完全なリファレンスについては、次のリンクの`Fields`セクションを参照してください:

- [Campaignレベルのメタデータフィールド](https://developers.facebook.com/docs/marketing-api/reference/ad-campaign-group#Reading)
- [Ad Setレベルのメタデータフィールド](https://developers.facebook.com/docs/marketing-api/reference/ad-campaign#Reading)
- [Adレベルのメタデータフィールド](https://developers.facebook.com/docs/marketing-api/reference/adgroup#Reading)
- [インサイトフィールド](https://developers.facebook.com/docs/marketing-api/reference/ads-insights/)