Schedugram requires quite a complex IT architecture to operate. This is why it is tricky to add each account, however once the accounts are added we don't experience too many issues.


A couple of users have asked how it all works, and this post describes the system that we operate. A couple of bits and pieces will no doubt change over time, but until Instagram allows media uploads using their API, this is the only solution that we have found that seems (at least from our perspective) to be compliant with their terms of use.


The short explanation is that we use physical phones in our Melbourne, Australia offices to post every image – just like there is a person sitting behind a tablet going through posting each image, although we obviously don't do it quite like that! This is why we are different to other services on the market – we provide a full "end to end" posting service requiring no intervention from you after you have scheduled your posts (no push notifications to your phone and you having to open the Instagram app to post it for example). More on how we are different is here.


Schedugram is built like this (apologies for the terrible drawing skills):



Most of your interactions with Schedugram when uploading images or videos is via our web servers, which are housed "in the cloud" on Amazon's cloud infrastructure. This service pretty much never fails (or very rarely does), which is why we usually have a 99.999% uptime for our website and scheduling service. All of your data is also stored in a secure database in the cloud alongside this, and the images you schedule are stored in Amazon's cloud storage.


The complex part (and the tricky part to keep up) is the other side. In order to be compliant, we need to post your images using physical phones on the official Instagram app. As a result, we have a secure "tunnel" that passes jobs and data (i.e. your scheduled posts) to our local server in our Melbourne, Australia office. That server then "runs" each job on a physical phone (yes, a phone. We maintain an ever-increasing pool) using the official Instagram app. It's much like having someone sitting behind the app pressing the keys and buttons -- although for practicality's sake that's not how we do it!  Here's a pic of what our setup looks like:



As a result, we're very reliant on a consistent user interface with the Instagram app. A number of posts fail as a result of changes that might occur, such as a notification from Instagram to verify your email, or follow more users. We deal with these notifications as well as we can when they first crop up, but some are less predictable than others.


That's why we encourage users to check that they can easily log in and post images on the Instagram app on their own devices -- because you'll also see these messages, and can action them appropriately (e.g. by adding a mobile number).


This is also why your posts aren't immediate -- each post takes roughly 90 seconds to go out, and at peak periods we might have more posts scheduled to go out than we have devices available, so you might have to wait in a queue.


It's this system that is the cause of much of our pain -- we wish you could just upload images via an API in a similar way that you can using Facebook, Twitter or other common networks. But while this is possible with Instagram (you could view the traffic that is posted by the app and then mimic it without too  much difficulty), it is explicitly forbidden to do so (see term 10), as this involves reverse engineering of the app's software (illegal in the US) and is also in breach of their terms. 


Our service doesn't use the Instagram API (official or unofficial) at all when posting your image(s) or videos -- instead we use the same process all Instagram users do when uploading images -- opening the app, logging in, choosing an image from your album, adding a caption and clicking "Upload". This is why we are able to offer our service without risking illegal activities such as reverse engineering, and also why we aren't "cheap" -- because we have to buy hardware devices and maintain a service 24x7x365.


Our enterprise customers can run Schedugram "on premises" on a fixed server and tablet device if they so choose (or just have their own "instance" of the web service and dedicated tablet(s) for their Schedugram posts) -- this is a good option for some larger agencies or brands wanting full control of all their data and first priority for all images. If you're interested in a quote, get in touch.


We have no doubt that one day users will be able to upload images via an API to Instagram, and at that point services like Hootsuite will be able to offer media upload -- or maybe even Instagram itself. Until that day happens, this is the only solution we've found or are aware of that doesn't involve reverse engineering, but if you have any ideas we're all ears!


If you have any questions about our service, please feel free to get in touch with us and we're more than happy to help.