Przejdź do głównej zawartości

Analityka – Twoje raporty robią się same: wysyłaj każdą odpowiedź z Survio prosto do Google Sheets

Automatycznie przesyłaj każdą wypełnioną odpowiedź z Survio do Arkuszy Google, a potem postaw na jej bazie dynamiczny wykres albo tabelę przestawną. Przewodnik krok po kroku z n8n i gotowy do pobrania workflow.

Napisane przez Success Team Survio

Dla kogo jest to rozwiązanie?

Przypadek A – prosty, dla każdego: pojedynczy wykres z Twoich odpowiedzi, który aktualizuje się automatycznie po każdej nowej odpowiedzi.

Przypadek B – dla zespołów, które porównują grupy: tabela przestawna z możliwością filtrowania po kanale, języku lub dowolnej innej kolumnie.

Każda odpowiedź Twojej ankiety trafia jako nowy wiersz do Arkuszy Google natychmiast po jej przesłaniu. Na tej podstawie budujesz wykres albo tabelę przestawną tylko raz – od tego momentu raport odświeża się sam: nie musisz nic eksportować, kopiować danych ani czekać, aż ktoś przygotuje liczby.
​

Tak wygląda raport z Przypadku A: wykres, który automatycznie odświeża się po każdej kolejnej odpowiedzi:
​

The report tab with response counts and a column chart


​

A tak wygląda tabela przestawna z Przypadku B, z filtrowaniem po kanale przez segmentator:
​

Pivot table with a slicer on the Channel column

Jak to działa. Survio wysyła każdą wypełnioną odpowiedź na adres webhooka. Narzędzie automatyzujące (tu: n8n) odbiera ją i zapisuje jako nowy wiersz w arkuszu. Survio wysyła, n8n zapisuje, a arkusz zajmuje się raportowaniem.

Dopiero zaczynasz z webhookami w Survio? Zacznij od Webhooks: wysyłaj odpowiedzi do swoich innych narzędzi w czasie rzeczywistym, a potem wróć tutaj.
​

Co zbudujesz

Oba raporty są zasilane tym samym ustawieniem: każda wypełniona odpowiedź staje się jednym wierszem na zakładce responses.

W skrócie

Przypadek A: jeden wykres

Przypadek B: raport według segmentu

Efekt

Wykres z rozkładem odpowiedzi, aktualizowany po każdej nowej odpowiedzi

Tabela przestawna z możliwością filtrowania po kanale, języku lub dowolnej kolumnie

Narzędzia

Survio, n8n, Google Sheets

Survio, n8n, Google Sheets (tabela przestawna i segmentator)

Najlepsze dla

Mała firma, która chce mieć prosty wykres zawsze aktualny

Zespół porównujący grupy – np. klientów internetowych i stacjonarnych

Co przygotować na start

  • Ankieta Survio na płatnym planie. Webhooki nie są dostępne w planie Free, a każdy plan pozwala na określoną liczbę webhooków na ankietę (zobacz artykuł o webhookach).

  • Konto w n8n, n8n Cloud lub własna instalacja.

  • Konto Google do Google Sheets.

W tym przewodniku używamy krótkiej ankiety satysfakcji klienta: ocena gwiazdkowa, pytanie zamknięte – jedna odpowiedź „Ogólnie jak bardzo jesteś zadowolony?”, pytanie zamknięte – jedna odpowiedź „Jak tym razem robiłeś zakupy?”, pole na komentarz tekstowy i e-mail jako opcjonalne pytanie. Twoja ankieta może wyglądać inaczej – pasujące pytania podłączasz w kroku 5.
​

Krok 1 – Przygotuj arkusz

  1. Utwórz nowy arkusz Google i zmień nazwę pierwszej zakładki na responses.

  2. W pierwszym wierszu wpisz nagłówki kolumn: Response ID, Submitted, Rating (1-5), Satisfaction, Channel, What could we do better, E-mail, Order ID, Language oraz Source.

Trzymaj Response ID jako pierwszą kolumnę. To unikalny identyfikator odpowiedzi z Survio. n8n korzysta z niego, aby zaktualizować istniejący wiersz zamiast dodać duplikat przy ponowieniu przesyłki.

