Konwersje offline z Arkusza Google do Meta: kolumny, hashowanie i deduplikacja
Jak wysyłać sprzedaż i kwalifikację leadów z Arkusza Google do Meta przez Conversions API: jakie kolumny, format daty i telefonu, hashowanie, limit 7 dni.

Spis treści
- Co to są konwersje offline w Meta?
- Jakie kolumny musi mieć arkusz?
- Jak dane z arkusza są hashowane?
- Jak przypisać statusy do zdarzeń Meta?
- Jak działa deduplikacja przy arkuszu?
- Przykład: jeden wiersz od leada do sprzedaży
- Jak sprawdzić, czy zdarzenia dochodzą?
- Najczęstsze błędy i ich przyczyny
- Kiedy arkusz to zły pomysł?
- Następny krok
Wiele firm prowadzi sprzedaż w Arkuszu Google: handlowiec dopisuje wiersz, zmienia status na „zakwalifikowany”, a potem na „sprzedany”. Meta nic o tym nie wie, bo Pixel widzi tylko stronę, a nie arkusz. Conversions API pozwala przekazać te zmiany do Meta jako konwersje offline, czyli zdarzenia, które wydarzyły się poza stroną. Ten poradnik pokazuje, jak przygotować kolumny, jak dane są hashowane, jak uniknąć podwójnego liczenia i gdzie są granice tego podejścia.
Co to są konwersje offline w Meta?
To zdarzenia, które Twój system zna, a przeglądarka nie: sprzedaż przez telefon, podpisana umowa, lead zakwalifikowany po rozmowie. Meta przyjmuje je dziś przez to samo Conversions API, co zdarzenia ze strony. Dawny osobny interfejs dla konwersji offline Meta opisuje jako starszy i przy nowych wdrożeniach zaleca Conversions API.
Zdarzenie z arkusza ma action_source równe system_generated, czyli „wygenerowane przez system firmy”. Najważniejsze reguły z dokumentacji parametrów zdarzenia:
event_timeto rzeczywisty czas zdarzenia, najwyżej 7 dni wstecz od wysyłki,- jedno za stare zdarzenie w paczce powoduje odrzucenie całego żądania,
- zdarzenie potrzebuje co najmniej jednego identyfikatora osoby.
Jakie kolumny musi mieć arkusz?
Nazwy kolumn możesz mieć własne, bo w panelu przypisujesz je do pól. Liczy się zawartość.
| Kolumna (przykład) | Co zawiera | Na co uważać |
|---|---|---|
id | Stały identyfikator rekordu, np. numer z CRM | Nie numer wiersza: po sortowaniu się zmieni. Bez e-maili i nazwisk |
status | Status biznesowy, np. QUALIFIED, CONVERTED | Wielkość liter musi zgadzać się z przepływem |
status_changed_at | Kiedy rekord wszedł w ten status | Komórka daty albo ISO 8601 ze strefą. Nie czas synchronizacji |
email | E-mail klienta | Hashowany przed wysyłką |
phone | Telefon z kodem kraju, np. +48600100200 | Kolumna tekstowa, żeby arkusz nie zjadł plusa |
meta_lead_id | Identyfikator leada z formularza Meta | Tylko jako tekst, inaczej arkusz zaokrągli długą liczbę |
value, currency | Kwota i kod waluty ISO 4217, np. PLN | Wymagane dla Purchase |
consent | TRUE, jeśli masz podstawę prawną do przekazania danych | Nie ustawiaj hurtem bez sprawdzenia procesu w firmie |
Wymagane minimum to identyfikator, status, czas, zgoda i co najmniej jeden identyfikator osoby: e-mail, telefon albo identyfikator leada z Meta.
Dlaczego czas zmiany statusu jest tak ważny?
Bo Meta przypisuje konwersję do momentu, w którym się wydarzyła. Gdyby narzędzie wstawiało czas synchronizacji, sprzedaż z piątku wyglądałaby jak sprzedaż z poniedziałku. Dlatego Convs nie zastępuje brakującej daty czasem odczytu: wiersz bez daty jest odrzucany z komunikatem, który wskazuje numer pierwszego błędnego wiersza (bez danych klienta).
Daty z komórek arkusza są czytane w strefie czasowej arkusza. Daty tekstowe muszą mieć strefę (np. 2026-04-14T10:30:00+02:00).
Jak dane z arkusza są hashowane?
Meta wymaga, żeby e-mail i telefon były znormalizowane i zahashowane SHA-256, a identyfikator leada wysłany jawnie. Według listy parametrów klienta:
- E-mail: usunięcie spacji z brzegów, małe litery, potem SHA-256.
Anna.Kowalska@Example.comianna.kowalska@example.comdają ten sam skrót. - Telefon: usunięcie spacji, myślników i nawiasów, kod kraju obowiązkowy, potem SHA-256 z samych cyfr.
+48 600-100-200staje się skrótem z48600100200. - Identyfikator leada z Meta: bez hashowania, bo Meta zna go w tej postaci.
Convs robi to po stronie serwera. Telefon bez kodu kraju jest odrzucany, zamiast zgadywać prefiks, bo źle dopisany prefiks dałby skrót, który nikomu nie odpowiada. Skróty to nadal dane osobowe: o podstawie prawnej i retencji piszemy w artykule o RODO i hashowaniu (to nie jest porada prawna).
Jak przypisać statusy do zdarzeń Meta?
W przepływie mówisz, który status ze źródła ma zostać którym zdarzeniem w Meta. Przykład:
| Status w arkuszu | Zdarzenie Meta |
|---|---|
QUALIFIED | QualifiedLead |
CONVERTED | Purchase (z wartością i walutą) |
LOST | brak mapowania: nic nie jest wysyłane |
Nazwę zdarzenia dobierz do tego, co chcesz potem wykorzystać w kampanii lub konwersji niestandardowej. Jedno źródło może wysyłać do kilku odbiorców (np. dwóch Pixeli), a każdy cel ma osobny status wysyłki. Jak zaprojektować etapy, z których Meta może się czegoś nauczyć, opisujemy w artykule o etapach leada w CRM.

