Key takeaways
- The rubric is the product. Routing accuracy comes from the description of what each destination is for, not the model.
- One destination per response. Never two. Never zero. If neither, the response goes to the Triage Queue.
- Confidence threshold, not blind dispatch. Below the threshold goes to a sheet. Above the threshold routes directly.
- Receipts. Every routed response carries a one-click reroute link. Corrections become training data.
- Read the whole response, not just structured fields. Free text often holds the signal that decides where it goes.
What this agent does
You have a Google Form. It collects contact requests, support tickets, partnership inquiries, refund requests, or interview applications. You currently route those responses by hand: open the response sheet, read each submission, decide who owns it, paste it into Slack or HubSpot or a Linear ticket. The agent does that step.
It watches the form's response feed using a Google Apps Script trigger or a Pub/Sub notification. When a response arrives it reads every field, including the free-text fields, classifies the response against a rubric you wrote, and dispatches it to one destination with one owner. If the classification is below your confidence threshold the response goes to a Triage Queue sheet and a nominated human gets pinged.
What the agent does not do: it does not reply to the form submitter, edit the response, change the form, or aggregate multiple responses into a single ticket. Every response routes individually, every routing decision is logged, and every recipient has a one-click reroute link they can use without involving the agent's owner. For the design principle behind that limit, see describe the outcome, not the workflow.
Sources of truth
Google Forms only. The agent does not look at your CRM, your help desk, or your past responses to make a decision. Bringing in external context sounds smart and produces inconsistent routing. The response in front of the agent is the source of truth.
- Form metadata. Title, description, field labels. Used once at setup to bootstrap the rubric draft.
- Response payload. Every field, including hidden fields if any. Free text is treated as a single block.
- Timestamp. Used to apply different rubrics by time of day or business hours if you set them.
- Submitter email. If the form requires sign-in. Used only for routing, never enriched against an external database.
The agent ignores: previous responses from the same submitter, response patterns over time, response volume. Those are interesting for analytics but not for routing the response in front of it. Conflating them produces drift.
The routing rubric
The rubric is plain text that you write. It is the most important file the agent has. A workable rubric looks like this:
- Partnership inquiry. Anyone asking about co-marketing, integrations, or reseller relationships. Goes to the founder Slack DM.
- Support, paid customer. Email domain matches a customer in HubSpot. Goes to the #support-paid channel with the SLA tag.
- Support, free or unknown. Goes to the #support-free channel without an SLA tag.
- Sales lead, enterprise. Mentions team size over fifty, procurement, security review, or compliance. Goes to HubSpot as a new contact tagged Enterprise and pings the AE.
- Sales lead, SMB. Anyone else asking about pricing or a demo. Goes to HubSpot as a new contact and waits in the inbound queue.
- Press or analyst. Mentions a publication, podcast, or research report. Goes to the founder Slack DM with a Press tag.
- Job application. Mentions resume, CV, hiring, or careers. Goes to a separate Google Drive folder where the recruiting agent picks it up.
- Spam. Empty body, gibberish, link bait. Goes to the Trash sheet. Never deletes, never blocks. You decide what to do with the Trash sheet.
The rubric is not a decision tree. It is a list of destinations with a description of what belongs in each. The agent reads the response and picks the best fit. If two seem to fit, the rubric says which wins (you write the tiebreaker). If nothing fits, the response goes to the Triage Queue.
Writing the rubric takes about an hour the first time. Most of that hour is realising that what looks like one bucket is actually three and what looks like three is actually two. The same lesson shows up in how to give an agent multiple tools, the hard part is naming.
Destinations the agent can write to
Each destination uses its own OAuth scope. The agent only requests the scopes for destinations you actually use. A typical form ends up with three or four destinations active.
- Slack channels and DMs. Writes a formatted message with the submitter, summary, and a reroute link.
- Email aliases. Sends a formatted email through the agent's Gmail send scope. Reply-to is set to the submitter so threading works.
- HubSpot contacts. Creates or updates a contact with the response stored as a note and a tag for the destination class.
- Linear or Jira issues. Files a ticket in the project you specify with the response in the description.
- Google Sheet rows. Appends to a sheet. Used for Triage Queue, Trash, and any destination where the team prefers a sheet over a tool.
- Google Drive folder. Saves the response as a structured JSON file. Used when a downstream system polls a folder.
The agent will not invent destinations. If you ask it to route to "the right place" without naming the place, it returns an error. Routing is a deterministic act with a finite set of destinations, and the destinations are an input, not an inference.
Guardrails
Three guardrails are enabled by default and stay on regardless of your rubric.
- No reply on the submitter's behalf. The agent never sends an email or message back to the person who submitted the form. If you want an auto-acknowledgement, configure that in Google Forms itself or a separate agent.
- No deletion or modification of responses. The Google Forms response sheet is read-only from the agent. If a response routes to Trash, it goes to a separate sheet. The original is untouched.
- No aggregation. Every response routes individually. The agent does not batch, deduplicate, or hold for a quorum. Batching introduces ordering bugs and breaks the audit trail. For the more general statement of this principle, see agent error handling and rollback.
Beyond the defaults, you set the confidence threshold for the Triage Queue and the per-destination rate limit if you have one. Most teams cap Slack-DM destinations at twenty messages per hour to avoid burying the recipient.
Common mistakes
Trying to skip the rubric. The agent can guess where things go from field labels alone, and the guesses are about seventy percent accurate. That is bad. Spend the hour. Write the rubric.
Naming a destination "Other". The agent will route everything ambiguous there and the bucket grows until it is the largest one. If the rubric has an "Other" destination, the Triage Queue is meaningless. Pick destinations that name a workstream.
Skipping the Triage Queue. Removing the holding queue and forcing every response to a real destination feels cleaner. It makes the agent silently misroute low-confidence responses. The Triage Queue is the agent's way of saying "I am not sure" and that signal is too valuable to suppress.
Routing to a destination nobody owns. The agent ships responses to wherever you say. If the destination is a Slack channel with no humans in it, the responses pile up. Audit destinations once a quarter to ensure each has a named owner. The principle is the same as in how to monitor agent activity.
Letting the rubric drift without versioning. The rubric changes when the business changes. Treat it like code. Commit changes with a one-line reason. After three months you will want to read the history to understand why a routing decision was made and the answer should be in the commit log.
Frequently asked questions
Can an AI agent route Google Forms responses for me?
Yes. The agent subscribes to new Google Forms responses, reads each submission, classifies it against a routing rubric you describe in plain text, and dispatches it to a destination: a Slack channel, an email alias, a HubSpot record, a Linear ticket, or a Google Sheet row. You define the rubric. The agent does the classification.
How is this different from a Google Forms Zapier zap?
A zap branches on field values. If field equals A, do X. The agent reads the entire response as text and decides where it goes, including responses that the form designer did not anticipate. This matters for free-text submissions like contact-us, support, and partnership requests where the structured fields do not contain enough signal. For the deeper comparison, see how to migrate from Zapier to an agent.
What if the agent misroutes a response?
Every routed response carries a one-click reroute link. The recipient clicks it, picks the correct destination, and the agent records the correction. After about thirty corrections per form the agent's accuracy on that form crosses ninety-five percent and corrections become rare. Treat the first thirty as training data.
Does the agent need write access to my Google account?
It needs read access to Google Forms responses and read access to the linked Google Sheet, plus the OAuth scopes for each destination it routes to. It never modifies the original form or its responses. The Google Sheet log is read-only from the agent's perspective.
Can I add a holding queue for ambiguous responses?
Yes. If the agent's confidence on a routing decision is below a threshold you set, it places the response in a Google Sheet called Triage Queue and pings a person you nominate. Most teams set the threshold at eighty-five percent confidence and find the queue holds about three percent of submissions.
Three takeaways before you close this tab
- The rubric is the product. The model is a commodity. If your rubric is sloppy your agent is sloppy.
- The Triage Queue is a feature, not a fallback. Tune the threshold so it holds two to five percent of responses and a human reads it daily.
- Never let the agent send a reply to the submitter. Replies belong to the team that owns the destination, not to the router.
Sources
- Google. Google Forms API reference v1. Tier 1.
- Google. Google Apps Script onFormSubmit triggers. Tier 1.
- Google. Cloud Pub/Sub push subscriptions for Forms. Tier 1.
- HubSpot. Contacts API v3, create or update. Tier 1.