Google広告のレポートデータは、「管理画面から直接取得する方法」「Ads API/Scriptなどを使って取得する方法」以外に、「BigQueryに直接エクスポートする方法」が存在します。「BigQuery」と聞くと、エンジニア向けの難しい方法のように感じますが、「BigQuery Data Transfer Service」を利用すると、比較的簡単に利用することができます。
本記事では、「Data Transfer Service」を利用するための設定方法と、このサービスを利用してエクスポートされたデータの利用例について紹介したいと思います。
BigQuery Data Transfer Serviceとは
BigQuery Data Transfer Service(BigQueryデータ転送サービス)は、Google広告やGoogleアドマネージャー、Google Play、その他サードパーティーのアプリケーションから、BigQueryへのデータ転送を自動化するサービスです。このサービスを利用するために、プログラミングコードを書く必要は一切ありません。
Google自身がサポートしているデータソースとして、
- Googleキャンペーンマネージャー
- Googleアドマネージャー
- Google広告
- Google Merchant Center(ベータ版)
- Google Play(ベータ版)
- Youtubeチャンネルレポート
- Youtubeコンテンツ所有者レポート
- Cloud Storage(ベータ版)
- Amazon S3(ベータ版)
があります。また、これ以外にも2019年にはサードパーティーにもこの機能が解放され、「GCP Marketplace」を通じて、その他多くのアプリケーションからもBigQueryに手軽にデータ転送ができるようになりました。現時点では、SupermetricsやFivetranといったサードパーティーのデータコネクター・プラットフォーマーを経由して、AdrollやAdobe Analytics、Salesforce、Marketoなど様々なプラットフォームからBigQueryにデータ転送が可能になります。
気になる利用コストですが、Googleが展開するサービスなので無料を期待したいところですが、実際には無料ではなく有料のサービスになります。利用金額は、BigQueryに関わる基本的な金額(ストレージコスト、クエリコスト、データ投入コストなど)の他に、利用するコネクタに対する費用が発生します。
例えばGoogle広告の場合、連携する1広告アカウントごとに2.5ドルの費用が毎月発生します。日本円に直すと月300円程度なので、かなり安い値段で連携できることが実感できると思います(日本の広告プラットフォームの場合、Google広告だけでなく、Yahooプロモーション広告もセットになるケースが多いので、これを利用する判断は難しいかもしれないですが)。
Google広告データの転送方法
BigQueryを既に利用している状態であれば、数分で設定が完了します。BigQuery(Google Cloud Platform含む)を使っていない方は、初心者のためのGCPプロジェクト始め方入門などを参考に、Google Cloud Platformのプロジェクト作成を済ませておきましょう。
では以下で、Data Transfer Serviceの設定方法を順に説明します。
1. BigQueryメニューから「転送」を選択
2. Data Transfer APIを有効にする
3. 転送を作成する
4. データソースのタイプを選択
5. データソースの設定を行う
「Customer ID」には、Google広告の「お客様ID」を指定します。ここでMCCアカウントの親アカウントIDを指定することも可能です。MCCアカウントを指定した場合は、子アカウント全てのデータをエクスポートすることができます。
6. 過去分の転送が完了するまで待機
過去一定期間のデータを含め、BigQueryへの転送が開始されます。データ量にもよりますが、時間がかかるので、気長に待つ必要があります。
BigQueryにエクスポートされるデータの一覧
Data Transfer Serviceを使って、Google広告のデータをBigQueryに転送すると、BigQueryには、2019年8月時点で87個のテーブルが自動で生成されます。ここには、Google Ads APIを使って取得することができる全てのレポートタイプが含まれていると考えられます。
具体的な生成されるテーブルは、
-
アカウントの掲載結果レポート
- pCustomer*
- pHourlyAccountConversionStats*
- pAccountConversionStats*
- pHourlyAccountStats*
- pAccountNonClickStats*
- pAccountBasicStats*
- pAccountStats*
-
広告の掲載結果レポート
- pAdBasicStats*
- pAdCrossDeviceStats*
- pAdConversionStats*
- pAdStats*
- pAdCrossDeviceConversionStats*
- pAd*
-
広告グループの掲載結果レポート
- pAdGroupStats*
- pAdGroupBasicStats*
- pAdGroupCrossDeviceStats*
- pHourlyAdGroupConversionStats*
- pHourlyAdGroupStats*
- pAdGroupConversionStats*
- pAdGroupCrossDeviceConversionStats*
- pAdGroup*
-
年齢層別の掲載結果レポート
- pAgeRange*
- pAgeRangeBasicStats*
- pAgeRangeStats*
- pAgeRangeConversionStats*
- pAgeRangeNonClickStats*
-
ユーザーに関する掲載結果レポート
- pAudience*
- pAudienceConversionStats*
- pAudienceNonClickStats*
- pAudienceBasicStats*
- pAudienceStats*
-
入札目標の成果レポート
- pBidGoal*
- pBidGoalStats*
- pHourlyBidGoalStats*
- pBidGoalConversionStats*
-
予算の成果レポート
- pBudget*
- pBudgetStats*
-
キャンペーンのターゲット地域レポート
- pCampaignLocationTargetStats*
- pLocationBasedCampaignCriterion*
-
キャンペーンの掲載結果レポート
- pCampaign*
- pCampaignBasicStats*
- pCampaignConversionStats*
- pCampaignCrossDeviceStats*
- pHourlyCampaignConversionStats*
- pCampaignStats*
- pHourlyCampaignStats*
- pCampaignCrossDeviceConversionStats*
- pCampaignCookieStats*
-
クリックの掲載結果レポート
- pClickStats*
-
条件の掲載結果レポート
- pCriteria*
- pCriteriaBasicStats*
- pCriteriaStats*
- pCriteriaConversionStats*
- pCriteriaNonClickStats*
-
性別の掲載結果レポート
- pGender*
- pGenderBasicStats*
- pGenderStats*
- pGenderConversionStats*
- pGenderNonClickStats*
-
地域別の掲載結果レポート
- pGeoConversionStats*
- pGeoStats*
-
キーワードの掲載結果レポート
- pKeyword*
- pKeywordBasicStats*
- pKeywordCrossDeviceStats*
- pKeywordStats*
- pKeywordCrossDeviceConversionStats*
- pKeywordConversionStats*
-
有料およびオーガニック検索語句のレポート
- pPaidOrganicStats*
-
子供の有無別の掲載結果レポート
- pParentalStatus*
- pParentalStatusBasicStats*
- pParentalStatusStats*
- pParentalStatusConversionStats*
- pParentalStatusNonClickStats*
-
プレースメントでの掲載結果レポート
- pPlacementBasicStats*
- pPlacementNonClickStats*
- pPlacementStats*
- pPlacement*
- pPlacementConversionStats
-
検索語句レポート
- pSearchQueryStats*
- pSearchQueryConversionStats*
-
ショッピングの掲載結果レポート
- pShoppingProductConversionStats*
- pShoppingProductStats*
-
動画の掲載結果レポート
- pVideoBasicStats*
- pVideoConversionStats*
- pVideoStats*
- pVideo*
- pVideoNonClickStats*
のようになっています(*の部分は、広告アカウントIDが入る)。このように、APIで取得可能なレポートのほぼ全てのパターンを網羅するテーブルが生成されています。場合によっては、似た内容を保持するテーブルも存在するので、実際に利用するときには、想定している数値が格納されているかを再確認する必要があります。
エクスポートデータの注意点と利用例
金額系の列を参照するときの注意
日本円のみを考えると普段あまり意識しませんが、グローバルを前提としたツールでは、金額は小数点以下も表現できるようにする必要があります。しかしながら、コンピュータを用いて小数を表現しようとすると、内部処理の都合上、どうしても精度が落ちてしまうことがあり、正確な計算ができない状況になります。
Google広告では、金額については十分な精度を保つために、内部的には金額系の列は「マイクロ」単位で管理する解決策を取っています。マイクロ通貨単位では、通常の金額を1,000,000倍した数値となります。つまり、10,000円の広告費を使っている場合、マイクロ通貨単位では「10,000,000,000」と表現されます。そして、Data Transfer Serviceを含むAPIでは、このマイクロ通貨単位で金額を返します。マイクロ通貨単位を通常の通貨に変換するために、「1,000,000」で割る処理を行う必要があります。もしこの処理を忘れてしまったとしても、出てくる金額が膨大な値になるので、すぐに気づくことができますが、このように表現されていることを覚えておくようにしましょう。
計算指標を使うときは注意
例えば、クリック率やクリック単価、コンバージョン率、平均掲載順位、インプレションシェアなどの指標を利用するときには注意が必要です。Data Transfer Serviceのデータは、基本的に出来るだけ多くの項目で分割されたデータになっているため、実際にレポートなどで利用する際は、生成されているレポートを集計して利用することになります。そのときに、クリック率やクリック単価などの指標は直接集計するべきではありません。その計算の元になっている指標を集計した後に、定義に従って計算し直す必要があります。
クリック率やクリック単価といった指標については、再計算するための計算式がイメージできると思いますが、平均掲載順位、インプレッションシェアなどの指標はもっと複雑な計算式が必要となります。どういった計算式を利用するべきかはこの記事では省略しますが、それぞれの指標の意味・定義をきちんと理解して用いるようにしましょう。
エクスポートデータの利用例
エクスポートされたデータには、広告アカウント内の多くの情報が含まれています。Google Adsの場合、データスタジオ(データポータル)に直接つなぐことができますが、BigQueryを間に挟むことで、SQLを記述することが必要になりますが、作成できるレポートの幅が広がります。例えば、広告運用を行なっているとよく遭遇する課題として、複数のコンバージョン・ポイントを設定したときのレポートがあります。「コンバージョン・タイプ」で分割すると、分割された行には、表示回数やクリック、費用などの指標が紐づかないため、レポートにしにくい現実があります。
比較的複雑なSQLになりますが、BigQueryにデータが入ってさえしまえば、複雑なレポートも生成できるようになります。
今後、その他の広告プラットフォームに求めたいこと
APIが使われる現状
現在、Yahooプロモーション広告や、Facebook広告、Criteoなど様々な広告プラットフォームが、広告レポートを自動化するためにAPIを提供しています。また、広告プラットフォームによっては、APIを提供していないものも存在します。
プラットフォーム側にとってAPIを提供すると、いつ・どのくらい発生するか分からないAPIリクエストを処理するためにサーバーリソースを抱える必要があります。もちろん、クラウドサービスを利用してサーバーリソースを最適化することはできます。しかし、利用ユーザーにAPIを使ってもらうために、様々なプログラミング言語向けのライブラリやサンプルコードを準備したり、たくさんのドキュメントを準備する必要があります。そのような手間から中小規模のプラットフォームではAPIを提供していないケースもあります。
利用ユーザー側にとってAPIを利用するためには、難解なドキュメントを読み解いたり、度重なるAPIのバージョンアップに追従する必要があります。6種類の広告プラットフォームにAPIで対応する場合、それぞれのプラットフォームのバージョンアップが半年に1回だったとしても、利用ユーザー側は毎月何かしらのプラットフォームのAPIバージョンアップ作業に追われる形になります。また、APIを利用するためには、ある一定以上のスキルを持ったプログラマーが必要です。
利用ユーザーが本当に求めていること
APIを提供していない広告プラットフォーマーへの機能リクエストとして、「APIによるレポートの提供」が寄せられるケースは多いと思います。しかしながら、私は利用ユーザーが本当に求めていることは「API機能の追加」ではないと考えています。
ユーザーが実際に求めているのは、「利用者側も開発が必須となるようなAPIの提供」ではなく、「広告レポートデータを自動で広告プラットフォームから取り出すことができる機能」です。その実現手段が現時点では「API」だけだと思われている点こそが問題です。
API以外の選択肢
ユーザーが本当に求めている「広告レポートデータを自動で広告プラットフォームから取り出すことができる機能」はAPI以外の方法でも実現できます。その1つが今回の記事で紹介した「Data Transfer Service」です。Data Transfer Serviceは、Googleの場合の実現手段です。
おそらくその他の広告プラットフォームの場合、
- 広告プラットフォーマーが提供するスキーマで生成したCSVファイル(またはJSON, XMLなど)を
- 日次(または週次、月次)で自動的に
- 指定したFTPサーバーにエクスポートする
ような機能があれば十分でしょう。スキーマについては、様々なニーズに答えられるようなスキーマが求められるので、「広告レポート」「キーワードレポート」「検索クエリレポート」「プレースメントレポート」など複数のファイルを生成し、またディメンション・指標はできるだけ全てを盛りんだものにすることが推奨されます。
もちろん、エクスポート先は、FTPサーバーと書きましたが、実際には何らかのデータベースでも良いと思います(FTPなら第3者のベンダーにロックインされることもないので、プラットフォーマーも取り組みやすいはずです)。エクスポートした後は、エンジニアによる開発を行わなくても、何らかのETLツールを使ってデータを加工したり、直接BIツールで分析することも容易に可能です。
本当にAPIが必要なケース
広告プラットフォームが提供するAPIのうち、最も使われているのはレポート用のAPI(以下、参照系APIと表記)であると考えられます。おそらく全APIリクエストの9割以上を参照系APIが占めていると予想しています。この9割は前述したようにAPIでの提供ではなく、FTPなどへの自動エクスポートで対応すべきと考えられます。
全APIリクエストの残りの1割以下は、レポートではなく、管理画面の設定を更新する(以下、更新系APIと表記)ために利用されていると考えられます。これには、予算や単価の調整やキーワード、広告、ターゲティングの追加・更新・削除が含まれます。これら更新系APIについては、FTPではどうすることもできませんので、APIが必須となります。ただし、更新系APIを必要としている広告アカウントは全体のうち極一部であるので、その場合は有償での提供としてしまっても良いと思います。
そのため、広告プラットフォーマーは
- 参照系APIは提供せず、FTPサーバへのエクスポートで代用し、全クライアント・代理店に提供する
- 更新系APIのみを一部のクライアント・代理店に対して有償で提供する
という構造が適切だと思います。
まとめ
今回の記事では、Googleが提供する広告データのエクスポート・サービスであり、かつ広告運用者・広告代理店に知られていない「BigQuery Data Transfer Service for Google Ads」について紹介しました。
このような非常に良い仕組みは、Google Adsだけが提供していても意味はなく、可用性の高いAPIを提供することが難しいその他の広告プラットフォームにこそ導入してほしい仕組みであったりします。広告APIという点で1歩遅れを取っている広告プラットフォームYであったり、その他DSPベンダーの関係者の方々がこの記事をご覧いただきましたら、是非ご検討いただけると幸いです。