Krok 2 – Stwórz webhook w n8n

  1. W n8n stwórz nowy workflow i dodaj węzeł Webhook jako wyzwalacz.

  2. Ustaw HTTP Method na POST.

  3. Przejdź do zakładki Production URL i skopiuj adres.

  4. Kliknij Publish. Production URL będzie działać dopiero po publikacji workflow.

n8n Webhook node with HTTP Method POST and the Production URL tab
Published button in the n8n editor

Korzystaj z Production URL, nie Test URL. Test URL nasłuchuje tylko podczas gdy edytor czeka na zdarzenie testowe, przez co dostawy z Survio kończą się niepowodzeniem po zamknięciu okna. Survio powtarza nieudaną próbę przez ok. dobę, a po 5 dniach awarii wyłącza webhooka.

Krok 3 – Połącz ankietę w Survio

  1. Otwórz ankietę i przejdź do Zbieranie odpowiedzi.

  2. W lewym panelu pod Automatyzacje i integracje wybierz Webhooks i kliknij + Dodaj webhook.

  3. Wklej Production URL z n8n do pola Webhook URL i kliknij Zapisz webhook. Webhook aktywuje się od razu.

Add a webhook dialog in Survio with the n8n Production URL filled in
Saved webhook in Survio, switched on


​

Krok 4 – Wyślij testową odpowiedź i znajdź id pytań

  1. Otwórz ankietę przez jej zwykły link i prześlij całą odpowiedź (Survio przesyła tylko ukończone odpowiedzi, więc klikaj do końca).

  2. W n8n przejdź do zakładki Executions. Dostawa pojawi się w kilka sekund.

  3. Otwórz wykonanie i kliknij węzeł Webhook. Rozwiń body, następnie data i answers. Każda odpowiedź wyświetli swoje question.id, label i answer.

  4. Zanotuj id pytań, które chcesz mieć jako kolumny. Możesz też kliknąć Pin, by dalej budować w oparciu o tę odpowiedź bez ponownego wypełniania ankiety.

Executions tab in n8n with successful runs
Webhook node output in n8n: body, data, answers

Zawsze wybieraj odpowiedzi po id pytania. Odpowiedzi przychodzą jako lista. Jeśli dodasz później pytanie w ankiecie, pozycje się przesuną i kolumny będą zawierać błędne odpowiedzi. Id pytania nigdy się nie zmieni.

Szukasz adresu e-mail respondenta? Nie używaj data.email: pole to jest puste, gdy e-mail pochodzi z pytania lub z parametru URL. Pobierz go z odpowiedzi na pytanie e-mail lub z data.parameters.

Krok 5 – Zamień odpowiedź na wiersz

Potrzebujesz dwóch węzłów: Prepare row wybiera odpowiedzi z odpowiedzi, a Save response to sheet zapisuje je do arkusza.

Prepare row

  1. Dodaj węzeł Edit Fields (Set) po Webhook i zmień jego nazwę na Prepare row.

  2. W Fields to Set dodaj pole na każdą kolumnę z arkusza i zostaw typ String. Nazwa musi być identyczna jak nagłówek kolumny, wartość to poniższy wyrażenie.

  3. Zamień id pytań (z kroku 4) na swoje i Europe/Prague na swoją strefę czasową.

Nazwa pola

Wartość

Response ID

{{ $json.body.data.responseId }}

Submitted

{{ DateTime.fromISO($json.body.data.submitted).setZone('Europe/Prague').toFormat('yyyy-MM-dd HH:mm') }}

Rating (1-5)

{{ $json.body.data.answers.find(a => a.question.id === 90403153)?.answer ?? "" }}

Satisfaction

{{ $json.body.data.answers.find(a => a.question.id === 90403151)?.answer?.labels?.[0] ?? "" }}

Channel

{{ $json.body.data.answers.find(a => a.question.id === 90403154)?.answer?.labels?.[0] ?? "" }}

What could we do better

{{ $json.body.data.answers.find(a => a.question.id === 90403152)?.answer ?? "" }}

E-mail

{{ $json.body.data.answers.find(a => a.question.id === 90403187)?.answer || $json.body.data.parameters?.email || "" }}

Order ID

{{ $json.body.data.parameters?.['order-id'] ?? '' }}

Language

{{ $json.body.data.langCode }}

Source

{{ $json.body.data.source }}

Prepare row node in n8n with Fields to Set and their expressions


​

