YouTubeアナリティクスのデータをBigQueryへ自動転送する手順

YouTubeアナリティクスの数値をBigQueryに毎日自動で貯めておけば、SQLやAIで動画ごとの分析ができるようになります。YouTube Studioの画面だけでは、期間をまたいだ比較や、他のデータとの掛け合わせがしにくいからです。

この記事では、Google公式の「BigQuery Data Transfer Service」を使って、YouTubeチャンネルのデータをBigQueryへ自動転送するまでの手順を、実際の画面とつまずいた点を交えて紹介します。後半では、クライアントのチャンネルで設定したときの流れもまとめています。

前提知識

転送できるのは「認証したアカウントのチャンネル」だけ

YouTube Channel転送で取れるのは、転送を作ったユーザーの認証に紐づくチャンネルのデータだけです。1チャンネルにつき1本の転送が必要で、作成のたびに手動での承認も求められます(公式:Authorize accounts for data transfer)。

ブランドアカウントとは

YouTubeチャンネルの持ち主には、個人のGoogleアカウントと「ブランドアカウント」の2種類があります。ブランドアカウントは会社やブランド名義の共有アカウントで、専用のパスワードは無く、オーナーや管理者が自分のGoogleアカウントから切り替えて使います(Googleヘルプ:ブランド アカウントの管理)。

過去データは30日分しか遡れない

転送の元になるYouTube Reporting APIは、レポート作成ジョブを作った日の30日前までの分しか生成しません。そこから先は毎日蓄積されます(公式:YouTube Reporting API Reports)。分析したい期間が決まっているなら、早く設定するほど取りこぼしが減ります。

準備するもの

  • YouTubeチャンネルを持っているGoogleアカウント:このアカウントでGCPにログインして転送を作ります
  • GCPプロジェクト:上記のアカウントが、転送の作成とデータセットへの書き込みができる権限を持っていること
  • データの置き場所(ロケーション):今回は東京リージョンのasia-northeast1を使います

手順1:BigQuery Data Transfer APIを有効にする

  1. Google Cloudコンソールで「APIとサービス」→「ライブラリ」を開き、「BigQuery Data Transfer API」を検索する
  2. 「有効にする」を押す
  3. 詳細画面のステータスが「有効」になれば完了
BigQuery Data Transfer APIの詳細画面。ステータスが「有効」になっている

有効にした直後は「BigQuery Data Transfer service has not been used in project … or it is disabled」というエラーが出ることがあります。反映に数分かかるので、少し待ちましょう。

手順2:データセットを作成する

  1. BigQuery Studioのエクスプローラーで、プロジェクト名の横の「⋮」→「データセットを作成」
  2. データセットID:youtube_channel
  3. データのロケーション:asia-northeast1(東京)
  4. 「データセットを作成」を押す

ロケーションは後から変更できません。GA4や広告などのデータと結合する予定があるなら、それらと同じロケーションに揃えておきましょう。

手順3:YouTube Channel転送を作成して認証する

BigQueryの「データ転送」画面で「転送を作成」を押し、次のように入力します。

項目入力内容補足
ソースYouTube Channel「YouTube Content Owner」はCMSを持つ権利者向けなので選ばない
表示名youtube_channel_daily転送一覧で見分けるための名前
繰り返しの頻度24時間ごと(初期値)「すぐに開始」のままでOK
データセットyoutube_channel手順2で作ったもの
Table suffixチャンネルを見分ける名前テーブル名の末尾に付く
Configure jobsオン(初期値)YouTube側のレポート作成ジョブを自動で設定する
転送の作成画面。データセットとTable suffixを入力したところ

「保存」を押すとGoogleの認証画面が開きます。チャンネルを持っているアカウントを選んで、アクセスを許可します。許可が終わると転送の詳細画面に移ります。「詳細」タブのユーザー欄が、チャンネルを持っているアカウントになっていれば成功です。

転送の詳細画面。ユーザー、宛先データセット、スケジュールを確認できる

手順4:データが入ったか確認する

保存直後の「実行履歴」タブには、「転送実行は保留中です(自動的にスケジュールされます)」と表示されました。

保存直後の実行履歴。初回の実行が保留中になっている

YouTube側でレポートが生成されるまでは、テーブルは空のままです。データが入ったかは、次のSQLで確認できます。

