Want to send Webflow form submissions directly to a Google Sheet without using Zapier or Make?
You can do it with Webflow webhooks and Google Apps Script.
The setup is relatively straightforward, but expect around 30–60 minutes for your first implementation, including configuring Google Apps Script, connecting the Webflow webhook, and testing the form submission flow.
Once everything is connected, every new Webflow form submission can automatically appear as a new row in your Google Sheet.
Here's how to set it up.
How it works
The integration has three parts:
Webflow form
↓
Webflow webhook
↓
Google Apps Script
↓
Google Sheet
When someone submits your Webflow form, Webflow sends the submission data to your Apps Script web app.
The Apps Script receives the data and writes it to your spreadsheet.
No Zapier or Make scenario is required.
Webflow's form_submission webhook provides the submitted form data, form information, and submission timestamp in the webhook payload.
What you'll need
Before you start, make sure you have:
- A Webflow site with a form
- A Google account
- A Google Sheet
- Access to the Webflow project
- Access to Google Apps Script
- Around 30–60 minutes for the setup and testing
1. Create your Google Sheet
Create a new Google Sheet.
For example:
Webflow Form Submissions
You can start with an empty sheet.
We'll let the Apps Script create the column headers based on the data received from Webflow.
You can also create your own headers if you prefer a specific structure.
2. Open Google Apps Script
Open your Google Sheet and go to:
Extensions → Apps Script
This opens the Google Apps Script editor.
Delete the default code and add the following:
function doPost(e) {
try {
const sheet = SpreadsheetApp
.getActiveSpreadsheet()
.getSheetByName("Sheet1");
const request = JSON.parse(e.postData.contents);
const payload = request.payload;
const formData = payload.data;
const headers = Object.keys(formData);
// Create headers if the sheet is empty
if (sheet.getLastRow() === 0) {
sheet.appendRow(["Submitted At", ...headers]);
}
const row = [
payload.submittedAt,
...headers.map(header => formData[header])
];
sheet.appendRow(row);
return ContentService
.createTextOutput(
JSON.stringify({
success: true
})
)
.setMimeType(ContentService.MimeType.JSON);
} catch (error) {
return ContentService
.createTextOutput(
JSON.stringify({
success: false,
error: error.message
})
)
.setMimeType(ContentService.MimeType.JSON);
}
}
The important part is the doPost() function.
Google Apps Script executes this function when the deployed web app receives an HTTP POST request.
The script then:
- Parses the Webflow webhook payload.
- Gets the submitted form data.
- Gets the submission timestamp.
- Creates column headers.
- Adds the submission as a new spreadsheet row.
3. Check your sheet name
The script currently looks for a sheet called:
.getSheetByName("Sheet1");
Make sure your spreadsheet has a tab named Sheet1.
Or change the code to match your tab.
For example:
.getSheetByName("Form Submissions");
The name has to match exactly.
4. Save the Apps Script project
Click Save and give your project a descriptive name.
For example:
Webflow → Google Sheets
At this point, the script exists, but Webflow can't access it yet.
You need to deploy it as a web app.
5. Deploy the Apps Script
In Google Apps Script, select:
Deploy → New deployment
For the deployment type, choose:
Web app
Configure the deployment so the script executes using your Google account and can receive requests from your Webflow site.
Then click Deploy.
Google will give you a web app URL similar to:
https://script.google.com/macros/s/XXXXXXXXXXXX/exec
Copy this URL.
You'll use it as the Webflow webhook endpoint.
6. Authorize Google Apps Script
The first deployment may ask you to authorize the script.
Follow Google's authorization flow and allow the script to access your Google Sheet.
If Google shows a warning because the Apps Script project hasn't been verified, this is because you've created your own script rather than installing a Google-verified application.
Continue through the authorization process for your own project.
Once authorization is complete, your Apps Script web app is ready to receive requests.
7. Create the Webflow webhook
Now you need to tell Webflow where to send form submissions.
Webflow provides a form_submission webhook event specifically for this purpose.
The webhook sends a POST request containing the form submission data to your endpoint.
Your endpoint is the Apps Script URL you copied earlier:
https://script.google.com/macros/s/XXXXXXXXXXXX/exec
Create a Webflow webhook using:
Event:
form_submission
Destination:
Your Google Apps Script URL
Webflow's webhook API also allows you to configure which forms trigger the webhook when using form-specific filtering.
8. Check your Webflow form fields
Before testing, check the names of your Webflow form fields.
For example:
Name
Email
Company
Message
Webflow includes submitted form fields in the webhook payload, so giving your inputs meaningful names makes the resulting spreadsheet easier to understand.
A submission might look conceptually like this:
{
"Name": "John Smith",
"Email": "john@example.com",
"Company": "Example Inc.",
"Message": "Hello!"
}
Those fields can then become columns in your Google Sheet.
Webflow recommends using unique field names because the field names are used as keys in the webhook data.
9. Publish your Webflow site
Publish the Webflow site containing your form.
Don't test only inside the Webflow Designer.
Use the published website and submit the actual form.
For example:
Name: John Smith
Email: john@example.com
Company: Example Inc.
Message: Testing the integration
Submit the form.
10. Check your Google Sheet
Open the Google Sheet.
The Apps Script should receive the webhook and create a new row.
You should end up with something similar to:
| Submitted At | Name | Company | Message | |
|---|---|---|---|---|
| 2026-10-03 09:30 | John Smith | john@example.com | Example Inc. | Testing the integration |
If you see the submission in the sheet, your basic Webflow → Google Sheets integration is working.
11. Test multiple submissions
It's worth testing more than one submission.
Submit the form several times with different values.
For example:
Submission 1: John, john@example.com
Submission 2: Sarah, sarah@example.com
Submission 3: Mike, mike@example.com
Your Google Sheet should contain a separate row for every submission.
12. Handling multiple forms
You can extend the same approach if your website contains multiple Webflow forms.
For example:
Contact Form
Newsletter Signup
Quote Request
Job Application
You can use information from the Webflow webhook payload to determine which form generated the submission.
You could then organize your Google Sheet as:
Google Sheet
│
├── Contact
├── Newsletter
├── Quote Requests
└── Applications
Or you can keep all submissions in one sheet and include the form name as an additional column.
Which approach makes more sense depends on how you want the client to work with the data.
13. Webhook security
Because the Apps Script URL needs to be accessible to Webflow, you should treat the endpoint as a public web endpoint rather than a secret URL.
For production implementations, you should also consider verifying Webflow webhook requests.
Webflow provides webhook signature information that can be used to verify that a request originated from Webflow. The relevant headers include:
x-webflow-timestamp
x-webflow-signature
Webflow documents HMAC-SHA256 verification for webhook requests.
For a simple implementation, you may not need to add this immediately, but it is worth understanding if you're handling sensitive information or building a more robust integration.
14. What happens when the form changes?
One thing to keep in mind is that your spreadsheet structure is connected to your form structure.
If you start with:
Name
Email
Message
and later add:
Company
Phone
you'll want to make sure your spreadsheet logic handles those new fields correctly.
For simple projects, this is easy to manage.
For a reusable implementation, you can make the Apps Script more sophisticated so it automatically handles changing fields and multiple forms.
How long does the setup take?
If this is your first time building the integration, allow roughly:
30–60 minutes
A typical process looks like:
| Time | Step |
|---|---|
| 5 min | Create the Google Sheet |
| 5–10 min | Create and configure Apps Script |
| 5–10 min | Deploy and authorize the web app |
| 5–10 min | Configure the Webflow webhook |
| 5–10 min | Test and troubleshoot |
Once you've done it before, you can usually move through the process much faster.
Want to skip the setup?
If you build Webflow sites for clients, you probably don't want to repeat this process every time a client asks for form submissions in Google Sheets.
Connect Webflow Forms to Google Sheets in minutes →
No Zapier. No Make. No monthly automation subscription. Just connect the client's Google Sheet and let the submissions flow directly into it.
Final result
Once everything is connected, the workflow is simple:
Visitor
↓
Webflow Form
↓
Webflow Webhook
↓
Google Apps Script
↓
Client's Google Sheet
The important part is that the form continues to work as a normal Webflow form while the submission data is also sent to your Google Sheet.
No Zapier scenario is required.
No Make scenario is required.
And you don't need to build a separate backend server just to move the form data into a spreadsheet.
A simple alternative
If you're comfortable with JavaScript and Google Apps Script, building this yourself is a perfectly reasonable solution.
But if you build Webflow websites regularly, there's another option:
Skip the 30–60 minute setup and use a purpose-built Webflow → Google Sheets connection instead.