Save response to sheet

  1. Dodaj węzeł Google Sheets po Prepare row, nazwij go Save response to sheet i wybierz operację Append or Update Row.

  2. Połącz swoje konto Google, wybierz Document (z listy lub przez ID klikając By ID) i zakładkę responses jako Sheet.

  3. Ustaw Mapping Column Mode na Map Automatically i w Column to match on wybierz Response ID.

Google Sheets node: Append or Update Row, Map Automatically, Column to match on Response ID

Dlaczego osobny krok Prepare row? Jeśli zmienisz arkusz lub zakładkę w Google Sheets, n8n usuwa przypisania kolumn w tym węźle. Z formułami w Prepare row nic nie tracisz — węzeł Google Sheets tylko dopasowuje nazwy pól do nagłówków.

Kliknij Publish jeszcze raz. Zmiany po opublikowaniu workflow będą widoczne dopiero po ponownej publikacji.

n8n workflow: Survio Webhook, Prepare row, Save response to sheet

Kilka szczegółów dotyczących tych formuł:

  • Pytania zamknięte przychodzą jako { ids, labels, value }. labels[0] to tekst wybranej opcji. W przypadku pytania wielokrotnego wyboru użyj labels.join(', '), aby zebrać wszystkie odpowiedzi w jednej komórce. value to tekst wpisany w „Inne”.

  • Czasy przychodzą jako UTC. Wyrażenie Submitted przelicza czas na Twoją strefę, a Google Sheets traktuje to pole jak datę i godzinę, po których możesz sortować i grupować.

  • Parametry URL z myślnikiem (np. order-id) wymagają składni parameters['order-id']. Survio nie pozwala na podkreślniki w nazwach parametrów.

  • Tytuł ankiety nie jest wysyłany przez Survio. Jeśli kilka ankiet zapisuje do jednego arkusza, dodaj kolumnę Survey do arkusza i pole Survey z nazwą ankiety do Prepare row.

Wyślij kolejną odpowiedź. Nowy wiersz pojawi się w arkuszu w kilka sekund.

The responses tab in Google Sheets with one row per response


​

Przypadek A – Wykres odpowiedzi

  1. Dodaj zakładkę report.

  2. Wpisz Satisfaction w A1, a Responses w B1. W A2–A6 wpisz opcje odpowiedzi jak w ankiecie.

  3. W B2 wpisz =COUNTIF(responses!D:D,A2), przeciągnij do B6.

  4. Zaznacz A1:B6 i wybierz Wstaw → Wykres. Google sugeruje wykres kolumnowy. Zmień tytuł w Dostosuj → Tytuły wykresu i osi.

Każda nowa odpowiedź dodaje wiersz w responses, a liczby i wykres odświeżają się automatycznie – jak na początku artykułu.
​

Przypadek B – Porównanie grup na tabeli przestawnej

  1. Na zakładce responses zaznacz całą tabelę i wybierz Wstaw → Tabela przestawna, następnie Nowy arkusz.

  2. Pod Wiersze wybierz Satisfaction, pod Wartości dodaj Response ID i zmień Podsumowanie z SUMA na LICZ.JEŻELI (COUNTA).

  3. Wybierz Dane → Dodaj segmentator i wskaż kolumnę Channel. Zaznacz wartości do wyświetlenia i zatwierdź OK. Efekt będzie jak tabela przestawna z początku artykułu.

Możesz filtrować po dowolnej kolumnie: Channel (Twoje własne pytanie), Language (wersja językowa ankiety), Source (skąd przyszła odpowiedź, np. link lub zaproszenie e-mail) czy Order ID.

Twój wybór segmentatora nie zostaje zachowany przy ponownym otwarciu. Po otwarciu pliku filtr pokazuje wszystkie wartości. Jeśli chcesz zapisać wybór, ustaw go jako domyślny w menu segmentatora.

Pobierz gotowy workflow

Zamiast budować Kroki 2 i 5 ręcznie, zacznij od naszego workflow. Pobierz plik survio-responses-to-google-sheets.json z załączników na końcu artykułu, potem:

  1. W n8n utwórz pusty workflow. Z menu (trzy kropki) przy nazwie wybierz Import, następnie From file. Wskaż pobrany plik.

  2. Otwórz Prepare row i podstaw własne id pytań oraz swoją strefę czasową za Europe/Prague.

  3. Otwórz Save response to sheet. Początkowo będzie pokazany ostrzegawczy trójkąt – podłącz konto Google i wybierz odpowiedni arkusz i zakładkę responses. n8n automatycznie przełącza Mapping Column Mode na Map Each Column Manually – zmień na Map Automatically i wybierz Response ID do porównania.

  4. Otwórz Survio Webhook, skopiuj Production URL do Survio (krok 3) i kliknij Publish.

