ハッシュは問題ありません。問題は入力です。
John@Example.com、john@example.com、john@example.com (末尾に空白)は、1つのメールボックスであり、3つのまったく異なるSHA-256ダイジェストです。メールのマッチ失敗はどれもこうした瞬間にさかのぼります。ですからこのページの大半は、ハッシュ化の直前の3秒についての話です。
共通の処理:トリムしてから小文字化
土台については主要2社の見解が一致しています。Meta: "Trim any leading and trailing spaces. Convert all characters to lowercase." Google Ads: 小文字化し、空白を除去。Google スプレッドシートでは:
=LOWER(TRIM(A2))
この数式をすり抜ける罠が2つあります。
- ノーブレークスペース。
TRIM()はCHAR(160)を除去しません。CSVエクスポートやコピー&ペーストが仕込む、あの見えない文字です。見た目はきれいなセルが誤ったダイジェストを出すなら、まず=SUBSTITUTE(A2, CHAR(160), "")を。 - リッチテキスト由来の不可視文字。 メールクライアントから貼り付けたアドレスは、ゼロ幅文字を連れてくることがあります。期待値との長さ比較(
=LEN(A2))が最も安価な検出手段です。
分岐点:Gmailのドットとプラス記号
ここでプラットフォームの規定は実際に異なります。一方のルールをもう一方に写すとデータが壊れます。
- Google Ads は
gmail.comとgooglemail.comのアドレスに限って追加のクリーンアップを明記しています。ユーザー名部分のドットを除去し、+以降をすべて除去する。Jane.Doe+Shopping@googlemail.com→janedoe@googlemail.com。これを他のドメインに適用するのは誤りです。多くのメールシステムではドットに意味があり、Googleのルールもこの2ドメインだけを名指ししています。 - Meta はドットやプラスに関するルールをいっさい明記していません。トリムと小文字化が、明記された指示のすべてです。
したがってGmailアドレスの多いリストにはメール列が2つ必要です――Google向けに正規化したものと、Meta向けに正規化したもの。電話番号とまったく同じです(その話は電話番号ハッシュ化のガイドにあります)。
そしてハッシュ化し、一度だけ証明する
SHA-256、小文字の16進出力――Metaのドキュメントは小文字16進を明示しています。Google スプレッドシートには組み込みのハッシュ関数がなく(Googleの関数リストに暗号関連のものは一切ありません)、ダイジェストはApps Scriptかアドオンから得ることになります。どちらを使うにせよ、パイプラインを一度だけ証明してください。Metaは john_smith@gmail.com の期待ダイジェストを公開しています――
62a14e44f765419d10fea99367361a727c12365e2520f32218d505ed9aa0f62f
――ですからこの文字列をそのままハッシュ化します。正しい答えが出れば連鎖全体が検証されたことになり、それ以外なら、リストに触れる前に数式を直してください。
チェックリスト
- 元がCSVや貼り付けなら
SUBSTITUTE(…, CHAR(160), "") LOWER(TRIM(…))――常に- Gmailのドット/プラス処理――Google Adsの列のみ、この2ドメインのみ
- SHA-256、小文字の16進
- テストベクターでの確認――リストごとではなく、パイプラインごとに一度
Hash Dataの位置づけ
Hash Dataはこれらの数式の隣、シートの中にハッシュ関数を置きます。正規化してからハッシュ化する流れが、保守すべきスクリプトではなく引き下げ一回で済みます――複数のアルゴリズム、標準的な16進出力を、そのリストがすでに置かれているスプレッドシートの中で。
出典
- Google Adsヘルプ – 顧客データファイルの形式を設定する – 2026年8月20日閲覧
- Meta – Conversions API customer information parameters – 2026年8月20日閲覧
- Google スプレッドシートの関数リスト – 2026年8月20日閲覧