Free Google Apps Script tools
Tools that work with Google Apps Script, the layer that connects a Google Form to Slack. Translate routing rules into a runnable script and sanity-check the trigger configuration that ties the handler to form-submit events.
On Submit Trigger Generator
Generate the onFormSubmit trigger that fires every Google Form submission. Output picker for Slack incoming webhook or generic JSON endpoint.
Routing Rules → Apps Script
Define IF-THEN rules in a UI. Get a Google Apps Script that runs them on every submission and posts to the matching webhook.
UrlFetchApp Helper
Build a correctly-shaped UrlFetchApp.fetch call: method, payload, headers, options, plus try/catch and retry wrapper. Copy-paste Apps Script snippet.
Looking for the script generator? It lives under Google Forms tools , we group it there because it emits the script that handles the form data, and the two tools here are about wiring (the trigger) and routing logic.
What breaks even when the script itself is fine
You can write a perfectly good onFormSubmit(e)handler that does exactly the right thing, read the event, build the Slack message, POST to the webhook, and submissions still won't reach Slack. Two reasons:
- The trigger isn't wired correctly.Apps Script's trigger model has three axes (function, event source, event type) and only one combination fires on form submission. The other 90+ combinations either don't fire, fire on the wrong event, or fire from the wrong source. The trigger checker is the dropdown that surfaces this.
- The routing logic is missing or wrong.A “send everything to one channel” script is one URL. A “send Pricing-page leads to
#hot-leads, support tickets to#support” script is conditional logic that's easy to get wrong by hand. The rules-to-script translator emits the same dispatch pattern RouteForms uses internally, so you're not inventing it.
If both axes are correct and submissions still don't reach Slack, the failure is downstream of Apps Script, the webhook URL is revoked, the channel is archived, or Slack is rate-limiting. Our Slack webhook tools cover that side.
What you give up by going pure-script
- Delivery monitoring.Apps Script's Executions log shows you function runs but not Slack's response. A 200 OK from Slack and a 500 error from Slack both look like “Completed” in the Executions list. RouteForms records the Slack HTTP status per attempt.
- One-click retries. If Slack rejects a post for any reason, an Apps Script error gets logged and the response is gone. RouteForms keeps the failed delivery in the log with a Retry button.
- Idempotency. UrlFetchApp can retry on transient errors, but without dedupe the retry produces a second Slack post. RouteForms enforces a partial unique index on the Google Forms response ID at the database layer.
- Failed-delivery alerts.The script won't email you when delivery starts failing. RouteForms (paid plans) sends one when a streak of failures starts.
- Multi-form / multi-client scaling. One script per form, one trigger per form, one set of webhooks per form. RouteForms Agency gives you client workspaces for batch management.
Frequently asked questions
What are 'Apps Script tools' on this page?▾
Free utilities for Google Apps Script, the JavaScript-like environment that runs bound to your Google Form and executes on form submission events. Two tools here: a trigger checker that verifies your trigger's function name, event source, and event type are the right combination for form-submit handling; and a translator that turns a set of IF-THEN routing rules into a runnable Apps Script that posts to different Slack webhooks based on the answer.
Why does Apps Script matter for Google Forms → Slack?▾
Google Forms has no native Slack integration. To get a submission into Slack, something has to listen for the form-submit event and POST a message to a Slack incoming webhook. Apps Script is the lightest-weight way to do that, a small script bound to the form, a single trigger, a UrlFetchApp.fetch call. Most tutorials end at 'paste this script'; these tools cover the parts that go wrong after the paste (trigger misconfig, missing dedupe, ad-hoc routing).
What's the canonical trigger setup?▾
Function = onFormSubmit (a function you've written in the script that takes an event object and POSTs to Slack). Event source = 'From form' (because the script is bound to the form). Event type = 'On form submit' (because you want it to fire on submission, not on form open or edit). Anything else is wrong for this use case, the trigger checker walks you through verdicts on every combination.
Why are duplicate triggers such a common problem?▾
People re-run their installer function, installFormBridge, setupTrigger, whatever it's called, without first deleting the old trigger. Apps Script doesn't warn you. The second trigger gets created and both fire on every submission, so Slack gets two messages per form response. The fix is mechanical: open Triggers (clock icon in the Apps Script left sidebar), delete the duplicate row. Our generated Apps Script wipes existing triggers before creating a new one to prevent this, but if you wrote your own installer, double-check.
Should I add routing in Apps Script or use RouteForms?▾
The routing-rules-to-Apps-Script translator on this page is the answer when you want to keep everything in Apps Script, no external service, runs entirely on Google's infrastructure, deploy-and-forget. RouteForms is the right answer when you want operational visibility on top: a per-form delivery log, one-click retries on failed posts, idempotency so Apps Script retries can't double-post, and email alerts when delivery starts failing. The script gives you the routing; RouteForms adds the safety net.
Do I need to know JavaScript to use these tools?▾
No. Both tools emit ready-to-paste output, the translator gives you a complete Apps Script you paste into your form's script editor; the trigger checker gives you a configuration verdict in plain English. The Apps Script editor itself is where you'd need light JS familiarity if you wanted to modify the generated code, but the tools don't require it.
What if my script is bound to the responses Sheet, not the form?▾
Both setups work but behave differently. Form-bound scripts get an event object with `e.namedValues` (a map of question to array-of-answers); Sheet-bound scripts get `e.values` (an array of cells in submission order). Most tutorials assume form binding, and so does our trigger checker. If you went the Sheet route, you'll need to read `e.values[1]` instead of `e.namedValues['Question']`. The routing-rules translator we ship outputs a form-bound script by default.
Skip the Apps Script babysitting
RouteForms's installer is the only Apps Script you need, we handle the rest. Free for 30 responses a month.
Keep reading
The full index. Google Forms, Slack webhook, Apps Script, and lead routing categories.
The Google Forms side of the same pipeline, script generator, response formatter, field extractor.
The end-to-end setup walkthrough using the managed RouteForms flow.
All the real options for delivering Google Form responses to Slack, ranked by fit.