Google Forms
Service domainSURVEY
Arcade Optimized
Arcade.dev LLM tools for Google Forms
20tools
Google Forms toolkit for Arcade provides LLM-callable tools to create, read, update, and manage Google Forms and their responses via the Google Forms and Drive APIs.
Capabilities
- Form lifecycle management — create, copy, trash, restore, and configure form-wide settings (quiz mode, email collection, publish/response-accepting state)
- Structural editing — apply batched, atomic item-level updates (add, modify, reorder questions and sections) with optional revision locking to guard against concurrent edits
- Response access and aggregation — list, retrieve, and sample responses; compute aggregate counts and text-answer distributions with documented sampling caveats
- Form discovery and permissions — list forms by recency, sharing, or folder; inspect and manage Drive permissions; generate a Google File Picker URL to handle scope-limited access scenarios
- Pub/Sub watch management — create, list, renew, and delete form watches that push notifications on new responses or schema changes
- Identity introspection — retrieve the authenticated user's Google identity (email and display name)
OAuth
Authentication uses OAuth 2.0 via the Google provider. See the Arcade Google auth provider docs for configuration details.
Available tools(20)
20 of 20 tools
Operations
Behavior
| Tool name | Description | Secrets | |
|---|---|---|---|
Return aggregate response counts and text-answer distributions for a form.
Samples up to `limit` responses from the first page returned by the Forms
API, which comes back in no guaranteed order. Does not paginate; the counts
and distributions reflect only that sample and can undercount recent activity
on busy forms, which should rely on the response-listing tool's timestamp
filter or the linked response spreadsheet for exhaustive analytics. | |||
Duplicate an existing Google Form, optionally renaming and targeting a folder. | |||
Create a new Google Form with a title and return its IDs and URLs. | |||
Create a watch that notifies Pub/Sub when the form has new responses or schema changes. | |||
Delete a form watch, stopping Pub/Sub notifications for that subscription. | |||
Generate a Google File Picker URL for user-driven form selection and authorization.
Useful when a prior Forms tool call failed because a form was not found
or not accessible under the drive.file scope. Once the user completes
the picker flow and grants the app access to the desired form, retry
the original tool call. | |||
Fetch the normalized form structure including items, settings, and revision info. | |||
Return a concise summary of a Google Form for quick triage and discovery.
The Google Forms API does not expose a total response count and returns
responses in no guaranteed order, so `sampled_response_count`,
`latest_sampled_response_at`, and the 24h/7d counts reflect only the sampled
first page and can undercount recent activity on forms larger than the
sample. For accurate recency or exhaustive analytics, use the response-
listing tool's timestamp filter or the linked response spreadsheet. | |||
Retrieve a single Google Form response by its response ID. | |||
List Google Forms filtered by a discovery mode such as recent, shared, or in_folder.
Returns results newest-first (by Drive modified time). Each call fetches one
Drive page of up to `limit` forms and returns a `next_page_token` to continue. | |||
Return normalized Drive permissions for a Google Form. | |||
List submitted responses for a Google Form.
Each call fetches one Forms page of up to `limit` responses and returns a
`next_page_token` to continue. | |||
List the Pub/Sub watches currently registered on a form.
The Forms watches API returns the full set in a single call with no cursor,
and a form can hold only a few watches, so all of them are returned. | |||
Restore a trashed Google Form back into the user's Drive. | |||
Update form-wide settings (quiz mode, email collection) safely.
Wraps `batchUpdate` + `updateSettings` with a correct `updateMask` built
from the parameters the caller supplied. At least one of `is_quiz` or
`email_collection_type` must be set; otherwise this returns a validation
error so callers never accidentally submit an empty update.
Form-wide settings that are NOT available in Forms API v1 and must be
toggled in the Forms UI (Settings / gear icon):
- "Limit to 1 response"
- "Shuffle question order" per respondent
- Quiz feedback toggles: when to release the grade, whether respondents
see missed questions, correct answers, or point values. Only `isQuiz`
is exposed here; per-question `Feedback` + `correctAnswers` +
`pointValue` still flows through the batch form-update tool. | |||
Update a form's publish/response-accepting state.
The Forms API `setPublishSettings` endpoint does not accept an update mask,
so an incomplete body silently unpublishes the form. This wrapper reads the
form's current publish state and merges in only the fields the caller
supplied, so an unset field is preserved rather than reset. | |||
Move a Google Form to the Drive trash (soft delete). | |||
Apply a batch of structural updates to a Google Form.
All structural edits to a form go through this tool. Requests apply
atomically in the given order, so an earlier createItem shifts the indices
that later requests address.
updateItem, updateFormInfo, and updateSettings take an updateMask: only the
named field paths are written, and a field left out of the mask is preserved.
Omitting the mask makes Google overwrite the entire target object.
Forms API v1 limitations to know:
- `questionGroupItem` (grids) has no per-item `required`; mark each
`rowQuestion` required instead.
- Per-question grading (`pointValue`, `correctAnswers`, `whenRight` /
`whenWrong` feedback) IS settable here, but the form-wide quiz release
toggles (when grades are released; whether respondents see missed
questions, correct answers, or point values) are UI-only.
- "Limit to 1 response" and per-respondent question shuffle are UI-only;
`choiceQuestion.shuffle` only shuffles options within one question.
Concurrency: pass `required_revision_id` (the revision id from a prior read
of the form) to reject writes that would overwrite concurrent edits. The
returned `revision_id` is the new post-update revision only when
`include_form_in_response=True`; otherwise it is empty and must be re-read
by fetching the form. | |||
Renew a form watch before it expires (watches last up to 7 days). | |||
Return the authenticated Google identity (email and display name). |
Last updated on