Guides

Survey Form Webhook Guidelines

August 31, 2023

The existing app.walla.my does not currently offer this feature. Please note that you should use the open beta version at app.wallaform.com.


  1. Creating a Google Sheet

1-a. When Creating a New One

Access Google Drive and create a new Google Sheet.

1-b. When Already Linked to Walaa and Exporting Before Reconnecting

Select the already in-use Google Sheet, make a copy of it.

Once the copy is created, proceed with the following 2 steps.


If you want to delete the existing Google Sheet:

Click the toggle on the right side of the Google Sheet integration.

Confirm that the toggle is set to OFF along with the Google Sheet deletion message.


  1. Google Apps Script Configuration

  1. In the Google Sheet, select the top menu "Extensions" > "Apps Script."

  2. In the code editor that appears, delete the existing code and paste the code below.

function doPost(e) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];
  ss.setSpreadsheetTimeZone('Asia/Seoul');
  // Parsing the POST data to get the required data
  var data = JSON.parse(e.postData.contents);
  
  var formAnswers = data.form_answers;
  var submittedAt = new Date(data.form_response.submitted_at);

  var responseId = data.form_response.response_id.slice(0,10);
  // First row: labels
  if (sheet.getLastRow() === 0) {
    var fieldLabels = formAnswers.map(function(answer) {
      if (answer.type === 'RADIO_GRID' || answer.type === 'CHECKBOX_GRID') {
        return answer.response.map(el => `${answer.label} - ${el.lineLabel}`);
      }
      return answer.label
    }).flat();
    var headers = ['Response ID', 'Time Submitted', ...fieldLabels]
    sheet.appendRow(headers);
  } 
   var rowData = formAnswers.map(field => {
      switch (field.type) {
        case 'CHECKBOX':
        case 'RADIO': {
          var isResponseArray = Array.isArray(field.response);
          if (isResponseArray) {
            return field.response.filter(el => Boolean(el)).join(', ');
          }
          return field.response || '';
        }
        case 'CHECKBOX_GRID':
        case 'RADIO_GRID': {
          var isLineResponseArray = Array.isArray(field.response.lineResponse)
          return field.response.map(el => {
            if (isLineResponseArray) {
              return el.lineResponse.filter(el => Boolean(el)).join(', ');
            }
            return el.lineResponse || '';
          })
        }
        case 'GEOLOCATION': {
          var response = field.response || {};
          var responseArray = Object.entries(response).map(el => `${el[0]}: ${el[1]}`);
          return responseArray.join(', ');
        }
        case 'HIDDEN': {
          return field.response === undefined || field.response === null
            ? ''
            : field.response;
        }
        default: {
          var response =
            field.response === undefined || field.response === null ? '' : field.response;
          if (Array.isArray(response)) {
            return response.join(', ');
          }
          return response;
        }
      }
    }).flat();
  sheet.appendRow([responseId, submittedAt, ...rowData]);
  return ContentService.createTextOutput(JSON.stringify({result: "success"})).setMimeType(ContentService.MimeType.JSON);
}


  1. Deploy as a Web App

  1. In the code editor's top menu, select "Deploy" > "New Deployment."

  2. Click the "Settings" button, then choose "Web App."

  3. Provide a name (e.g., test1) and be sure to set access rights to 'Anyone.'

🤨 액세스 권한… 모두라구요…?
🙂 해당 코드에는 원본데이터를 읽거나 내보내는 코드가 포함되어있지 않습니다.
왈라와 Typeform의 웹훅 요청에 맞게, 데이터를 구글 시트에 쓰는 작업 만을 포함합니다.

따라서, 해당 웹앱의 주소가 노출되더라도, 데이터가 유출될 걱정은 없으며,
만약 노출된다면 새로운 배포를 통해 새로운 주소를 받으실 있습니다

  1. Finally, click "Deploy," and an "Authorization Required" button will appear.

  2. Click it to proceed with authorization.

  3. Click on your own Google account that created the Google Sheet.

  4. Click "advanced" at the bottom left, then proceed with the unsafe version at the bottom.


  1. Copy the URL of the web app

    Copy the URL of the web app that appears after deployment.


  1. Integration with the Walla Platform (Webhook)

  1. Access the Walla platform page and select the project you want to integrate.

  2. On the "Integration" page, click the "Add New Webhook" button.

  3. Enter a name freely and paste the URL of the web app copied earlier.

  4. Since the current webhook does not provide test requests, save the webhook and return to the integration.


