Darmowe narzędzie · bez logowania
Tester SHA-256 dla konwersji rozszerzonych
Sprawdź, czy Google Ads i Meta dostają zahashowany e-mail i telefon klienta, czy hash pustego pola albo undefined, z którym żadna konwersja się nie dopasuje. Bez BigQuery sprawdzisz hash z podglądu GTM, a z BigQuery wszystkie zapisane hashe jednym zapytaniem.
- 84 pustych i testowych wartości dla e-maila i telefonu
- Zasady normalizacji z dokumentacji Google Ads i Meta
- Wersja online i zapytanie SQL dla BigQuery
- Dane nie opuszczają Twojej przeglądarki
Gdzie masz hashe do sprawdzenia?
Twoja przeglądarka nie udostępnia funkcji SHA-256 (Web Crypto). Otwórz stronę przez https:// w aktualnym Chrome, Firefoksie, Edge albo Safari.
- Wyślij formularz testowy przy włączonym podglądzie GTM.
- Skopiuj hash ze zmiennej z danymi użytkownika i wklej go poniżej.
- Wpisz też, co podałeś w formularzu. Tester powie, czy hash się zgadza.
sha256_email_address: "…". Tester sam wytnie hash.Wykorzystałeś 3 darmowe sprawdzenia na dziś
Podaj e-mail, a od razu odblokuję tester bez limitu na tym urządzeniu. Nie musisz czekać na wiadomość.
Hashowanie odbywa się w Twojej przeglądarce. Wpisane dane i hashe nie są wysyłane na serwer ani zapisywane.
- Znajdź tabelę, w której zapisujesz hashe wysyłane do Google Ads lub Meta.
- Uzupełnij pola. Tester od razu zbuduje zapytanie SQL.
- Uruchom je w konsoli BigQuery i odczytaj, jaki procent hashy jest błędny.
Zapytanie uruchamiasz w swoim projekcie BigQuery. Tester nie łączy się z Twoimi danymi.
Tester znalazł problem? Pokażę, skąd tag bierze złe dane i jak to naprawić.
Umów 30 min konsultacjiLista do porównania
Hashe SHA-256 pustych i błędnych wartości
Jeśli hash z Twojej strony jest na tej liście, tag wysyła do Google Ads albo Meta pustą lub przypadkową wartość zamiast danych klienta. Najszybciej sprawdzisz to skrótem Ctrl+F (Cmd+F na Macu): wklej początek swojego hasha.
Pole e-mail
| Zahashowana wartość | SHA-256 | Skąd się bierze |
|---|---|---|
| (pusty tekst) | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 | pusta zmienna: tag uruchomił się, zanim formularz zapisał e-mail |
| (spacja) | 36a9e7f1c95b82ffb99743e0c5c4ce95d83c9a430aac59f84ef3cbfab6145068 | spacja w pustym polu formularza |
null | 74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b | zmienna ma wartość null |
NULL | fb329000228cc5a24c264c57139de8bf854fc86fc18bf1c04ab61a2b5cb4b921 | NULL z bazy danych lub CRM, bez zamiany na małe litery |
undefined | eb045d78d273107348b0300c01d29b7552d622abbc6faf81b3ec55359aa9950c | zmienna nie istnieje, a kod zamienił ją na tekst |
none | 140bedbf9c3f6d56a9846d2ba7088798683f4da0c248231336e6a05679e4fdfe | wartość None z kodu po stronie serwera, po normalizacji |
nan | 9b2d5b4678781e53038e91ea5324530a03f27dc1d0e5f6c9bc9d493a23be9de0 | NaN z JavaScriptu po normalizacji |
0 | 5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9 | liczba zero zamiast pustego pola |
false | fcbcf165908dd18a9e49f7ff27810176db8e9f63b4352213741664245224f8aa | wartość logiczna zamiast danych |
[object object] | c9a560c74de368dcd2e6ac5544ad12a9afd32584b71a52147303479f726e0408 | obiekt JavaScript zamieniony na tekst, po normalizacji |
{{email}} | 2fa568238f6d6aa0d84b7d66ec13b95eef51f803f1fdc5b8c54e475574ee6de3 | niewypełniona zmienna w szablonie lub tagu |
mail | 00d8d3f11739d2f3537099982b4674c29fc59a8fda350fca1379613adbb09119 | nazwa pola zamiast wartości |
email | 82244417f956ac7c599f191593f7e441a4fafa20a4158fd52e154f1dc4c8ed92 | nazwa pola zamiast wartości |
e-mail | 39e0749da40f625e3ac47efdf64b79fa28f8aad01f3c2746176ea4a03a9e98e1 | etykieta pola zamiast wartości |
zero | f9194e73f9e9459e3450ea10a179cdf77aafa695beecd3b9344a98d111622243 | tekst zastępczy w polu |
[email protected] | f660ab912ec121d1b1e928a0bb4bc61b15f5ad44d5efdc4e1c92a25e99b8e44a | adres testowy z formularza lub z kodu |
[email protected] | 973dfe463ec85785f5f95af5ba3906eedb2d931c24e69824a89ea65dba4e813b | adres przykładowy z dokumentacji lub kodu |
| (pusty tekst, hash liczony dwa razy) | cd372fb85148700fa88095e3492d3f9f5beb43e555e5ff26d95f5a6adc36f8e6 | podwójne hashowanie pustej zmiennej |
Pole telefon
| Zahashowana wartość | SHA-256 | Skąd się bierze |
|---|---|---|
| (pusty tekst) | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 | pusta zmienna: tag uruchomił się, zanim formularz zapisał telefon |
+48 | 40bb9b604a4c05e5615ff8a71e8035b4f6ffe01ba260129be2bf8d9fd7bee097 | sam kierunkowy kraju dopisany do pustego pola (Google Ads) |
48 | 98010bd9270f9b100b6214a21754fd33bdc8d41b2bc9f9dd16ff54d3c34ffd71 | sam kierunkowy kraju dopisany do pustego pola (Meta) |
+48undefined | bc73e8b53f8fc741284de2e2977efb9f87b36a6ca78235bd172b933d78fb2908 | kierunkowy dopisany do nieistniejącej zmiennej |
48undefined | d9e8719b212db2f8db5020fe20a74ebf2f67b1eee709dc8785a57bfa7a44d85d | to samo przy normalizacji Meta |
+48null | b5bb30a906c8fe791b3e1175340b4b4e78cbbe60c5f28a95b39eaee0adc45f08 | kierunkowy dopisany do zmiennej z wartością null |
0 | 5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9 | liczba zero zamiast numeru |
000000000 | f120bb5698d520c5691b6d603a00bfd662d13bf177a04571f9d10c0745dfa2a5 | numer zastępczy z formularza |
+48000000000 | 95d073e0bd1bbf5f41c100cf98a3fbcf1eb360d5f4df5596a90c5ab75d80c4c7 | numer zastępczy z kierunkowym |
123456789 | 15e2b0d3c33891ebb0f1ef609ec419420c20e320ce94c65fbc8c3312448eb225 | numer testowy |
+48123456789 | 7af87dd94e1187579818739230965dee6e025ea02bdbd79546907cc121589e3f | numer testowy z kierunkowym |
telefon | b7367edaa7bb675764606b5a9343e09ee90242ce419eabfca14c7c7325e550f6 | nazwa pola zamiast wartości |
phone | 45569da57f4b7bf472d7a864ef4781451cae6383fee9fb0ae40c59aa1ce475b7 | nazwa pola zamiast wartości |
Tester rozpoznaje więcej wartości niż ta lista, także zapisane wielkimi literami i zahashowane dwa razy.
Jak korzystać
Dwie ścieżki: bez BigQuery i z BigQuery
Bez BigQuery sprawdzisz jeden formularz testowy w kilka minut. Z BigQuery zobaczysz, jaki procent wszystkich konwersji wysyła błędny hash.
Nie mam BigQuery
- Wyślij formularz testowy. Włącz podgląd GTM (i server-side GTM, jeśli go masz) i wyślij formularz albo zamówienie na swój testowy e-mail i numer telefonu.
- Skopiuj hash. W podglądzie GTM kliknij zdarzenie konwersji i otwórz zmienną z danymi użytkownika. W server-side GTM sprawdź pole
user_data. W Meta pomoże zakładka Testuj zdarzenia w Menedżerze zdarzeń. - Wybierz e-mail albo telefon i platformę. Normalizacja telefonu różni się między Google Ads i Meta, więc wynik zależy od tego wyboru.
- Wklej hash i dane z formularza. Tester pokaże, czy hash się zgadza, a jeśli nie, czy to pusta wartość, czy błąd normalizacji.
Mam BigQuery
- Znajdź tabelę z hashami. Hashe są w BigQuery tylko tam, gdzie sam je zapisujesz: w logach server-side GTM, w tabeli uploadu konwersji offline albo w danych z CRM.
- Uzupełnij pola w testerze. Wybierz e-mail albo telefon, platformę, tabelę i kolumnę z hashem. Jeśli w tej samej tabeli masz jawne dane, dodaj ich kolumnę.
- Uruchom SQL w konsoli BigQuery. Zapytanie używa funkcji
SHA256iTO_HEX. Dodaj filtr dat, żeby nie skanować całej historii. - Odczytaj wynik. Zobaczysz liczbę i procent wierszy: brak hasha, pusta wartość, zły format, wielkie litery, hash niepasujący do danych i poprawne hashe.
Skąd biorą się puste hashe
6 błędów, przez które Google Ads i Meta dostają hash zamiast klienta
Hash pustego pola wygląda w podglądzie tak samo jak poprawny e-mail: 64 znaki z cyframi i literami. Dlatego ten błąd potrafi przetrwać miesiące, a konwersje rozszerzone pokazują wtedy niską skuteczność dopasowania.
- Tag uruchamia się za wcześnie. Wyzwalacz na kliknięcie przycisku odpala tag, zanim formularz zapisze e-mail w dataLayer. Hashuje się pusty tekst.
- Własny kod hashuje brakującą wartość. Zmienna zwraca
undefined, a kod JavaScript zamienia ją na tekst „undefined” i hashuje. - Formularz w iframe albo w pop-upie. GTM na stronie nie widzi pola w osadzonym formularzu, więc zmienna zbiera etykietę pola albo nic.
- Podwójne hashowanie. Wtyczka sklepu albo CRM wysyła już zahashowany e-mail, a tag hashuje go drugi raz.
- Brak normalizacji. Wielkie litery, spacje, kropki w Gmailu albo telefon bez kierunkowego kraju dają hash innych danych niż te, które zna Google czy Meta.
- Zły zapis hasha. Wielkie litery w hashu albo Base64 zamiast zapisu szesnastkowego (hex).
Z praktyki: w serwisie cateringu dietetycznego Google Ads zgłaszał błąd krytyczny konwersji rozszerzonych, bo dane były hashowane SHA-1 zamiast SHA-256. Na innej platformie cateringowej w dataLayer brakowało zahashowanego telefonu w formacie E.164. Zobacz case study
Ściąga
Normalizacja e-maila i telefonu przed SHA-256: Google Ads i Meta
Google Ads i Meta normalizują dane inaczej, zwłaszcza telefon. Hash zmienia się całkowicie po zmianie jednego znaku, więc dane trzeba zapisać dokładnie tak, jak wymaga platforma, do której je wysyłasz.
| Krok | Google Ads | Meta Conversions API |
|---|---|---|
| Dane bez hasha | dozwolone: tag Google sam je normalizuje i hashuje przed wysłaniem | niedozwolone: em i ph muszą być zahashowane (piksel w przeglądarce hashuje sam) |
| bez spacji na początku i końcu, małe litery; w gmail.com i googlemail.com usuń kropki przed @ | bez spacji na początku i końcu, małe litery; kropek nie usuwaj | |
| Plus w e-mailu | zostaw (jan+test@) | zostaw |
| Telefon | format E.164: plus, kierunkowy kraju, bez spacji i myślników, np. +48600100200 | same cyfry z kierunkowym kraju, bez symboli i zer na początku, np. 48600100200 |
| Hash | SHA-256, zapis hex | SHA-256, zapis hex |
Przykłady normalizacji e-maila w Google Ads
| Wpisany e-mail | Po normalizacji | Początek hasha |
|---|---|---|
| [email protected] | [email protected] | a7a3d61e1c1a… |
| [email protected] | [email protected] | 0a0b3c1d060c… |
| [email protected] | [email protected] | e1edb5820b9b… |
| [email protected] | [email protected] | f423723ac7f3… |
| [email protected] | [email protected] | 788b0e3c9407… |
Kropki znikają tylko w adresach Gmail. Źródła: Google Ads, Set up enhanced conversions for web using the Google tag; Meta, Customer Information Parameters.
FAQ
Pytania o hashowanie e-maila i telefonu w konwersjach rozszerzonych
Czy Meta przyjmuje niezahashowany e-mail i telefon?
Nie w Conversions API. Pola em i ph muszą być zahashowane SHA-256, a Meta odrzuca niezahashowane dane kontaktowe. Piksel Meta w przeglądarce (zaawansowane dopasowanie) hashuje dane sam.
Wysłać do Google Ads e-mail jawnie czy zahashowany?
Google Ads przyjmie oba. Niezahashowane dane tag Google sam normalizuje i hashuje przed wysłaniem do Google. Pamiętaj, że hash SHA-256 to pseudonimizacja, a nie anonimizacja: w świetle RODO zahashowany e-mail nadal jest daną osobową. W obu przypadkach potrzebujesz podstawy prawnej i zgody ad_user_data w Consent Mode. Jawny e-mail w dataLayer widzą wszystkie skrypty na stronie, dlatego warto ograniczać, gdzie się pojawia. Szczegóły ustal z prawnikiem lub inspektorem ochrony danych.
Czy usuwać kropki i plus z adresów Gmail?
Kropki tak, plus nie. Google Ads wymaga usunięcia kropek przed znakiem @ tylko w domenach gmail.com i googlemail.com. Części po plusie nie usuwaj. Meta nie usuwa kropek, wymaga tylko małych liter i usunięcia spacji.
Czym różni się normalizacja telefonu w Google Ads i Meta?
Google Ads wymaga formatu E.164 z plusem, np. +48600100200. Meta wymaga samych cyfr z kierunkowym kraju, bez plusa i zer na początku, np. 48600100200. Te same dane dają więc dwa różne hashe.
Dlaczego mój hash to e3b0c442…b855?
To SHA-256 pustego tekstu. Tag zahashował pustą zmienną, bo uruchomił się, zanim formularz zapisał dane w dataLayer, albo zmienna w GTM wskazuje złe pole. Google Ads i Meta nie dopasują takiej konwersji do żadnego użytkownika.
Czy mogę użyć hasha e-maila jako user_id w GA4?
Nie. Google wymaga, żeby user ID nie zawierał informacji, po której ktoś trzeci ustali tożsamość użytkownika. Hash SHA-256 e-maila bez dodatkowego klucza łatwo dopasować do znanego adresu. Jako user_id używaj wewnętrznego ID klienta z Twojego systemu.
Gdzie znaleźć hash, który wysyła moja strona?
W podglądzie GTM wybierz zdarzenie konwersji i sprawdź zmienną z danymi użytkownika. W server-side GTM otwórz zdarzenie w podglądzie i sprawdź pole user_data albo żądanie wychodzące do Meta. W BigQuery hashe znajdziesz tylko w tabelach, do których sam je zapisujesz, np. w logach server-side GTM albo w uploadzie konwersji offline.
Zielony wynik oznacza, że wszystko działa?
Nie do końca. Oznacza, że hash ma poprawny format i nie jest żadną ze znanych pustych wartości. Żeby mieć pewność, że to właściwe dane, wpisz w testerze to, co podałeś w formularzu testowym.
Czy tester ma limit sprawdzeń?
Bez podania e-maila sprawdzisz hash 3 razy na dobę na jednym urządzeniu. Po podaniu e-maila tester działa bez limitu. Ścieżka z BigQuery nie ma limitu, bo zapytanie SQL uruchamiasz u siebie.
Czy tester wysyła wpisane dane na serwer?
Nie. Hashowanie i porównanie odbywa się w Twojej przeglądarce, a do statystyk strony trafia tylko liczba sprawdzonych hashy, bez ich treści. Na serwer trafia wyłącznie adres e-mail, jeśli sam go podasz, żeby zdjąć limit. Do testów najlepiej używaj własnego, testowego adresu e-mail i numeru.
Tester znalazł pusty hash? Pomogę go naprawić
Na 30-minutowej konsultacji sprawdzimy razem, skąd tag bierze dane, i ustalimy, co poprawić w dataLayer, GTM albo server-side GTM, żeby Google Ads i Meta dopasowywały konwersje do klientów.