オフラインコンバージョンをPythonで送る実装手順

広告の成果を正しく測るうえで、オフラインコンバージョンの取り込みは避けて通れない。フォーム送信までは計測できても、実際に受注した案件のデータは広告側に戻らないからだ。ここではGoogle広告APIを使い、CRMの成約データをPythonで自動アップロードする実装をまとめる。実際にvalidate_onlyで形式を検証し、詰まった箇所とその回避策まで示す。手を動かせば今日から試せる内容だ。

なぜ成約データを広告APIに戻すのか

iOSのトラッキング制限やCookie規制で、クリック後の行動を追い切るのは年々むずかしくなっている。フォーム送信までは取れても、その先の「受注したか」は広告の管理画面に届かない。ここを埋めるのがオフラインコンバージョンのアップロードだ。

仕組みはシンプルだ。広告クリック時に発行されるGCLID(Google Click ID)を自社のCRMに保存しておく。成約したタイミングで、そのGCLIDと金額をAPI経由でGoogle広告に送る。すると自動入札が「クリック数」ではなく「実売上」を学習するようになる。公式の解説はGCLIDを使ったオフラインコンバージョン設定にまとまっている。

送信先になるコンバージョンアクションは、種別を「アップロード(クリック)」で作る必要がある。既存のタグ計測用アクションには送れない。ここを取り違えるとエラーになる。

最小構成のPython実装

使うのはConversionUploadServiceのupload_click_conversionsメソッドだ。ClickConversionオブジェクトに、コンバージョンアクションのリソース名・GCLID・日時・金額・通貨を詰めて送る。手本になる公式サンプルはgoogle-ads-pythonのupload_offline_conversion.pyが最短だ。

最小の組み立てはこうなる。ブックマークして、自分のアカウントに合わせて書き換えて使ってほしい。

c = client.get_type("ClickConversion"); c.conversion_action = svc.conversion_action_path(customer_id, action_id); c.gclid = gclid; c.conversion_date_time = "2026-08-24 12:00:00+09:00"; c.conversion_value = 50000; c.currency_code = "JPY"

あとはUploadClickConversionsRequestにcustomer_idとこのconversionを積み、partial_failureをTrueにして送るだけだ。partial_failureをTrueにしないと、1行でも不正があるとバッチ全体が弾かれる。まずはvalidate_onlyをTrueにして、本番反映せず形式だけ検証するのが安全だ。この実装の完全版(認証まわり・CRMからの一括送信ループつき)はnoteの実践ガイドにまとめている。

実運用で詰まった3つの罠

validate_onlyで検証した際に、実際につまずいた点を挙げる。どれも公式ドキュメントに書いてあるが、読み飛ばすとほぼ確実に踏む。

  • GCLIDの大文字小文字:GCLIDは大文字と小文字を区別する。CRM保存時に小文字化や前後スペース除去をかけていると、一致せず無言で無視される。
  • 日時のタイムゾーン形式:conversion_date_timeは「yyyy-mm-dd hh:mm:ss+09:00」の形式で、オフセット必須だ。日本アカウントなら+09:00を付ける。抜けるとエラーで弾かれる。
  • 反映までの待ち時間:新規に作ったコンバージョンアクションは、4〜6時間おいてから送る。直後に送ると、レポート反映まで最大2日ほどかかることがある。

partial_failureをTrueにしておくと、弾かれた行だけがエラー配列に返る。1行ずつ理由を確認できるので、原因の切り分けが速い。この挙動は公式のオンラインクリックコンバージョン管理で確認できる。

送信前チェックリスト

本番に流す前に、このリストを上から確認すると事故が減る。ブックマークして運用フローに組み込んでほしい。

  • コンバージョンアクションの種別は「アップロード(クリック)」になっているか
  • GCLIDを加工せず原文のまま保存しているか
  • conversion_date_timeにタイムゾーンのオフセットが付いているか
  • partial_failureをTrueにしているか
  • 初回はvalidate_onlyで形式検証を通したか
  • クリックから90日以内のGCLIDか(超過分は送っても無効になる)

Meta側で同じことをするなら実装は別物になる。手順はMetaコンバージョンAPIをPythonで実装する手順にまとめた。計測ズレの検知にはGA4と広告のCVズレをPythonで自動検知する実装も合わせて使える。

[PR] こうした運用データを報告資料にまとめる工程まで効率化するなら、AIスライド作成ツールも選択肢になる。AIスライド作成ツール「イルシル」を試してみる

まとめ

オフラインコンバージョンのアップロードは、成約という最終成果を自動入札に学習させる仕組みだ。実装自体はClickConversionを組んで送るだけで重くない。つまずくのはGCLIDの扱いと日時形式、そして待ち時間の3点に集約される。まずはvalidate_onlyで形式を通し、テスト用のGCLIDで1件送るところから始めるとよい。

実務でそのまま使いたい人へ

本記事の手法の完全版(実際のコード・テンプレート・つまずき対処つき)は、運営者のnote(note.com/ryo_ai_hack)で公開している。実データに基づく実践ガイドをまとめて読める。

DMM 生成AI CAMP

コメント

このブログの人気の投稿

Claude Skills販売で月5万稼ぐ3ステップ実践

Claude CodeでExcel自動化副業を月5万にする手順

Yahoo広告APIをPythonで自動化して詰まった5つの罠