Publish your Airtable content calendar to Facebook and Instagram

Every hour, publish anything scheduled from your Airtable content calendar to your Facebook Page and Instagram account, then mark the row as posted.

Deterministic Code
AirtableFacebook PagesInstagramMarketingOperationsContent GenerationData Sync
PromptCreate

Every hour, publish anything due from my Airtable content calendar to both my Facebook Page and my Instagram account, and mark the row as posted so nothing double-publishes.

Trigger: cron, every hour.

Step 1. Call Airtable List Records on my content calendar table with a filterByFormula that returns rows where Status is "Scheduled" and Scheduled Time is less than or equal to NOW(). For each returned row, read the caption, image URL, and target platforms fields (target platforms is a multi-select or checkbox indicating Facebook and/or Instagram).

Step 2. For each row, loop through the target platforms:

If Facebook is a target: when there is an image URL, call facebook-pages Upload Page Photo with the image URL and the caption as the message. When there is no image, call facebook-pages Create Page Post with the caption as the message. Capture the returned Facebook post id.

If Instagram is a target: call instagram Create Media Container with the image URL and the caption, then call instagram Publish Media using the returned creation id. Capture the returned Instagram media id.

Step 3. Call Airtable Update Record on the same row to set Status to "Published", Published At to the current time, Facebook Post ID to the id returned by facebook-pages, and Instagram Media ID to the id returned by instagram. This is the guardrail that makes sure the same row never publishes again.

Error handling: if either platform errors while publishing a row, call Airtable Update Record to set Status to "Failed" and write the error message to a Last Error field so I can review and retry manually. Do not throw for the whole run; keep processing the other due rows.

Inputs the workflow needs from me at setup: Airtable base id, table id or name, and the exact field names for caption, image URL, target platforms, scheduled time, status, published at, Facebook post id, Instagram media id, and last error. Also the Facebook Page id and the Instagram user id to post to.

Build this as a code workflow with deterministic nodes: list due rows, branch on target platform per row, publish, then write status back.

What does this prompt do?

  • Checks your Airtable content calendar every hour for rows scheduled to publish now.
  • Posts each row to Facebook Page, Instagram, or both, using the caption and image you set on the row.
  • Writes the resulting post IDs and a Published status back to the row so nothing double posts.
  • If a platform fails, sets the row to Failed with the error message so you can retry manually.

What do I need to use this?

  • An Airtable base with a content calendar table that has caption, image URL, target platforms, scheduled time, and status fields.
  • A Facebook Page you can post to.
  • An Instagram Business or Creator account linked to that Page.
  • A publicly reachable image URL for any post with an image.

How can I customize it?

  • Change how often the workflow runs, for example every 15 minutes instead of every hour.
  • Add more target platforms, like a LinkedIn column, without touching the rest of the flow.
  • Route failed rows to a Slack channel instead of only marking them as Failed in Airtable.

FAQs

Does this work with a personal Facebook profile or a personal Instagram account?
No. Facebook posting requires a Page, and Instagram publishing requires a Business or Creator account linked to that Page. Personal profiles are not reachable.
What happens if a row is scheduled while the workflow is not running?
Nothing is missed. The workflow re-checks the calendar every hour and picks up any row where the scheduled time is in the past and the status is still Scheduled.
Will the same row ever get published twice?
No. As soon as a row is published, the workflow flips its status to Published and stamps the post IDs on the row, so the next run skips it.
Can I attach a video or a carousel instead of a single image?
This starter is built for a single image or a text-only post. You can extend it later to add reels or carousels, but the base flow keeps things simple.
What if my image is stored in Airtable as an attachment?
Copy the attachment's public URL into a separate image URL field on the row. Facebook and Instagram both need a publicly reachable URL to pull the image from.

Related templates

Creator roster board for rebook, test, or pause calls

Decide who stays on your creator roster after every campaign, with each creator's real numbers on screen and every call recorded where the team can see it.

Later
Airtable
Slack Bot
App
Run your nutrition clients' weekly meal plans from one console

See who is due, build a week of dinners on demand, swap anything you do not like, then send the recipe and grocery links yourself.

Instacart
Airtable
Gmail
App
Benchmark your Instagram account against rival brands

See follower growth, posting cadence, format mix and engagement rate for your brand and every competitor you track, side by side on one board.

Instagram
Google Sheets
Google Docs
App
Instagram UGC rights tracker and repost approval board

See every customer photo that tags your brand, ask for permission in one click, and repost only once a yes is on the record.

Instagram
Airtable
Slack Bot
App
Instagram comment and DM triage inbox for your team

Work every unanswered Instagram comment, Reel reply and Direct message from one queue, with claimed rows so two people never answer the same person.

Instagram
HubSpot
Slack Bot
App
A verification desk for every document your team scans

See every scan next to the details pulled out of it, correct anything wrong, and let only verified numbers reach your ledger sheet.

JigsawStack
Airtable
Google Sheets
App

Stop babysitting your social calendar.

Connect Airtable, Facebook, and Instagram once, and Geni publishes every scheduled post on time, hour after hour.