πŸ“± Automated Instagram Reels posting from Airtable content calendar

⚑ 112 views Β· πŸ“± Social Media & Email Marketing

πŸ’‘ Pro Tip β€” Since TikTok doesn’t have a public API, getting data usually means fragile HTTP scraping. ScraperNode is a community node that gives you clean JSON for TikTok profiles, videos, and comments β€” drop it into your workflow and skip the parsing.

View All Scrapers

Description

A guide to understand, operate, and extend the workflow.


1) What this workflow does (and why it’s useful)

Goal: Turn a simple Airtable sheet into a content calendar that automatically publishes Instagram Reels via the Instagram Graph API, on a schedule you control in n8n.

Why this matters:

Core flow (one row = one post):

  1. Cron starts the workflow at a set time.
  2. Airtable – Search grabs due rows: status = "To Post" AND scheduled_at <= NOW() AND platform = "IG".
  3. Split Out processes each row individually.
  4. Set (Map fields) normalizes Airtable fields β†’ video_url, caption, recordId.
  5. IG: Create Media Container registers your video as REEL.
  6. Wait 90s lets IG process the video.
  7. IG: Publish Reel publishes the container.
  8. Airtable – Update marks the row as Posted, stores ig_media_id, and timestamp.

2) Architecture at a glance

[Cron] 
  β†’ [Airtable: Search records]
    β†’ [Split Out: records]
      β†’ [Set: Map fields]
        β†’ [IG: Create Media Container]
          β†’ [Wait 90s]
            β†’ [IG: Publish Reel]
              β†’ [Airtable: Update record]

Sticky Notes inside the workflow explain each step (they’re rendered from parameters.content with Markdown).


Create a table (e.g., Posts) with these fields:

FieldTypePurpose
video_urlURL or TextDirectly accessible (public) URL to your MP4
captionLong textFinal caption (hashtags, line breaks, emojis)
platformSingle selectSet IG for this workflow
statusSingle selectTo Post β†’ will be picked up; Posted later
scheduled_atDate/Time (UTC)When to post
ig_media_idText (optional)Filled by n8n after publishing
posted_atDate/TimeFilled by n8n after publishing

Filter used in the Airtable β€œSearch records” node:

AND({status}='To Post', {scheduled_at}<=NOW(), {platform}='IG')

> Tip: If you localize/rename fields, update the filter accordingly.


4) Prerequisites & credentials


5) Node-by-node deep dive (what each node expects/returns)

A) Cron Trigger

B) Airtable: Search records

C) Split Out: records

D) Set: Map fields

E) IG: Create Media Container (REELS)

F) Wait 90s

G) IG: Publish Reel

H) Airtable: Update record


6) First-run checklist (do this once)

  1. In both Airtable nodes, pick your Base and Table (via dropdown).
  2. Confirm filterByFormula matches your field names exactly.
  3. Add one test row in Airtable:
    • video_url = a public MP4 URL
    • caption = a small caption
    • platform = IG
    • status = To Post
    • scheduled_at = in the past (so it’s due now)
  4. Set Cron to run in the next minute (or click Execute Workflow manually).
  5. Confirm the flow:
    • Airtable search β†’ returns 1 record
    • Container created β†’ you get an id
    • After 90s β†’ Publish returns a media id
    • Airtable updated β†’ row becomes Posted with ig_media_id and posted_at

7) Daily operations (how to use it day-to-day)

Backfilling:
If you need to post a bunch of older content, set scheduled_at in the past for those rows and let Cron pick them up. If needed, run the workflow manually.

πŸ”— Nodes Used

Airtable, Cron, HTTP Request

πŸ“₯ Import

Download workflow.json and import into n8n: Workflow menu β†’ Import from File

πŸ“– Importing guide Β· πŸ”‘ Credential setup