Google Form Bulk Submitter — Inspect & Submit
Under maintenancePricing
from $20.00 / 1,000 response submitteds
Google Form Bulk Submitter — Inspect & Submit
Under maintenanceScrape any public Google Form's fields, then bulk-submit JSON or CSV responses. No login needed. Pay per response.
Pricing
from $20.00 / 1,000 response submitteds
Rating
0.0
(0)
Developer
subimpact
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Paste a public Google Form link and either read its field schema or bulk-submit responses from JSON or CSV.
No login. No browser. No CAPTCHA solving. The actor talks plain HTTP to the same formResponse endpoint your browser uses, so runs are fast and cheap.
What it does
1. inspect mode
Fetches the form page and returns the full question schema:
| Field | Meaning |
|---|---|
entryId | The ID you submit as entry.{entryId} |
label | The question text |
typeName | short_text, paragraph, dropdown, multiple_choice, checkboxes, or other |
typeCode | Google's raw type code (5 = linear scale, 7 = date, 9 = time, 10/11 = grids, 13 = file upload) |
required | Best-effort required flag read from the form definition |
options | Choice list for dropdown / multiple choice / checkbox questions |
hasOther / otherEntryId | Whether the question has an "Other" box, and the entry key used for it |
Use this first — the labels it returns are exactly the keys to use in submit mode.
2. submit mode
Give it the same form URL plus your responses. For every row the actor:
- matches each column to a question (exact label → case-insensitive → partial match → or an
entry.{id}key), - checks required questions and validates choice values against the real option list,
- POSTs
entry.{id}=value(+ the form'sfbzxanti-CSRF token) to the form'sformResponseendpoint, - pushes a per-row result to the dataset, and a summary row at the end.
Bad rows fail individually with a readable error — they never abort the run.
Supported form URLs
https://docs.google.com/forms/d/e/1FAIpQLS.../viewform(current format)https://docs.google.com/forms/d/{longId}/viewform(older format)https://forms.gle/XXXXXX(short link — redirects are followed automatically)
Input
| Field | Type | Default | Notes |
|---|---|---|---|
mode | inspect | submit | inspect | |
formUrl | string | — | Required. Public Google Form link. |
responses | array of objects | — | Submit mode. One object per response. |
responsesCsv | string | — | Submit mode alternative. Header row = question labels. Ignored when responses is set. |
email | string | — | Only used when the form has Google's built-in email-collection field. A per-row email column overrides it. |
maxSubmissions | integer | 100 | Capped at 1000. Extra rows are ignored. |
delayMs | integer | 3000 | Pause between submissions and retries. Minimum 500. |
proxyCountry | US | DE | SG | MY | GB | US | Country for Apify residential proxy sessions. |
proxyUrls | array of strings | — | Your own proxies. When set, used instead of Apify Proxy. |
Inspect input
{"mode": "inspect","formUrl": "https://docs.google.com/forms/d/e/1FAIpQLSeNmLLIzBuJBDgwJYe4591u6pIYu1N1bJU9raVTQJpVVMQZsw/viewform"}
Submit input — JSON
Keys are question labels. Use an array for checkbox questions. A value that is not in the option list is sent through the question's "Other" box when it has one, otherwise the row fails with a clear message.
{"mode": "submit","formUrl": "https://docs.google.com/forms/d/e/1FAIpQLS.../viewform","delayMs": 3000,"responses": [{"Name of person completing form": "Ada Lovelace","Email address of person completing form": "ada@example.com","Technical Committee/Group": "Animal Bioacoustics","If this is a cosponsored initiative, enter all the committees that will cosponsor": ["Noise", "Musical Acoustics"],"Amount in US dollars of funding requested.": "5000","Description and Purpose of the Initiative (enter full details)": "A study of analytical engines."},{"Name of person completing form": "Alan Turing","Email address of person completing form": "alan@example.com","entry.844093924": "Computational Acoustics","Amount in US dollars of funding requested.": "7500","Description and Purpose of the Initiative (enter full details)": "On computable numbers."}]}
Submit input — CSV
The first row holds the question labels. Quoted fields may contain commas and newlines. For a checkbox question, separate the choices with commas inside one quoted cell.
{"mode": "submit","formUrl": "https://docs.google.com/forms/d/e/1FAIpQLS.../viewform","responsesCsv": "Name of person completing form,Technical Committee/Group,Amount in US dollars of funding requested.,Description and Purpose of the Initiative (enter full details)\nAda Lovelace,Animal Bioacoustics,5000,\"Analytical engines, in detail\"\nAlan Turing,Computational Acoustics,7500,\"Line one\nLine two\""}
Output
Dataset rows carry a kind field: inspect, submission or summary.
Inspect row
{"kind": "inspect","mode": "inspect","formId": "1FAIpQLSeNmLLIzBuJBDgwJYe4591u6pIYu1N1bJU9raVTQJpVVMQZsw","formTitle": "ASA 2026 Technical Initiative Proposal Form","action": "https://docs.google.com/forms/d/e/1FAIpQLS.../formResponse","fbzxPresent": true,"emailAddressPresent": false,"fileUpload": false,"fieldCount": 9,"fields": [{"entryId": "844093924","label": "Technical Committee/Group","typeCode": 2,"typeName": "dropdown","required": true,"options": ["Acoustical Oceanography", "Animal Bioacoustics", "Architectural Acoustics"],"hasOther": false,"otherEntryId": null,"fileUpload": false}],"timestamp": "2026-09-07T10:00:00.000Z"}
Submission rows + summary
{"kind": "submission","formId": "1FAIpQLS...","formTitle": "ASA 2026 Technical Initiative Proposal Form","index": 0,"status": "submitted","fields": { "Name of person completing form": "Ada Lovelace", "Technical Committee/Group": "Animal Bioacoustics" },"error": null,"attempts": 1,"warnings": [],"timestamp": "2026-09-07T10:00:03.000Z"}{"kind": "submission","index": 1,"status": "failed","fields": { "Name of person completing form": "Alan Turing" },"error": "Value \"Underwater Basket Weaving\" is not a valid option for \"Technical Committee/Group\". Valid options: Acoustical Oceanography | Animal Bioacoustics | ...","timestamp": "2026-09-07T10:00:06.000Z"}{"kind": "summary","mode": "summary","formTitle": "ASA 2026 Technical Initiative Proposal Form","total": 2,"submitted": 1,"failed": 1,"skipped": 0,"timestamp": "2026-09-07T10:00:06.000Z"}
status is submitted, failed (validation or submission error) or skipped (nothing in the row matched the form).
Pricing
Pay per event:
- $0.01 per form inspected
- $0.02 per response submitted — only successful submissions are charged. Validation failures and rejected rows cost nothing.
Reliability notes
- Requests go through Apify Proxy: residential first, with an automatic fallback to datacenter groups. Supply
proxyUrlsto use your own proxies instead. - Each row gets up to 3 attempts. Rate limits (HTTP 429), blocks (403) and Google server errors trigger a fresh proxy session and a
delayMspause; a rejection (HTTP 400) fails immediately, because retrying identical bad data will not help. - Raise
delayMsif you see 429s. Submitting hundreds of responses in seconds looks like abuse to Google and to the form owner.
Limitations
- Public forms only. Forms that require a Google sign-in cannot be read or submitted, by design.
- File-upload questions are skipped. Google requires a signed-in account for uploads; the actor reports
fileUpload: trueand submits the rest of the row. - Questions Google encodes with less common type codes (linear scale, date, time, grids) are reported as
typeName: "other"with their entry ID, so you can still submit values for them — but their accepted formats are not validated. - Multi-page forms with conditional (section-branching) logic are not walked page by page; responses are posted in a single request.
Ethics & acceptable use
Only submit to forms you own or have explicit permission to automate. This actor does not solve CAPTCHAs or bypass access controls.
It will not log in, will not touch forms that require authentication, and will not attempt to defeat any protection a form owner has put in place. Use it for your own data collection, migrations from other tools, load-testing your own forms, and seeding test data — not for spamming, ballot stuffing, or overwhelming someone else's form. Respect the form owner's terms and Google's Terms of Service.