Do you like Twitter bots? I know I sure do. I like following them, and I like making them. I also like introducing my students to bots as one way to do creative things in a networked digital context. That’s way, back in 2013, I cobbled together a simple tool built on a Google Spreadsheets that lets anyone create a simple bot without having to write any code. There are many other ways to make a Twitter Bot, but I like this approach for its clarity and hopefully its accessibility for non-programmers to start understanding how to think about language through programming.

Today, I’m releasing an upgraded and much improved version of that tool. I’ve been calling it “SSBot”, but I welcome your suggestion for a better name. This blog post contains the instructions for setting up that tool, but the steps are also included in the spreadsheet. I hope they’re clear enough in that form as well, but this blog post will include images to help explain some parts.

Some Caveats

There are many varieties of Twitter bots — some can engage in conversations with users, process images in interesting ways, or interact with live data sources. The SSBot tool is somewhat limited in this regard and it currently cannot:

  • pull live data from a realtime API
  • respond to users
  • post images

That said, you can still do quite a lot with this bot engine if you approach it creatively and thoughtfully. Mark Marino’s Terms of Service Bot and @TheHigherDead (by Chuck Rybak) are good examples of what you can do with some careful attention to syntax.

Furthermore, it’s worth noting that using this SSBot to make a Twitter bot is something you undertake at your own risk. Using it doesn’t guarantee that you won’t violate Twitter’s terms of service and get banned. Darius Kazemi’s recommendations for basic Twitter bot etiquette are also good to keep in mind.

Finally, as I’m not really a programmer, please be aware that while SSBot does work, it might not work well. If you find a bug, let me know and I’ll try to fix it. Likewise, if you feel like improving it in some way, great! Please feel free to do so.

Improvements over Version 0.3

If you used the earlier version of SSBot, you will be interested to know that this latest version closes some gaps in the first version and extends it in some hopefully useful ways:

  • fixes the bug whereby using certain characters ( *, !, ), (, [, ] $ ) would cause the Twitter authorization to break
  • adds “select from columns” or “select from rows” options so you can use whichever best matches your source data
  • adds a simple Markov-chain text generation type
  • adds a method for integrating with a TAGS archive to make an _ebooks-style bot from an existing account(s)
  • with the “select from columns” method, one can now precompose thousands of tweets

To accomplish all of this, the setup now requires an additional step or two, but I think it’s still pretty easy.

Upgrading from Version 0.3