Testing and Verification

Submit responses for the project in the Walla platform to confirm that data is being sent to the Google Sheet via the webhook.

The existing app.walla.my does not currently offer this feature. Please note that you should use the open beta version at app.wallaform.com.


  1. Creating a Google Sheet

1-a. When Creating a New One

Access Google Drive and create a new Google Sheet.

1-b. When Already Linked to Walaa and Exporting Before Reconnecting

Select the already in-use Google Sheet, make a copy of it.

Once the copy is created, proceed with the following 2 steps.


If you want to delete the existing Google Sheet:

Click the toggle on the right side of the Google Sheet integration.

Confirm that the toggle is set to OFF along with the Google Sheet deletion message.


  1. Google Apps Script Configuration

  1. In the Google Sheet, select the top menu "Extensions" > "Apps Script."

  2. In the code editor that appears, delete the existing code and paste the code below.

function doPost(e) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];
  ss.setSpreadsheetTimeZone('Asia/Seoul');
  // Parsing the POST data to get the required data
  var data = JSON.parse(e.postData.contents);
  
  var formAnswers = data.form_answers;
  var submittedAt = new Date(data.form_response.submitted_at);

  var responseId = data.form_response.response_id.slice(0,10);
  // First row: labels
  if (sheet.getLastRow() === 0) {
    var fieldLabels = formAnswers.map(function(answer) {
      if (answer.type === 'RADIO_GRID' || answer.type === 'CHECKBOX_GRID') {
        return answer.response.map(el => `${answer.label} - ${el.lineLabel}`);
      }
      return answer.label
    }).flat();
    var headers = ['Response ID', 'Time Submitted', ...fieldLabels]
    sheet.appendRow(headers);
  } 
   var rowData = formAnswers.map(field => {
      switch (field.type) {
        case 'CHECKBOX':
        case 'RADIO': {
          var isResponseArray = Array.isArray(field.response);
          if (isResponseArray) {
            return field.response.filter(el => Boolean(el)).join(', ');
          }
          return field.response || '';
        }
        case 'CHECKBOX_GRID':
        case 'RADIO_GRID': {
          var isLineResponseArray = Array.isArray(field.response.lineResponse)
          return field.response.map(el => {
            if (isLineResponseArray) {
              return el.lineResponse.filter(el => Boolean(el)).join(', ');
            }
            return el.lineResponse || '';
          })
        }
        case 'GEOLOCATION': {
          var response = field.response || {};
          var responseArray = Object.entries(response).map(el => `${el[0]}: ${el[1]}`);
          return responseArray.join(', ');
        }
        case 'HIDDEN': {
          return field.response === undefined || field.response === null
            ? ''
            : field.response;
        }
        default: {
          var response =
            field.response === undefined || field.response === null ? '' : field.response;
          if (Array.isArray(response)) {
            return response.join(', ');
          }
          return response;
        }
      }
    }).flat();
  sheet.appendRow([responseId, submittedAt, ...rowData]);
  return ContentService.createTextOutput(JSON.stringify({result: "success"})).setMimeType(ContentService.MimeType.JSON);
}


  1. Deploy as a Web App

  1. In the code editor's top menu, select "Deploy" > "New Deployment."

  2. Click the "Settings" button, then choose "Web App."

  3. Provide a name (e.g., test1) and be sure to set access rights to 'Anyone.'

🤨 액세스 권한… 모두라구요…?
🙂 해당 코드에는 원본데이터를 읽거나 내보내는 코드가 포함되어있지 않습니다.
왈라와 Typeform의 웹훅 요청에 맞게, 데이터를 구글 시트에 쓰는 작업 만을 포함합니다.

따라서, 해당 웹앱의 주소가 노출되더라도, 데이터가 유출될 걱정은 없으며,
만약 노출된다면 새로운 배포를 통해 새로운 주소를 받으실 있습니다

  1. Finally, click "Deploy," and an "Authorization Required" button will appear.

  2. Click it to proceed with authorization.

  3. Click on your own Google account that created the Google Sheet.

  4. Click "advanced" at the bottom left, then proceed with the unsafe version at the bottom.


  1. Copy the URL of the web app

    Copy the URL of the web app that appears after deployment.


  1. Integration with the Walla Platform (Webhook)

  1. Access the Walla platform page and select the project you want to integrate.

  2. On the "Integration" page, click the "Add New Webhook" button.

  3. Enter a name freely and paste the URL of the web app copied earlier.

  4. Since the current webhook does not provide test requests, save the webhook and return to the integration.