n8n workflow menu with Import and From file
Imported workflow: Survio Webhook, Prepare row, Save response to sheet

Sprawdź wszystko od początku do końca

  1. Wyślij odpowiedź przez link do ankiety. Wiersz pojawi się na zakładce responses w kilka sekund.

  2. Sprawdź, czy Response ID jest uzupełnione – to chroni przed duplikatami.

  3. Zajrzyj do zakładki Executions w n8n – znajdziesz tam wszystkie przesłane dane.

Rozwiązywanie problemów

Objaw

Przyczyna

Rozwiązanie

Nic nie trafia do n8n

W Survio podano Test URL lub workflow nie jest opublikowany

Wklej Production URL do Survio i kliknij Publish

Survio nie akceptuje adresu webhooka z własnej instancji n8n

n8n pokazuje adres wewnętrzny zamiast publicznego

Ustaw w n8n WEBHOOK_URL na publiczny adres https i skopiuj ponownie adres

"Listen for test event" nie pokazuje nic po przesłaniu ankiety

Survio wysyła na Production URL, edytor obserwuje Test URL

Sprawdź zakładkę Executions

Ostatnia zmiana nie działa

Workflow jest opublikowany, ale zmiana nie (przycisk Publish z kropką)

Kliknij Publish ponownie

Ta sama odpowiedź pojawia się dwukrotnie

Wybrano Append Row lub brak kolumny do porównania

Ustaw Append or Update Row i porównuj po Response ID

Kolumna zostaje pusta, na końcu pojawia się nowa

Nazwa pola w Prepare row różni się od nagłówka kolumny

Nazwij pole identycznie jak nagłówek i usuń niepotrzebną kolumnę

W komórce widnieje [object Object]

Odpowiedź zamknięta zmapowana bez labels

Użyj ?.answer?.labels?.[0]

Po edycji ankiety błędne odpowiedzi w kolumnach

Odpowiedzi wybrane według pozycji w liście

Używaj question.id

Kolumna E-mail jest pusta

Zmapowana z data.email

Pobierz e-mail z odpowiedzi w pytaniu e-mail lub z parametru URL

Brakuje odpowiedzi sprzed konfiguracji

Webhooki wysyłają tylko nowe odpowiedzi powstałe po ich utworzeniu

Wyeksportuj starsze odpowiedzi z Survio i wklej je ręcznie

Survio wyłączyło webhooka

Adres webhooka był niedostępny przez 5 dni z rzędu

Napraw przyczynę i ponownie aktywuj webhook w Survio

Warto wiedzieć

  • Survio wysyła tylko wypełnione odpowiedzi – pojedyncza wiadomość na jedną odpowiedź, w kilka sekund.

  • Nic nie jest wysyłane wstecznie: odpowiedzi sprzed powstania webhooka ani te z czasu gdy webhook był zatrzymany nie trafią do arkusza.

  • Nieudana dostawa jest powtarzana do 8 razy przez ok. 27 godzin, każda próba czeka do 30 sekund na odpowiedź. Porównywanie po Response ID sprawia, że powtórki są bezpieczne.

  • Jeśli dostawy nie udają się przez 5 dni z rzędu, Survio wyłącza webhooka i trzeba włączyć go ponownie.

  • Pauza webhooka zostawia jego wolne miejsce; usunięcie jest trwałe.

  • Survio nie zapisuje historii dostaw. Zakładka Executions w n8n to Twój log.

  • Wysyłanie odpowiedzi do webhooków nie wykorzystuje dodatkowych odpowiedzi z Twojego planu.

Wolisz, abyśmy zrobili to za Ciebie? W zakładce Webhooks w Survio kliknij Uzyskaj pomoc eksperta, napisz, co chcesz osiągnąć, a nasz zespół przygotuje, przetestuje i przekaże gotowy webhook.

Czy to odpowiedziało na twoje pytanie?