Scheduling Instagram posts from n8n when the API has no publish-later

The Instagram Graph API publishes when you call it. There is no parameter that means “publish this on Thursday at 6pm”, and the Instagram node in n8n is a trigger: it reacts to events on the account, it does not post. Both of those took me longer to accept than they should have, because most tutorials go straight to the HTTP request and leave the timing question open.

So if a post has to go out at 18:00 on Thursday, something has to be awake at 18:00 on Thursday to make the call. Three honest answers to that:

  • a Schedule Trigger on an n8n instance that never sleeps, so cloud or a VPS you already pay for
  • your own cron somewhere, with the queue in a sheet or a database
  • an outside service that holds the queue and fires for you

I went the third way, for the boring reason that my machine is off at night and I did not want the posting calendar to depend on whether I had shut the laptop.

Whichever of the three you pick, the same things break. I am writing them down because I hit all of them:

  1. Creating the media container does not publish anything. It answers with a creation_id, and a second call publishes that id. A workflow that stops after the first call finishes green and leaves the profile empty, which is the most confusing possible outcome.
  2. The publish call wants the numeric Instagram user id. Passing “me” fails in a way that looks like a permissions problem.
  3. Meta downloads the media from a public address. A file on your disk cannot be published as it is, and a Drive link that is not a direct file download will not work either.
  4. Video containers are not ready when the call returns. Meta’s own documentation tells you to wait before publishing, and publishing too early gives you an error that reads like something else entirely.
  5. Tokens expire quietly. Nothing breaks on the day it happens, only on the next scheduled post, which is usually when you are not looking.

What I use now is Rubinyun, which I built for my own accounts and then opened up. Two things about it that matter inside an n8n workflow: the Meta connection is made once on Rubinyun and the token never travels into n8n, and the meter counts published posts rather than connected profiles, so a client account that posts twice a month costs what it posts.

It also answers with the best hour for each weekday, worked out from the engagement of that account’s own recent posts instead of a general average. That was the part I wanted and could not get from a generic “best time to post” chart.

Template: https://www.chrononyte.com/projects/rubinyun/rubinyun-n8n-template.json

Import it with Workflows > Import from File. Three nodes: ask for the best time, schedule the post, and an optional one for when you have a file instead of a URL, which answers with a public address and deletes the file once the post is out. Credentials go in a Header Auth credential, Authorization: Key :, so nothing is written inside the node. The free plan includes the API, so the workflow can be tried without paying.

It is currently in review for the official template library. If you publish to Instagram from n8n some other way, I am curious which of the five above you ran into.