Jak działa deduplikacja przy arkuszu?
Arkusz czytany co minutę oznacza, że ten sam wiersz jest widziany setki razy. Gdyby każdy odczyt wysyłał zdarzenie, Meta dostałaby lawinę duplikatów. Są więc dwie warstwy ochrony:
- Zdarzenie biznesowe: para identyfikator + status ze źródła jest konwersją jednorazową. Ponowne wejście w ten sam status nie tworzy nowej konwersji.
- Wysyłka: zdarzenie ma stały
event_id, wyliczony z identyfikatora i statusu, a kolejka nie wyśle drugi raz tego samego zdarzenia do tego samego datasetu Meta w tym samym trybie, także z dwóch różnych połączeń.
Ponowienia po błędach zachowują ten sam event_id, więc nawet gdy odpowiedź Meta zginie po drodze, Meta może zdeduplikować powtórkę. Pixel nie wysyła zdarzeń z arkusza, więc nie trzeba niczego uzgadniać z przeglądarką. Szczegóły w artykule o deduplikacji zdarzeń.
Czego synchronizacja nie odtworzy?
Arkusz pokazuje aktualny stan wiersza, a nie historię. Jeśli handlowiec w ciągu minuty zmieni status z QUALIFIED na CONVERTED, odczyt może zobaczyć tylko ten drugi. Gdy kilka zmian statusu może nastąpić szybciej niż odczyt, zapisuj zdarzenia w osobnej zakładce: jeden wiersz na każdą zmianę, z własnym identyfikatorem.
Przykład: jeden wiersz od leada do sprzedaży
Zobacz, co dzieje się z jednym wierszem (dane przykładowe). Handlowiec dopisuje w poniedziałek rekord K-1042 z telefonem +48600100200 i statusem NEW. Przepływ nie mapuje NEW, więc nic nie wychodzi.
- Wtorek, 11:20. Handlowiec zmienia status na
QUALIFIEDi wpisuje czas zmiany. W ciągu kilku minut odczyt widzi nowy status, a kolejka wysyłaQualifiedLeadz zahashowanym telefonem i czasem z wtorku 11:20. - Środa. Ktoś przypadkiem zmienia status z powrotem na
NEW, a potem znów naQUALIFIED. ParaK-1042+QUALIFIEDjuż była zgłoszona, więc druga konwersja nie powstaje. Jeśli przy okazji zmienił się czas statusu, wiersz dostaje komunikat o konflikcie, bo zgłoszonej konwersji nie da się zmienić. - Piątek, 15:05. Status
CONVERTED, wartość4900, walutaPLN. WychodziPurchasez kwotą i czasem z piątku. - Poniedziałek. Handlowiec poprawia kwotę na
5200. Ta zmiana dotyczy już zgłoszonej pary, więc jest odrzucana z komunikatem. Meta zna wartość z piątku.
Wniosek: kwotę i status wpisuj dopiero wtedy, gdy są ostateczne. Jeśli korekty się zdarzają, ustal w zespole, że sprzedaż trafia do arkusza po zaksięgowaniu płatności.
Jak sprawdzić, czy zdarzenia dochodzą?
- Utwórz odbiorcę Meta w trybie testowym z kodem z Menedżera zdarzeń.
- Zmień status w jednym wierszu z prawdziwymi danymi testowymi.
- W panelu sprawdź wysyłkę: „Przyjęte przez Meta” oznacza odpowiedź z
events_received: 1. - W Menedżerze zdarzeń, w zakładce zdarzeń testowych, sprawdź, czy zdarzenie przyszło z właściwą nazwą i parametrami.
- Dopiero potem utwórz odbiorcę produkcyjnego i przepływ. Testy i produkcja mają osobną deduplikację.

