Modelowane listy odbiorców nie zawierają konkretnych osób, tylko prawdopodobieństwa. Wyjaśniam, jak powstają, gdzie ich szukać w panelu i jak czytać ich raporty.
Pomysł jest prosty i dlatego kuszący: jeśli nasza cena przestaje być konkurencyjna, przestańmy płacić za kliknięcia, a gdy znów wychodzimy na plus względem rynku — wróćmy do gry. Wszystko, czego do tego potrzeba, to dane o cenach i skrypt w Google Ads uruchamiany co godzinę.
W praktyce takich wdrożeń widziałem kilka i tylko część działała dłużej niż kwartał. Reszta albo rozsypała się na jakości danych, albo tak często przełączała stan kampanii, że system nie miał kiedy nauczyć się czegokolwiek, albo po cichu przestała działać i nikt nie zauważył, bo nikt nie ustawił alertu o błędzie.
Zbieram tu zasady, których się trzymam, kolejność wdrażania i miejsca, w których taki mechanizm potrafi zaszkodzić.
Zanim usiądę do kodu, sprawdzam trzy warunki. Muszą być spełnione wszystkie.
Po pierwsze, produkt musi być identyfikowalny — kod producenta, EAN, jednoznaczny model. Jeśli sprzedajemy rzeczy nieporównywalne, meble na wymiar czy usługi, nie ma czego zestawiać i cała konstrukcja traci sens.
Po drugie, cena musi być realnym kryterium wyboru w tej kategorii. Tam, gdzie klient wybiera po terminie realizacji albo po zaufaniu do sprzedawcy, wyłączanie reklam z powodu kilku złotych różnicy odbiera nam sprzedaż bez powodu.
Po trzecie, zmienność musi być na tyle duża, żeby automat miał co robić. Jeśli ceny na rynku ruszają się raz w miesiącu, wystarczy comiesięczny przegląd w arkuszu i decyzja człowieka. Skrypt zaczyna się opłacać, gdy zmiany są codzienne, a asortyment liczy tysiące pozycji.
Przy asortymencie do kilkuset pozycji zwykle odradzam automat. Koszt utrzymania, ryzyko błędu i czas na diagnozę przewyższają zysk z reakcji o kilka godzin szybszej.
To najtrudniejsza część projektu i jednocześnie ta, którą najczęściej odbębnia się najszybciej.
Niezależnie od źródła robię jedno: zapisuję razem z ceną znacznik czasu i informację o kompletności odczytu. Dane cenowe starzeją się w godzinach, a decyzja podjęta na wczorajszym odczycie bywa gorsza niż brak decyzji.
Największy błąd konstrukcyjny, jaki widziałem, to jeden skrypt w Google Ads, który równocześnie pobierał dane, liczył porównania i przełączał stan kampanii.
Rozdzielam to na dwie warstwy. Pierwsza zbiera ceny, porównuje je z naszym cennikiem i zapisuje wynik w jednym miejscu — u mnie najczęściej w arkuszu albo w tabeli w hurtowni danych. Efektem jest lista identyfikatorów produktów z jedną z trzech decyzji: konkurencyjny, na granicy, niekonkurencyjny.
Druga warstwa to skrypt w Google Ads, który czyta tę listę i wykonuje na koncie dokładnie to, co w niej stoi. Nie liczy, nie interpretuje, nie zgaduje przy brakujących danych — przy braku wpisu nie robi nic.
Ten podział ma dwie zalety. Diagnoza problemu jest prosta, bo widać, czy zawiodło zbieranie danych, czy ich zastosowanie. I można w każdej chwili wejść w listę, zmienić decyzję ręcznie i mieć pewność, że kolejny przebieg ją wykona.
Naiwna reguła brzmi: jeśli jesteśmy drożsi niż najniższa cena rynkowa, wyłącz reklamę. Taka reguła generuje setki przełączeń dziennie i to jest jej główny problem.
Używam zamiast tego dwóch różnych progów. Wyłączam, gdy nasza cena jest wyżej od poziomu odniesienia o więcej niż ustalony procent, ale włączam z powrotem dopiero wtedy, gdy różnica spadnie wyraźnie poniżej tego progu. Między jednym a drugim jest pas, w którym nie dzieje się nic. To znany z automatyki mechanizm i sprawdza się tu doskonale.
Do tego dokładam warunek czasowy: żaden produkt nie może zmienić stanu częściej niż raz na dobę. I warunek na poziom odniesienia — nie porównuję się z absolutnie najtańszą ofertą w rynku, bo to często sprzedawca bez dostępności albo z wysoką dostawą. Za punkt odniesienia biorę wartość typową dla kilku najlepszych ofert.
Ostatni element to okna czasowe. Nie pozwalam automatowi ruszać kampanii w godzinach największej sprzedaży ani w dniach akcji promocyjnych. Zmiany zbieram i wykonuję w oknie, w którym ryzyko jest najmniejsze.
Poziom, na którym działa automat, ma większe znaczenie niż same reguły.
Najbezpieczniej jest pracować na danych produktowych, nie na strukturze kampanii. Zamiast wyłączać grupy zasobów, oznaczam produkty etykietą i wyłączam je z pliku przekazywanego do reklam albo zmieniam ich przypisanie do kampanii o wyższym progu zwrotu. Struktura konta zostaje nietknięta, a algorytm dostaje mniej powodów do zamieszania.
Wstrzymywanie całych kampanii traktuję jako opcję ostateczną. Przy strategiach optymalizowanych pod wartość konwersji każde zatrzymanie i ponowne uruchomienie oznacza przerwę w zbieraniu danych i chwilową nieprzewidywalność wyników. Robienie tego kilka razy w tygodniu jest gorsze niż reklamowanie produktu, który przez dwa dni był o kilka procent droższy.
W kampaniach w sieci wyszukiwania czasem sensowniejsze jest zejście z budżetem albo podniesienie progu zwrotu niż wyłączenie. Klient szukający konkretnego modelu i tak trafi do nas z zapytania markowego, a my nie tracimy historii.
Automat, który nie potrafi się zatrzymać, jest tylko szybszym sposobem popełniania błędów.
Przy okazji: skrypty w Google Ads mają ograniczenia czasu wykonania i limity operacji. Przy dużym asortymencie trzeba dzielić pracę na porcje i przewidzieć, co się dzieje, gdy przebieg zostanie przerwany w połowie.
Ta część rozmowy zwykle się nie odbywa, a powinna, i to przed rozpoczęciem prac.
Automatyczne pobieranie treści z cudzych serwisów bywa sprzeczne z ich regulaminami, obciąża infrastrukturę i przy większej skali może zostać zablokowane albo stać się przedmiotem sporu. Jeśli klient nie chce brać tego ryzyka na siebie, wybieram dostawcę danych, który sprzedaje je jako usługę i bierze odpowiedzialność za sposób ich zbierania.
Osobna sprawa to prawo konkurencji. Reagowanie na publicznie dostępne ceny jest normalnym elementem gry rynkowej. Kończy się to natychmiast, gdy pojawia się jakakolwiek forma uzgodnień z konkurentem albo automatyczne dostosowywanie cen w ramach umowy między sprzedawcami — to już inna kategoria zagadnień i temat na rozmowę z prawnikiem, nie ze specjalistą od reklamy.
I rzecz na koniec, praktyczna: automat reagujący na ceny nie zastępuje decyzji o polityce cenowej. Potrafi tylko oszczędzić budżet tam, gdzie i tak nie mieliśmy szansy wygrać. Jeśli asortyment jest systematycznie droższy od rynku, skrypt pokaże to bardzo wyraźnie — i to bywa jego największa wartość.
Używamy plików cookies, aby ułatwić Ci nawigację oraz wykonywanie określonych funkcji. Szczegółowe informacje o wszystkich plikach cookies znajdziesz w każdej kategorii zgody poniżej.
Pliki cookies oznaczone jako "Niezbędne" są przechowywane w Twojej przeglądarce, ponieważ są one kluczowe dla zapewnienia podstawowych funkcji strony.
Używamy również plików cookies firm trzecich, które pomagają nam analizować, w jaki sposób korzystasz z tej strony, zapamiętują Twoje preferencje oraz dostarczają treści i reklamy odpowiednie dla Ciebie. Te pliki cookies będą przechowywane w Twojej przeglądarce tylko za Twoją uprzednią zgodą.
Możesz zdecydować, czy chcesz włączyć lub wyłączyć niektóre bądź wszystkie te pliki cookies, jednak wyłączenie niektórych z nich może wpłynąć na Twoje doświadczenia podczas przeglądania strony.
| Cookie | Czas przechowywania | Opis |
|---|---|---|
| __cf_bm | 13 minutes | Cloudflare bot management — distinguishes humans from bots. |
| rc::* | Persistent | Google reCAPTCHA — localStorage holding anti-bot challenge state. |
| Cookie | Czas przechowywania | Opis |
|---|---|---|
| wpEmojiSettingsSupports | Session | WordPress — sessionStorage flag caching whether the browser can render emoji (feature detection). |
| ytidb* | Persistent | YouTube — IndexedDB storing playback/search state for embedded videos. |
| Cookie | Czas przechowywania | Opis |
|---|---|---|
| _ga_* | 400 days | Google Analytics 4 — persists session state per property. |
| _ga | 400 days | Google Analytics — distinguishes unique users via a client id. |
| Cookie | Czas przechowywania | Opis |
|---|---|---|
| NID | 183 days | Google — stores preferences for personalized ads. |
| fr | 90 days | Meta — encrypted Facebook id and browser id for ads. |
| _gcl_au | 90 days | Google AdSense/Ads — experiments with advertising efficiency (conversion linker). |
| Cookie | Czas przechowywania | Opis |
|---|---|---|
| __Secure-YNID | 180 days | |
| YSC | Session | |
| __Secure-ROLLOUT_TOKEN | 180 days | |
| VISITOR_INFO1_LIVE | 180 days | |
| VISITOR_PRIVACY_METADATA | 180 days | |
| datr | 400 days | |
| sb | 400 days | |
| wd | 7 days |