Save and Continue Google Forms for Free with Apps Script

The Problem

A client's procurement team was onboarding new vendors using a 35-field Google Form. The form covered everything: company registration details, banking information, insurance certificates, technical integration specs, and compliance documentation.

The problem was that no single person at the vendor's end had all of this information. The finance team handled the banking fields. Legal owned the insurance and compliance sections. IT handled the technical specs. Getting everyone in front of a form at the same time was impossible — and losing a half-filled submission and starting over was becoming a recurring complaint.

The obvious solutions all cost money:

  • JotForm with save-and-resume: $39/month
  • Typeform: $59/month
  • Custom form with a database backend: dev time + hosting

They were already using Google Workspace. The form was already built in Google Forms. We solved it for free in about an hour.


The Insight: Google Forms Already Has This Built In

Google Forms has a setting called "Allow editing responses". When enabled, every form submission generates a unique edit URL that reopens the form with all previous answers pre-filled. The user can change any field and resubmit.

That's save-and-continue. The only missing piece: the user needs to receive that edit URL after each submission so they can come back to it.

That's where Apps Script comes in.


How It Works

The flow end-to-end:

  1. Vendor receives the form link from the procurement team along with their CRM reference ID (e.g. VND-2024-0089)
  2. Vendor fills whatever fields they have and clicks Submit
  3. Apps Script triggers immediately on submission
  4. Script reads their email and CRM ID from the form response
  5. Script emails them their edit URL with the CRM ID in the subject line
  6. Vendor forwards the relevant sections to finance, legal, IT — each person opens the edit link, fills their part, submits
  7. Each submission sends a fresh email with the updated edit link
  8. Procurement team tracks completion in the linked Google Sheet

The CRM ID in the email subject means anyone can find their continuation link by searching their inbox for their reference number.


Setup: Step by Step

Step 1: Enable editing in Google Forms

Open your form → Settings → Responses → turn on "Allow response editing". This is off by default.

Step 2: Structure your form fields correctly

Make Email Address the first required field. The script needs this on the very first submission to know where to send the edit link. If a user skips it, they get nothing.

Add a CRM Reference ID field (short text, required). Your account managers give vendors this ID when they initiate onboarding. It becomes the thread that connects every email in the process.

Step 3: Customize the form confirmation message

Go to Settings → Presentation → Confirmation message. Set it to something like:

"Your progress has been saved. Check your email for a link to continue where you left off."

This is important — without it, users think they've submitted a final response and won't know to expect the continuation email.

Step 4: Add the Apps Script

In your form, click the three-dot menu → Script editor. Paste the following:

function onFormSubmit(e) {
  var response = e.response;
  var editUrl = response.getEditResponseUrl();
  var itemResponses = response.getItemResponses();

  var email = '';
  var crmId = '';
  var companyName = '';

  for (var i = 0; i < itemResponses.length; i++) {
    var title = itemResponses[i].getItem().getTitle();
    var value = itemResponses[i].getResponse();

    if (title === 'Email Address') email = value;
    if (title === 'CRM Reference ID') crmId = value;
    if (title === 'Company Name') companyName = value;
  }

  // Can't send without an email address
  if (!email) return;

  var subject = '[REF: ' + crmId + '] Continue Your Vendor Application';

  var body =
    'Hi ' + (companyName || 'there') + ',\n\n' +
    'Your progress has been saved.\n\n' +
    'CRM Reference: ' + crmId + '\n\n' +
    'Use the link below to continue your application. ' +
    'All your previous answers will be pre-filled:\n\n' +
    editUrl + '\n\n' +
    'You can share this link with colleagues who need to fill ' +
    'their sections.\n\n' +
    'To find this email later, search your inbox for: ' + crmId + '\n\n' +
    'Regards,\nProcurement Team';

  GmailApp.sendEmail(email, subject, body);
}

Step 5: Set up the trigger

In the Script editor → Triggers (clock icon) → Add trigger. Set it to run onFormSubmit on Form submit event. Authorize the script when prompted — it needs Gmail access to send emails.


What the Vendor Receives

Every time they submit (whether it's their first save or their fifth), they get an email like this:

Subject: [REF: VND-2024-0089] Continue Your Vendor Application

Hi Acme Corp,

Your progress has been saved.

CRM Reference: VND-2024-0089

Use the link below to continue your application. All your previous answers will be pre-filled:

https://docs.google.com/forms/d/.../viewform?edit2=...

You can share this link with colleagues who need to fill their sections.

To find this email later, search your inbox for: VND-2024-0089

Gotchas Worth Knowing

Submit means Save, not Final Submit

This is the biggest communication challenge. Users are trained to think of "Submit" as final. You need to explicitly tell them — in the form description, in the confirmation message, and in your onboarding email — that submitting saves their progress and they can come back. Consider renaming your submit button label if your form platform supports it (Google Forms doesn't, which is a real limitation here).

Email must come first

If a user skips the email field or fills it incorrectly on their first submission, the script returns early and they get nothing. Make it required and put it at the top of the form.

File upload fields cannot be edited

This is a hard limitation of Google Forms. If your form includes file upload questions, those specific fields cannot be changed via the edit link — the field shows as locked. For document uploads (insurance certs, compliance docs), consider using a separate Google Drive upload link outside the form, or switching those fields to a Google Drive folder URL text field instead.

The edit link is tied to the original submitter's Google account (sometimes)

If your form requires sign-in, the edit link only works for the person who originally submitted. If you want colleagues to fill different sections, keep the form set to "Anyone with the link can respond" (no sign-in required). The edit link itself is unguessable — it contains a long unique token — so this is safe enough for most internal onboarding use cases.

Don't delete rows from the linked Sheet

If you delete a response row from the Google Sheet, the edit link for that submission breaks silently — the user gets a "response not found" error with no explanation. Treat the Sheet as append-only.


When This Approach Works

  • You're already in Google Workspace
  • The form is long but structured (clear sections for different people)
  • Respondents have email and are comfortable following links
  • You don't need file uploads as part of the partial save flow
  • Volume is moderate — this won't break at 500 submissions but you'll hit Gmail daily send limits (100 emails/day on free, 1500/day on Workspace) at scale

When to Actually Pay for JotForm

  • You need a polished UI with a real "Save Draft" button
  • File uploads are a core part of the save flow
  • You need conditional logic that changes based on partial answers
  • Volume exceeds Gmail send limits
  • Respondents are external customers (not internal/vendor) and the experience matters

For internal workflows on Google Workspace, this approach eliminates a $500/year SaaS subscription with about an hour of Apps Script work. The procurement team in this case went from chasing vendors for incomplete forms to having a self-service system where vendors manage their own progress.

If you're running a similar workflow and want to adapt this for your specific form structure, get in touch.

Start Your Project Now