If you’re upgrading your bot from version 0.3 (and you will need to because version 0.3 uses the soon to be deprecated OAuthConfig, you can use the same Consumer Key and Consumer Secret you’ve already set up. Make your new sheet, then skip to the second part of Step 3 below and proceed as directed.

To set up your content, use the new “Select from Rows” sheet to hold your vocabulary.

On to the instructions.

General Setup Instructions

The following steps are general for any type of bot you want to create. To get started, make a copy of this spreadsheet, then proceed through the steps below.

Step 1: Create a Twitter account for your Bot

Go to and sign up for a new account. You can always change the name later, but to make the next steps go smoother, go ahead and confirm the account with an email address and do some of the basic profile setup. For the email address, I like to use the “+something” trick whereby adding “+something” after your name in a Gmail address (as in, “”) will force Twitter to see that as a distinct email address, but you will still get that email in your inbox.

You’ll need to verify your email address and a mobile phone number. This is a pain, but it’s what Twitter requires now. If you already have a mobile number associated with a different Twitter account, you’ll have to disconnect that one first. You can always re-arrange those associations later, but the bot account does need to have a mobile number while you’re setting it up.


Enter your account name in your Spreadsheet under Step 1.

Step 2: Create a Twitter App for your Bot

This application (“app”) is the method that your spreadsheet will use to talk to Twitter. It’s possible to use Apps for multiple bots or accounts — in fact, this is how they’re designed — but I like to make one for each bot account so that if one gets suspended the others aren’t necessarily in jeopardy at the same time.

Go to and hit the “Create New App” button there. Fill out the form to give your app a name, description, and website. These can be quite simple and can always be changed later. The app’s name needs to be unique, so you can name it the same it based on your bot.


Leave the “Callback” field blank for now. If you get an Error message saying that you must first add a mobile phone number to your profile, then you should do that now.

Step 3: Complete App Setup and Enter Keys into the Spreadsheet

You App has four tabs: Details, Settings, Keys and Access Tokens, and Permissions. Under Details, make sure that the app’s access level is set to “Read and Write”, and if not, change that under the Permissions tab.

Under the Keys and Access Tokens tab, use the button to “Create my access token.” This will authorize your app to interface with your account. (I know, it seems redundant.)

Then, copy and paste the Consumer Key (API Key) and Consumer Secret (API Secret) from that tab into the green cells under Step 3 in your spreadsheet. (Note: The Consumer Key and Secret are not the same thing as the Access Token and Access Secret.)


Step 4: Locate your Google Spreadsheet’s “Project Key”

This is your spreadsheet’s unique ID within Google. To find yours, first open “Tools -> Script Editor…” to bring up the Script Editor. In the Script Editor, open “File -> Project Properties”, and locate your “Project key” in the table that you’ll see there.


Copy and paste that Project key into the green cell under Step 4.

Step 5: Add “Callback” Value to Twitter App

After completing Step 4, the red cell under Step 5 should automatically change to include your Project key as part of a URL. If not, or if you accidentally delete it, the URL follows a simple formula:<YOUR PROJECT KEY>/usercallback

Go back to your Twitter app’s Settings tab and paste that URL into “Callback URL” field.


Step 6: Select a Data Sheet and Generate a Preview of its Output

Select a data sheet from the drop down under Step 6, and from the “Bot” menu in your Spreadsheet, select “Generate Preview”. (Each of the four options has specific setup instructions below, but they’re all pre-populated with sample content for this setup step.)

Switch to the “Preview Output” sheet to see 15 sample tweets generated from the selected data sheet. You can edit these data sheets to your own content now, or you can wait until the rest of the setup is complete.
Generating this preview will require you to authorize the scripts in this spreadsheet, so you should agree to grant it permission if prompted.

Step 7: Test Twitter Authorization

You’re almost done! From the “Bot” menu above, select “Send a Test Tweet”. If everything has been set up correctly, you should see a popup inviting you to authenticate your app with your Twitter account. It’s pretty easy. Follow the link, click authorize, then close the new tab when it says. “Success!”

Re-run Send a Test Tweet, and check your timeline. Hopefully it worked!

Step 8: Set Post Timing

Decide how often you want your bot posting, and select an option from the dropdown under Step 8. Unfortunately, these are the only options, and the actually timing is to some extent subject to Google’s whims. You won’t, for example, be able to specify your bot to post at exactly 10:34 every day.

Step 9: Start it up!

If everything has gone well so far and your data sheet is populated with your content, then you’re ready to start sending out tweets. Select “Start Posting Tweets” from the Bot menu in your spreadsheet. If ever you decide to stop your bot, then use the “Stop Posting Tweets” option under the Bot menu.

You can change the data sheet selection and edit the data sheet contents without stopping the tweeting. It will simply use the updated setting whenever it next attempts to send a tweet. You will, however, have to stop and restart the posting if you want to change the timing.

“Select from Rows” and “Select from Columns” Setup

These two data sheets are the same, just oriented differently. Each is populated with a nursery rhyme to give you a sense of how it’s going to build the tweet. If you’re upgrading your bot from my SSBot version 0.3, you’ll want to use “Select from Rows” to paste in your vocabulary from the earlier sheet.

If you want to make a bot that posts randomly from pre-composed messages, use the “Select from Columns” and paste all of your messages into a single column.

You’re welcome to add notes or labels to the surrounding rows or columns. For both of these sheets, the script just expects the first potential value (or top-left value) to be in cell B5, so just make sure your tweetable text starts there.

“Markov” Setup

This data input sheet scans in the text it finds in cell B5 and following and then generates tweets by running them through a very simple Markov chain algorithm. The included corpus in this sheet is the entire text of Sense and Sensibility, so run “Generate Preview” to see the sort of thing it’s capable of.

You can include any text you want, quite a lot of it, and it can occupy as many rows as it needs to following B5. Just note that this algorithm takes a little longer than the others to generate each tweet.

“*_ebooks” Setup

The _ebooks setup is a little more specialized, and a little less reliable at this point. It has it’s own set up steps which are hopefully pretty easy to follow:
In a nutshell, it’s basically the same Markov algorithm that the other sheet uses, but it uses the archive sheet from a TAGS archive for its content. So if you want to generate Markov nonsense based on a specific user’s tweets, set the search parameter in your TAGS archive to, for example, “from:zachwhalen”.

You do have two additional options you can set in the _ebooks setup: whether or not to exclude hashtags and mentions. Darius’s recommendations for bot etiquette state that a bot should not use things like event hashtags because that could potentially derail or distract from people who are actually using that hashtag in good faith. I agree with this principle. On the other hand, hashtags are also used to express certain flavors of irony or other sentiments (“#blessed #happy #tcot”), and that sentiment is probably an important part of the language you want to capture in your bot.

It’s up to you, but I still think it’s safer to just exclude hashtags. Maybe in a future version I’ll let you specify only certain hashtags to strip out.

Mentions (@’s) are also excluded by default, but can be re-enabled. Again, it’s generally considered bad form to annoy people with your bot, and unsolicited @’s can be annoying. Too many unsolicited mentions will also get your account suspended, as I learned with @ClearCongress.

But if you really want to leave them in, then you are welcome to do so at your own risk.

And that’s all there is to it. Again, I’m not a particularly good programmer, so you may find that something here doesn’t work. In that case, let me know and I can try to fix it. Similarly, if you can think of ways to improve it, please tell me!

I do have some more ideas planned that I may yet implement, and if I do so, I’ll probably do some version tracking with github or find some other way to release it. Until then, consider this still a quick and dirty solution to getting started with a Twitter bot and creative computing more broadly.

And finally, if you do get this working, please tell me about your bot! I’m trying to keep a list so I can maybe inform you about future upgrades or bug fixes.

  • oeLiaRavi

    Hi Zach! This is great, just what I need, but I’m having one problem.

    Whenever I try to send the test tweet to do twitter authentication, I’m getting a DNS server error (the authentication page will not load). I tried to redo all the steps and check my work, but it doesn’t seem to be caused my any of the things entered.

    Any idea what might be causing this?


  • 000

    whenever i try to paste the callback URL into the app settings this error comes up: ‘The client application failed validation: Not a valid URL format.’ do you know why it would do that?

    • zachwhalen

      Hi. When something similar happened to someone else, it turned out there was a space after the URL in the callback field. Twitter was trying to parse that space along with everything else, and since spaces aren’t valid URL characters, it through the error.

      This might be the case for yours as well, so doublecheck that the URL you paste in doesn’t have a ” ” at the end of it.

      • 000

        i just checked if that was my problem, however there wasnt a space in the URL. the consumer key (API key) and consumer secret (API secret) boxes arent green in my spreadsheet, unlike in your screenshots. could that have anything to do with the callback URL not working?

  • Margaux Lauret

    Hi Zack. Thank’s for you article. I met a problem to create my bot, and hope you can help me with that…

    In my spreadsheet excel table file, I succeed in running in the bot “preview output” but when i set up the script editor, and then try to set up “authenticate Twitter”, it’s not working and the error message is : Script is using OAuthConfig which has been shut down. Learn more at (ligne 222, fichier “”).

    I understood the problem is linked to OAuth configuration however I have generated the Access Token and configured my permission acess to “read, write and acess direct messages”. When I launched TestOAuth, the only field I haven’t filled in “Request query”…

    I thank you in advance if you can help me and wish a nice day,

    • zachwhalen

      Hi Margaux,

      I haven’t seen this issue with version 0.4, and in fact I created 0.4 because 0.3 was using this OAuthConfig which is now shut down. 0.4 shouldn’t use that, so if it is for some reason, that’s a problem.

      Can you confirm which version you’re using?

      • Margaux Lauret

        The name of my spreadsheet is “Copie de Controlled Vocab Bot 0.3” so I think I’m using the 0.3 version. How can I use 0.4 version? Have I to redo all steps? I’m sorry to insist.

        • zachwhalen

          Yeah, that’s the old one. Most of the settings will be the same, like the twitter account and the API key and secret, and you can copy the vocabulary bot from the 0.3 bot to the 0.4 bot. Start fresh with this spreadsheet: and follow the steps there using the information you’ve already created for your 0.3 bot. Should be pretty self-explanatory, but let me know if you get stuck.

          • Margaux Lauret

            Thank you for your help! I’m gonna do this and see ^^

  • Gaby

    Thank you so much for this – had been wanting to make something for ages, but I don’t really have much in the way of coding skills. My new bot is @RevolverOcelbot.

  • Hi Zach,

    Thank you for such a detailed post about how to make it work. I did everything as you mentioned and authorized the app with the success message. But when I click on ‘send a test tweet’ nothing happens. I don’t see a tweet on my timeline? Am I missing something?

    • zachwhalen

      Hi. Did you authorize it both in Twitter and in Google? Did you generate a preview before trying to send the test tweet?

  • Ann

    Hi I’m having difficulties with the bot setting up πŸ™
    Everytime I try to generate preview, I keep getting an invalid argument:url
    How do I fix this?

    • zachwhalen

      Hi. What method (data sheet) are you using? _ebooks?

      • Ann

        Hello! sorry, it was a careles mistake on my part and i fixed it, but thank you for replying

        • Ronnie Kuriakose

          Hi Ann, just wondering how your fixed it. Could you explain it here, please?

      • Jongmok Steven Sin

        hi @zachwhalen:disqus i tried it and got same problem,, how can i fix it? i use _ebooks

  • Tobias Carlisle

    Hi Zach,

    Thank you for your incredible generosity in sharing this highly useable and useful Twitter bot.

    I have a small problem, and I was wondering if you could help. I cannot get the bot to tweet the words in the preview even though the connection to Twitter works with the existing words when I test it.

    I have used your bot template to create a bot that imports data (using the “importrange” function from another Google spreadsheet that updates automatically. I can get the bot to tweet the existing content (so the connection to Twitter is not an issue), and I can get the bot to generate a preview that contains the correct words imported from the other spreadsheet. The problem is that I cannot get the bot to tweet the previewed data.

    Any thoughts on what I might be doing wrong?


    • Tobias Carlisle

      So Zach went above and beyond to solve this problem. It turns out it was an issue with the ampersand symbol (&) in some of my sentences. Take care to use ordinary words rather than symbols and the bot works perfectly. Thanks again, Zach!

      • zachwhalen

        This is an annoying problem because obviously & is a valid textual character that people should be able to use. I’m still trying to track this down, but as a workaround, I’ve found it works to substitute & for one of the unicode variants: either & or οΉ .

        NB: Using these may present other problems, as I see here in Disqus, and because these are “full width” and “small” respectively, their display won’t be consistent with the underlying Twitter font.

        If I can figure out a better solution in code, I’ll update it accordingly and probably bump the version to 0.5 so I can include a few other updates and tweaks.

  • Dorothy Claur

    Hi I’m having difficulties with the bot setting up πŸ™
    Everytime I try to send a test tweet, I keep getting a message saying:
    Error starting OAuth flow: Desktop applications only support the oauth_callback value ‘oob’ /oauth/request_token

    How do I fix this?

    • zachwhalen


      This error usually means there’s something amiss in the “Callback URL” that you added to your App when you set it up at Make sure there’s not extra space at the end of the URL, for example, and make sure the project key part of that URL matches the one in your spreadsheet.

      So double check that and see if it clears the error.

      • Dorothy Claur

        i already fixed it πŸ™‚ thank you πŸ™‚

  • Dorothy Claur

    Hi Zach!
    Do you know to make an auto retweet bot? πŸ™‚

  • Rikki

    Hey there! I’m having some problems with this error: Error starting OAuth flow:

    Desktop applications only support the oauth_callback value ‘oob’

    I already deleted the extra space at the end of the URL but that didn’t fix it and the project key matches the one in my spreadsheet.


    Hi! Thanks for this, it is exactly what I was looking for!

    Two interesting quirks I discovered:

    1- The Markov generator needs at least one word to contain upper case letters to function. Otherwise I got a “TypeError: Cannot read property “length” from undefined”

    2- Rather than logging out of my main twitter account, I tried to create the robot account in an incognito window. Then, when I carried out the “test tweet” instructions (back in a non-incognito window), I accidentally hooked up my main twitter account to the app, transforming it into a robot.

    @SCATTINGROBOT- tweeting all your favourite jazz scat lyrics

  • Saravana Bharathi

    Zack, Thank you very much. Worked perfectly, easy set up.

    One question, is there a way to customize the interval, like less than 5 minutes or like odd timings like 22 minutes etc.

    Thanks once again.

    • Saravana Bharathi

      Never mind. I figured it out πŸ™‚

  • T

    Zach, the bot worked awesome for the first day then I stopped it and I can no longer automatically tweet, it will only tweet when I push “Send Test Tweet” any ideas to fix this?

    • TimGNO

      Go to BOT menu and select “Stop Sending Tweets”. Then BOT > “Start Sending Tweets”
      That ought to restart the time-based trigger(s) required to make this macro do its thing.

  • HoppingFun

    Want4Bot is up and running, hope to refine and tweak it. My first one! THANKS for making this template.

  • Marcus

    I put together a bot to make up MLB trade rumors:

    One suggestion/request I have would be to choose from multiple spreadsheets, i.e., if I could have multiple “ebooks” or “columns” spreadsheets, and the script could choose one of them at random before composing the tweet. That would give me variety in being able to do different phrasings, etc. – thanks a bunch for this, though, this is great.

  • MikeB

    Thanks so much for setting this up Zach — able to quickly set up a bot that creates ‘new’ lines from JG Ballard’s ‘urban’ period: @New_Ballard

  • Gary Hall

    What a great idea πŸ™‚

  • Alex

    Hi Zach,

    What will I do if I want the bot to automatically delete a row once it’s tweeted? Thanks!

  • Troy

    I created a bot and made sure that it has been authenticated in both google and twitter. I am able to generate a preview using my data and it tells me that it completes the test tweet, but nothing shows up on my feed. any thoughts?

  • Writing Prompts

    Thanks so much! This was an incredibly helpful spreadsheet and guide. Get all of your creative writing inspired by my bot: @PromptYrWriting

  • billsonwheels

    This is fantastic. I can’t thank you enough for sharing. Cheers.

  • not mel

    i made @thedogsbot and @greetingsbot, this tool is really great!

  • Zelly Castro

    hi, whenever i try to authorize the bot i am not able to; i get the error message from google scripts “The state token is invalid or has expired. Please try again.”

    • Salman Khaja

      same problen here

  • Hi,
    I have also created my 1st TwitterBot
    using twtservice Happy to share free verison with all πŸ™‚

  • Facade

    I don’t get a link to authenticate it. How do I authenticate it? Please help.

  • Salman Khaja

    Hello Zach,

    After setting up the bot, as you instructed I selected “Send a Test Tweet” from Bot menu, and gone to twitter authentication window. After successfully authenticated the App, twitter has redirected me back to Google Spreadsheet and there I got an error saying “The state token is invalid or has expired. Please try again.”.

    I have retried many times, keep getting the same error !

  • Cocoa Channel

    Thanks! My first bot:

  • Alex

    I am looking for a bot that will take incoming DM’s and then tweet them out, can your spreadsheet do this with some modifications. Thanks for sharing your work.

  • Pingback: Magic Writing – Better Living through Symbolism()

  • TimGNO

    β—„β€” thought it would work! It didn’t. I’m getting the following error in the View > Logs section of CODE.GS, whenever I try to “Send a Test Tweet”: “Exception: Request failed for returned code 401. Truncated server response: {“errors”:[{“code”:32,”message”:”Could not authenticate you.”}]} (use muteHttpExceptions option to examine full response)”

    I’ve scoured the instructions (followed them to a T, promise!), checked for trailing spaces, gone through the Authorization process a number of times (including Revoke and Re-Authorize), executed the “Generate Preview”, etc. Yet never has a tweet appeared on my Twitter timeline from this script. At my wit’s end, or trust me, I would not bother a fellow developer like this! πŸ™‚


    • cookietwizzler

      I’m having the same problem. Hopefully this will be answered!

      • Commentator

        I had the same problem because the spreadsheet had been created in a private folder. I moved the doc to a “public” folder and it worked.

      • Grumpy Grandpa Joe

        Make sure that the Doc is in a public folder. If you had to move it to a public folder, go into your Google Account settings and unauthorize the bot and the reauthorize it with your test tweet. Google settings still treated the bot like it was in a private folder until I did this.

    • shockstone

      I have the same problem too! Have made sheet public too but nothing..

      • shockstone

        oh silly me there was just a space before one of the keys

        • kaylat819

          this was my issue too make sure to check this guys x

    • μ£Όκ°•ν˜„(Kanghyun Chu)

      I have encountered the same problem. In my case, I have resolved the problem by manually editing the “”. In the function getTwitterService(), there are lines:

      For each line, I substituted the actual string instead of the variable as the followings.

      After doing that, the error code 32 is no longer shown and the “Send a Test Tweet” worked.

  • Pingback: Some Strategies of Bot Poetics | Harry Giles()

  • Pingback: The Gentle Art of Trolling | Isabella Streffen()

  • Nonsense Poetry

    This is so great! Thanks so much, Zach! I made a poetrybot πŸ™‚

  • This is awesome, Zach. I’ve been looking for a tool like this for a long time. One question: is there a way to make the bot post messages in a specific order instead of randomly choosing a row/column from the spreadsheet? I’ve been making storytelling bots, where the tweets need to be posted in a specific order. Thanks.

    • zachwhalen

      Thanks Jay! I don’t have that capability built into it currently, but I plan on adding that for the next iteration. It’s a commonly-requested feature.

      • Awesome. I will keep checking back for the next version. Another feature that would be amazing (albeit a pain in the ass to code, I’ll bet) would be to allow a single spreadsheet of content post to multiple different accounts in sequence. Something that would make it easier for me to do things like: Don’t suppose that’s something you have planned for future versions?

  • I’m Really Feeling It

    Hello. I couldn’t get mine to work as after I generated a preview and authenticated and everything, I selected Send Test Tweet, and I got this error “Error starting OAuth flow: {“errors”:[{“code”:32,”message”:”Could not authenticate you.”}]}”.

    • zachwhalen

      Unfortunately there are several things that can trigger this error from Twitter — from incorrect authentication errors to unexpected characters in the username. Without looking closer at your specific script, all I can recommend is to double check all your settings, and then try running it with just the placeholder text that comes with it.

  • Emerald

    Everything was going so well until step 6. Unfortunately the spreadsheet doesn’t seem to be showing a bot menu. It’s also the only step for which an image was not provided, so I’m at a loss as to how to solve this problem. There is no place to “Send a Test Tweet”. It’s like a piece of the sheet is completely missing, and yet Steps 1-8 are all there – except for the seemingly most important part. Any ideas?

    • zachwhalen

      Sometimes that menu doesn’t get added for some reason. It’s created under a function that runs automatically when the sheet opens, so sometimes it shows up if you refresh the page or close the tab and re-open in a new one.

  • Pingback: Digital Artifact – Bibliography – Handling Life, One Breakdown At a Time.()

  • graphiclanes

    Hi Zach-
    I got the bot to successfully run, but after I authenticate it through Twitter, Google tells me “Sorry, the file you have requested does not exist. Make sure that you have the correct URL and that the owner of the file hasn’t deleted it.” What does this mean? Help! Thanks.

  • LowCostFleetTracking

    Not working for me. I get a Error starting OAuth flow: Desktop applications only support the oauth_callback value ‘oob’ /oauth/request_token

    • Hey you can fix this by placing a placeholder callback URL in your Twitter Bot (see pic)

  • Thomas

    is there a way to have the script stop automatically after its tweeted all the cells Ive asked it to tweet. Don’t really want it repeating the list I’ve made.

  • daev

    Hi Zach

    Question in your code

    A) , on of my cells does contains URLs with “&” “=” like how do I have to replace the ampersand and the equal character to make your code work with it?

    B) remove the empty space you add between cells?

    I’m using I’m using the “select from columns” code snippet

  • Bella

    Thanks for the incredible work with this, I have a slight problem where when I try to send a test tweet this pops up: Error starting OAuth flow: {“errors”:[{“code”:32,”message”:”Could not authenticate you.”}]} I don’t know what to do about it help would be greatly appreciated thanks.

    • This typically happens when an ampersand in your tweet triggers an encoding bug and breaks up the message payload in a way that Twitter can’t recognized it. This is fixed in the next version, which I’ll release shortly. If you’re eager to try and fix it now, you can try to upgrade it yourself:

      1. Go into the Script Editor, select Libraries…, and move OAuth1 and OAuth2 all they way up to their most recent versions.

      2. In the script code itself, replace the `doTweet` function (about line 613) with this new version.

    • zachwhalen

      This typically happens when an ampersand in your tweet triggers an encoding bug and breaks up the message payload in a way that Twitter can’t recognized it. This is fixed in the next version, which I’ll release shortly. If you’re eager to try and fix it now, you can try to upgrade it yourself:

      1. Go into the Script Editor, select Libraries…, and move OAuth1 and OAuth2 all they way up to their most recent versions.

      2. In the script code itself, replace the `doTweet` function (about line 613) with this new version.

      • Jessy Moyer

        Zach, when I try to generate a preview it says: TypeError: Cannot call method “getLastRow” of null. What does this mean and how can I fix it?

      • sam

        hi there! i was getting the google error saying that there was no file or URL to be found, and i tried what you said but now i’m getting an error about the project key. any way you can help? thanks!

  • Aaron Tupaz

    Hey great bot! It would be awesome if we could set it to tweet from a particular spreadsheet at certain hours of the day, or even turn it off at certain hours.

    • This is a good idea! I’ve added this option for the next version (0.5), which I’ll be releasing soon.

  • amennaeem

    Hey Zach, I get the message “Sorry, the file you have requested does not exist.” after clicking authorize when i click send a test tweet. any help?

    • Could be that the callback URL has an error like an extra space or the project ID is incorrect. Not sure if that’s the problem, but it’s what I’d double check first.

  • Kenny Potter

    I successfully get up to where I need to send a test tweet, and when I got to the “Bot” menu and select “Send a Test Tweet,” it gives me a URL link to click on. When I click on it, I’m asked to authorize the app to use my twitter, but when I click on “Authorize App,” it says, “Sorry, the file you have requested does not exist.” and below that it says to make sure I have to correct URL and that the owner of the file hasn’t deleted it. Any suggestions on what to do?

  • lafayette_bot

    the bot menu used to generate the preview and send the test tweet is missing and i tried refreshing, closing and opening a new tab, and even making a new spreadsheet. what should i do?

  • Pingback: I Made a Bible Bot: How and Why? – The Least Creative Homepage in the History of Humanity()

  • Rafael P. Campoamor

    I have a question. Does it work with the spreadsheet closed?

    • Yep, that’s the idea!

    • zachwhalen

      Yes, that’s the idea!

      • Rafael P. Campoamor

        Well… Something it’s not working with mine… Not sure why πŸ™

  • Botter

    When I get to Step 5, I keep getting this error on the Twitter Application

    The client application failed validation: Not a valid URL format.

    • Typically, this happens when there’s an error in the callback URL you provided for your Twitter app. Make sure there isn’t a blank space at the end, for example.

  • g0blin b0t

    im doing the ebooks and i have it pull tweets from my main account, but when i send a test tweet, it tweets on my main.

  • Luke Nation

    hey, zach! nice work on this. loving the variety of templates to choose from, and the thorough guide in total.
    just one thing i wanna know about; is there any way you could create a simple template that just tweets out (in random order, of course) what’s been put in? close to the markov template, where you put in entire sentences, but not split and randomized like it is there. i know other services do this, the most notable one being twittbot, but it’s 700 tweet limit isn’t enough for the bot i’d like to make.

    • zachwhalen

      If I understand correctly, you want to pre-compose a whole bunch of complete sentences, then have the bot tweet one at random? If so, then you can use the Select by Columns and just populate one column with your tweets. That may work.

      • Luke Nation

        and so it did. thank you very much for the help!

        • fope

          Hello, please I really need help with this. How were you able to populate one column with your pre-composed tweets? Apparently, I’m really terrible with spreadsheets. Been trying to do this for hours.

          • fope


  • Nishit

    Hi Zach

    I am getting the error – “Error starting OAuth flow: {“errors”:[{“code”:32,”message”:”Could not authenticate you.”}]}”
    After updating Oauth versions and modifying the doTweet function, I am still unable to send a test tweet.

    Can you help me with this ?

    • Nishit

      Hi Zach

      I just repeated the process with a new account and a new app and IT WORKED.
      You can follow at @Khichdicreator.

      Thanks Zach

      • zachwhalen

        That’s great to hear, because I wasn’t sure what else to suggest. Glad it works now.

  • Lewis Dunham

    Just got a two year old _ebooks of mine (@lew_ebooks) I’d neglected after a few months running again! I largely stopped running it because I had to run it on my computer, thus couldn’t post consistently, and starting it was a hassle. So the fact that this runs on its own on the web is great! Thanks for putting this together.

    Rather than use TAGS I dug up my old archive I’d downloaded since I liked the idea of it replicating the same version of me it did before. For this or other reasons the _ebooks sheet didn’t function–possibly my spreadsheet had incompatible formatting to what TAGS would have given? It gave the error message “Cannot call method “getLastRow” of null”, if that’s any indication. So instead I manually (well, using Find and Replace on Excel) removed stuff I didn’t want in there (retweets, @mentions) and just pasted my archive into the Markov sheet and used that, and it’s working like a charm!

    The previous _ebooks code I used had the ability to interact with users–favorite their tweets, reply with similarly Markovy messages–so if there’s anything I might suggest for future updates it would be that. The coding that had that before is mispy/twitter_ebooks on github if that’s helpful (not really code-savvy enough to know if they’re even remotely similar). It does look like it’s been updated at least in the 2 years I’ve been away from it, so I might check it out as well, maybe run yours in the background and that when I’m on my computer for interactivity?

    Anyway, again, thanks so much for this!

  • iTohamy

    Hi Zach,
    It’s really a magnificent work!
    Your tool is working great! It’s the best on the internet!
    I wish you could help me with a function to add users from the spreadsheet to a specific twitter list.
    Thanks a lot!

  • Hey, any way to change the order/complexity of the Markov chain? I’m working on a name generator so I want to mix up syllables, not words. Thanks!

    • zachwhalen

      Hi. That’s not really possible with my Markov chainer, since it’s splitting text into tokens by looking for spaces. You could rewrite my code to handle syllables instead, but that would require getting pretty deep under the hood.

  • Corey Hardt

    Question for you: any way you can think of to easily modify the “rows” sheet to allow variable placement in sentences? Meaning, I have a few different sentence structures I want it to choose from, and within these sentences I have places for adjectives and verbs that I’d like it to choose from lists.

    • is perfect for this.

      • zachwhalen

        Yes, I was going to suggest that as well. My spreadsheet can handle sentence structures so long as the sentence is pretty similarly-structured each time. CBDQ is much more flexible for mad libs-style substitutions like you’re describing.

  • Nozirev Deedlee

    Hi! This is a really helpful tutorial for making a Twitter bot!! However, I’m having an issue that I’m not sure how to fix.
    When I get to around step 6, where you generate a preview, I get an error saying “invalid argument: url” and I’m not sure how to fix it or what is wrong. Can someone help me?

  • JaviMew Yi

    Hi Zach thanks for the help.

    I have one question:
    How can I make a spreadsheet of five diferents Twitter acounts at the same time? I’m using TAGS and I tried to type “from:account1 AND from:account2… AND from:account5” in the term box but it doesn’t worked.
    I was wondering if there is any posibility of making a spreadsheets of multiples acounts at the same time.

  • Jessy Moyer

    Unfortunately when I try to generate a preview it says: TypeError: Cannot call method “getLastRow” of null. What does this mean and how can I fix it ?

    • Hey Jessy you can fix this by putting a placeholder URL in the Callback URL field of your Twitter App (see pic)

  • Zuzur

    When I enter the callback URL, it tells me it’s not a valid URL format.

    • Mission Core

      remove spaces in URLL

  • My bot won’t tweet and always says “invalid argument: url”. Is there anything I can do to stop it?

    • Grace Lowe

      I am having the same issue anyone figure it out?

  • Patrickj13

    Created a bot that uses the only words spoken by The Dude from The Big Lebowski as the Markov source text (@abidingbot). Thank you for creating and and making this available! Its pretty awesome! Having said that though, I did have an issue, the bot doesn’t seem to tweet on its own when I set a time interval. I set the how frequently to post and in the bot menu I choose “Start Posting Tweets” it doesn’t keep posting at the set time interval… just wondered if anyone else had this issue?

    • Ahsan

      Hi Patrick, I am facing same issue!
      Have you got it fixed? if yes, please help me

  • Thomas Palumbo

    Hello for some reason TAGS v6.1 only goes back 4 tweets (3 unique) when I run it. I know this isn’t your app but perhaps you know the reason and know of a fix? The account it’s pulling tweets from has hundreds.

  • Commentator

    Hi Zach,
    Thanks for sharing your work. If only we could find the way to change the current interval for sending tweets, or setting an exact day/hour it would be perfect (apart from including images, of course)

  • Aaron Tupaz

    Hi modified your code and have been using it for months with great results! I was wondering if you knew the code on how to retweet a specific user. It would mean so much if I could figure this out.

  • l3reezer

    Thanks so much for this!
    I’m hoping you or anyone can help me out with something I’m having trouble with though. I’m using multiple columns for each Tweet in my data sheet and when I get the bot to generate the preview, it randomizes those cells with all the other rows of other Tweets for some reason. Is there a way to fix it so that the column is generated in the Tweet with the respective row it is aligned with?
    Thanks in advance!

  • DD

    Hi Zach, thanks for your work. I have trouble with step 6, and I think this is because project key from project properties have been deprecated. I want to know how to use scriptID instead of projectkey to create callback URL and I need help so desperate.

    • Jonathan Hansson

      I am having the same issue. Can someone help?

      • ahmed waddey

        i think some of the steps is missing , please do an updated step by step , i will donate this guy once it is up

    • Mae

      I had the same problem and just used the Script ID instead of the Project Key in the callback URL and it worked just fine, so give that a shot!

  • Ahsan


    I am facing an issue, the bot doesn’t tweet on its own when I set a time interval. I set the how frequently to post and in the bot menu I choose “Start Posting Tweets” it doesn’t keep posting at the set time interval… just wondered if anyone else had this issue?
    How to fix it. Please help!


  • majikmutton

    Thanks a lot for this Zach. You saved me from having to learn Python to get a Twitter bot running. I’ve created @livybot, who tweets sections of text from the ancient historian Livy using downloaded text prepared in Word, and the tweet from columns function of SSBot. Your instructions here and in the spreadsheet were excellent and easy to follow. Thank you; in already looking forward to SSBot v0.5!

  • shockstone

    my bot is all up and running except it generates a lot of tweets that are just one word? does anyone know why this might be? I’m using the ebooks sheet!

    • Jack Grimes

      I’m pretty sure the Markov algorithm it uses has no minimum length, so if the closest thing it grabs is the end of a tweet, it just spits out one word. Not sure how to add a minimum length requirement.

  • Nate

    Error starting OAuth flow: {“errors”:[{“code”:32,”message”:”Could not authenticate you.”}]}

    how do i fix this

  • Jack Grimes

    Using the _ebooks function, is there a way to screen out one or two-word tweets? Not at all experienced with scripting, just wondering is there’s some way to implement a minimum length requirement.

    • winter amelie miel

      hi! i was inspired by ssbot to make an ebooks only bot. the markov sentences are generated on a different and faster algorithm and doesn’t tweet less than 4 or 5 words. this sheet also lets your bot reply on a limited basis and is very new so improvements are forthcoming but it’s in a very usable state right now regardless.

  • Daily Kerouac

    Hi! Not sure if this is looked at anymore, came across the bot via a search. I get:

    ErrorThe client application failed validation: Not a valid callback URL format.

    Not sure what I’m doing wrong. Thanks!

  • Mr & Mrs SAM

    Thanks for creating this. I appears to work great.

    One thing I would like to see changed (if possible) is to post every 24 hours rather than the maximum 12 as setup. I did try to change the script to include 24 hour spacing, however it seems that it still posts every 12 hours rather than the 24 that I setup.

    Is it possible? Or is there a limitation with the Google scripts?

  • Galileo

    Hi, I was testing it but the quotes only appeared once and then stopped tweeting. Are the tweets only posted once, randomly repeated or will it repeat only once a day?

  • Emily Ann

    I love this bot. Thank you so much! Works like a charm, have never had a problem in the year or so I’ve used it

  • madi

    Hello I am getting this error when I try to test a tweet : Error starting OAuth flow: {“errors”:[{“code”:32,”message”:”Could not authenticate you.”}]}

    Please help!

  • Joel Kelly

    I came across some weirdness for the function to generate Markov texts- the function to parse the input cells only matches capital letters. My bot kept getting “TypeError: Cannot read property “length” from undefined. (line 346, file “Code”)” errors because my input cells were all in lowercase.

    My solution is just to modify the regular expression to be case-insensitive: line 310 changes from /A-Z/ to /A-Z/i

    Thanks for all your work!

    • Shenir Dennis

      Hi! I am actually having this problem too. Care to help? I don’t really know how to “modify the regular expression to be case-insensitive”

      • Joel Kelly

        Hey Shenir- in Google Spreadsheets, go to “Tools:Script Editor”. This will load up the “” file that powers the bot. Go to line 310, which should be something like ” if (/[A-Z]/.test(txt[i][0])){“, and change the “/A-Z/” part to be “/A-Z/i”. Then press the save button.

        • devon037

          im having the same problem and this isnt working for me :/

  • brad raistrick

    I went through all the steps, made sure there’s no spaces in any keys, am using the script ID instead of the project key, the spreadsheet is in a public folder, i’ve unauth’d/reauth’d after moving to a public folder, no errors within the spreadsheet when I tell it to send a test tweet or to start tweeting, yet….nothing? Not sure if anyone’s still looking at this but hope anyone who’s run into this issue might be able to help out. Thanks!

  • Jalamb

    I have my own list of text that iwant to tweet (a Google spreadsheet with a bit of text per row). How can i use my own text to tweet?

  • brad raistrick

    Does anyone know how in the ‘Select From Rows’ view to have it pull sequentially and just continually run on a loop? It seems as if it’s pulling at random which for what I’m trying to do slightly defeats the purpose. Thanks!

  • fuck you

    Whenever I click “Send Test Tweet” the bot does not authorize me through twitter. I’ve already made the file public so that’s not the issue.

  • Joe

    So I successfully made my bot using your application! Zach, you are incredibly generous for making this app and I really do wish you the best.

    My bot , tweets my video scripts using the Markov algorithm you provided. If it all works accordingly and as long as Twitter doesn’t suspend my application, my bot should be tweeting for the rest of eternity πŸ™‚

    However, it did take me more than a few tries to get my bot running and I’m sure many people have had/will have this same problem:



    If you do not do this, you will receive the “invalid callback url format” error from Twitter.



    If you do not do this as well you will receive the "invalid callback url format" error from Twitter.

    Zach, I would suggest you remove those two error causers I mentioned above in the next version of SSBot. But all in all great app, Zach, you are the man and you're awesome for making this fine piece of art.

    Check out my wacky @dotxbot if you get a chance. I owe it to you πŸ™‚

    • Weird Salmon

      I am getting this same error as well. I’ve tried removing the “s” from “https://” and made sure the “adf” is gone, but I still get the same “invalid callback url” account. Not sure what else to try?!

      • James Miller

        I was having the same problem. I solved it by removing the extra space at the end of the URL. When I copied it straight from the spreadsheet and pasted it into the twitter app, there was an extra space at the end. This error was driving me crazy, but that fixed it.

        • Weird Salmon

          Thanks! That fixed it for me. Cheers!

    • some unfathomably moist, saucy

      Hey, can you clarify the callback URL, the link got messed up.

  • Erik Elliott

    Everything works peachy until I select the _ebooks datasheet. How do I access that? I have nowhere to input the link to my TAGs sheet.

  • Jeffrey Harrington

    If I wanted to tweet a sentence can I just limit the ROWS sheet to only 1 column and have the full sentence in that column?

  • amol


    I have uploaded my code of twitter bot on github which Send Direct Messages from custom menu in google spreadsheet.

  • greg

    Is this bot even up to date anymore? the callback url generation doesn’t seem to work. the twitter authorization never works.

  • Jaehee

    Thank you so much for this! I made a quote bot over at @jaeheekangbot for one of my favorite characters!

  • Storm Pegler

    Thanks so much. This was so easy and worked perfectly! <3

  • Marie Gilot

    Hi Zach, I made a bot thanks to your instructions! Thank you. I do have one problem; my bot tweets at 11 pm regardless of when I start it (I added a 24 hours option to the code). How can I change the tweet time? Any guidance would be appreciated.

  • Jonathan Gibson

    First test tweet works, nothing works after that. If I run another test tweet, it says it’s running the script and then that it’s finished, but the account does not tweet. Likewise, if I tell it to ‘start posting tweets’ it does the same thing.

    My goal is for it to tweet the same tweet once an hour, so I’m using the ‘Select from columns’ sheet and I just have one cell with my text in it at B5. My first thought was that maybe the script is told to only choose cells that haven’t been chosen before, so I pasted the same text in the cell below to see if it would get chosen then, but apparently this was not the issue because it still isn’t working. Any ideas?

    • That’s probably Twitter stopping you from spamming, not the bots fault. If you tweet the same thing constantly, Twitter either supposes your client is faulty (“You seem to have tweeted that already”), or that you’re just spamming the service.

    • Will

      Having the same issue HELP

  • johnbhartley

    Awesome tutorial. Very impressed with how detailed it was and how well your bot works. Major props!

  • Wilma

    Thank you so much for this Bot! My bot is running, sort of! @knitnoodle … using snippets of quotes and poetry, combining into rather lovely tweets when it can tweet. Also included positive hashtags. However cannot get the timing to change. It’s only going every six hours, even when I select 2 hours. And so if I send a test tweet, even tho I was careful to put less than 140 characters in each cell on a sheet, the logs tell me that it’s throwing an error because it’s trying to send over 140. I though that this bot would only send one cell or truncate a cell if the total is over 140. Am I asking for too much? Should I shorten the phrases in the cells, do you think?

    • Wilma

      some add’l info. I did a couple more test tweets. One threw a “duplicate status” error with Twitter and the other went thru. I see now that some tweets are getting tossed because they have duplicate words in them or they have over 140 characters. i wish I could make this script cycle through the data in the sheets in a random non-repeating order, and also keep the combos of cells at 140 characters.

  • Hiroko Charbonneau

    Thanks for putting this together! I’m surprised it can do so much complicated things… I actually just used to pull a sentence from 1 column every 1 hour since I wanted it to tweet very specific things not randomly generated words. And it perfectly works!!

    Gotchas: Initial Test Tweet got error because pasted keys and secret had spaces in front. Once I removed them, Voila!

    Question: If I add more words in Select from Columns tab while Bot is running, does it require to stop/start tweet in order for it to pick up new words?

  • Luxa

    How do I tweet pictures with the spreadsheet?

  • Sparky Bot

    Hi all, i get this error: TypeError: (class)@6fa25d37 is not a function, it is undefined. Any ideas what it could be?

  • James Mullineaux

    I got it up and working, just have to curate the Markov content better but it’s doing it’s thing @ProfessorEncke

  • Felipe Freitas

    I’m trying to do a musical bot tha will tweet verses of a song (like @africabytotobot). Can I do this with _ebooks?

  • Laura Lopez

    Thank you, Thank you, Thank you!!! I have made my bot!!!! Done as part of my NetNarr course at Kean University with Alan Levine and Dr. Mia Zamora.

  • Hey Zach, I’m enjoying a bunch of my Networked Narrative students set up bots for their alternate identity characters (I have one running for @rebegmaestro which mentions them in its bot tweets).

    Your intsructions are really well done; one area I see people messing up on is the spreadsheet for Step 4 comes with “adf” in the cell, and I have seen students paste after that rather than over it, so their callback URL gets messed up.

    Also, it may help that the requirement for a phone number is often a hassle if you have a collection of twitter accounts (I have at least 12) and forget which one is using your phone. I learned if you text “stop” to 40404 it removes the number from whatever account it is using, so you can then add it you a new account for the app set up.

    Thanks again, I hope we have maybe 20 new bots churning out gunk by the end of the week.

  • Mariana Trench

    Everything was going great until i had to generate a test tweet. It’s coming up with an error that says “Project Key is required” but I put the Project Key in correctly. Can anyone help?

  • Will

    I am having an issue where the initial test tweet works but then when I try to start the bot it says running script and that it finished. However the bot does not tweet every 30 minutes like it is set to do so.

  • Aaron Springer

    I keep getting “Invalid argument: url” when trying to generate a preview.

    • Andrew

      having same problem, did you solve it?

  • Sarah Wexler

    Hello! This is a great tutorial, thank you so much for making it. I was wondering, is there any way to alter the code so that the tweets generated using the Markov sheet are joined together by two-word chains (and therefore a little more sensical)?

  • Allpureskill

    Hey Zach your app is perfect thank you for a great guide, I usually just videos for this type of things but I heard your read was worth it! I ask though how would one make it so my bot tweets out my Youtube videos? Is that possible on E-Books by chance? Thank you for bot & viewing my response, hopefully you respond!

  • Shinang

    i can’t seem to find the “both” menue anywhere in the spreadsheet???

    • Shinang


  • Grillo Santos

    It worked!!! thank you man for this awesome spreadsheet. also follow @Spellcaster_Bot for magical spells every 30 min

  • I found your doc-bot at and set it up successfully using the directions. But I am not sure what version I am using..where can I check this?

    Also, the preview shows 15 tweets, but not sure if it will use all of the tweets I entered ( I have more than 15)?

    Btw, thank you very much, I have spent hours looking for a way to do this!

  • Jack

    i’m getting

    Error starting OAuth flow: {“errors”:[{“code”:32,”message”:”Could not authenticate you.”}]}

  • Dara Makeda Wilson

    This is awesome. I created @sheshouldsmile for creative ways to tell women to smile (satire obvs)

  • John

    Is there a code/algorithm that can make the bot favorite tweets with certain phrases ?


    Hello! Mine says “TypeError: Cannot find function setProjectKey in object [object Object]. (line 544, file “Code”)” plz help

  • Noah

    Everything is working until I try to authorize. I click to send a test tweet, the script runs, and when I click to authorize Twitter it tells me that the file does not exist. I know next to nothing about programming, but is there something I’ve done incorrectly?

    • Kristian Rude-Hansen

      I’m having the same problem, did u solve it?

      • David Jackson

        I also had this problem. Looking at the script url in the browser I saw it had a number of spaces in the address. I just deleted the spaces in the browser , reloaded the page and it worked. The bot is now working for me.

  • rye spingus

    I keep getting an error whenever i try to send a test tweet that says “Invalid argument: URL” and I’m not sure how to fix it. Any advice?

    • Jordan Bot

      Same issue

  • Liam

    Where is the bot menu?

    • Liam

      Nevermind. I found it.

  • Neeraj Upadhyay
  • Patrickj13

    My bot (@abidingbot) is working and has been tweeting using the Markov generation. My bot composes tweets using only words that ‘The Dude’ from ‘The Big Lebowski’ has said himself using Markov generation. It has been tweeting consistently for quite some time but I have a question. Is there any way to change the time interval? I would like for it to tweet once every 24 hours rather than every 12 hours? Just wondered if anyone could tell me how I might accomplish this?

    • Ian Birnbaum

      I’m a brother shamus and I appreciate your bot, man. To get your special lady to tweet every 24 hours, you’re going to have to dive into the code a little bit, but it’s no big deal.

      1. Go to Tools > Script Editor
      2. Scroll down to Line 422, which will be the function for setting time. You’ll see:
      switch (setting){
      case “12 hours”:
      var trigger = ScriptApp.newTrigger(“generateSingleTweet”)

      3. Copy from “case “12 hours”” all the way down to “break;” and then paste it just one line above “case 12 hours” to double up that block.
      4. Change “12 hours” to “24 hours”, and a few lines down, change “.everyHours(12)” to “.everyHours(24)”
      5. Delete “var trigger = ” from the 12 hour code block, since you only need to name that variable once. It should now look like this:

      switch (setting){
      case “24 hours”:
      var trigger = ScriptApp.newTrigger(“generateSingleTweet”)
      case “12 hours”:

      6. Save your code
      7. Grab a drink
      8. Go back to the spreadsheet and click on cell B54, the select timing dropdown menu
      9. Go up to Data > Data Validation and you’ll see a list of all your timing options.
      10. Add “24 hours” to the list of items and Save.
      11. Grab a drink

      Hope this helps. Take it easy out there.

      • Patrickj13

        You mean like an Irish Monk? Thanks for the uh- what have you. This comment really tied the bot together. Really wrapped ‘er all up. Take ‘er easy, Dude. And thank you.


    • Pollo


  • Kees Holleman

    there is no drop down menu in step 6

  • Kees Holleman

    cannot find the bot menu either

    • BeefStew

      In your spreadsheat at the top (by File, Edit, View, etc.) there should be a drop-down labeled “bot”. This is also where “tools” is. Sorry If I’m late.

  • Kees Holleman

    “Go into the script editor (“Tools -> Script Editor…”)ok

    but where do i do that

  • Kees Holleman

    3 posts deleted ? WTF

  • Kees Holleman

    all my questions gone in the wind, thanks for the help

  • Kees Holleman

    i spend all afternoon trying to get this right

  • Wimbledon

    Right now it says Error

    The client application failed validation: Not a valid callback URL format.

    When i try to update callback URL

  • Nicolas Farah

    what is a good and effective way to monitor/scan twitter for certain key words?

  • Brilliant ! Thanks!

  • Blake Belladonna

    is there any way to not send randomized tweets but instead use the exact data written in the columns or rows? but anyway thank you for making this possible πŸ˜€

  • mbodification

    how to i Build a TwitterBot to Tweet Geekulcha facts every 30 minutes

  • dodie lyrics

    Really great tutorial thanks, just wondering if there was a way to make the tweets be posted in a certain order? For example song lyrics following in order

  • Mittens

    Hi. I hope you, or somebody, answers this.

    Is it possible that one Twitter Bot can post from 2 or more Google Spreadsheet? Or it can get the sources of its tweets form one Twitter Bot only?

  • count raptula

    Can the “Select From Columns” set-up handle carriage returns/line breaks within cells and fullwidth text?

  • I don’t get the Bot menu in the menu bar. Anybody can tell me what am I doing wrong?

  • Noah Morse

    wondering if any1 could help me out. every time i try to sent a test tweet i get a message saying “invalid argument: url”

    • Jay Pokela Ackley

      Hey – I was having that problem but it started to work when i changed the default away from ebooks to columns – good luck!

  • Jess Thompson

    I’m trying to use this bot to send mostly unicode tweets. Is there a way I can modify it for that purpose?

    I’m using unicode to tweet stylised text (yes I know this limits the amount of people who can read it – its more or less an inside joke). So, I think the easiest way might be to do a replace command before the bot tweets. Ie: if the script generates “All dogs go to heaven,” it will then replace the characters individually, so it actually tweets 𝘈𝘭𝘭 π˜₯𝘰𝘨𝘴 𝘨𝘰 𝘡𝘰 𝘩𝘦𝘒𝘷𝘦𝘯.

  • Ed Justen

    Hi Zach. I was able to get this up and running! Check out The Ed-Bot tweeting out inspirational quotes by Brene Brown:

  • Rob Marland

    Thanks, Zach. I set up my bot a few months ago and have successfully sent 500+ tweets.

    However, yesterday it stopped working. I received an email from Google titled “Summary of failures for Google Apps Script”. When I open the spreadsheet and try to send a test tweet, a get a pop up telling me “Authorization required”.

    However, having reviewed the instructions I followed to make the app, I can’t find out how to authorize it again. Clicking through Google’s dialog gives some information, but is too technical for me to understand.

    Any ideas how I can get the bot up and running again?

    • ebuch

      Same situation here! I’m guessing it’s an issue that came about with some updates to Twitter, perhaps the new 280 character limit?

      • Cherie Leslie

        Hmmm that could be it.
        I hope we get a solution soon because I really like this app!!!!!

  • JJ

    Hello! I’ve recently had problems with my bot not posting tweets? I’m not quite sure what’s happened but for whatever reason, I can no longer generate previews, stop my bot, start my bot, etc. If it requires using the “Bot” drop down menu that’s on the same line as “File,” “Edit,” etc., I cannot use it? It shows “authorization required” and I cannot do anything from there.

    I’ve tried making a new one from scratch about three times now to no avail. Is anyone else having this problem and, if relevant, did you manage to fix it or find a work-around?

  • Ian Birnbaum

    Hey Zach, I used SSBot to automate a random quotes account I ran a few years ago, @DailyRothfuss. Now it will actually run without me when I get too busy, and I don’t have to schedule tweets out with tweetdeck. Thanks!

  • Dico Sa MΓ¨re

    Hello, is it possible to tweet the content in the same order in used in the sheet? thank you

  • Tsubuddy Bot Quotes

    where is the “bot” menu???

  • Real .Aku

    Do you have to keep the spreadsheet open for the bot to work or can it be closed?

    • Cherie Leslie

      It doesn’t have to be open. You can just set it and forget it πŸ™‚

  • Parker Louis Garcia

    Ok I might just be missing something, I’ve never made a bot or coded, but where is the “bot menu” on the spreadsheet? I’ve looked up and down and on the twitter app page, and I cannot find it or anything else that says “generate preview” or “start posting tweets” Thanks in advance! I’m trying to make a new years resolutions bot

  • Angela Cook

    Thank you for the tutorial! I made an older Twitter account of mine into a poetry bot: @Calliope_B . As I want poems though, I want more than one line of text and I’m not sure how to do that. I tried writing longer phrases into the Markov sheet but I’m thinking maybe I have to change something in the code, like changing how long of a text string is generated. Suggestions?

  • Cherie Leslie

    Hi there!
    I had great success with this amazing bot up until about a month ago it suddenly stopped working.

    I tried to start over and do it from scratch but unfortunately I am having no luck getting the authentication pop up via twitter when I try to test the bot.
    I have looked through some of the suggestions in the discussion below but no luck.

    Any suggestions?