Schedule a Notion content calendar to social media
Publish approved rows from a Notion calendar on time, synced back to Notion.
Schedule (15 min)→Notion: get rows→Filter approved & due→Create post→Schedule post→Notion: mark scheduled
⬇ Download workflow JSON
or in n8n: ⋯ menu → Import from URL and paste:
https://getposta.app/assets/workflows/notion-content-calendar-to-posta.json- You’ll need:Posta API token, Notion API key
Keep your editorial calendar in Notion and let n8n do the publishing. Every 15 minutes this workflow reads the rows you’ve marked Approved, and for any whose scheduled time has arrived it creates and schedules the post across your connected accounts through the Posta API — then writes the status and the Posta post URL back into the same Notion row. It’s the cleanest way to manage drafts where your team already works.
How it works
- Schedule Trigger — runs every 15 minutes (tighten or loosen to taste).
- Get approved & due rows (Notion) — returns the pages in your content-calendar database.
- Approved & due now (Filter) — keeps only rows where
Status = ApprovedandScheduled Atis within the next 15 minutes. - Create a post (Posta) — uses the row’s
Social Accounts(a multi-select of Posta account ids) andCaptionto create the post as a draft. - Schedule a post (Posta) — schedules that draft for the row’s
Scheduled Attime. - Mark row Scheduled (Notion) — flips
Statusto Scheduled and writes the Posta post URL back. Because the row is no longer Approved, the next run skips it — so nothing posts twice.
Set up your Notion database
- Caption (Text) — the post body.
- Social Accounts (Multi-select) — each option’s name is a Posta social account id (grab them from the Get many social accounts Posta node).
- Scheduled At (Date, with time) — when the post should go live.
- Status (Select) — at least
ApprovedandScheduled. - Posta URL (URL) — written back automatically after scheduling.
Tips
- Prefer Airtable? Swap the two Notion nodes for Airtable Search + Update record — the field mapping is identical. The Airtable trigger is mature and a common starting point.
- Want per-platform voices? Add a
Regenerate With AIcheckbox column and route checked rows through an OpenAI node that rewrites the caption per network before Create a post. - Attaching media? Upload it to Posta first (the Upload media node) and pass the returned id via Additional Fields → Media IDs on Create post.