Notion Content Calendar Publisher
When a content page in a Notion editorial calendar moves to Approved with a scheduled date, the flow posts the content to the right channel at the scheduled time, writes the live URL back to the Notion page, and confirms in a Teams marketing channel. A weekly readiness branch flags upcoming posts still missing assets. Drives publishing from the Notion calendar.
Provided as-is, without warranty of any kind. Review and test each pattern in a non-production environment before deploying it to live automations. See our Terms.
Overview
This solution drives content publishing from a Notion editorial calendar into Microsoft 365. It is built as two cloud flows in one solution (CF-450):
1. FlowLibs - Notion Content Calendar Publisher — every 15 minutes, finds Notion pages that are Approved, whose Scheduled Date has arrived, and that have no Live URL yet; publishes each to a SharePoint content list, writes the live link + Published status back to the Notion page, and confirms in a Teams marketing channel. 2. FlowLibs - Content Calendar Weekly Readiness — every Monday 08:00, scans the same calendar for posts scheduled in the next N days that are not yet Approved, and posts a readiness summary to the Teams channel.
Why it matters: Marketing teams plan content in Notion but publishing is manual and easy to miss. Driving it from the approved-calendar state gives consistency, an approval trail, idempotent publishing, and one source of schedule truth — plus a forward-looking nudge for posts still missing assets.
> Built API-first. Both flows ship Off; going live requires only connection authorization and environment-variable configuration.
Use Case
A marketing team manages its content calendar in Notion and wants approved items published on schedule automatically, the live link captured back in Notion, confirmation in Teams, and weekly visibility on what is coming up but not ready.
Flow Architecture
Every 15 Minutes
Recurrence (15 min)Polls the editorial calendar for due, approved posts.
Initialize status labels
Initialize VariableSets the configurable Approved and Published status labels.
Query Due Approved
Notion Query_a_databaseReads the editorial calendar database.
Filter Due Posts
Filter arrayKeeps pages that are Approved, due (Scheduled Date arrived), and have no Live URL yet — making publishing idempotent.
Apply to each due post
Foreach (concurrency 1)For each due post: Publish_Content (SharePoint PostItem) creates the published item; Write_Back_URL (HTTP PATCH to Notion) sets Status=Published + Live URL; Confirm_Teams (Teams PostMessageToConversation) posts a channel confirmation.
Environment Variables
| Schema name | Type | Default | Description |
|---|---|---|---|
| flowlibs_NotionContentCalendarDatabaseId | String | <configure> | Notion editorial-calendar database id. |
| flowlibs_ContentPublishListId | String | <configure> | SharePoint list (GUID) for published items. |
| flowlibs_NotionApiBaseUrl | String | https://api.notion.com | Notion REST base URL for write-back. |
| flowlibs_SharePointSiteURL | String | https://your-tenant.sharepoint.com/sites/Marketing | SharePoint site that hosts the publish list. |
| flowlibs_TeamsGroupId | String | <your-team-id> | Marketing Team (group) id. |
| flowlibs_TeamsChannelId | String | <your-channel-id> | Marketing channel id. |
| flowlibs_NotionApiToken | String | <configure> | Notion integration secret (Bearer for write-back). |
| flowlibs_NotionApiVersion | String | 2022-06-28 | Notion API version header. |
Connectors & Connections
| Connector | API name | Actions used |
|---|---|---|
| Notion (Independent Publisher) | shared_notionip | Query_a_database |
| SharePoint | shared_sharepointonline | PostItem |
| Microsoft Teams | shared_teams | PostMessageToConversation |
Note — All connections are referenced as solution connection references; the flow is portable between environments as long as a connection is mapped at import time.
Customization Guide
Almost every realistic variant of this flow can be implemented by changing environment variable values. A few cases require small edits inside the flow definition — those are called out explicitly below.
- Notion property names (required schema)
- The flows expect these properties on the calendar database: a Status select (Approved / Published), a Scheduled Date date, a Live URL url, and a Name title. Rename in the expressions if your database differs.
- Polling cadence
- Adjust the Every_15_Minutes recurrence for faster/slower publishing.
- Readiness window
- Change varReadinessWindowDays (default 7) in Flow 2 to widen/narrow the look-ahead.
- Status labels
- varApprovedStatus / varPublishedStatus are Initialize Variables so the gating labels can change without touching logic.
- Publish target
- Publish_Content writes only the Title column to keep the list schema-agnostic; add item/<column> mappings (Body, Channel, Author) once your SharePoint list columns exist.
- Multi-channel
- Fan Publish_Content out to LinkedIn / X via their connectors, or call a downstream social-publishing flow.
- Approval gate
- Require a Power Automate Approval before a page becomes Approved.
Key Expressions
The flow is intentionally light on Power Fx / WDL gymnastics — the heaviest expressions are the branch-name concatenation and the approval outcome check. They are listed below in the order they appear in the flow.
EXPR.01Due filter (Filter_Due_Posts.where)
Keeps Approved, due, and not-yet-published posts.
EXPR.02Notion write-back URI
Targets the Notion REST page-update endpoint.
EXPR.03Write-back body
Sets Status=Published and the Live URL on the Notion page.
EXPR.04Page title
Reads the Notion page title.
Customize & download
Generate a ready-to-import copy of this solution with your environment-variable values baked in — available on Base, Pro, or Team.
Upgrade to customize
Comments
Sign in to join the conversation.
Sign inNo comments yet. Be the first to share your experience with this flow.