HootSchedule — Generate HootSuite Batch Publishing Files


A utility program for generating message batches for HootSuite

Key Information

Current version 1.0
Release Date May 29, 2013
Download Link HootSchedule.jar
Requirements Java SE 7


I use HootSuite to manage my social media accounts, and it’s great.  It even supports the uploading of CSV files to batch schedule messages (if you have a paid account with them).  However, it’s the generating of those CSV files that’s not so great: you can’t just hand it a bunch of posts and tell it to spread them out during a time frame.  You have to include, in the CSV file, the time you want each post to be published.  If you want to spread them out during the day or randomly pick one or the other,  you have to do that by hand.

In addition, getting the format just right is sometimes hard.  The date/time format is finicky, and the precise use of quotation marks around the text and the url can be problematic.  Doing a straight CSV save from Excel doesn’t always work.

So I wrote a utility that will help me out with this process.  You give it a bunch of posts, a start and top time, and the spacing between the posts and it will randomly pick from the list to build the CSV file.  Even better, it supports spin-text in the messages, so they can all end up reasonably different from time to time.  


The program is written in Java and distributed as a single .jar file.  It requires you have Java SE version 7 installed.  Although Java 7 was released in 2011, many systems may still have Java 6 or earlier installed.  You can update your system by visiting www.java.com.  On most systems you can run the program by double clicking it, or you can run it from a command line “java -jar HootSchedule.jar”. 

Installation consists only of downloading the file from the link above and putting it into a convenient directory on your computer.

Program Startup:

The first time the program runs it gives you a short disclaimer: it’s up to you to inspect the output of the program to verify it is suitable for your purposes. 

If I have released an update to the program you will also be alerted when you start the program to that and offered a chance to open a browser page with details.  (Should the program seem to hang at startup, it is probably due to a network issue affecting this check.)

Program Overview:

The program has a fairly limited user interface:


At the very top are two buttons that control the view of the screen.  The first view is the editing view, which allows you to maintain your list of posts.  The second view, which I’ll describe later on, is the view that allows you to generate a randomized set of posts.

Editing your Database:

In the editing the view, at the top you have a list of messages currently in the system.  Each message has three fields: the weight, the text of the message, and the optional URL to pass to HootSuite.

The weight controls how likely the program is to pick the message randomly.  A weight of 100 means the program is no more or less likely to pick this message than all the others.  A weight of 0 means the program will never pick the message. (Technically, the probability of a message being picked is its weight divided by the sum of the weights of all messages.)

The text of the message can be anything from very simple to complex spin-text.  Spin-text is a simple syntax that allows you to specify alternatives in your posts.  For example:

HootSchedule {is great|works fantastic} for {scheduling|batching|randomizing} posts!

might generate “HootSchedule works fantastic for randomizing posts!” one time, and “HootSchedule is great for scheduling posts!” another time.  The syntax is just that anything inside of braces {} is a list of alternatives with the | character as the separator between the alternatives.  The program randomly picks from the alternatives at runtime.  This allows you to repeat messages with minor variations so that your Twitter stream doesn’t appear horribly repetitive and HootSuite doesn’t flag you for sending the same message twice.

The URL in the database is passed to HootSuite as-is as the third field in the generated CSV file.  HootSuite will shorten it using its ow.ly shortener and give it a unique URL that will track the individual clicks.  If you do not wish to have unique shortened URLs for each generated message you can include the (shortened) URL within the text and leave the URL field blank.

The editor is a very modal user interface: you scroll up and select individual posts to see them in the bottom portion of the UI.  But to edit a post you need to press the Edit button; this allows you to change the values in the Weight, Text, and URL fields below.  You can either press the Cancel button to abort your changes (and throw any you’ve just made away) or the Save button to commit the changes.

The New button allows you to create a new message; again Cancel will abort the creation of a new message while Save adds it to the database.

The Delete button will remove the currently selected message.  You are not asked to confirm.

The Delete All button will remove all messages; it will ask for confirmation before deleting them all.

Nota bene: there is no “undo” feature of the program.

Instead, there is the ability to export the current list to a CSV file via the Export List button.  This is different from generating a CSV file for HootSuite in that it uses the program’s internal format and does not “spin” the text.  

You can import such a CSV file later on via the Import List button.  The format of the CSV files imported and exported is simple: weight,text,url . Text and URL are usually quote delimited.

Export is useful for making backups of your database as well as allowing you to edit the database in an external editor such as a text editor or Excel.

Generating a Batch for HootSuite:

When you wish to generate your batch, you switch to the “Generate CSV” tab:

Generation Tab

 You fill out the parameters here and then press Generate to product a CSV file you can upload to HootSuite.  The parameters are:

  • The Date for the messages.  The program only produces messages for a single day at a time; future versions may fix that.  The date is relative to your local time zone
  • The start time for the first message to be posted.  It should be in a HH:MM format using a 24 hour clock (0:30 being 12:30 am and 23:30 being 11:30 pm, for example).
  • The cut-off time for the last message.  No messages will be scheduled after this time (subject to Jitter, see below).
  • Minutes between messages.  This is the interval that the program uses to space out messages throughout the day.
  • Jitter — this is a random factor added or subtracted from the next interval to give a bit of randomness to the timings of the posts.  Note that HootSuite rounds the times to the nearest 5 minute interval even while the program generates down to the minute timings.
  • No Dupes within X posts: The program will not use the same source message (i.e., not yet spun) more than every X messages.  Note that the program will never generate the exact same message twice in the same batch (to comply with HootSuite’s rules), but it may use the same source twice and spin it two different ways. (Also note: if the program seems to hang while generating messages, it may be because it is unable to generate enough unique messages; I don’t have a check for impossibility yet, and so you need to make sure between the number of messages and the varieties of each one you can generate enough messages for your batch).

When you press the Generate button, it will ask you for the name of the output file and then produce a CSV file that is acceptable to HootSuite’s schedulers.

Final Notes:

This is a first release, and it “works for me”.  Please feel free to send me email at admin@socialseer.com with bug reports or feature requests — I’ll try to be as accommodating as possible!

Some “to-dos” I’m working on include multi-day scheduling and better error checking…

Leave a Reply