Conditional routing of Google Form responses
Conditional routing is the pattern that turns a Google Form into something that actually fits how a team works: each submission goes to the channel — and the person — that owns it, based on what the respondent answered.
- First-match-wins, predictable destinations
- 10 operators including numeric and contains
- Default fallback so nothing is dropped
Every routed response is a switch over the form's answers
Conditional routing is just a switch statement applied to a form submission. For every response, the router asks: which of these conditions is true? The first condition that matches picks the destination. If none match, the response falls through to a default.
In code form, with a Google Forms submission represented as an object, conditional routing looks like:
if (response.Budget >= 50000) send("#hot-leads")
else if (response.PropertyType.includes("Commercial")) send("#commercial-desk")
else if (response.City === "Austin") send("#austin-team")
else send("#all-enquiries") // defaultYou don't actually write that code. RouteForms takes the same shape — field, operator, value, destination — as rows in a dashboard, evaluates them top-to-bottom on every Google Forms submission, and posts to the matched Slack channel.
Four pieces, no surprises
- Field — the exact question title from your Google Form. Match is case-insensitive and trims whitespace.
- Operator — how to compare. equals / does not equal for picklists, contains / does not contain for free text, greater/less than for numbers, is empty / is not empty for optional fields.
- Value — what to compare against. Numeric operators strip currency symbols, commas, and trailing units, so
50000matches₹50,000and50k usdalike. - Destination — a Slack incoming-webhook URL plus an optional channel label you choose for the delivery log.
Symptoms that say a single Slack channel isn't enough
- Your
#leadschannel has become noise — high-value enquiries are indistinguishable from low-value ones at a glance. - Different teams own different response shapes (sales vs support vs billing) but they're all reading the same channel.
- Urgent issues (NPS 1–6, “Urgent” bug priority, “Escalate” answer) need to get to on-call, not the general inbox.
- You're an agency and each client's form responses should land in that client's own Slack workspace.
- You've already tried Zapier Paths and the per-task pricing or the gated tier made it untenable for the volume you're running.
First match wins — put specific rules above general ones
Because RouteForms uses first-match-wins, the order of rules matters. The pattern is the same as any switch: handle the specific case before the general case, or the general case will eat all submissions before the specific case gets a look in.
Budgetgreater than or equal100000→ send to#vip-leadsBudgetgreater than or equal50000→ send to#hot-leadsCityequalsAustin→ send to#austin-teamIf you swapped #1 and #2, every high-value lead (Budget ≥ 100000) would still match #2 (Budget ≥ 50000) first and land in #hot-leads instead of #vip-leads. The dashboard's up/down arrows let you reorder rules live, no redeploy.
From zero to conditional routing in five minutes
- 1Install the Apps Script triggerCopy RouteForms' pre-filled snippet into
Extensions → Apps Scriptin your form and run the install once. That registers Google'sonFormSubmittrigger. - 2Pick a default Slack channelOn the Slack tab, paste an incoming-webhook URL for the catch-all channel. Every submission goes here until a routing rule overrides it.
- 3Add routing rulesOn the Routing rules tab, add one row per condition. Pick the field name from your form, an operator, a value, and the destination Slack webhook for that match.
- 4Simulate before trustingThe simulator at the bottom of the tab pre-fills with your latest real submission. Tweak the JSON to test edge cases, click Run, and see exactly which rule (or default) would have fired.
- 5Watch the delivery logEvery Slack post records the matched rule, the destination, and Slack's HTTP response. If a rule isn't firing when you expect, the log shows you what actually happened.
Frequently asked questions
What is conditional routing for a form?▾
Conditional routing means the destination of a form submission depends on what the respondent answered. Instead of every response going to one place, each response is matched against a small set of rules (IF field = value THEN send to X) and routed to the destination that matched. It's the same pattern as a switch statement, applied to form submissions.
Does Google Forms support conditional routing out of the box?▾
No. Google Forms' built-in 'send a notification' feature posts to one fixed email address regardless of the answer. To branch on the answer, you either write Apps Script with your own if/else logic, use a workflow tool with branching (Zapier Paths, Make routers, n8n), or use a purpose-built form-to-Slack router like RouteForms.
How is conditional routing different from filtering?▾
Filtering decides whether a submission goes anywhere at all. Conditional routing decides which of several destinations it goes to. A filter throws away submissions that don't match; a router never throws anything away — non-matching submissions fall through to a default destination.
Why not just send everything to one Slack channel and let the team filter?▾
Because nobody filters. A high-velocity #leads channel becomes background noise within a week, and the responses that actually matter (a $50k enquiry, an urgent support ticket) get buried under the rest. Conditional routing is how you preserve the attention each response deserves.
How does conditional routing handle ties — what if two rules match?▾
RouteForms uses first-match-wins: rules are evaluated top to bottom and only the first match fires. There is no implicit fan-out. If you genuinely need a response in two channels, point two routing rules at it via different webhooks, but the default is the safer one — one submission, one channel.
What operators can I use in a routing condition?▾
RouteForms supports ten: equals, does not equal, contains, does not contain, greater than, greater than or equal, less than, less than or equal, is empty, is not empty. Numeric operators tolerate currency symbols and commas, so '₹50,000' compares correctly against 50000.
Can I test a routing condition before going live?▾
Yes. The Routing rules tab in RouteForms includes a simulator pre-filled with your most recent real submission. Edit the JSON, click Run test, and the dashboard shows you which rule (or the default fallback) would have fired — no actual Slack message is sent.
What happens to submissions that don't match any rule?▾
They go to the form's default Slack channel — the webhook you set on the Slack tab when you first connected the form. That's the catch-all that makes routing safe: even if all your rules miss, the response is still delivered somewhere visible.
Set up your first conditional route
Solo plan supports 10 rules per form, Agency is unlimited. Both start at $7.
Keep reading
The IF-THEN syntax in detail — operators, examples, and how RouteForms evaluates each rule.
The end-to-end how-to: trigger, rules, fallback, delivery guarantees.
Concrete recipes for routing by dropdown, scale, checkbox, free text, file upload, and currency answers.
Replace Zapier Paths with direct first-match routing — and skip per-task pricing.