Guides

    How to Track Website Form Submissions in Google Sheets (Free & Simple)

    A plain-English guide to connecting your website contact form to a Google Sheet with Apps Script - so every lead is logged with a timestamp, consent, and an instant email alert to you.

    VisionWeb

    Web Design & Development

    July 20268 min read

    If you run a small business, every website form submission is a potential customer - but it's very easy for those leads to get lost in your inbox, buried in spam, or forgotten in a busy week.

    You don't need an expensive CRM to fix that. With a free Google Sheet and a short script, you can automatically log every submission with a timestamp, capture consent, and get an email alert the moment a lead comes in.

    Here's exactly how it works - explained in plain English.

    What You'll End Up With

    By the end of this setup, every time someone fills in your website form, you'll get:

    • โœ… A new row in a Google Sheet with a timestamp
    • โœ… Every form field stored in its own column (name, email, message, etc.)
    • โœ… A consent value logged so you know they agreed to be contacted
    • โœ… An automatic email to you at your business address

    Simple, tidy, and free.

    Why Not Just Use Email?

    Most contact forms just email you. That works - until it doesn't. Emails get lost, filtered, deleted, or forgotten. And when you want to look back at "how many leads did I get last month?", you're stuck scrolling through your inbox.

    A Google Sheet gives you:

    • ๐Ÿ“Š A searchable list of every lead in one place
    • ๐Ÿ“ˆ A simple way to see trends over time
    • ๐Ÿ“ง A ready-made email list for newsletters (with consent)
    • ๐Ÿ”’ A backup that lives outside your inbox

    Is This a CRM?

    Honestly - no. A proper CRM does things this setup can't:

    • Track repeat website visits and behaviour
    • Score leads based on interest
    • Automate follow-up email sequences
    • Sync with calendars, pipelines and deals
    This is a starting point, not a finish line. But for a solo business owner or a small team that just wants to stop losing leads, it's often all you need for the first year or two. When you outgrow it, everything is already in a clean, exportable format.

    The 5-Step Setup

    Step 1: Create Your Google Sheet

    Open Google Sheets and create a new sheet called something like "Website Leads". In the first row, add your column headers. A good starting set:

    | Timestamp | Consent | Name | Email | Phone | Message |

    Keep the order the same as the fields you'll send from your form - it'll make step 3 easier.

    Step 2: Open Apps Script

    In the sheet, go to Extensions โ†’ Apps Script. This opens a code editor connected to your sheet. Delete the placeholder code so you have a blank canvas.

    Step 3: Paste in the Script

    Here's a clean, plain-English version of the script. Paste it in, then change the email address near the top to yours.

    ``javascript const NOTIFYEMAIL = "hello@yourbusiness.ie";

    function doPost(e) {

    try {

    const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

    const data = JSON.parse(e.postData.contents);

    const row = [

    new Date(),

    data.consent ? "Yes" : "No",

    data.name || "",

    data.email || "",

    data.phone || "",

    data.message || ""

    ];

    sheet.appendRow(row);

    MailApp.sendEmail({

    to: NOTIFYEMAIL,

    subject: "New Website Lead: " + (data.name || "Unknown"),

    body:

    "You've got a new lead:\n\n" +

    "Name: " + (data.name || "") + "\n" +

    "Email: " + (data.email || "") + "\n" +

    "Phone: " + (data.phone || "") + "\n" +

    "Message: " + (data.message || "") + "\n" +

    "Consent: " + (data.consent ? "Yes" : "No")

    });

    return ContentService

    .createTextOutput(JSON.stringify({ status: "success" }))

    .setMimeType(ContentService.MimeType.JSON);

    } catch (err) {

    return ContentService

    .createTextOutput(JSON.stringify({ status: "error", message: err.toString() }))

    .setMimeType(ContentService.MimeType.JSON);

    }

    }
    `

    What this does, in plain words: when your website sends a submission, the script adds a new row to the sheet with the current time and every field, then emails you a summary.

    Step 4: Deploy It as a Web App

    In Apps Script, click Deploy โ†’ New deployment. Choose Web app, then:
    • Execute as: Me
    • Who has access: Anyone
    Click Deploy, approve the permissions, and copy the web app URL it gives you. That URL is now the endpoint your website form will send data to.

    Step 5: Connect Your Website Form

    On your website, when the form is submitted, send the data to that URL as JSON. Any developer (or a good AI-powered builder) can wire this up in minutes. The key point: your form must send a consent` field and match the fields the script expects.

    That's it. Submit a test entry - a new row should appear in the sheet and an email should hit your inbox within a few seconds.

    ๐Ÿ’ก

    Want to see this in action?

    Get a free concept prototype designed specifically for your business within three working days.

    A Note on GDPR and Consent

    If you're collecting leads in Ireland or the EU, you can't skip this bit.

    • โœ… Add a clear consent checkbox on your form ("I agree to be contacted about my enquiry")
    • โœ… Log that consent value in the sheet - so you have a record
    • โœ… Keep a short privacy policy on your site explaining what you store and why
    • โœ… Only email people for the reason they consented to

    Storing consent in the sheet isn't a legal shield on its own, but it's a huge step in the right direction, and much better than "we lost track".

    When to Upgrade to a Real CRM

    You've outgrown this setup when:

    • You have more leads than you can personally reply to
    • You want to send automated follow-up sequences
    • You need to track deals, pipelines, or repeat visits
    • Multiple people on your team need shared access with roles

    At that point, exporting the sheet into a tool like HubSpot, Pipedrive or a bespoke system takes minutes - because your data is already structured.

    Why Not Just Edit The Site Directly?

    This is the exact reason I build clients a small admin dashboard alongside their website instead of handing them a Wix or WordPress editor. !VisionWeb client dashboard vs Wix and WordPress builders

    With a page-builder, every update is a chance to break the layout: fonts shift, sections collapse on mobile, an image ends up 4x too big. With a form-driven dashboard, the client just fills in fields (title, body, price, image) and the site renders those fields inside the design I already built. Nothing moves. Nothing breaks. And every submission is logged, just like the Google Sheets flow above.

    ๐Ÿ“ž

    Ready to discuss your project?

    Book a free consultation to explore how we can help grow your business online.

    The Honest Summary

    This isn't a magic system. It won't tell you which leads visited your pricing page three times, or auto-nurture them for 30 days. But for a small Irish business that just wants to stop losing leads and start building a list, it's one of the highest-value 20-minute setups you can do.

    If you'd rather have this built into your website properly - with the form, the sheet, the email alerts and a privacy-friendly consent flow all wired up for you - that's exactly the kind of quiet, useful work I do for clients every week.

    Tags:Google SheetsApps ScriptLead TrackingSmall BusinessAutomation
    Share:
    Free Prototype

    Want Results Like This?

    Get a free concept prototype designed specifically for your business - delivered within three working days.

    Bring yourvision to life

    Let's start with a friendly conversation. Tell me about your project and we'll figure out the best way to make it happen.

    โšก24h response
    ๐ŸŒBased in Europe
    ๐ŸŒWork worldwide