Testing and Verification

Submit responses for the project in the Walla platform to confirm that data is being sent to the Google Sheet via the webhook.

The existing app.walla.my does not currently offer this feature. Please note that you should use the open beta version at app.wallaform.com.


  1. Creating a Google Sheet

1-a. When Creating a New One

Access Google Drive and create a new Google Sheet.

1-b. When Already Linked to Walaa and Exporting Before Reconnecting

Select the already in-use Google Sheet, make a copy of it.

Once the copy is created, proceed with the following 2 steps.


If you want to delete the existing Google Sheet:

Click the toggle on the right side of the Google Sheet integration.

Confirm that the toggle is set to OFF along with the Google Sheet deletion message.


  1. Google Apps Script Configuration

  1. In the Google Sheet, select the top menu "Extensions" > "Apps Script."

  2. In the code editor that appears, delete the existing code and paste the code below.

function doPost(e) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];
  ss.setSpreadsheetTimeZone('Asia/Seoul');
  // Parsing the POST data to get the required data
  var data = JSON.parse(e.postData.contents);
  
  var formAnswers = data.form_answers;
  var submittedAt = new Date(data.form_response.submitted_at);

  var responseId = data.form_response.response_id.slice(0,10);
  // First row: labels
  if (sheet.getLastRow() === 0) {
    var fieldLabels = formAnswers.map(function(answer) {
      if (answer.type === 'RADIO_GRID' || answer.type === 'CHECKBOX_GRID') {
        return answer.response.map(el => `${answer.label} - ${el.lineLabel}`);
      }
      return answer.label
    }).flat();
    var headers = ['Response ID', 'Time Submitted', ...fieldLabels]
    sheet.appendRow(headers);
  } 
   var rowData = formAnswers.map(field => {
      switch (field.type) {
        case 'CHECKBOX':
        case 'RADIO': {
          var isResponseArray = Array.isArray(field.response);
          if (isResponseArray) {
            return field.response.filter(el => Boolean(el)).join(', ');
          }
          return field.response || '';
        }
        case 'CHECKBOX_GRID':
        case 'RADIO_GRID': {
          var isLineResponseArray = Array.isArray(field.response.lineResponse)
          return field.response.map(el => {
            if (isLineResponseArray) {
              return el.lineResponse.filter(el => Boolean(el)).join(', ');
            }
            return el.lineResponse || '';
          })
        }
        case 'GEOLOCATION': {
          var response = field.response || {};
          var responseArray = Object.entries(response).map(el => `${el[0]}: ${el[1]}`);
          return responseArray.join(', ');
        }
        case 'HIDDEN': {
          return field.response === undefined || field.response === null
            ? ''
            : field.response;
        }
        default: {
          var response =
            field.response === undefined || field.response === null ? '' : field.response;
          if (Array.isArray(response)) {
            return response.join(', ');
          }
          return response;
        }
      }
    }).flat();
  sheet.appendRow([responseId, submittedAt, ...rowData]);
  return ContentService.createTextOutput(JSON.stringify({result: "success"})).setMimeType(ContentService.MimeType.JSON);
}


  1. Deploy as a Web App

  1. In the code editor's top menu, select "Deploy" > "New Deployment."

  2. Click the "Settings" button, then choose "Web App."

  3. Provide a name (e.g., test1) and be sure to set access rights to 'Anyone.'

🤨 액세스 권한… 모두라구요…?
🙂 해당 코드에는 원본데이터를 읽거나 내보내는 코드가 포함되어있지 않습니다.
왈라와 Typeform의 웹훅 요청에 맞게, 데이터를 구글 시트에 쓰는 작업 만을 포함합니다.

따라서, 해당 웹앱의 주소가 노출되더라도, 데이터가 유출될 걱정은 없으며,
만약 노출된다면 새로운 배포를 통해 새로운 주소를 받으실 있습니다

  1. Finally, click "Deploy," and an "Authorization Required" button will appear.

  2. Click it to proceed with authorization.

  3. Click on your own Google account that created the Google Sheet.

  4. Click "advanced" at the bottom left, then proceed with the unsafe version at the bottom.


  1. Copy the URL of the web app

    Copy the URL of the web app that appears after deployment.


  1. Integration with the Walla Platform (Webhook)

  1. Access the Walla platform page and select the project you want to integrate.

  2. On the "Integration" page, click the "Add New Webhook" button.

  3. Enter a name freely and paste the URL of the web app copied earlier.

  4. Since the current webhook does not provide test requests, save the webhook and return to the integration.


