Google Form Bulk Submitter — Inspect & Submit avatar

Google Form Bulk Submitter — Inspect & Submit

Under maintenance

Pricing

from $20.00 / 1,000 response submitteds

Go to Apify Store
Google Form Bulk Submitter — Inspect & Submit

Google Form Bulk Submitter — Inspect & Submit

Under maintenance

Scrape 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

subimpact

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

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:

FieldMeaning
entryIdThe ID you submit as entry.{entryId}
labelThe question text
typeNameshort_text, paragraph, dropdown, multiple_choice, checkboxes, or other
typeCodeGoogle's raw type code (5 = linear scale, 7 = date, 9 = time, 10/11 = grids, 13 = file upload)
requiredBest-effort required flag read from the form definition
optionsChoice list for dropdown / multiple choice / checkbox questions
hasOther / otherEntryIdWhether 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:

  1. matches each column to a question (exact label → case-insensitive → partial match → or an entry.{id} key),
  2. checks required questions and validates choice values against the real option list,
  3. POSTs entry.{id}=value (+ the form's fbzx anti-CSRF token) to the form's formResponse endpoint,
  4. 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

FieldTypeDefaultNotes
modeinspect | submitinspect
formUrlstringRequired. Public Google Form link.
responsesarray of objectsSubmit mode. One object per response.
responsesCsvstringSubmit mode alternative. Header row = question labels. Ignored when responses is set.
emailstringOnly used when the form has Google's built-in email-collection field. A per-row email column overrides it.
maxSubmissionsinteger100Capped at 1000. Extra rows are ignored.
delayMsinteger3000Pause between submissions and retries. Minimum 500.
proxyCountryUS | DE | SG | MY | GBUSCountry for Apify residential proxy sessions.
proxyUrlsarray of stringsYour 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 proxyUrls to 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 delayMs pause; a rejection (HTTP 400) fails immediately, because retrying identical bad data will not help.
  • Raise delayMs if 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: true and 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.