Dynamic Forms That Route Themselves.
How we used Google Apps Script to make dynamic list population and conditional section routing coexist in Google Forms — solving a Form Ranger conflict that had been declared unsolvable.

The Problem
The healthcare group relied on Google Forms for therapist intake and scheduling — but Form Ranger, the tool they used for dynamic list population, couldn't coexist with conditional section-skip routing. Every attempt to enable both features broke one or the other.
Mission-critical intake forms were either static (missing real-time therapist availability) or broken (failing to route respondents to the correct sections). The workaround was manual updates — which didn't scale across multiple locations.
What We Built
We built a Google Apps Script solution bound directly to each form, bypassing Form Ranger entirely. The script pulls therapist lists from a shared Google Sheet and programmatically wires section routing via Choice objects with gotoPage destinations.
Hourly and on-submit triggers keep the therapist lists current without manual intervention. A diagnostic function was included for fast troubleshooting when new therapists or sections are added — so the operations team can maintain the forms without developer support.
“We'd been told this wasn't possible — that you had to choose between dynamic lists and conditional routing. We didn't have to choose.”
The System Architecture
Google Apps Script bound to each form. Therapist list data stored in a shared Google Sheet. Hourly time-based trigger for list refresh. On-submit trigger for confirmation workflows. Choice object routing wired programmatically to gotoPage destinations. Diagnostic function for configuration validation.
The Results
Dynamic form population and conditional routing working together across multiple client forms — the outcome Form Ranger's architecture made impossible. Therapist lists update automatically on an hourly cycle.
The operations team can now add therapists, update locations, and add new intake sections without touching the form logic. The diagnostic function catches configuration issues before they reach respondents.