Testing and Verification

Submit responses for the project in the Walla platform to confirm that data is being sent to the Google Sheet via the webhook.

Get Started

Continue Reading

EDITORIAL

Boost Your Workflow: Connect Walla to Discord, Slack, and More with Ease

December 9, 2024

EDITORIAL

500 Global Founders Retreat

November 29, 2024

EDITORIAL

Boost Customer Loyalty: How Regular Surveys Drive Better Service and Stronger Brands

December 27, 2024

EDITORIAL

Elevate Your Brand: How Surveys Fuel Awareness and Positive Perception

December 18, 2024

EDITORIAL

Building User-Centric Products: How to Leverage Surveys for Effective Market Insights

December 11, 2024

EDITORIAL

Customer Feedback Management: How South Korea’s Top Brands Drive Growth Through CFM

December 6, 2024

EDITORIAL

Elevating Brand Experience: Why BX Management Defines Market Success

November 27, 2024

EDITORIAL

Crafting High-Impact Customer Surveys: A Roadmap to Better CX

November 20, 2024

EDITORIAL

Beyond Service: How CXM Drives Growth and Competitive Advantage

November 15, 2024

EDITORIAL

Building Strong Starts: Using Feedback to Elevate Employee Onboarding

November 13, 2024

EDITORIAL

Empower Your People: Modern HR & EX Management and the Role of Feedback Tools

November 8, 2024

EDITORIAL

Free but Powerful: The #1 Online Form Builder

November 5, 2024

EDITORIAL

From MP3 Players to Grapefruit Honey Tea: Brands That Thrived With Online Surveys

October 25, 2024

EDITORIAL

From Custom Design to AI Analysis: How Walla Beats Google Forms 120%

October 13, 2024

EDITORIAL

Is Google Forms Enough? Key Drawbacks You Shouldn’t Overlook

October 9, 2024

EDITORIAL

Reimagining Convenience: Walla’s Ready-to-Use Survey Templates for Your Brand

October 2, 2024

EDITORIAL

Google Forms or Walla? A Comprehensive Feature-by-Feature Look

July 23, 2024

EDITORL

Crafting the Perfect Survey: Key Strategies for High-Quality Data

October 6, 2024

EDITORIAL

Revisiting On-Premise: Navigating Your Options Between SaaS and Traditional Setups

October 18, 2024

GUIDES

Manage Capacity Stress-Free: Quota Settings

July 19, 2024

Editorial

Insights from Location Data

March 12, 2024

Editorial

Paprikan Canada Voyage : Inside and Beyond

February 16, 2024

GUIDES

The Marketer's Ace: Hidden Fields

February 14, 2024

Editorial

To You Who Has Been Staring at Data for 10 Hours

January 23, 2024

Editorial

The Secret to Acquiring 30,000 Users with Minimal Marketing Budget

November 29, 2023

Editorial

Paprikan's Open Hiring Journey

November 28, 2023

Guides

Survey Form Webhook Guidelines

August 31, 2023

Editorial

Starting a Company and Living Together in Canada

June 12, 2023

Guides

Let's Group Data Using the Group By Feature

May 17, 2023

Editorial

The Tiny History of Walla

May 15, 2023

Editorial

Insights from Walla Team's Remarkable 220x Revenue Growth in Just 6 Months

April 28, 2024

Editorial

Insights from a Walla Team Co-founder Shared in a University Lecture

April 5, 2023

Guides

How to Create a One-Page Survey

April 5, 2023

Guides

How to Set Up Notifications for Surveys

April 5, 2023

Editorial

A Letter to Aspiring Entrepreneurs

March 29, 2023

Editorial

Why Walla Became Walla: The Story Behind the Name

March 21, 2023

Guides

The Perfect Way to Collect Location Data

March 15, 2023

Guides

Fully Understand Logic Setting

March 14, 2023

Guides

Exploring Walla Team's Philosophy Behind Pricing

March 14, 2023

GUIDES

Analyzing Response Sheet Data with GPT

March 8, 2023

Guides

The Most Efficient Way to Use Google Forms

March 8, 2023

Guides

Hidden Fields: How to Stop Hiding and Start Using

March 8, 2023

Editorial

Hello, It's Team Walla

March 10, 2023

Editorial

Why is it called Paprika Data Lab?

March 10, 2023