FormFuzz is a lightweight internal tool to generate automated test submissions for Google Forms and watch execution live in a console-style UI.
It’s intended for QA, demos, and internal tooling (not for bypassing Google permissions).
- Automated Google Form submissions (small scale)
- Optional Gemini-powered text answers
- Live logs (polling-based console)
- Simple architecture: Next.js frontend + Google Apps Script backend
app/,components/,lib/: Next.js frontend (UI)app_script.js: Google Apps Script backend file (paste this into Google Apps Script and deploy as a Web App)
- Add
formfuzz@gmail.comas an Editor to the target Google Form - Use the Form Edit URL (must end in
/edit)
Correct:
https://docs.google.com/forms/d/FORM_ID/edit
Incorrect:
https://docs.google.com/forms/d/FORM_ID/viewformhttps://docs.google.com/forms/d/FORM_ID/d/e
- Go to
https://docs.google.com/forms/u/0/ - Choose a form you own
- On the Questions tab, copy the active URL in your address bar:
https://docs.google.com/forms/d/FORM_ID/edit - Paste it into the FormFuzz input
The frontend calls the Apps Script Web App URL from the browser, so the env var must be prefixed with NEXT_PUBLIC_.
- Copy
env.exampleto.env.local - Restart
npm run devafter changing env vars
cp env.example .env.localnpm install
npm run dev- Create a new Apps Script project
- Paste the contents of
app_script.js - Deploy as a Web App:
- Execute as: Me
- Who has access: Anyone
- Copy the deployed URL (must end with
/exec) intoNEXT_PUBLIC_WEB_APP_URL
Note: redeploy after backend code changes.
| Question type | Status |
|---|---|
| Short answer (text) | ✅ |
| Paragraph | ✅ |
| Multiple choice | ✅ |
| Checkboxes | ✅ |
| Dropdown | ✅ |
| Linear scale | ✅ |
| Multiple choice grid | ✅ |
| Checkbox grid | ✅ |
| Date | ✅ |
| Time | ✅ |
| Rating | |
| File upload | ❌ Not supported |
- If you provide a Gemini API key, text + paragraph answers can be generated via Gemini
- If not, fallback random text is used
- Each run generates different answers (seeded per request)
Common model strings (you can also type a custom model in the UI):
gemini-2.5-flashgemini-1.5-pro-latestgemini-2.0-flash-exp
- Click Generate Submissions
- Frontend generates a
jobId - Frontend triggers a POST to start the job (fire-and-forget)
- Frontend immediately starts polling logs
- Job ends when logs contain:
Job finishedorJob completed successfully- or
ERROR
Base URL: NEXT_PUBLIC_WEB_APP_URL
POST {NEXT_PUBLIC_WEB_APP_URL}
{
"jobId": "uuid-generated-on-frontend",
"formUrl": "https://docs.google.com/forms/d/FORM_ID/edit",
"submissionCount": 10,
"geminiApiKey": "optional",
"geminiModel": "optional"
}GET {NEXT_PUBLIC_WEB_APP_URL}?jobId={jobId}
{
"success": true,
"logs": [
{ "time": "2026-01-01T12:00:00Z", "message": "Job started" },
{ "time": "2026-01-01T12:00:02Z", "message": "Response 1 submitted" }
]
}- Apps Script POST responses can be unreliable for long jobs; logs are the source of truth
- No WebSockets (polling only)
- Rating + file upload are not supported (Google limitations)
- Not designed for abuse or large-scale scraping
FormFuzz does not bypass Google permissions. It works only if formfuzz@gmail.com has editor access to the target form.