広告3媒体レポート統合をPythonで実装した手順
Meta・Google・Yahooを回している運用者なら、3媒体の数字を1枚に並べる作業に毎朝時間を溶かしているはずだ。媒体ごとに管理画面を開き、CSVを落とし、列名を手で揃える。この手集計はミスの温床であり、月次のたびに憂うつになる。結論から言うと、統合でつまずく原因のほぼ全ては「コスト単位と列名のバラつき」に集約される。ここさえ設計すれば、3媒体の横断CPA比較はPythonで5分に落ちる。実際に運用中のスクリプトをもとに、設計から実装、ハマった点までを順に示す。
なぜ3媒体を1つにするだけで数字がズレるのか
統合が難しいのはAPI連携そのものではない。各媒体が「同じ指標」を別の名前・別の単位で返すからだ。特にコストの表現がバラバラで、ここを見落とすと合計金額が桁単位で狂う。
- Google広告API: コストはマイクロ単位で返る。cost_microsを1,000,000で割って初めて円になる
- Meta広告API: コストはspendという名前で、しかも数値でなく文字列で返る。floatへの変換が要る
- Yahoo広告API: コストはcostだが、レポート項目の指定を誤ると税抜・税込がズレる
クリック・表示回数・CVも同様で、Metaはimpressions、Googleはimpressions、Yahooはimpsのように微妙に違う。つまり統合の本質は「API取得」ではなく「取得後の正規化」だ。列名と単位を共通スキーマに寄せる工程を設計に入れないと、後から必ず破綻する。Google広告APIの単位仕様は公式リファレンス(developers.google.com/google-ads/api)に明記されている。個別のMeta取得の基礎はMeta広告レポートをPythonで自動化する実装手順にまとめた。
設計図: 共通スキーマを最初に固定する
実装より先にやるべきは、3媒体を流し込む「共通の器」を決めることだ。器が決まれば、各媒体の処理は器に合わせる変換関数を書くだけになる。横断分析できない案件のほぼ全ては、この器を決めずにコードから書き始めている(Qiitaの横断分析の解説でも同じ指摘がある)。ブックマークして、自分の担当媒体に合わせて列を足し引きして使ってほしい。以下が実運用で落ち着いた8列の共通スキーマだ。
(1)date(日付・YYYY-MM-DD固定)(2)media(媒体名・meta/google/yahooの3値)(3)campaign(キャンペーン名)(4)cost(コスト・円・整数)(5)clicks(クリック)(6)impressions(表示回数)(7)conversions(CV)(8)cpa(cost÷conversions・後段で計算)。この8列に全媒体を寄せると、CPAやCTRは同じ式で一括計算できる。指標名のマッピング表さえ持てば、LINE広告やX広告を足すときも器は変えずに済む。
実装の核心はコスト単位の変換だけ
スキーマが決まれば、実装で気をつけるのは単位変換のみだ。ここを1行の変換関数に閉じ込めておくと、媒体追加時の事故が激減する。Googleのマイクロ変換は「cost = row.metrics.cost_micros / 1_000_000」、Metaの文字列変換は「cost = int(float(record['spend']))」、Yahooはレポート項目でCostを税込指定して「cost = int(row['Cost'])」とする。この3種類のcostを共通スキーマの整数円に寄せ、pandasのconcatで縦積みするだけでよい。
CVの持ち方にも注意が要る。Meta広告は1件のCVが小数(0.0)で返る場合があり、int変換で切り捨てると過小計上になる。conversionsはfloatのまま保持し、CPA計算時にのみ丸める。横断のCPAは「df.groupby('media').apply(lambda g: g.cost.sum() / g.conversions.sum())」で媒体別に一撃で出る。個別APIの取得側で詰まりやすい罠はYahoo広告APIをPythonで自動化して詰まった5つの罠で先に潰しておくと早い。この統合スクリプトの完全版はnoteの実践ガイドにまとめている。
実運用でつまずいた3点と対処
正規化の設計が正しくても、運用に乗せると別の落とし穴が出た。実際に踏んだ3つを共有する。
- タイムゾーン: Google広告はアカウントのタイムゾーン設定で日付が切られる。管理画面がJSTでもAPIがUTCで返る設定だと、Metaと1日ぶんズレて合計が合わない。3媒体ともJST基準に揃えてから結合する
- アトリビューション窓の差: MetaのCVはデフォルトでクリック7日・ビュー1日を含む。Googleの設定と窓が違うと、同じ「CV」でも定義が別物になる。横断比較の前に各媒体の窓を明記し、揃える判断を入れる
- 通貨と税: 全媒体を円・税込に統一する。Metaのspendは税抜で返るため、統合時の総コストが請求額と乖離する
この3点を潰した結果、それまで管理画面手集計に朝90分かけていた3媒体レポートが、スクリプト実行の約5分に短縮できた。手作業の転記ミスもゼロになった。数字がズレたときに「どの媒体の単位か窓か」を切り分けられるよう、変換関数にコメントで単位を残しておくと復旧が速い。
まとめ
3媒体統合の勝負どころは、APIの叩き方ではなく取得後の正規化にある。共通スキーマを先に固定し、コスト単位とアトリビューション窓を揃える。この順番さえ守れば、横断CPA比較は誰でも再現できる。統合したデータを客先向けのレポートやダッシュボードに落とすなら、以下のツールが図解の下地づくりに使える。
実務でそのまま使いたい人へ
本記事の統合スクリプトの完全版(実際のコード・共通スキーマ定義・媒体追加時のつまずき対処つき)は、運営者のnote(note.com/ryo_ai_hack)で公開している。実データに基づく実践ガイドをまとめて読める。

コメント
コメントを投稿