オフラインコンバージョンを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)で公開している。実データに基づく実践ガイドをまとめて読める。

コメント
コメントを投稿