SELECT table_name, creation_time
FROM `(プロジェクトID).youtube_channel.INFORMATION_SCHEMA.TABLES`
ORDER BY table_name;

後述の権限エラーを解消したあと、データセットにはテーブル20個(名前が p_ で始まる実データ)と、同じ名前のビュー20個がそろいました。動画別の視聴データは、9月19日から10月31日まで43日分が欠けずに入っています(11月3日時点)。

つまずいたポイント

出た画面やエラー原因対処
「追加のアクセス権が必要です」「bigquery.transfers.get(権限がありません)」ブラウザで別のGoogleアカウントが選ばれていたURLの authuser= を切り替えるか、右上のアイコンで正しいアカウントを選ぶ
「BigQuery Data Transfer service has not been used in project … or it is disabled」APIが未有効、または反映待ち手順1でAPIを有効にし、数分待つ

初回の実行が「No channel info found.」で失敗した

翌日に実行履歴を見ると、初回の実行が失敗していました。ログには「Error code 5 : No channel info found.」とだけ出ています。

実行履歴のエラー表示。No channel info found.

YouTubeの「すべてのチャンネル」を開くと原因がわかりました。同じGoogleアカウントの中に、チャンネルを持たない個人の名義と、実際に運用しているチャンネルの名義(ブランドアカウント)が別々にありました。認証のときに個人の名義を選んでいたため、転送元のチャンネルが見つからなかったと考えられます。

YouTubeの「すべてのチャンネル」。個人名義はチャンネルが無く、運用中のチャンネルは別名義

認証画面では、Googleアカウントではなくチャンネル名の方を選ぶ必要があります。設定前に https://www.youtube.com/channel_switcher で、どの名義にチャンネルがあるかを確認しておくと安心です。

認証画面。個人のGoogleアカウントと、チャンネルのブランドアカウントが並んで表示される

認証をやり直して再試行すると、エラーが「No reporting jobs found」に変わりました。YouTube側のレポート作成ジョブが作られていなかったためです。転送を削除し、最初からブランドアカウントを選んで作り直すと解消しました。

「bigquery.jobs.create」の権限エラーで止まった

レポートは届き始めたのに、BigQueryへの書き込みが「User does not have bigquery.jobs.create permission … service-(プロジェクト番号)@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com」で失敗していました。

転送サービスの裏で動く専用アカウント(サービスエージェント)に権限が無かったという意味です。IAM画面の「アクセスを許可」から、このアカウントに「BigQuery Data Transfer Service エージェント」ロールを付けます。IAMの一覧で確認するときは、「Google 提供のロール付与を含める」をオンにしないと表示されません。

権限を付けて再試行すると、20種類のレポートが取り込まれました。残りの日付は「バックフィルのスケジュール構成」でまとめて再実行できます。終了日を前日にすると「Cannot schedule a run for the future.」と断られたので、終了日は2日前にしました。

クライアントのチャンネルで設定する流れ

他社のチャンネルでは、転送を作るのはチャンネルの所有者です。YouTube Studioの「権限」で招待されたユーザーは、管理者でもYouTube APIを使えません(YouTubeヘルプ:チャンネルの権限)。転送はAPI経由でレポートを取るので、Studioへの招待だけでは作れません。

順番作業担当
1GCPプロジェクトでAPIを有効にし、データセットを作る(手順1と2)こちら
2チャンネルの所有者を確認してもらうクライアント
3所有者のGoogleアカウントに、GCPプロジェクトで転送を作れる権限を付けるこちら
4転送を作成し、チャンネル名を選んで認証する(手順3)クライアント
5翌日、データの中身が対象のチャンネルかを確かめるこちら

所有者は、YouTube Studioの「設定」→「権限」で、役割が「所有者」になっているアカウントです。依頼する際は画面付きの手順書を渡し、「認証画面では個人名ではなくチャンネル名を選ぶ」ことを目立つように入れておくのが大事です。

まとめ

  • 認証画面では、個人名ではなく対象のチャンネル名を選ぶ
  • 他社のチャンネルは、チャンネルの所有者に転送を作ってもらう
  • 「bigquery.jobs.create」で止まったら、サービスエージェントにロールを付ける
  • 設定の翌日は、エラーが無くてもチャンネルIDをSQLで確かめる
  • 過去分はジョブ作成の30日前までしか取れないので、早めに設定する

あなたへのおすすめ