Welcome and thanks for the interest of using Captcha for Forms (Google Forms Captcha).
Captcha for Forms is a free Google forms addon that aims to fight spams. It verifies the human identity by requesting the correct input of a constantly changing challenge code (captcha). It significantly decreases bot spamming your forms. The following screenshot illustrates a bot fails to meet the code challenge.

Of course, there are other hacks to reduce spams. Check out 3 Ways To Protect Google Forms From Spamming.
Step 1. Setup Captcha for Forms
First of all, due to some technical limitations of this application, we decided to release this add-on as a free apps script, instead of posting it on the Chrome web store.
- Make sure you have single Google Account sign-in. The add-on may dysfunction under multiple Google Account sign-in.
- Download the Captcha for Forms apps script. The zip file contains a bundle.js file.
- Open your forms.
- Copy bundle.js to your form's script editor. If you have no idea how to add them, follow this article, How to Add an Apps Script to Your Google Docs.
- Once you are done with the script editor, go back to your form. Refresh the page.
- Now you will see and click the add-on icon , then click Captcha for Forms > Start.
- At the first time of running the script, you would be prompted with a Authorization Dialog, accept the permissions. And click Captcha for Forms > Start again.
- Turn on Enable Captcha.
- You will see a captcha code question being generated and refreshed in every minute.

Each time you turn off and on the Captcha, a new question column is added to your response sheet. This is inevitable. So I suggest to toggle the Captcha only after you finished polishing your form.
Step 2. Test it
Now share the form with your audience in public. If they tried to submit garbage responses, this captcha challenge will block them away.

Release updates
Version 1.3.2
Added a Factory reset button in About tab in case of screwing up.
Version 1.3.1
Fix an issue of captcha code not refreshing.
Version 1.3.0
In this version, you only need to copy bundle.js rather than bundle.js and index.html. As other users reported copying the index.html file hangs the computer, this version move this HTML file to the cloud storage. As a downside, it will request from you an extra permission of connecting external service.
Version 1.2.0
This version added major updates on the interface.
- Support configurable languages. Write in your language to make it native and formal.
- In the Settings tab, you will be able to customize the title, the description and the error text when the captcha code is expired or wrong.
- Note that Captcha for Forms is a free add-on, so you agreed that the description must contain the words Protected by xfanatical.
- Support configurable captcha code expiration. The expiration window for a captcha window can be set in 1, 5, 10, 15 or 30 minutes. There is no correct answer for this expiration value. Test different numbers to see which one is best for your audiences' convenience and your form's security. This option is in the Settings tab too.

Conclusion
We'd like to know how it works for you and keep improving on this tool. We hope you have a clean and organic response spreadsheet . Thanks for reading and please leave any comment below or contact support@xfanatical.com if you encountered any issues.
Hello,
I deal with french customers. How can I personnalized the text?
Thanks.
Hi Jérémie, yes, version 1.2.0 allows you to customize words in your language. Please check out the updated download link in the article. Thanks.
Perfect ! Thanks.
if i copy/past the code it crashes my pc
no longer crashing but html is all in one line
The html file is large so it takes time for the computer to respond, indeed. But it shall work afterwards.
How can I uninstall from my form it without deleting the code?
Just switch off the “Enable Captcha” in the Home tab.
Thanks for your response. I don’t know what I’m missing but I do not see that option anywhere. I am in Google Forms with the form open. If I click on the addons button it only gives me the option to install, start or help (which doesn’t seem to do anything). On the form itself if I try to delete the section it just comes right back.
Apologies…I just figure it out. It was under ‘Start’. Thanks. It is a great Addon, however I was unable to make it work with a customized Google Form.
Hi Jason, when copying the script the index.html copies ok but when I try to open the bundle.js I get a Windows script host dialog box saying:
Script: C|Users|…..js
Line 38
Character 9
Error: object doesn’t support this property
Code: 800A01BC
Source: Microsoft JScript runtime error
Any ideas?
Mike
Hi Mike,
Have you created and copies the files to the right types?
bundle.js => Code.gs. This is created by clicking File > New > Script file.
index.html => index.html. This is created by clicking File > New > HTML file.
If files messed up, try to delete both, refresh the script editor page and start over.
Have a try?
What does the install button do (above the start button)?
Nothing. It’s a placeholder done by Google.
I noticed that each time a new captcha is used, it adds a new column to the google sheet that the form posts answers to. Can you change how the add-on works so that the captcha values are not pushed to the form? The addition of an extra column for each form submission doesn’t make a lot of sense.
Unfortunately, that’s impossible. Google syncs all Form questions to your Sheet destination. To minimize the number of columns added to the sheet, a suggestion is to turn off and on the add-on less frequently.
Jason at xFanatical was such a huge help! Thank you so much for creating this for us to use in our google forms!
Do I have to change the .js file extension to .txt to copy the code into the script editor?
No, you don’t. Open the file with a text editor.
Thanks for this tut. Great help on keeping off the form spammers and bots. Thanks
I use this script, but, i try to type wrong code but, the code not changed as demo
While to update the settings, it just has the spinning wheel and never updates.
Do you control the data by this script or the confidentiality of the data forms is guaranteed by using this code? Thank you!
Good question. The script does not collect or expose the data from your forms. Thank you.
Absolutely FANTASTIC! You live up to your site’s name, sir. Thank you so much for the free app, walk-through, and overall awesomeness of this post. 🙂 It was a challenge figuring everything out at first, but I’m not especially tech-savvy, which is a testament to how simple and user-friendly you have made this. The script works perfectly. Well done.
Hello,
I have tried just like you instructed but nothing showed up on my forms (The add ons buttons). What have I done wrong?
Hi jason
Ive gotten very close to using this but when i enable captcha nothing appears on my forms. Any help?
Hi Alan, please try to start over the setup in an incognito window. Thank you.
Hi Jason,
I am facing the same problem as Alan. As per your suggestion, I tried in an incognito window, but it will take for ever after hitting the start and nothing happens. Any help?
hello,
try many for reCaptcha, but not able to fix it with bundle js., help me out.
Anyway you can post the code here? I can’t find a way to open it.
Hi. I am using your code for customers. For some people, when they type the right code it still gives an error. How can I fix this?
Hi, the Captcha code expires with an error message. Just type the right code again.
I downloaded it but it doesnt work! Why would that be?
doesnt seem to work anymore. Been using it for awhile and all of sudden it wont show up when i enable it and cant save when i customize it.
same problem, not working 🙁
hi i was reviewing the captcha-forms and it works great, i wonder if there is any way to include it in an html5 considering that you are using a custom google form.
If you’re referring to using the captcha code in an html5 form, no. If you want to include the form (respondent view) in an html5 page, yes.
hi jason Syntax error: SyntaxError: Invalid or unexpected token line: 645 file: Code.gs i am continouosly getting this error