Przyjęcie zdarzenia nie mówi, jak dobrze Meta dopasowała je do osoby. To pokazuje jakość dopasowania w Menedżerze zdarzeń; jak ją podnieść, opisujemy w poradniku o Event Match Quality.
Najczęstsze błędy i ich przyczyny
| Objaw | Przyczyna | Co zrobić |
|---|---|---|
| Wiersz odrzucony: brak czasu | Pusta kolumna daty albo tekst bez strefy | Uzupełnij datę lub dopisz strefę w ISO 8601 |
| Wiersz odrzucony: telefon | Numer bez kodu kraju | Zapisz +48… w kolumnie tekstowej |
| Zdarzenie za stare | Status zmieniony ponad 7 dni temu | Meta go nie przyjmie. Aktualizuj arkusz na bieżąco |
| Nic się nie wysyła | Brak aktywnego przepływu albo status pisany inną wielkością liter | Sprawdź mapowanie w przepływie |
| Zmiana danych odrzucona | Edycja wiersza już zgłoszonego z tym samym statusem | Nowe zdarzenie biznesowe wymaga nowego identyfikatora |
Kiedy arkusz to zły pomysł?
- Zmiany wpisujesz raz w tygodniu. Część zdarzeń przekroczy limit 7 dni i przepadnie. Arkusz musi żyć na bieżąco.
- Leady pochodzą z formularzy natywnych Meta i chcesz optymalizacji pod jakość leadów. Meta oczekuje do niej zdarzeń CRM w ściśle określonej postaci. Prościej podłączyć formularz bezpośrednio, a etapy zmieniać na karcie osoby. Wymagania opisuje artykuł o optymalizacji pod jakość leadów.
- Masz dziesiątki tysięcy aktywnych wierszy. Odczyt po 500 wierszy na minutę sprawi, że pełne przejście potrwa długo. Lepiej przesyłać zdarzenia przez integrację serwerową.
- Arkusz nie ma żadnego identyfikatora osoby. Bez e-maila, telefonu albo identyfikatora leada Meta nie ma z czym dopasować zdarzenia.
Następny krok
Dodaj do arkusza kolumny z tabeli, połącz go w trybie testowym i zmień status w jednym wierszu. Więcej o wysyłce znajdziesz na stronie Meta Conversions API, a plany w cenniku.
Najczęściej zadawane pytania
Czy muszę instalować skrypt w Arkuszu Google?
Nie. Arkusz łączysz przez logowanie kontem Google i wybór pliku w oknie Google. Aplikacja dostaje dostęp tylko do pliku, który wskażesz, a nie do całego Dysku, i wykonuje wyłącznie odczyty.
Jak często dane z arkusza trafiają do Meta?
Serwer sprawdza arkusz co minutę i czyta do 500 wierszy na przebieg. Przy dużych arkuszach pełne przejście trwa kilka minut. Nowy status trafia do kolejki wysyłek, a stamtąd do Meta, zwykle w ciągu kilku minut od zmiany w arkuszu.
Co się stanie, gdy zmienię status w wierszu, który już został wysłany?
Nowy status to nowe zdarzenie, więc zostanie wysłane, jeśli przepływ go mapuje. Ten sam identyfikator z tym samym statusem jest konwersją jednorazową: ponowne wejście w ten sam status nie tworzy drugiej konwersji, a zmiana danych już zgłoszonej pary jest odrzucana.
Dlaczego numer leada z Meta zmienia się w arkuszu?
Identyfikator leada ma kilkanaście cyfr, a arkusz traktuje go jak liczbę i może zaokrąglić końcówkę. Ustaw kolumnę jako tekst albo wklejaj identyfikator z apostrofem na początku, zanim zaczniesz synchronizację.
Czy zdarzenia z arkusza wystarczą do optymalizacji pod jakość leadów?
Do tej optymalizacji Meta wymaga zdarzeń CRM powiązanych z leadami z formularzy natywnych. Jeśli Twoje leady pochodzą z formularzy Meta, lepiej podłączyć formularz bezpośrednio i zmieniać etapy na karcie osoby. Arkusz sprawdza się przy sprzedaży i leadach spoza formularzy Meta.

