Auto-publish scheduled Instagram posts from Airtable

Turn your Airtable content calendar into a hands-off Instagram publisher. Every 15 minutes, due rows post themselves and the calendar updates with the result.

Deterministic Code
AirtableInstagramMarketingOperationsContent GenerationData Sync
PromptCreate

Build a code workflow that publishes scheduled Instagram posts from an Airtable content calendar. Trigger: cron every 15 minutes.

Step 1. Use Airtable List Records against my Content Calendar table. Filter to rows where status is exactly "Ready" and scheduled_at is less than or equal to now. Assume the table has these fields: status (single select: Ready, Published, Failed), scheduled_at (dateTime), caption (long text), image_url (URL), video_url (URL), media_type (single select: image, video, reel), instagram_media_id (single line text), published_at (dateTime), notes (long text). Base id, table id, and Instagram IG User ID should be workflow inputs.

Step 2. Before processing rows, call Instagram Check Publishing Limit for the account. If the account has already used its 50-posts-in-24-hours quota, stop the run early and exit cleanly (do not fail the row). If quota is available, iterate rows one at a time so a single failure does not halt the batch.

Step 3. For each due row, call Instagram Create Media Container. Pass image_url when media_type is image, otherwise pass video_url and set media_type to VIDEO or REELS to match the row. Include the row's caption. Capture the returned creation id.

Step 4. If media_type is video or reel, poll Instagram Get Media on the creation id, requesting the status_code field, every 5 seconds up to a 2-minute budget, until status_code returns FINISHED. If it returns ERROR or EXPIRED, treat this as a failure. For image containers, skip the poll and go straight to publish.

Step 5. Call Instagram Publish Media with the creation id. Capture the returned instagram media id.

Step 6. On success, call Airtable Update Record on that row: set status to "Published", write the returned instagram media id into instagram_media_id, and stamp published_at with the current timestamp.

Step 7. On any failure during steps 3 to 5 (container error, poll timeout, publish error), call Airtable Update Record on that row: set status to "Failed" and write the error message into notes. Do not throw. Move on to the next row.

Notes: Instagram publishing is capped at 50 posts per rolling 24 hours per account. Media URLs must be publicly reachable by Meta. Only Instagram Business or Creator accounts can publish via the API. Keep the flow deterministic, no LLM calls in the loop.

Additional information

What does this prompt do?
  • Watches your Airtable Content Calendar every 15 minutes and picks up any row marked Ready with a scheduled time in the past.
  • Publishes the row's photo, video, or reel to Instagram using the caption and media link from the calendar.
  • Writes the result back to the same row: status flips to Published, the Instagram post link is saved, and the published time is stamped.
  • If a post fails or the daily posting quota is hit, the row is marked Failed with the reason so you can review it.
What do I need to use this?
  • An Airtable base with a Content Calendar table that has columns for status, scheduled time, caption, and a media URL.
  • An Instagram Business or Creator account connected through Facebook, with permission to publish content.
  • Publicly reachable image or video links in the calendar (Instagram cannot pull from private storage).
How can I customize it?
  • Change how often it checks the calendar, from every few minutes to once an hour.
  • Rename the status values or add extra filters, for example only publishing rows tagged with a specific brand or channel.
  • Add a Slack or email notification whenever a post fails so your team sees it right away.

Frequently asked questions

Do I need a paid Airtable plan?
No. Any Airtable plan that gives you access to your base works, including the free plan. You just need columns for status, scheduled time, caption, and media URL.
Does this work with a personal Instagram account?
No. Instagram only allows automated publishing from Business or Creator accounts that are linked to a Facebook Page. Personal accounts are not supported by Instagram itself.
Can it post reels and videos, not just photos?
Yes. The workflow detects whether the row has a photo or a video and handles both. For videos and reels it waits for Instagram to finish processing before publishing.
What happens if Instagram is at its daily posting limit?
Instagram allows 50 posts per account in a rolling 24 hour window. If the account is at the limit, the workflow skips that row for now and picks it up on the next run once the window opens up.
How do I stop a post from going out?
Change the row's status in Airtable to anything other than Ready, or move the scheduled time into the future. The workflow only picks up rows that are marked Ready and due.

Stop babysitting your Instagram calendar.

Connect Airtable and Instagram once, and Geni publishes every scheduled post for you on time.