Google Forms for Internal IT Requests: A Complete Setup Guide

By Swiftools Team · Published February 8, 2026 · 9 min read

An application form on a clipboard beside a pen and laptop

Small and mid-sized companies face a recurring problem: they need a way for employees to request IT help, but a full Jira Service Management or ServiceNow rollout is overkill. The typical alternatives - an email alias, a Slack channel, "just DM me" - all have the same failure mode. Requests get lost, nothing has a trackable status, and the IT person ends up as a human ticket queue with the volume increasing every month.

A well-built Google Forms intake portal sits squarely in the middle ground. It costs nothing, takes a couple of hours to build, gives every request a record, and scales smoothly to a few hundred tickets per month. Below is the full pattern we recommend to companies that aren't ready to commit to a dedicated ITSM tool yet.

What the system actually does

At the end of this setup, the company will have:

  • A single internal URL that any employee can bookmark to file an IT request
  • A form that adapts its questions based on the type of issue (password reset, hardware request, software install, access request, etc.)
  • A central Google Sheet where every request appears as a row with auto-assigned ticket ID
  • Instant Slack notifications to an #it-tickets channel, with priority-based routing
  • Optional escalation to Jira ServiceDesk for issues that need engineering follow-up
  • A reply email confirming receipt and SLA expectation

No external SaaS bills, no licenses to buy, and the form's owner can modify the structure at any time without filing a ticket of their own.

Step 1: Design the intake categories

The most important decision is the first question of the form: "What kind of request is this?" Every downstream piece of automation branches off this answer. Pick categories that are mutually exclusive and exhaustive for your environment. A typical set:

  • Password reset or account locked
  • New hardware request (laptop, monitor, accessories)
  • Software install or license request
  • Access request (a system, folder, or tool)
  • Existing hardware not working
  • Other (free text)

Five to seven categories is the sweet spot. Fewer and you can't route. More and people guess wrong, which defeats the point.

Step 2: Use sections and conditional logic

Google Forms supports conditional sections - different follow-up questions based on the answer to a previous question. This is the feature that turns a generic intake into a useful one. The setup is:

  1. Create the form with the category question as a multiple choice.
  2. Click the three-dot menu on that question and choose "Go to section based on answer."
  3. Create one new section per category (Insert > Section).
  4. In each section, ask only the questions relevant to that category. End each section with "Go to: Submit form."

For example, the "Password reset" section asks for the system (Google Workspace, Slack, Jira, etc.) and nothing else. The "New hardware" section asks model preference, business justification, and manager approval status. The "Access request" section asks for the resource and the duration. Each section takes 30 seconds to fill, instead of one giant form with 20 mostly-empty fields.

The official Google Forms documentation on sections covers the mechanical setup in detail.

Step 3: Connect to a tracking sheet

Click the Responses tab and create a linked spreadsheet. Then add these columns to the right of the form-generated columns:

  • Ticket ID - formula: ="IT-" & TEXT(ROW()-1, "0000") gives IT-0001, IT-0002, etc.
  • Priority - dropdown: P1 / P2 / P3 / P4
  • Status - dropdown: New / In Progress / Waiting / Resolved / Closed
  • Assignee - dropdown of IT team members
  • SLA Due - formula based on priority and submission time
  • Resolution Notes - free text

The Ticket ID formula is the key to making this feel like a real system. Every request gets a unique number that you can quote back to the requester in your reply.

Step 4: Set up Slack routing

The intake form is only useful if someone sees the request promptly. The cleanest way to wire this up is with Formlinker for Slack, which sends a formatted message to a chosen channel every time the form is submitted. Configure it once and choose which fields to include in the Slack message - typically requester name, category, summary, and a link to the response row.

For priority-based routing (P1 goes to a paging channel, P2-P4 goes to a normal queue), you have two options:

  • Two forms, two channels. Simpler. Create a separate "P1 - System Outage" form that goes to #it-incidents, and the main intake form goes to #it-tickets. Acceptable if P1s are rare.
  • One form, conditional webhook. Use Formlinker for n8n to send all submissions to an n8n workflow, branch on the category or a priority field, and route to different Slack channels with different message formats. More flexible, more setup.

Step 5: Auto-reply with the ticket number

Add a tiny Apps Script trigger to the form's response sheet that sends the requester an email confirming receipt and giving them the ticket ID. The full script is about 20 lines:

function onFormSubmit(e) {
  var row = e.values;
  var requesterEmail = row[1]; // adjust to your column
  var category = row[2];
  var ticketId = "IT-" + String(e.range.getRow() - 1).padStart(4, "0");
  var sla = category === "Password reset" ? "1 hour" : "1 business day";

  MailApp.sendEmail({
    to: requesterEmail,
    subject: "Received: " + ticketId,
    htmlBody: "Hi! We received your " + category +
      " request and assigned it ticket " + ticketId +
      ". We aim to respond within " + sla + "."
  });
}

Bind it to the form-submit trigger (Extensions > Apps Script, then in Triggers add an "On form submit" event). The Atlassian study on response-time perception consistently finds that an auto-reply within seconds materially reduces follow-up "did you get my request?" emails.

Step 6: Optional - escalate to Jira

For some categories you'll want a Jira ticket created automatically (anything involving engineering, security incidents, or compliance audit trails). The pattern is:

  1. Send the form submission to n8n via webhook (see our n8n + Google Forms guide).
  2. In n8n, add an IF node that checks the category field.
  3. For matching categories, use the Jira node to create a ticket with the form data mapped to Jira fields.
  4. Use n8n to write the resulting Jira ticket URL back into the Sheet so you have the cross-reference.

For IT teams that already submit similar Jira ServiceDesk tickets repeatedly, our Jira Form Autofill Helper extension is also worth a look - it captures and replays full form templates, which is useful when most of your Jira tickets share 80% of the same fields.

Step 7: SLA tracking and reporting

Add a second sheet tab called "Open Tickets" with this single formula:

=QUERY(Responses!A:M, "select L, A, C, D, K where J != 'Resolved' and J != 'Closed' order by K asc", 1)

That gives you a live worklist of every open ticket sorted by SLA due date. Pin it as the default view and IT engineers always see the most urgent work first.

For monthly reporting, a third tab with a QUERY that counts tickets per category, average resolution time per priority, and SLA hit rate gives leadership the data they need to decide whether to invest in a real ITSM tool. (When you outgrow this setup, that data also makes the rollout easier - you know your actual volume by category.)

When this stops being enough

This system scales comfortably to roughly 200 tickets per month and 2-3 IT staff. Past that point, you'll start to want features that are hard to build on top of Forms: real ticket threading, SLA timers that pause for "waiting on user" status, asset databases linked to requests, and proper change management workflows. That's when you graduate to a Freshservice, Jira Service Management, or similar.

Until then, this setup gives you 80% of the value of a paid ITSM tool for 0% of the cost. And because everything lives in tools your team already knows, the maintenance burden is essentially zero.

Sources & Further Reading